application server & ejb3 wesley gonçalves da silva [email protected]
TRANSCRIPT
Enterprise Javabeans
Visão Geral
3
Visão Geral
EJB é uma plataforma para construção de aplicações corporativas portátil, reutilizável e escalável que utiliza a linguagem java.
Grande foco em permitir que seja construído aplicações corporativas sem a necessidade de reinventar serviços “básicos” (transação, segurança, persistência ...)
Ou seja: Foco no negócio, sem a perda de tempo em questões de infra-estrutura
4
Visão Geral
Pela Sun: EJB é um componente de server-side responsável pela lógica de negócio. Dessa forma uma única classe EJB é um componente
O ideal é que ele encapsule o comportamento da aplicação, de modo que o foco seja em conhecer a sua interface de negócio, os serviços que ele disponibiliza
Um componente de negócio pode ser reutilizável, permitindo que outros módulos e/ou clientes possam usar sem maiores problemas
5
Visão Geral
Desenvolvimento orientado a interface
Preocupação com os serviços oferecidos e não com a implementação
Poderia trocar de implementação sem afetar os clientes
Cuidado para não programar proceduralCódigos longos
Mais difíceis de manter
Menos flexíveis
6
Exercício I
7
Exercício II
8
Exemplo
9
Exemplo
Para decidir qual utilizar, geralmente utiliza-se uma Fábrica (Design Pattern)
10
EJB e o seu lugar no “mundo”
11
EJB e o seu lugar no “mundo”
Facilidade de uso
Acúmulo de soluções integradas (JTA/ JMS/ JNDI/ Injeção de dependência)
Padrão aberto – Java EE
Suporte amplo de fornecedores – Oracle/ IBM/ JBoss
Base de código de alta qualidade e estável
Cluster/ Balanceamento de carga
12
O EJB na sua vida!
EJB:
O que significa dizer que o EJB é um POJO?
13
Serviços
A especificação define os seguintes serviços:Transação
Segurança
Persistência
Remotabilidade (RMI/ WS-*)
Interceptadores
Timers
Gerenciamento de Estado
Mensageria
14
Tipos de EJB – Session Beans
Tem o propósito de executar operações de negócio, a partir da chamada de um cliente
“Sessão” – significa que uma instância está disponível durante “uma unidade de trabalho” e não está disponível a uma queda de servidor ou parada temporária
15
Tipos de EJB – Session Beans
StatefullSalva o estado entre as invocações do clienteExemplo clássico – Carrinho de compras
StatelessCada invocação do cliente é independente da outraSeus serviços podem ser expostos como webservices
ATENÇÃO AO CÓDIGO PROCEDURAL!!!
16
Tipos de EJB – Session Beanspublic interface ProcessPayment {
public boolean byCheck(Customer customer, CheckDO check, double amount)
throws PaymentException;
public boolean byCash(Customer customer, double amount)throws PaymentException;
public boolean byCredit(Customer customer, CreditCardDO card,double amount) throws PaymentException;
}
@Remotepublic interface ProcessPaymentRemote extends ProcessPayment{}
@Localpublic interface ProcessPaymentLocal extends ProcessPayment{}
17
Tipos de EJB – Session Beans@Statelesspublic class ProcessPaymentBean implements ProcessPaymentRemote,
ProcessPaymentLocal {final public static String CASH = "CASH";final public static String CREDIT = "CREDIT";final public static String CHECK = "CHECK";
@Resource(mappedName="titanDB") DataSource dataSource;@Resource(name="min") int minCheckNumber;public boolean byCash(Customer customer, double amount)
throws PaymentException {return process(customer.getId( ), amount, CASH, null, -1, null, null);
}
public boolean byCheck(Customer customer, CheckDO check, double amount)throws PaymentException {
if (check.checkNumber > minCheckNumber) {return process(customer.getId( ), amount, CHECK,check.checkBarCode, check.checkNumber, null, null);
}else{throw new PaymentException("Check number is too low.Must be at least "+minCheckNumber);
}}
18
Tipos de EJB – Session Beans
public boolean byCredit(Customer customer, CreditCardDO card,
double amount) throws PaymentException {
:
:
}
private boolean process(int customerID, double amount, String type,
String checkBarCode, int checkNumber, String creditNumber,
java.sql.Date creditExpDate) throws PaymentException {
:
:
}
19
Tipos de EJB – Session Beans
20
Tipos de EJB – Session Beans
21
Injeção de Dependência
JNDI - Java Naming and Directory InterfaceInterface padronizada para busca de informações (objetos) em diretórios (forma de organização)
É uma “página amarela”
22
Injeção de Dependência
Para que serve?Diminui o esforço de localização de objetos/recursos os quais sua classe depende
23
Injeção de Dependência
public class ClasseNegocio{
public String metodoNegocio(){
private DataSource meuDB;
public metodoNegocio(){
InitialContext ic = new InitialContext();
meuDB = (DataSource) ic.lookup(“jdbc/meuDB”);
}
}
}
public class ClasseNegocio{
public String metodoNegocio(){
@Resource private DataSource meuDB;
public ClasseNegocio(){}
}
}
24
Injeção de Dependência
@Statelesspublic class ProcessPaymentBean implements
ProcessPaymentRemote, ProcessPaymentLocal {final public static String CASH = "CASH";final public static String CREDIT = "CREDIT";final public static String CHECK = "CHECK";
@Resource(mappedName="titanDB") DataSource dataSource;
@Resource(name="min") int minCheckNumber;
:
25
Injeção de Dependência
Acontece que...A injeção de basicamente está relacionada a recursos JNDI
O que quer dizer que não consigo livremente injetar o POJO em um outro
26
O Lugar das coisas
27
O Lugar das coisas
DOMÍNIO
Apresentação
Negócio
Persistência
Infra/ Util
Infra/ Util
28
O Lugar das coisas Uma sugestão inocente
Caso de UsoInterfaces de negócio
Modelo de domínio
Realização de cada caso de uso aplicando as soluções técnicas necessárias (ex.: design patterns)
Testes UnitáriosPode ser baseado na interface de negócio
Mas também pode ser testado o modelo de domínio de forma separada
Atenção especial aos requisitos não-funcionais, pois eles são transversais aos funcionais
29
Transação
30
Transação
31
Transação e Exceções
32
Transação e Exceções
Tipicamente, uma exceção de aplicação é uma que o cliente deve tratar, para decidir que ação tomar, tem haver com a lógica de negócio. Um exceção de Sistema trata-se de uma falha maior (queda do BD)
Em EJB Checked Exceptions – AplicaçãoUnchecked – Sistema (e java.rmi.RemoteException) e são enviadas ao cliente uma javax.ejb.EJBException
33
Exercícios - Especial
Considerando o modelo a seguir faça:
34
Exercícios - Especial
1) Crie todas as classes devidamente anotadas – padrão jpa – e crie o respectivo modelo físico no banco de dados
2) Crie os “Manager´s” para o modelo. Defina o seu critério e justifique a sua escolha para cada “manager” criado.
3) Defina uma padronização para as suas consultas nomeadas.
4) Crie consultas nomeadas para recuperar: a)Pessoas que nasceram num intervalo de datas; b)Lista de telefones de quem mora no bairro “COPACABANA”; c)A lista de pessoas que estão pendentes de devolução; d)A lista de pessoas que possuem contas começadas com “A”; e)Itens mais emprestados.
35
Exercícios - Especial
5) Crie consultas dinâmicas considerando os seguintes filtros: a) Pessoas com nome contendo uma letra qualquer e/ou nascimento em uma determinada data6) Escolha duas consultas da questão 4 e as escreva usando consulta nomeada nativa. Compare com as consultas JPQL e dê sua impressão.7) Escreva testes unitários para “exercitar” todos os métodos dos seus managers, inclusive para o acesso as consultas.
36
Exercícios - Especial
8) Considerando que tenho 3 grandes interesses de negócio para o modelo: a) cadastro de contatos; b) o controles de empréstimos e c) o controle das contas das pessoas jurídicas; defina:
8.1) As interfaces de negócio
8.2) A cada implementação de ejb considerando o tipo de transação que terá que ser usada para cada serviço de negócio, com a justificativa comentada no código.
JPA – Java Persistence API
Perguntas e Respostas