fundamentos de ejb componentes do framework ricardo cavalcanti [email protected] jobson ronan...

29
Fundamentos de EJB Componentes do framework Ricardo Cavalcanti [email protected] Jobson Ronan [email protected]

Upload: leonor-valverde-cruz

Post on 07-Apr-2016

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

Fundamentos de EJB

Componentes do framework

Ricardo [email protected]

Jobson [email protected]

Page 2: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

2

Relembrando

Enterprise bean: componente server-side que pode ser implantado num ambiente distribuído e multicamadas

Interface determina os serviços oferecidos pelo bean

Deve seguir a especificação EJB Para garantir que o container possa

gerenciá-lo

Page 3: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

3

Relembrando (2)

Cliente

Stub

Interceptador de requisições

Skeleton

Rede

Transaction Service

SecurityService

DatabaseService

ObjetoRemotoEnterprise bean

Page 4: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

4

Componentes do EJB Um EJB deve estar empacotado em um JAR

contendo Uma classe que implementa o bean Interface(s) do(s) interceptador(es) (Remota ou

Local) Interface(s) de fábrica: Home (Remota ou

Local) Deployment descriptor Descritores específicos para o servidor Classes auxiliares: geradas pelo container Arquivo Ejb-jar

Page 5: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

5

Classe do bean Contém a lógica de negócio

Pode também implementar rotinas de persistência

Implementações diferem, dependendo do tipo Session Beans - lógica relacionada a

processos de negócio (computar preços, transferir fundos)

Entity Beans - lógica relacionada a dados (mudar o nome de um cliente, reduzir o saldo)

Message-driven Beans - lógica orientada a mensagens (eventos), lógica assíncrona

Page 6: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

6

Interface EnterpriseBean Todo bean implementa javax.ejb.EnterpriseBean

Na verdade, todo bean implementa uma interfacederivada de EnterpriseBean

SessionBean extends EnterpriseBeanEntityBean extends EnterpriseBeanMessageDrivenBean extends EnterpriseBean

public interface javax.ejb.EnterpriseBean extends java.io.Serializable{

}

Page 7: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

7

Exemplo: HelloBeanimport java.rmi.RemoteException;

import javax.ejb.EJBException;import javax.ejb.SessionContext;

public class HelloBean implements javax.ejb.SessionBean {

public void ejbCreate(){..} public void setSessionContext(SessionContext ctx) {...} public void ejbRemove() {...} public void ejbActivate() {...} public void ejbPassivate() {...} public String hello() { System.out.println("hello"); return "Hello, World!"; }}

Page 8: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

8

Interface do componente Component interface: referência para o componente

Remote component interface Local component interface

Para criar uma interface de componente, é preciso estender interfaces EJBObject ou EJBLocalObject

O container criará automaticamente interceptadores contendo todos os métodos de negócio declarados

As exceções de aplicação devem ser declaradas aqui Um bean só precisa de um tipo de interceptador (ou Local

ou Remoto) mas pode ter ambos, se necessário

Page 9: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

9

Interface do componente Interceptador EJBObject é objeto remoto

RMI-IIOP É gerado pelo container e delega chamadas ao

bean Interface javax.ejb.EJBObject estende

java.rmi.Remote Define métodos de negócio remotos expostos

pelo bean Todos os métodos devem indicar que lançam

RemoteException

Page 10: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

10

Interface do componente

Cliente

Stub

Interceptador de requisições

Skeleton

Rede

Transaction Service

SecurityService

DatabaseService

ObjetoRemotoEnterprise bean

ComponentInterface

Page 11: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

11

Exemplo: Interface remotapackage hello.ejb;/** * Esta eh a interface remota do HelloBean. * * Esta é a interface com a qual os clientes irão operar * quando eles interagirem com objetos EJB. O container irá * implementar esta interface; * o objeto implementado é o EJB object * que irá delegar as invocações para o bean */public interface Hello extends javax.ejb.EJBObject {

/** * Método único que retorna olá para o cliente! */public String hello() throws java.rmi.RemoteException;

}

Page 12: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

12

