37
Application Server & EJB3 Wesley Gonçalves da Silva [email protected] http://balaprata.blogspot.com

Application Server & EJB3 Wesley Gonçalves da Silva [email protected]

Embed Size (px)

Citation preview

Page 1: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

Application Server & EJB3

Wesley Gonçalves da [email protected]

http://balaprata.blogspot.com

Page 2: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

Enterprise Javabeans

Visão Geral

Page 3: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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

Page 4: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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

Page 5: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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

Page 6: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

6

Exercício I

Page 7: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

7

Exercício II

Page 8: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

8

Exemplo

Page 9: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

9

Exemplo

Para decidir qual utilizar, geralmente utiliza-se uma Fábrica (Design Pattern)

Page 10: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

10

EJB e o seu lugar no “mundo”

Page 11: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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

Page 12: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

12

O EJB na sua vida!

EJB:

O que significa dizer que o EJB é um POJO?

Page 13: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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

Page 14: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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

Page 15: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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!!!

Page 16: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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{}

Page 17: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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);

}}

Page 18: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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 {

:

:

}

Page 19: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

19

Tipos de EJB – Session Beans

Page 20: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

20

Tipos de EJB – Session Beans

Page 21: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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”

Page 22: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

22

Injeção de Dependência

Para que serve?Diminui o esforço de localização de objetos/recursos os quais sua classe depende

Page 23: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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(){}

}

}

Page 24: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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;

:

Page 25: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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

Page 26: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

26

O Lugar das coisas

Page 27: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

27

O Lugar das coisas

DOMÍNIO

Apresentação

Negócio

Persistência

Infra/ Util

Infra/ Util

Page 28: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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

Page 29: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

29

Transação

Page 30: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

30

Transação

Page 31: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

31

Transação e Exceções

Page 32: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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

Page 33: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

33

Exercícios - Especial

Considerando o modelo a seguir faça:

Page 34: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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.

Page 35: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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.

Page 36: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

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.

Page 37: Application Server & EJB3 Wesley Gonçalves da Silva wesleygsilva@yahoo.com.br

JPA – Java Persistence API

Perguntas e Respostas