0

Modificadores de Acesso

Java (2)Modificadores de Acesso

Os modificadores de acesso, tem como função controlar a visibilidade de classes, atributos e métodos em relação a outras classes e pacotes. Em Java temos alguns tipos de modificadores de acessos que serão exemplificados abaixo:

Modificador public

O modificador public pode ser usado na criação de uma classe, de um atributo e de um método, e possui diferentes comportamentos quando antecede alguns deles.

      • Em uma classe, significa dizer que ela poderá ser acessada e herdada por todas as outras classes dentro de uma aplicação.
      • Em um método, significa dizer que ele poderá ser acessado, reescrito e herdado por qualquer classe.
      • Em um atributo, significa dizer que poderá ser referenciado por qualquer outra classe.

Modificador private

O modificador private pode ser usado na criação de um atributo e de um método, e possui diferentes comportamentos quando antecede alguns deles.

      • Não pode ser aplicado como modificador de acesso de uma classe.
      • Em um método, significa dizer que ele poderá ser acessado pelos métodos da classe que o definiu.
      • Em um atributo, significa dizer que poderá ser referenciado somente pela classe que o definiu.

Modificador protected

O modificador protected pode ser usado na criação de um atributo e de um método, e possui diferentes comportamentos quando antecede alguns deles.

      • Não pode ser aplicado como modificador de acesso de uma classe.
      • Em um método, significa dizer que ele poderá ser acessado somente pelas classes que fazem parte do mesmo pacote.
      • Em um atributo, significa dizer que poderá ser referenciado somente pelas classes que fazem parte do mesmo pacote.

Modificador default

O modificado default define o acesso padrão que será aplicado quando não houver definição de modificador de acesso, ou seja quando esquecemos de definir o modificador de acesso a classe.

Modificador static

O modificador static pode ser usado na criação de um atributo e na definição de um método, e possui diferentes comportamentos quando antecede alguns deles. Definir um atributo ou métodos como static significa dizer que os mesmo pertencem a classe em que foram definidos. Membros estáticos podem ser acessados através de instância da classe.

Modificador final

O modificador final pode ser usado na criação de uma classe, de um atributo e de um método, e possui diferentes comportamentos quando antecede alguns deles.

      • Em uma classe, significa dizer que a classe não poderá ser estendida.
      • Em um método, significa dizer que o método não poderá ser reescrito.
      • Em um atributo, significa dizer que seu valor não poderá ser modificado.
0

JNI (Java Native Interface)

Java (2)Java Native Interface – Parte 1

c++logoA Java Native Interface JNI define um padrão de nomes e convenções de funções que só a Máquina Virtual Java pode localizar e invocar nos métodos nativos de uma DLL gerada em C/C++ ou Assemble. O JNI habilita programadores a escrever métodos nativos para tratar situações em que uma aplicação não pode ser escrita inteiramente na linguagem Java.  A Java Native Interface define um padrão de nomes e convenções de funções que só a Máquina Virtual Java pode localizar e invocar nos métodos nativos.

Através do uso do padrão JNI podemos integrar nossos projetos Java com  DLLs geradas no em C.

nativesides

O Aplicativo javah

O aplicativo javah essencial para a criação da interface nativa é fornecido pela JDK. Utilizamos este aplicativo para gerar um arquivo .h que define os protótipos dos métodos de uma classe Java em forma de interface C/C++. Esta interface contém as declarações necessárias para compilarmos corretamente os módulos nativos que interagem com a JNI.

O aplicativo javah tem como vantagem reduzir os erros de programação na hora de integração de módulos nativos com a nossa JNI.

Para gerar um arquivo .h com o aplicativo javah devemos seguir com os seguintes passos:

1 - Compilação da Classe Java

2 - Criação da Interface Nativa

Após a criação da Interface Nativa será gerado um arquivo uma estrutura semelhante a:

Na próxima postagem, uma abordagem sobre tipos de dados.

0

Configuração Maven – Parte 1

maven

O Maven é uma ferramenta de gerenciamento, construção e implantação de projetos, que tem como função ajudar no processo de gerenciamento de dependências e no de build do projeto, geração de relatórios e de documentação.

 Download do Framework

O framework está disponível na página oficial da ferramenta: http://maven.apache.org/.

CONFIGURAÇÃO DO MAVEN

