entity beans marco antonio arquiteto de software dezembro/2007
Post on 22-Apr-2015
115 Views
Preview:
TRANSCRIPT
Entity BeansMarco AntonioArquiteto de SoftwareDezembro/2007
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.
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.
Tecnologias concorrentes• Existem diversos frameworks de
mapeamento de dados, os mais importantes são:– Hibernate– TopLink– EJB3
New entity bean• No exemplo, vamos criar o entity bean
Cliente (cpf, nome, endereco, telefone)
New XDoclet EJB
Criação do EJB
Criação do EJB
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
Atributos do EJB• O EJB irá criar a tabela Cliente com os
seguintes atributos:– Cpf– Nome– Endereco– Telefone
Passos finais• O EJB está
pronto• O próximo passo
é configurar o banco de dados
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
XDoclet• Observe algumas
configurações importantes:– Datasource– Createtable
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
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;}
ejbPostCreatepublic void ejbPostCreate(String cpf, String nome, String
endereco, String telefone, Double saldo, Double limite) throws javax.ejb.CreateException {
}
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).
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>
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)
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
Administrator do PostgreSQL• Após a instalação do Postgre, abra o
pgAdmin
Senha• Informe a senha
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)
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
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
Dados da tabela• Clique na opção View the
Data para consultar os dados da tabela
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
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
Dados da tabela• Atualize a tela de
consulta e acompanhe a inclusão dos registros
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(); } }}
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(); } } }
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(); } }}
Exercícios• Crie o entity bean para ContaCorrente
(numero, saldo, limiteDeChequeEspecial)– O código do cliente será implementado em
uma versão futura
Dúvidas?
top related