Você está na página 1de 58

Enterprise JavaBeans


(EJB)
Romulo Fagundes Cantanhede

romulofc@unirn.edu.br

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Java Enterprise Edition

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Java Enterprise Edition

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação

Aplicação com um nó de
Cliente execução

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação
Distribuição

Máquina A

Aplicação distribuída, o cliente se comunica


com componentes distribuídos do lado
servidor. Máquina B

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação

O Cliente solicita ao servidor A que está


sobrecarregado e o servidor B nada faz.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação
Balanceamento de Carga

Balanceador

O balanceamento de carga permite escalabilidade


e maior aproveitamento da infra-estrutura.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação

Em caso de parada do servidor é necessário uma forma de


manter a aplicação disponível.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação
Fail-Over

Proxy

O Fail-Over confere a aplicação a característica da


alta disponibilidade.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação

Sessão Web

A sessão criada no servidor não é mantida


no outro.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação
Cluster - Replicação
Estado
Conversacional

Replicação

A sessão é replicada e o outro servidor


pode assumir as funções do usuário.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação

Como tratar o aumento


repentino das requisições?

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação
Multi-Theading

Servidor J2EE

O Multithreading é
gerenciado pelo Container
(Resource Pooling)

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação

Banco de
Dados A

ERRO!

Banco de
Dados B

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Motivação
Transações Gerenciadas
automaticamente Desfaz

Banco de
Dados A

ERRO!

Banco de
Dados B

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Transações
Suporte a
■ DTS (Distributed Transaction Processing)
■ Two Phase Commit
⬥X/Open XA
■ Propagação da transação entre servidores
padrão OTS (Object Transaction Service)

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


O que é EJB?
Principal tecnologia do J2EE

Define uma arquitetura para o desenvolvimento


de componentes distribuídos e transacionais que
são gerenciados pelo EJB Container

Foco na lógica de negócio

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Como funciona?
Comportamento
síncrono..

Componente
EJB

Solicita

Processa
Resposta !

Cliente
Container
Rede
EJB

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Objetos Distribuídos
Comunicação entre objetos em espaços de
endereçamento diferentes

Feita através de um protocolo de chamada


remota (RPC)

O objeto não conhece a implementação do


outro (Apenas a Interface)

Stubs e Skeletons

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Stubs e Skeletons

Objeto A Objeto B

retorno b.metodo(); b.metodo(); retorno

b.metodo();
Stub B Skeleton B

retorno
Protocolo de RPC

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Stubs e Skeletons
Gerados Automaticamente por ferramentas:
■ Antes: estaticamente através de compiladores
■ Hoje: dinamicamente

O Stub se conecta ao Skeleton que se


comunica com o Objeto desejado

Encapsula o protocolo de invocação de


métodos

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Objetos Distribuídos
O Objeto A não conhece a implementação do
Objeto B
B publica sua interface Remota
O Stub implementa a interface Remota

Objeto A Objeto B

Stub Interface Skeleton


Remota B

Lado Cliente
© Copyright 2004 J2EEBrasil – Todos os direitos reservados
Interface Remota

IB objeto = ic.lookup(“objetoB”);
objeto.metodo();

public class Stub implements IB { … }

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Protocolos de RPC
Protocolos suportados pelo J2EE:
■ JRMP (Java Remote Method Protocol)
■ IIOP (Internet Inter-ORB Protocol)

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


JRMP
Protocolo de comunicação Java RMI
Permite apenas comunicação de objetos
Java
Implementado através das classes do
pacote java.rmi.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


IIOP
Protocolo no padrão CORBA
Permite comunicações entre objetos de
linguagens diferentes
RMI-IIOP
■ Permite comunicações de objetos CORBA com
objetos Java

Java C++

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Foco na lógica de Negócio
Diversos serviços de infra-estrutura
gerenciado automaticamente pelo
EJB Container:
■ Segurança
■ Persistência
■ Transações
■ Pooling
■ Gerenciamento de recursos
■ Threads

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Componentes EJB
Modelo de componentes
Regras para o desenvolvimento

Interfaces Importantes
■ Interface Remota
■ Interface Home

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Partes do Componente
Interface Home
Interface Remote
Implementação do Bean

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Interface Home
Gerencia o ciclo de vida do componente
javax.ejb.EJBHome
Criação
Remoção

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Interface Remota
Publica os métodos remotos
Conhecida pelos clientes
javax.ejb.EJBObject

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Implementação
Implementa a lógica de negócio
Não implementa a interface Remota
Não é acessado diretamente pelo cliente

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Exemplo - Home

import javax.ejb.EJBHome;

import java.rmi.RemoteException; 


public interface PousadaHome extends EJBHome 

{ 

public Pousada create() throws CreateException,
RemoteException; 

}

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Exemplo - Remote
import javax.ejb.EJBObject;

import java.rmi.RemoteException;


public interface Pousada extends EJBObject 