Variáveis de Ambiente do Maven

varsambiente

Variáveis de Usuários

JAVA_HOME  = C:\Program Files\Java\jdk1.7.0_45

CLASS_PATH= C:\Program Files\Java\jdk1.7.0_45\bin\lib

M2_HOME = C:\Program Files\apache-maven-3.1.1

M2_REPO = C:\Users\ppontes\.m2\repository

MAVEN_OPTS = -Xmx1024m -Xmx512m -XX:MaxPermSize=128m -Djava.awt.headless=true

Variáveis de Sistema

Path – C:\Program Files\apache-maven-3.1.1\bin

 Descrição das Variáveis de Ambiente

M2_HOME Home de instalação do Maven
M2_REPO Repositório das Bibliotecas
MAVEN_OPTS Configurações de Memória do
Path Variáveis de Ambiente do Sistema Operacional
JAVA_HOME Home de instalação da JDK
CLASS_PATH Classpath com as libs da JDK
1

Objetos Distribuídos com RMI

Java (2)

Remote Method Invocation (RMI)

O RMI é uma extensão de software à máquina virtual Java remota (JVM) que permite o envio de mensagens para objetos gerenciados por outra JVM. O Rmi propicia uma implementação natural do sistema distribuído em um ambiente Orientados a Objeto.

rmi

Objetos de uma determinada máquina poderão enviar mensagens através da rede para objetos presentes em outra máquina.

Implementação da Tecnologia

A partir deste momento vamos chamar de “receptor” ao local onde está o objeto que recebe as mensagens remotas e “transmissor” ao local de onde partem as mensagens remotas.

Quando pensamos em uma aplicação cliente-servidor, é comum que no programa servidor haja objetos receptores. Entretanto, é possível que haja uma situação em que objetos do programa cliente também sejam receptores; ou seja, que recebam mensagens vindas do programa servidor.

Assim, a especificação destes passos se refere aos objetos que recebem as mensagens remotas; estes podem estar no programa servidor ou no programa cliente.

Para cada classe que receber mensagens remotas (receptor), criar uma interface que contenha a especificação destes métodos.

A interface deverá ser especialização da interface Remote.

Os métodos deverão indicar que throws RemoteException (ou seja, podem disparar a exceção RemoteException)

Aplicação Servidor

Na aplicação servidor defino uma interface estendendo a classe Remote do pacote java.rmi.*.

Logo após crio a classe com a implementação dos métodos de nossa aplicação servidora. A Classe de Implementação dos métodos deve estender UnicastRemoteObject e implementar a interface do Servidor.

Por fim implementamos a classe responsável por publicar o Servidor RMI.

 Aplicação Cliente

Na aplicação cliente uso a mesma interface definida na aplicação servidor para estabelecer um contrato de comunicação entre as duas partes.

Por fim acesso a aplicação rmi através da Url: rmi://localhost/RmiServidor, onde RmiServidor foi o nome vinculado ao objeto Remoto, e assim consigo acessar aos métodos do meu objeto remoto.

0

Hibernate Relacionamento N:1

logoHibernateHibernate Relacionamento N:1

Nesta segunda parte da postagem sobre relacionamentos com o Hibernate demonstro a criação de um relacionamento N:1, utilizando as anotações do Framework. Para exemplificar o relacionamento seguirei o modelo abaixo:

Class Diagram

A anotação @ManyToOne representará o relacionamento na classe Produto. Segue a implementação das classes persistentes:

Classe Persistente Categoria

Classe Persistente Produto

Na classe Produto criamos um objeto do tipo categoria que será responsável pelo mapeamento do relacionamento neste objeto fazemos as seguintes anotações: @ManyToOne(fetch= FetchType.EAGER) que representa em sim o relacionamento do tipo N para 1, já o atributo fetch com valor FetchType.EAGER significa que toda vez que o objeto pai for recuperado da base o atributo mapeado também será recuperado; @JoinColumn é usada para informar qual o nome da coluna que corresponde à chave estrangeira do mapeamento os atributos  insertable e updatable que se assumirem true indica que o atributo deve ser inserido  ou atualizado; @Fecth vai definir como o atributo mapeado será recuperado da base, no nosso caso é feito um SELECT para recuperar o atributo. E assim conseguimos mapear o relacionamento N para 1, nas próximas postagens mapearemos um relacionamento N para N e N para N com atributos.