Interface de fábrica Estende javax.ejb.EJBHome, que define as operações para

gerenciar o ciclo de vida Objetos EJBHome servem para

Criar objetos EJB: métodos create Encontrar objetos EJB existentes (em Entity Beans): métodos

findXXX Remover objetos EJB: método remove

Fábrica usada para que clientes possam adquirir referências remotas a objetos EJB

Evita ter que registrar cada objeto: registra-se só a fábrica Para obter uma referência a um objeto EJB, cliente chama

métodos do EJBHome Os objetos EJBHome são parte do container e gerados

automaticamente O programador define uma interface Home estendida de

EJBhome

Page 13: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

13

Interface de fábrica Métodos create devem indicar que lançam javax.ejb.CreateException

Também pode ser local ou remota EJBLocalHome e EJBHome

Se for remota pode lança RemoteException

Page 14: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

14

Exemplo: Interface Home/** * Esta é a interface home do HelloBean. Esta interface * é implementada pelas ferramentas do servidor - o objeto * implementado é chamado de EJB Home Object * e serve como uma fábrica de Beans. * * Cada método create() na Home Interface * corresponde a um ejbCreate() no HelloBean * */public interface HelloHome extends javax.ejb.EJBHome{

/** * Este método cria um EJ Object. * * @return Um EJB Object recém criado. */ Hello create() throws java.rmi.RemoteException,

javax.ejb.CreateException;}

Page 15: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

15

Interfaces locais x remotas Um problema das interfaces remotas: lentidão para criar objetos

1. Cliente chama um stub local2. Stub transforma os parâmetros em formato adequado à rede3. Stub passa os dados pela rede4. Esqueleto reconstrói os parâmetros5. Esqueleto chama o EJBObject6. EJBObject realiza operações de middleware como connection

pooling, transações, segurança e serviços de ciclo de vida7. Depois que o EJBObject chama o Enterprise Bean, processo é repetido

no sentido contrário Desde EJB 2.0 é possível chamar EJBs através de sua interface local

1. Cliente chama objeto local2. Objeto EJB local realiza middleware3. Depois que o trabalho termina devolve o controle a quem

chamou

Page 16: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

16

Interfaces locais Interfaces locais são definidas para objetos EJBHome e para

EJBObject (interfaces EJBLocal e EJBLocalHome) Benefícios

Melhoria de performance mesmo com beans simples Uso típico: fachadas Session que acessam Entities que não são

acessíveis remotamente São opcionais

Substituem ou complementam as interfaces remotas existentes Efeitos colaterais

Só funcionam ao chamar beans do mesmo processo (não dá para mudar o modelo de deployment sem alterar o código)

Parâmetros são passados por referência e não por valor: muda a semântica da aplicação!!!

Uso típico: Entity Beans geralmente só têm interfaces locais

Page 17: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

17

Exemplo: Interface localpackage hello.ejb;

/** * Esta eh a interface local do HelloBean. * * Esta é a interface com a qual os clientes irão operar * quando eles interagirem com objetos EJB. O container irá * implementar esta interface; * o objeto implementado é o EJB object * que irá delegar as invocações para o bean */

public interface HelloLocal extends javax.ejb.EJBLocalObject {

/** * Método único que retorna olá para o cliente! */public String hello();//não há necessidade de lançar RemoteException

}

Page 18: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

18