{

public int getVagas() throws
RemoteException; 


public int getTotalHospedes() throws
RemoteException;
public void reservar(Reserva hospede) throws
RemoteException; 


}

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Exemplo – Implementação
public class PousadaBean implements SessionBean {
private javax.ejb.SessionContext context;
/* Métodos callback */
public int getVagas() {
// implementação do método
}
public int getTotalHospedes() {
// Implementação do getTotalHospedes
}
public void reservar(Reserva hospede) {
// Implementação do método reservar
}
public void ejbCreate() throws CreateException {
}
}

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Criação de EJBs
3 etapas
■ Desenvolvimento
■ Build
■ Deploy

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Build
Processo de Construção do pacote
Pacote
■ Classes do componente
■ Deployment Descriptors
JAR (Java Application Archive)
WAR (Web Application Archive)
EAR (Enterprise Application Archive)

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Estrutura JAR
META-INF
■ ejb-jar.xml
■ jboss.xml
Classes

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Estrutura EAR
META-INF
■ application.xml
JAR*
WAR*

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Deployment Descriptors
Configuram o componente
■ Segurança
■ Transações
■ Classes
Dois tipos
■ Geral
■ Específico

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Deployment Descriptors
Geral
<ejb-jar>
<display-name>Exemplo de EJB</display-name>
<enterprise-beans>
<session>
<display-name>Componente da Pousada</display-name>
<ejb-name>PousadaBean</ejb-name>
<home>br.com.jeebrasil.exemplos.PousadaHome</home>
<remote>br.com.jeebrasil.exemplos.Pousada</remote>
<ejb-class>br.com.jeebrasil.exemplos.PousadaBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Deployment
Implantar o componente no Application
Server (EJB Container)
EJB Container configura componente
Gera Stubs e Skeletons (Opcionalmente)
Ferramentas de apoio (Deploytool)
Hot Deployment

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Deployment
Objeto gerado
de acordo com
a configuração EJBObject Bean
do
componente
Container EJB/

Servidor J2EE

Stub

Cliente
Cliente
© Copyright 2004 J2EEBrasil – Todos os direitos reservados
Interfaces
Locais
■ O componente perde a distribuição e não
pode ser chamado
■ Todo o restante é preservado
■ Interfaces
⬥javax.ejb.EJBLocalObject
⬥javax.ejb.EJBLocalHome

Remotas
■ Componentes Distribuídos

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Interfaces Locais
<ejb-jar>
<display-name>ContadorEJB</display-name>
<enterprise-beans>
<session>
<display-name>ContadorBean</display-name>
<ejb-name>ContadorBean</ejb-name>
<local-home>

br.com.j2eebrasil.artigo.contador.ContadorLocalHome</local-home>
<local>br.com.j2eebrasil.artigo.contador.ContadorLocal</local>
<ejb-class>br.com.j2eebrasil.artigo.contador.ContadorBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Interfaces Locais

<jboss>

<enterprise-beans>
<session>
<ejb-name>ContadorBean</ejb-name>
<jndi-name>J2EEBrasilContador</jndi-name>

<local-jndi-name>J2EEBrasilContLoca</local-jndi-name>
</session>

</enterprise-beans>

</jboss>

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Tipos de Beans
Session Bean
■ Stateless Session Bean
■ Stateful Session Bean
Entity Beans
■ CMP (Container Managed Persistence)
■ BMP (Bean Managed Persistence)
Message Driven Beans
Timer Bean (J2EE 1.4)

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Session Beans
Contm a lógica de negócios
Não é compartilhado
Não é persistente
⬥É transacional

Realiza o trabalho, escodendo complexas


interações com outros objetos.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Stateless Session Bean
Não mantem estado de um cliente
particular

Contém os dados apenas durante a


invocação

Exceto durante a invocação, todos as


instâncias de um Stateless Session Bean
são iguais.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Stateless Session Bean

Stateless
Session
Bean
Para o Container qualquer Stateless do mesmo
tipo é igual, dessa forma qualquer um pode ser
escolhido para servir o cliente.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Stateful Sesion Bean
Mantem estado com o cliente

Ideal para uso em aplicações em que


necessitamos manter estado
■ Carrinho de Compras

O objeto é exclusivo do cliente

Ativação/Passivação

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Stateful Session Bean

O Container mantêm uma instância


do Bean para cada cliente e em Stateful

chamadas sucessivas o mesmo objeto Session
é utilizado. Bean

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Entity Beans
Representa um objeto de negócio em um
mecanismo persistente como um banco de
dados relacional

Uma instância de um Entity Bean é uma linha


de uma tabela

Propriedades:
■ Persistente
■ Tem chave primária (Tipo primitivo ou uma Classe)
■ Possui relações com outros Beans

Descontinuado: Substituido pelo JPA

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Message Driven Beans
Componentes Assíncronos

Fracamente Acoplados

Escutam uma fila

Clientes devem mandar mensagens para


fila para invocar o componente

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Message Driven Beans
A mensagen pode ser originada de
vários lugares:
■ Aplicação cliente
■ Outro EJB
■ Um componente Web
■ Outros programas que consigam pôr
mensagens na fila

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Message Driven Beans
Não mantêm nenhum estado com o
cliente

Todas as instâncias de Message Driven


Beans são iguais, podendo a mensagem
ser entregue para qualquer uma.

© Copyright 2004 J2EEBrasil – Todos os direitos reservados


Timer Bean
Inserido no J2EE 1.4

Necessidade de Timers em aplicações


J2EE

Impedimento do uso de threads em EJBs

Realizam uma tarefa de tempos em


tempos
© Copyright 2004 J2EEBrasil – Todos os direitos reservados
?
© Copyright 2004 J2EEBrasil – Todos os direitos reservados

Você também pode gostar