0

Hibernate Relacionamento 1:N

logoHibernateHibernate Relacionamento 1:N

Nesta postagem descrevo uma forma de modelar um relacionamento entre tabelas 1 para muitos com o uso das anotações do Hibernate. Criei um exemplo simples para demonstrar o uso do Framework de uma forma clara e direta. Segue o modelo a ser implementado.

hibernate1-N

Para exemplificar o relacionamento criaremos as classes persistentes Departamento e Funcionário. A classe Departamento possuirá o relacionamento 1:N através de um atributos do tipo lista de funcionários e a partir de uma anotação @OneToMany.

A implementação da classe persistente Funcionario fica da seguinte forma:

A implementação da classe persistente Departamento fica da seguinte forma:

As classes Funcionario e Departamento serão mapeadas em nosso banco de dados com os nomes tbFuncionariotbDepartamento.

Nota-se que na classe Departamento foi feita a anotação @OneToMany que identifica o relacionamento 1:N, nesta anotação temos o atributo mappedBy com o valor ‘departamento’ onde este valor se refere a um atributo criado na classe Funcionario com o mesmo nome (ver classe Funcionario linha 37) este atributo serve em si para representar que na tabela tbFuncionario temos uma chave estrangeira  relacionada a tbDepartamento, o atributo fetch define quando o conteúdo o atributo será recuperado da base de dados.

A anotação @Cascade indica a ação em cascata a ser empregada do objeto pai para os objetos associados. Já na classe Funcionario foi criado um atributo do tipo departamento que recebe as anotações @ManyToOne que define que existem muitos funcionários para um departamento, @Cascade define as operações em cascata, @JoinColumn que define a chave estrangeira da tabela tbFuncionario, @Fetch  define como o atributo mapeado será recuperado da base de dados.

0

Como funciona o Hibernate

logoHibernateComo funciona o Hibernate

O Hibernate é um framework de mapeamento objeto relacional para aplicações Java, ou seja, é uma ferramenta para mapear classes Java em tabelas do banco de dados e vice-versa. É bastante poderoso e dá suporte ao mapeamento de associações entre objetos, herança, polimorfismo, composição e coleções.

O Hibernate não apresenta apenas a função de realizar o mapeamento objeto relacional. Também disponibiliza um poderoso mecanismo de consulta de dados, permitindo uma redução considerável no tempo de desenvolvimento da aplicação.

A Arquitetura do Hibernate

A arquitetura do Hibernate é formada por um conjunto de interfaces que são responsáveis por executar operações de criação, exclusão, consulta e atualização no banco de dados, além de uma interface para realizar configuração do Hibernate, interfaces responsáveis por realizar a interação entre os eventos do Hibernate e a aplicaçãoe interfaces que permitem a extensão das funcionalidades de mapeamento do Hibernate.

hibernatearquitetura

Além do mapeamento dos objetos relacionais e integração com os bancos de dados o Hibernate interage com APIs já existentes do Java: JTA, JNDI e JDBC.

As principais interfaces do Hibernate são: Session, SessionFactory, Transaction, Query, Configuration. Com essas interfaces conseguimos criar todas as nossas rotinas de banco de dados.

Interface Session

Possibilita a comunicação entre a aplicação e a persistência, através de uma conexão JDBC. É um objeto leve de ser criado, não deve ter tempo de vida por toda a aplicação e não é threadsafe. Um objeto Session possui um cache local de objetos recuperados na sessão. Com ele é possível criar, remover, atualizar e recuperar objetos persistentes.

Interface SessionFactory

Responsável por manter o mapeamento objeto relacional em memória. Permite a criação de objetos Session, a partir dos quais os dados são acessados, também denominado como fábrica de objetos Sessions. Deve existir apenas uma instância dele na aplicação, pois é um objeto muito pesado para ser criado várias vezes.

Interface Configuration

É utilizada para realizar as configurações de inicialização do Hibernate. Com ele, define-se diversas configurações do Hibernate, como por exemplo: o driver do banco de dados a ser utilizado, o dialeto, o usuário e senha do banco, entre outras. É a partir de uma instância desse objeto que se indica como os mapeamentos entre classes e tabelas de banco de dados devem ser feitos.

