Vamos desenvolver uma aplicação utilizando EJB 3.0 + JPA 1.0 para efetuar emprestimos de livro, o projeto em questão possui um cadastro de livro, um cadastro de pessoa e podemos emprestar livros para as pessoas.
Criando o Projeto EJB
Tendo este escopo vamos criar um Projeto EJB no NetBeans:
Criando um Projeto EJB
Na área Projetos, clique com o botão direito do mouse, e em seguida clique em Novo projeto…
Na tela Novo projeto, selecione na aba Categorias a opção Java EE, na aba Projetos a opção Módulo EJB e clique em Próximo.
Na tela de Novo Módulo EJB, vamos definir os seguintes campos:
Nome do projeto: EmprestimoEJB
Localização do projeto: (Escolha o local para salvar o projeto no micro)
Clique em Próximo.
Na tela de Novo Módulo EJB, vamos definir os seguintes campos:
Servidor: GlassFish Server 3.1
Versão do Java EE: JavaEE 6
Clique em Finalizar.
Desta forma criamos um Projeto EJB chamado EmprestimoEJB que será publicado dentro do servidor de aplicação web GlassFish.
Criando as classes de negocio
Devido ao escopo do projeto teremos inicialmente três classes (Livro, Pessoa e Emprestimo).
Diagrama de classes:
Com base no diagrama de classes, vamos criar essas classes dentro do nosso projeto EmprestimoEJB:
Clique com o botão direito do mouse sobre Pacotes de código fonte, depois selecione a opção Novo, depois selecione Classe Java…
Na tela de Novo Classe Java, vamos definir os seguintes valores:
Nome da classe: Livro
Pacote: br.universidadejava.emprestimo.modelo (utilizamos o pacote para separar os arquivos Java dentro da aplicação).
Clique em Finalizar.
Repita este mesmo processo para as classes Pessoa e Emprestimo.
Seguindo o modelo UML, vamos adicionar nas classes os atributos, métodos get / set e anotações referentes ao JPA, depois nossas classes ficaram da seguinte forma:
Classe Livro
Classe Pessoa
Classe Emprestimo
Criando as classes DAOs
Vamos criar a camada de persistência dos dados, ou seja, vamos crias as classes DAO, que utilizam o EntityManager para executar as operações no Banco de Dados. Estas classes devem ser criadas no pacote br.universidadejava.emprestimo.dao.
Classe EmprestimoDAO
Note que agora não precisamos mais criar a EntityManager manualmente, podemos deixar para quem for utilizar o DAO (no nosso caso o EJB) passar uma referência para o EntityManager.
Os métodos do DAO que fazem manipulação no banco de dados agora não precisam mais iniciar e finalizar uma transação, pois como serão chamados a partir de um EJB, os métodos do EJB que chamam os métodos do DAO já possuem transação por padrão.
Classe LivroDAO
Classe PessoaDAO
Criando os componentes EJB Session Bean Stateless
Vamos criar os componentes EJB que possuem a lógica de negocio. Lembrando que cada EJB é formado por uma interface e uma classe.
Crie uma interface chamada EmprestimoRemote e uma classe chamada EmprestimoBean no pacote br.universidadejava.emprestimo.ejb.
Interface EmprestimoRemote
Nós estamos declarando uma interface chamada EmprestimoRemote e adicionamos a anotação javax.ejb.Remote que irá informar que este componente EJB pode ser acessado remotamente ou forá do seu container.
Na interface nós declaramos todos os métodos que o componente EJB poderá disponibilizar.
Classe EmprestimoBean
A classe EmprestimoBean implementa a interface EmprestimoRemote, portanto ela implementa todos os métodos declarados na interface. Também adicionamos a anotação javax.ejb.Stateless para informar que este componente é do tipo Stateless Session Bean e que não irá manter o valor dos seus atributos (estado).
Note que declaramos um atributo chamado em do tipo EntityManager a adicionamos a anotação javax.persistence.PersistenceContext, dessa forma o componente EJB recebe do Container EJB uma instancia do tipo EntityManager com a conexão com o banco de dados.
Quando utilizamos @PersistenceContext especificamos qual o nome da unidade de persistência queremos obter (O nome da unidade de persistência é especificado no arquivo persistence.xml).
Vamos agora criar o EJB para o Livro e Pessoa:
Interface LivroRemote
Classe LivroBean
Interface PessoaRemote
Classe PessoaBean
Até o momento criamos a seguinte estrutura, note que as interfaces e classes são bem coesas, ou seja, todas elas tem um propósito especifico, na camada de EJB temos apenas lógica de negocio, na camada de persistência temos apenas classes que fazem o trabalho com o banco de dados.
A seguir temos as classes e interfaces criadas até o momento:
Criando a base de dados
OBS: Esse script é para o banco de dados MySQL se quiser pode criar o script para Oracle ou outro banco de dados.
Criando o pool de conexões no servidor web Glassfish
Quando utilizamos o JPA para fazer a persistência com o banco de dados, precisamos fazer as seguintes configurações:
Adicionar driver do banco de dados
Criar um data source com pool de conexão no Glassfish
Criar arquivo persistence.xml
Adicionar do driver do banco de dados:
Coloque o driver do banco de dados na pasta de instalação do Glassfish:
..\glassfish-vx\domains\domain1\lib
Criar um data source com pool de conexão no Glassfish
Inicie o Glassfish e entre na url: http://localhost:4848/login.jsf, abrira a tela de administração.
Na tela de administração do Glassfish, selecione o item Recursos -> JDBC -> JDBC Connection Pools
Na tela de JDBC Connection Pools, clique no botão Novo…
Na tela Novo grupo de conexões JDBC (Etapa 1 de 2) (Novo Pool de Conexão JDBC), configure as seguintes opções:
Pool Name: Emprestimo
Tipo de Recurso: javax.sql.ConnectionPoolDataSource
Fornecedor do Banco de Dados: MySQL
Se estivermos trabalhando com outra base de dados é só escolher no combo de Fornecedor do Banco de Dados.
Depois clique em Avançar.
Na tela de Novo grupo de conexões JDBC (Etapa 2 de 2), desça até a parte de Adicionar Propriedades:
Clique no botão Selecionar todos, depois clique em Excluir Propriedades.
Volte para o topo da página e clique em Finalizar.
Clique no pool de conexão que acabamos de criar Emprestimo, e clique no botão Ping para verificar se o Glassfish encontra o banco de dados.
Deve aparecer na tela a mensagem Ping executado com êxito, portanto conseguiu encontrar no banco de dados.
Agora vamos criar o recurso JDBC que será utilizado por nosso projeto EJB:
Clique na opção Recursos -> JDBC -> JDBC Resources
Na tela de Recursos JDBC clique no botão Novo…
Na tela de Novo Recursos JDBC configure os itens:
Nome JNDI: jdbc/Emprestimo
Nome do grupo: Emprestimo
Depois clique no botão OK.
Pronto, criamos o pool de conexão no Glassfish.
Criando a unidade de persistencia
Criar arquivo persistence.xml
Agora vamos criar uma Unidade de Persistência, que utiliza o Pool de Conexão que acabamos de criar no Glassfish:
Clique com o botão direito sobre o projeto EmprestimoEJB, selecione a opção Novo e depois selecione Unidade de persistência…
Na tela de Novo Unidade de persistência, configure os seguintes itens:
Nome da unidade de persistência: EmprestimoPU
Provedor de persistência: Hibernate JPA (1.0)
Fontes de dados: jdbc/Emprestimo
Estratégia de geração de tabela: Nenhum
Depois clique no botão Finalizar.
Abra o arquivo persistence.xml dentro da pasta Arquivos de configuração e escreva o seguinte código:
Note que o nome da unidade de persistência EmprestimoPU que acabamos de criar, é o mesmo nome que utilizamos na anotação @PersistenceContext, pois é através dessa unidade de persistência que o Container EJB criar um EntityManager.
Publicando a aplicação no servidor web Glassfish
Feito isto nossa aplicação EmprestimoEJB já está pronta, com a seguinte estrutura:
Agora para publicar a aplicação EmprestimoEJB no Glassfish, clique com o botão direito do mouse em cima do projeto e clique em Implantar.