Exemplo: Interface Local Home/** * Esta é a interface local home do HelloBean. Esta interface * é implementada pelas ferramentas do servidor - o objeto * implementado é chamado de EJB Home Object * e serve como uma fábrica de Beans. * * Cada método create() na Home Interface * corresponde a um ejbCreate() no HelloBean * */public interface HelloLocalHome extends javax.ejb.EJBLocalHome{

/** * Este método cria um EJ Object. * * @return Um EJB Object recém criado. */ Hello create() throws javax.ejb.CreateException;

//não há necessidade de lançar RemoteException}

Page 19: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

19

Exemplo clássico

BD

Entity bean Entity beanEntity bean

Session BeanSession Bean

Cliente CORBA

Cliente HTML

Cliente WebService

Servlet

JSP

TaglibCliente Swing

remote

locallocallocal

remote

Page 20: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

20

Exceções e EJB

Dois tipos de exceções System-level exceptions: representam

erros críticos, falhas no banco etc. Application-level exceptions: exceção de

rotina, indicam violação de regras de negócio

Por que dividir? Transparent fail-over

Page 21: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

21

Rule of thumb

Application-level exceptions: lançadas para o cliente.

System-level exceptions: O container deve decidir o que fazer O bean pode lançar RuntimeException

ou RemoteException

Page 22: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

22

Interface EJBContext Através do contexto, o bean pode ter acesso...

Ao objeto que implementa sua interface Home Ao usuário e perfil do usuário logado Ao status de transações

Subtipos para cada tipo de bean

EjbContext

BeaninRole?

Principal

EJBHome

EJBLocalHome

handlers

transações

Page 23: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

23

Exceções de sistema

Erros graves devem ser encapsulados em EJBException

public void procurar(){

try{

//codigo

} catch (SQLException e){

throw new EJBException(e);

}

}

Page 24: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

24

Deployment Descriptor Arquivo de configurações em XML Informa ao container sobre as

necessidades de middleware Informações sobre a estrutura e gerência e

ciclo de vida• Home, o Remote• Tipo do bean

Modelo de persistência para Entity Beans Configuração de transações Segurança ...

Nome padrão: ejb-jar.xml

Page 25: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

25

Exemplo: ejb-jar.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise

JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar ><enterprise-beans>

<session > <ejb-name>Hello</ejb-name>

<home>exemplo.hello.HelloHome</home> <remote>exemplo.hello.Hello</remote> <local-home>exemplo.hello.HelloLocalHome</local-home> <local>exemplo.hello.HelloLocal</local> <ejb-class>exemplo.hello.HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type>

</session> </enterprise-beans></ejb-jar>

Page 26: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

26

Arquivos específicos do fabricante Cada servidor tem recursos adicionais que necessitam

configuração específica Load-balancing Clustering Pooling Monitoramento Mapeamento JNDI

Geralmente são gerados por ferramentas no próprio servidor

Podem também ser codificados à mão (jboss.xml) Devem ser incluídos no bean antes do deployment

Page 27: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

27

Exemplo: jboss.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.0//EN"

"http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd">

<jboss>

<enterprise-beans></session>

<session> <ejb-name>Hello</ejb-name> <jndi-name>ejb/Hello</jndi-name> <local-jndi-name>HelloLocal</local-jndi-name> </session> </enterprise-beans>

<resource-managers> </resource-managers>

</jboss>

Page 28: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

28

EJB-JAR Arquivo JAR que contém tudo o que descrevemos Uma vez feito o EJB-JAR, o bean já pode ser implantado no

application server Ferramentas dos containers podem descomprimir, ler e extrair

informações contidas no EJB-JAR Depois, ferramentas realizam tarefas específicas do fabricante

para gerar EJB Objects, EJB Home, importar seu bean no container, etc.

Pode-se ter vários beans em um ejb-jar O EJB-JAR é um JAR comum. Exigência apenas quanto à

localização dos deployment descriptors (padrão e do fabricante).

Coloque as classes em seus pacotes a partir da raiz Coloque os deployment descriptors no META-INF

Page 29: Fundamentos de EJB Componentes do framework Ricardo Cavalcanti roc3@cin.ufpe.br Jobson Ronan jrjs@cin.ufpe.br

29

Construindo o 1º. EJB1. Escreva os arquivos java: interface do interceptador,

interface home, a classe do bean e qualquer classe auxiliar.

2. Escreva o Deployment Descriptor (ou use XDoclet)3. Compile as classes do passo 14. Crie um EJB-jar contendo o DD e os .class5. Faça o deploy no seu container6. Configure seu Servidor para hospedar seu arquivo ejb-jar

(Conexões como BD, thread pools etc.)7. Inicie seu container EJB e confirme que ele carregou seu

EJB-jar.8. Se quiser, escreva uma classe cliente ou utilize

ferramentas para exercitar a API do seu bean.