Interface Transaction

É utilizada para representar uma unidade indivisível de uma operação de manipulação de dados. O uso dessa interface em aplicações que usam Hibernate é opcional. Essa interface abstrai a aplicação dos detalhes das transações JDBC, JTA ou CORBA.

Interfaces Criteria e Query

As interfaces Criteria e Query são utilizadas para realizar consultas ao banco de dados.

Em breve uma abordagem sobre relacionamentos entre tabelas utilizando o Hibernate. Espero ter ajudado em sua pesquisa ou estudo.

0

Enviando uma Requisição SOAP a um Serviço

managed-services-iconEnviando uma Requisição SOAP a um Serviço

Uma forma mais rústica de consumir um Web Service é enviar de sua aplicação uma mensagem no formato SOAP para um ou mais métodos daquele serviço, a pouco tempo tive de tratar um caso assim, e por isso segue uma postagem referente a esta forma de requisição. Para simplificar a implementação monto um exemplo baseado na postagem : Gerando WebServices com JAX-WS.

Para realizar a requisição a um método do Web Service utilizo a Classe UrlConnection para fazer a conexão, chamar o método e setar as propriedades de requisição.

O método a ser testado é o retornarString para isso enviaremos a seguinte mensagem SOAP.

Não indico consumir um serviço desta forma, a melhor forma sempre será gerar os stubs do lado cliente, porém podemos também consumir um serviço desta maneira,  realizo a implementação de forma simples passando a requisição dentro de uma String mas também podemos montar essa entrada dentro do próprio código com XStream nada nos impede de criar e implementar códigos de modo genérico para que atendam nossas necessidades.

Resposta do Serviço:

0

Consumindo WebServices gerados com JAX-WS

Java (2)Consumindo WebServices gerados com JAX-WS

Há algumas postagens mostrei como gerar webservices com jaxws, nesta mostrarei como consumir o Webservice gerando na postagem “Gerando WebServices com JAX-WS“. Para consumir um webservice o mesmo deve estar publicado no nosso caso publicamos o mesmo nesta url http://localhost:8080/WsServidor/service, além de estar publicado devemos gerar os stubs do client na raiz do nosso projeto.

Para consumir o serviço devemos executar os comandos a seguir via prompt de comando apontado pro diretório do projeto, no meu caso criei um projeto no eclipse com o nome “prjWebServiceJaxClient“. Seguem os comandos:

      • Apontar pro diretório do projeto

      •  Gerar os Stubs do Client

 A Ferramenta WSIMPORT

A ferramenta de linha de comandos wsimport processa um arquivo WSDL (Web Services Description Language) existente e gera os artefatos portáteis necessários para desenvolver os aplicativos de serviço da Web JAX-WS (Java API for XML-Based Web Services).(Definição da IBM)

A ferramenta de linha de comandos wsimport suporta a abordagem completa para o desenvolvimento dos serviços da Web JAX-WS. Quando você iniciar com um arquivo WSDL existente, utilize a ferramenta de linha de comandos wsimport para gerar os artefatos portáteis do JAX-WS necessários. (Definição da IBM)

Consumindo o WebService

Após gerar os artefatos de nosso cliente podemos utilizarmos livremente em nosso projeto/aplicação, segue uma abordagem de utilização na classe “ConsumirServico. No pacote “servico” estão os stubs gerados a partir do wsimport.

clientejaxws

Para consumir o serviço segue a implementação da classe ConsumirServico.

Após implementado podemos testar os serviço acessíveis pela interface do nosso cliente.

resultado

 

 

0

Persistência de Objetos com Hibernate (Parte 03)

logoHibernate

Persistência de Objetos com Hibernate (Parte 03)

Para testarmos as implementações realizadas na parte 1 e na parte 2 da postagem sobre Persistências de Objeto com Hibernate separei um main com as rotinas implementadas. Até aqui o projeto tem a seguinte estrutura:

 

prjHibernate

Para finalizar a primeira parte de postagens sobre o Hibernate e o seu poder em mapear e persistir objetos, em breve adicionarei mais temas relacionados ao hibernate, tais como relaciomentos, consultas com Criteria entre outros. Espero ter ajudado de alguma forma com essas postagens simples porém funcional. rsrs…

Testando o Projeto

Veja também as postagens anteriores: