1 / 41

Entity Beans

Entity Beans. Marco Antonio Arquiteto de Software Dezembro/2007. Introdução. EJB responsável pela persistência dos objetos. Existem dois tipos: CMP e BMP. CMP – Container Managed Persistence: o AppServer cria o código SQL, controla o pool de objetos e as transações.

rafal
Download Presentation

Entity Beans

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Entity Beans Marco Antonio Arquiteto de Software Dezembro/2007

  2. Introdução • EJB responsável pela persistência dos objetos. • Existem dois tipos: CMP e BMP. • CMP – Container Managed Persistence: o AppServer cria o código SQL, controla o pool de objetos e as transações. • BMP – Bean Managed Persistence: o AppServer gerencia o pool de objetos e as transações, mas o código SQL é gerado pelo programador.

  3. Considerações • A utilização de Entity Beans deve sempre levar em consideração as boas práticas de programação. • Novos recursos têm sido criados para melhorar a eficiência do EJB. • Assim como é recomendável utilizar apenas Session Beans Stateless por causa da performance (Stateful utiliza muito recurso do servidor), é altamente recomendável que não utilizemos as interfaces remotas para os Entity Beans. Existe uma alternativa.

  4. Tecnologias concorrentes • Existem diversos frameworks de mapeamento de dados, os mais importantes são: • Hibernate • TopLink • EJB3

  5. New entity bean • No exemplo, vamos criar o entity bean Cliente (cpf, nome, endereco, telefone)

  6. New XDoclet EJB

  7. Criação do EJB

  8. Criação do EJB

  9. Entity bean • Name: nome do ejb • Schema: database (a seguir) • Descrição: breve descrição do componente • Versão: 2.1 • Usecase: O EJB irá criar a tabela e não o contrário

  10. Atributos do EJB • O EJB irá criar a tabela Cliente com os seguintes atributos: • Cpf • Nome • Endereco • Telefone

  11. Passos finais • O EJB está pronto • O próximo passo é configurar o banco de dados

  12. Configuração do XDoclet • O XDoclet gera diversas classes utilitárias • Nem todas são utilizadas nesse exemplo, dessa forma, vamos eliminar algumas opções

  13. XDoclet • Observe algumas configurações importantes: • Datasource • Createtable

  14. Métodos de inclusão • Cada entity deve ter ao menos um método create, que será usado para inserir os dados nas respectivas colunas da tabela • Para cada ejbCreate, é necessário um ejbPostCreate com os mesmos parâmetros

  15. ejbCreate public java.lang.String ejbCreate(String cpf, String nome, String endereco, String telefone, Double saldo, Double limite) throws javax.ejb.CreateException { setCpf(cpf); setNome(nome); setEndereco(endereco); setTelefone(telefone); setSaldo(saldo); setLimiteDeChequeEspecial(limite); returnnull; }

  16. ejbPostCreate publicvoid ejbPostCreate(String cpf, String nome, String endereco, String telefone, Double saldo, Double limite) throws javax.ejb.CreateException { }

  17. Datasource • Arquivo de configuração do banco de dados do sistema. • Datasource: fonte de dados, conexão com uma base de dados. • Copie no diretório de deploy do JBoss (jboss/server/default/deploy).

  18. sisban-ds.xml <?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <jndi-name>sisban</jndi-name> <connection-url>jdbc:postgresql://localhost:5432/sisban</connection-url> <driver-class>org.postgresql.Driver</driver-class> <user-name>postgres</user-name> <password>postgres</password> <min-pool-size>5</min-pool-size> <max-pool-size>20</max-pool-size> <idle-timeout-minutes>1</idle-timeout-minutes> <metadata> <type-mapping>PostgreSQL 8.0</type-mapping> </metadata> </local-tx-datasource> </datasources>

  19. sisban-ds.xml • jndi-name: nome da conexão • connection-url: endereço do servidor de BD • driver-class: nome da classe do driver JDBC • user-name: usuário do BD • password: senha do BD • min-pool-size: quantidade inicial de conexões • max-pool-size: quantidade máxima de conexões • type-mapping: mapeamento do BD (Postgre, Oracle, Informix, SQLServer)

  20. Driver JDBC do PostgreSQL • Quando uma apliação Java precisa se comunicar com um banco de dados, precisamos registrar seu drive JDBC • Procure o arquivo postgre-8.2-505.jdbc2.jar e copie no diretório de libs do JBoss

  21. Administrator do PostgreSQL • Após a instalação do Postgre, abra o pgAdmin

  22. Senha • Informe a senha

  23. Database • Crie o database sisban • Todas as tabelas do nosso exemplo estarão aí dentro • Navegue pelo administrator até encontrar a lista de tabelas (nenhuma foi criada ainda)

  24. Deploy e criação das tabelas • Levante o servidor e faça o deploy da aplicação • Observe as mensagens • Esse ponto é crítico, pois qualquer erro irá derrubar o deploy. É necessária muita atenção

  25. Mensagem de sucesso • A saída esperada no console é a que você acompanha na imagem • Após o deploy, a tabela Cliente será criada • Acompanhe pelo administrator

  26. Dados da tabela • Clique na opção View the Data para consultar os dados da tabela

  27. Clientes • Vamos criar várias classes para as diversas operações de banco de dados • Inclusão • Alteração • Exclusão • Consulta todos os registros

  28. Inclusão package net.sistemabancario.entidades.cliente; import net.sistemabancario.entidades.Cliente; import net.sistemabancario.entidades.ClienteHome; import net.sistemabancario.entidades.ClienteUtil; public class TesteInclusaoCliente { public static void main(String[] args) { try { ClienteHome home = ClienteUtil.getHome(); Cliente cliente = home.create("83286950150", "Marco", "QE04", "8119", 0.0, 2000.0); System.out.println("Cliente incluido com sucesso"); } catch (Exception e) { e.printStackTrace(); } } } • Execute a classe algumas vezes para inserir dados na tabela

  29. Dados da tabela • Atualize a tela de consulta e acompanhe a inclusão dos registros

  30. Atualização package net.sistemabancario.entidades.cliente; import net.sistemabancario.entidades.Cliente; import net.sistemabancario.entidades.ClienteHome; import net.sistemabancario.entidades.ClienteUtil; publicclass TesteAlteracaoCliente { publicstaticvoid main(String[] args) { try { ClienteHome home = ClienteUtil.getHome(); Cliente cliente = home.findByPrimaryKey("83286950149"); cliente.setEndereco("Novo Endereço"); System.out.println(cliente.getCpf()); System.out.println(cliente.getNome()); System.out.println(cliente.getEndereco()); System.out.println(cliente.getTelefone()); System.out.println(cliente.getSaldo()); System.out.println(cliente.getLimiteDeChequeEspecial()); } catch (Exception e) { e.printStackTrace(); } } }

  31. Exclusão package net.sistemabancario.entidades.cliente; import net.sistemabancario.entidades.ClienteHome; import net.sistemabancario.entidades.ClienteUtil; publicclass TesteExclusaoCliente { publicstaticvoid main(String[] args) { try { ClienteHome home = ClienteUtil.getHome(); home.remove("83286950149"); System.out.println("Cliente excluido com sucesso"); } catch (Exception e) { e.printStackTrace(); } } }

  32. Consulta todos package net.sistemabancario.entidades.cliente; import java.util.Collection; import net.sistemabancario.entidades.Cliente; import net.sistemabancario.entidades.ClienteHome; import net.sistemabancario.entidades.ClienteUtil; publicclass TesteConsultaClientes { publicstaticvoid main(String[] args) { try { ClienteHome home = ClienteUtil.getHome(); Collection<Cliente> lista = home.findAll(); for (Cliente cliente : lista) { System.out.println(cliente.getCpf()); System.out.println(cliente.getNome()); System.out.println(cliente.getEndereco()); System.out.println(cliente.getTelefone()); System.out.println(cliente.getSaldo()); System.out.println(cliente.getLimiteDeChequeEspecial()); System.out.println("-------------"); } } catch (Exception e) { e.printStackTrace(); } } }

  33. Exercícios • Crie o entity bean para ContaCorrente (numero, saldo, limiteDeChequeEspecial) • O código do cliente será implementado em uma versão futura

  34. Dúvidas?

More Related