Entity Beans

41
Entity Beans Marco Antonio Arquiteto de Software Dezembro/2007

description

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. - PowerPoint PPT Presentation

Transcript of Entity Beans

Page 1: Entity Beans

Entity BeansMarco AntonioArquiteto de SoftwareDezembro/2007

Page 2: Entity Beans

IntroduçãoEJB 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.

Page 3: Entity Beans

ConsideraçõesA 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.

Page 4: Entity Beans

Tecnologias concorrentes• Existem diversos frameworks de

mapeamento de dados, os mais importantes são:– Hibernate– TopLink– EJB3

Page 5: Entity Beans

New entity bean• No exemplo, vamos criar o entity bean

Cliente (cpf, nome, endereco, telefone)

Page 6: Entity Beans

New XDoclet EJB

Page 7: Entity Beans

Criação do EJB

Page 8: Entity Beans

Criação do EJB

Page 9: Entity Beans

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

Page 10: Entity Beans

Atributos do EJB• O EJB irá criar a tabela Cliente com os

seguintes atributos:– Cpf– Nome– Endereco– Telefone

Page 11: Entity Beans
Page 12: Entity Beans

Passos finais• O EJB está

pronto• O próximo passo

é configurar o banco de dados

Page 13: Entity Beans

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

Page 14: Entity Beans
Page 15: Entity Beans

XDoclet• Observe algumas

configurações importantes:– Datasource– Createtable

Page 16: Entity Beans

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

Page 17: Entity Beans

ejbCreatepublic 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); return null;}

Page 18: Entity Beans

ejbPostCreatepublic void ejbPostCreate(String cpf, String nome, String

endereco, String telefone, Double saldo, Double limite) throws javax.ejb.CreateException {

}

Page 19: Entity Beans

DatasourceArquivo 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).

Page 20: Entity Beans

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>

Page 21: Entity Beans

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)

Page 22: Entity Beans

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

Page 23: Entity Beans
Page 24: Entity Beans

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

pgAdmin

Page 25: Entity Beans
Page 26: Entity Beans

Senha• Informe a senha

Page 27: Entity Beans

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)

Page 28: Entity Beans
Page 29: Entity Beans
Page 30: Entity Beans

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

Page 31: Entity Beans

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

Page 32: Entity Beans
Page 33: Entity Beans

Dados da tabela• Clique na opção View the

Data para consultar os dados da tabela

Page 34: Entity Beans

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

Page 35: Entity Beans

Inclusãopackage 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

Page 36: Entity Beans

Dados da tabela• Atualize a tela de

consulta e acompanhe a inclusão dos registros

Page 37: Entity Beans

Atualizaçãopackage net.sistemabancario.entidades.cliente;

import net.sistemabancario.entidades.Cliente;import net.sistemabancario.entidades.ClienteHome;import net.sistemabancario.entidades.ClienteUtil;

public class TesteAlteracaoCliente { public static void 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(); } }}

Page 38: Entity Beans

Exclusãopackage net.sistemabancario.entidades.cliente;

import net.sistemabancario.entidades.ClienteHome;import net.sistemabancario.entidades.ClienteUtil;

public class TesteExclusaoCliente { public static void main(String[] args) { try { ClienteHome home = ClienteUtil.getHome(); home.remove("83286950149"); System.out.println("Cliente excluido com sucesso"); } catch (Exception e) { e.printStackTrace(); } } }

Page 39: Entity Beans

Consulta todospackage net.sistemabancario.entidades.cliente;

import java.util.Collection;

import net.sistemabancario.entidades.Cliente;import net.sistemabancario.entidades.ClienteHome;import net.sistemabancario.entidades.ClienteUtil;

public class TesteConsultaClientes { public static void 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(); } }}

Page 40: Entity Beans

Exercícios• Crie o entity bean para ContaCorrente

(numero, saldo, limiteDeChequeEspecial)– O código do cliente será implementado em

uma versão futura

Page 41: Entity Beans

Dúvidas?