Вы находитесь на странице: 1из 59

Enterprise Java Beans

Viso Geral e Arquitetura

Definio
A arquitetura Enterprise JavaBeans uma arquitetura de componentes para o desenvolvimento e a implantao de aplicativos de negcio distribudos baseados em componentes. Aplicativos escritos utilizando a arquitetura Enterprise JavaBeans so escalonveis, transacionais e seguros com multiusurios. Esses aplicativos podem ser escritos uma vez e ento implantados em qualquer plataforma de servidor que suporta a especificao Enterprise JavaBeans Sun Microsystems

Definio simplificada

Definio simplificada: Modelo padro de componentes do lado do servidor para aplicativos de negcio distribudos Modelo prprio para a construo de componentes do lado do servidor que representam processos do negcio Componentes distribudos mquinas diferentes

Distribuio de carga de processamento Maximizao de confiabilidade

Atualmente a arquitetura EJB encontra-se na verso 3.2

J na JEE7.

Persistncia e Beans de Entidade

Desde o EJB 3.0 a persistncia deixou de fazer parte da plataforma, passando a ser especificada a parte Java Persistence API JPA JPA uma abstrao superior API JDBC

Os objetos so mapeados em tabelas de banco dados, de modo que possam ser consultados, carregados, atualizados ou removidos sem que necessrio utilizar a API JDBC Mapeia objetos Java simples e comuns (POJOs Plain Old Java Objects) Beans de Entidade

Sistema de Mensagens Assncronas

Alm do suporte a objetos distribudos baseados em RMI, o EJB suporta tambm um sistema de mensagens assncronas

Uma mensagem um pacote autocontido de dados do negcio e cabealhos de roteamento de rede Mensagens assncronas podem ser transmitidas entre um aplicativo e outro em uma rede, utilizando o MessageOriented Middleware MOM MOM assegura tolerncia a falhas, escalabilidade, balanceamento de carga e suporte a transaes

Sistema de Mensagens Assncronas

Embora cada fornecedor de um MOM utilize formatos e protocolos diferentes, a semntica bsica a mesma e uma API Java utilizada para criar, enviar e receber mensagens O EJB integra a funcionalidade do MOM ao seu modelo de componentes A partir do EJB 3.0 existe o suporte ao sistema de mensagens assncronas por meio do Java Message Service JMS Bean Orientados a Mensagens (MDB)

Web Services

Tendncia na computao distribuda Aplicativos modulares autodescritos e autocontidos que podem ser publicados, localizados e invocados pela Web

Veremos mais detalhes nas aulas posteriores!

Desde o EJB 3.0, permitido o desenvolvimento de Servios Web atravs da API JAX-WS

E no EJB 3.1 permite tambm o desenvolvimento de aplicaes REST atravs da API JAX-RS.

Arquitetura Java Enterprise Edition


EJB

Arquiteturas JPA e EJB

Para a construo de aplicaes corporativas inicialmente a de se compreender as arquiteturas propostas


Beans de entidade Componentes Enterprise Beans

Bean de Entidade

Os beans de entidade na especificao Java Persistence 1.0 esto disponveis como POJOs e so mapeados para tabelas de bancos de dados As entidades podem ser alocadas, serializadas e enviadas pela rede, diferentemente dos EJBs Os beans de entidade espelham os objetos do mundo real

Bean de Entidade

Implementando um bean de entidade:

Definir uma classe bean Qual atributo funcionar como identificador? Fornece um identidade classe bean Pode conter lgica do negcio, mas normalmente define as informaes necessariamente persistentes

Chave primria (identificador)

Classe bean

Bean de Entidade

A classe bean um POJO que no tem de implementar nenhuma interface e nem mesmo ser serializvel Deve ser sinalizada com a anotao @javax.persistence.Entity Deve ter um campo ou mtodo getter que designado como a chave primria, com a anotao @javax.persistence.Id

Bean de Entidade

Para interagir com beans de entidade, a Java Persistence API fornece o EntityManager

Todo acesso s entidades passa por este servio Este, fornece uma API de consulta e mtodos de ciclo de vida para a entidade

A JPA pode ser utilizada independentemente do servidor de aplicao Enterprise Edition

Descritores de Implantao e Arquivos XML

Os beans de entidade so agrupados em um conjunto finito de classes chamado unidade de persistncia O servio EntityManager gerencia uma unidade de persistncia especfica Uma unidade de persistncia deve estar associada a um banco de dados particular Informaes essas armazenadas em um descritor de implantao (persistence.xml)

Componente Enterprise Bean

Dois tipos fundamentais:

Beans de sesso session beans

Acessados utilizando vrios protocolos de objetos distribudos (RMI-IIOP) So extenses do aplicativo que gerenciam processos ou tarefas
Processam mensagens assincronamente a partir de sistemas como o JMS

Beans orientados a mensagens message-driven beans

Interfaces

Interface Remota - @javax.ejb.Remote

Define os mtodos do bean de sesso que so acessveis por aplicativos de fora do continer Define os mtodos do bean de sesso acessveis apenas por outros beans executando na mesma JVM Define os mtodos de negcio que so acessveis por aplicativos fora do continer por meio de SOAP

Interface Local - @javax.ejb.Local

Interface endpoint - @javax.jws.WebService

Beans de Sesso
EJB 3.1

Beans de Sesso

Atuam como controlador da interao entre outros beans

Represento um fluxo de tarefas

Contm a lgica de negcio Gerenciam as interaes entre os beans de entidade Metfora da pea de teatro

Os beans de sesso representam o roteiro Os beans de entidade representam os atores em cena

Beans de Sesso

Trs tipos bsicos


1.

Stateless
Bean sem estado conversacional @javax.ejb.Stateless

2.

Stateful
Bean com estado conversacional @javax.ejb.Stateful

3.

Singleton
Presente a partir do EJB 3.1 @javax.ejb.Singleton

Stateless

No mantm nenhum estado conversacional Pode ser compartilhado entre vrios clientes Todas as informaes necessrias a um mtodo so passadas por parmetros Como no guarda informao de estado no requer passivao e ativao A exceo regra, so as informaes obtidas do:

(1) SessionContext, (2) JNDI ENC, ou (3) referncias ao ambiente injetadas no bean.

Ciclo de Vida de Stateless

Exemplo: ProcessPayment

Cenrio:

Utilizado primariamente para o pagamento de passagens num sistema de agncia de turismo Compartilhado por vrias aplicaes que cobram servios do cliente Os pagamentos so registrados em uma tabela do banco de dados chamada de PAYMENT Vrias formas de pagamento podem ser utilizadas: carto de crdito, cheque e dinheiro

Exemplo: ProcessPayment

Tabela do banco de dados PAYMENT:

Exemplo: ProcessPayment

Um bean de sesso sem informao de estado tem uma ou mais interfaces de negcio Uma interface de negcio pode ser remota ou local

Interfaces remotas so capazes de receber invocaes de mtodos de cliente da rede Interfaces locais esto disponveis dentro da mesma JVM Mtodos: byCredit(), byCash() e byCheck() Ter duas interfaces diferentes: uma local e uma remota

Interface do negcio ProcessPayment:


Exemplo: ProcessPayment

Exemplo: ProcessPayment

@Local - necessria na EJB 3.0, mas desnecessria na 3.1

Exemplo: ProcessPayment

Cada mtodo de negcio do ProcessPayment EJB recebe um bean de entidade como um parmetro Como os beans de entidade so POJOs podem ser serializados pela rede desde que implementem a interface java.io.Serializable ou Externalizable.

Exemplo: ProcessPayment

Classe de negcio CreditCardDO:

Exemplo: ProcessPayment

Classe de negcio CreditCardDO (continuao):

Exemplo: CheckDO

Classe de negcio CheckDO:

Exemplo: ProcessPaymentBean

A classe bean ProcessPaymentBean:

Exemplo: ProcessPaymentBean

Exemplo: ProcessPaymentBean

Exemplo: ProcessPaymentBean

Exemplo: ProcessPaymentBean

Exemplo: EJB ProcessPayment

Acessando propriedades do ambiente (injeo)

SessionContext

Fornece uma visualizao do ambiente do continer EJB interface com o continer EJB

Obter informaes sobre o contexto da chamada de invocao do mtodo Acesso vrios servios EJB

Um bean de sesso pode obter uma referncia utilizando a anotao @Resource

Stateful

uma extenso do Cliente; Realiza tarefas em favor de um s cliente e mantm o estado relacionado a ele; Esse estado chamado Conversacional pois representa uma conversa contnua entre o Cliente e o SB;

Stateful

Pode ter um tempo limite:


Se o cliente no utilizar o SB antes dele expirar, sua instncia destruda e a referncia ele invalidada; Isso evita que o SB permanea por muito tempo depois que um cliente terminar de us-lo;

Stateful Ciclo de Vida

Stateful Ciclo de Vida


No possui um pool de instncias; Possui 3 estados:

Does Not Exist : da mesma forma que no stateless; Method-Ready : quando o bean pode servir solicitaes de um cliente; Passivated: quando o bean est inativo no est servindo solicitaes do cliente;

Exemplo: Beans de Sesso com Informao de Estado

A interface remota: TravelAgent Fazer reservas num cruzeiro

@Remote public interface TravelAgentRemote{ public Customer findOrCreateCustomer(String first, String last); public updateAddress(Adress addr); public void setCruiseID(int creuise); public void setCabinID(int cabin); public TicketDO bookPassage(CreditCardDO card, double price) throws IncompleteConversationState; }

Exemplo: Beans de Sesso com Informao de Estado

A classe bean: TravelAgentBean

// imports @Stateful public class TravelAgentBean implements TravelAgentRemote{ @PersistenceContext(unitName = titan) private EntityManager entityManager; @EJB private ProcessPaymentLocal process; private Customer customer; private Cruise cruise; private Cabin cabin;

Exemplo: Beans de Sesso com Informao de Estado


public Customer findOrCreateCustomer(String first, Strinf last){ try{ Query q = entityManager.createQuery(from Customer q.setParameter(first, first); this.customer = (Customer)q.getSingleResult(); } catch(NoResultException notFound){ this.customer = new Customer(); this.customer.setFisrtname(first); this.customer.setLastname(last); entityManager.persist(this.customer); } return this.customer; }

Exemplo: Beans de Sesso com Informao de Estado


public void updateAddress(Address addr){ this.customer.setAddress(addr); this.customer = entityManager.merge(customer); } public void setCabinID public void setCruiseID

O mtodo seguinte bookPassage utiliza o estado conversacional acumulado pelos mtodos anteriores para processar a reserva do cliente. Utiliza o bean ProcessPayment e as entidades Reservation, Customer, Cabin e Cruise Realiza as seguintes operaes: (i) Cria um novo objeto Reservation, Persiste o objeto Reservation, debita no carto utiliazando o bean ProcessPayment EJB e gera um novo ticket.

Exemplo: Beans de Sesso com Informao de Estado


@Remove Public TicketDO BookPassage(CreditCardDO card, double price) throws IncompleteConversationState{ if (customer == null || cruise == null || cabin == null){ throw new ImcompleteConversationState();} try{ Reservation r = new Reservation(customer, cruise, ); entityManager.persist(reservation); process.byCredit(customer, card, price); TicketDO ticket = new TicketDO(customer, , price); return ticket; } catch(Exception e){throw new EJBException(e)} }

Session Bean Singleton

Permite compartilhar estado entre mltiplas instncias de um componente enterprise bean ou entre mltiplos componentes enterprise bean na aplicao.

@Singleton public class PropertiesBean { private Properties props; private int accessCount = 0; public String getProperty(String name) { ... } public int getAccessCount() { ... } }

Session Bean Singleton

Clientes de um stateless ou stateful acessar um singleton da mesma forma.

@EJB private PropertiesBean propsBean; ... String msg = propsBean.getProperty("hello.message");

Session Bean Singleton

possvel forar a instanciao do singleton pelo container, durante a inicializao da aplicao.

Uso da anotao @Startup


@Singleton @Startup public class PropertiesBean { @PostConstruct private void startup() { ... } @PreDestroy private void shutdown() { ... } ... }

Session Bean Singleton

Necessrio controlar:

Concorrncia Integridade de dados Container Managed Concurrency

Dois mecanismos:

O container controla a concorrncia baseado em anotaes ao nvel de mtodo Container habilita acesso total a instncia e delega ao desenvolvedor a responsabilidade de controle

Bean Managed Concurrency

Session Bean Singleton

Singleton Container Managed Concurrency


@Lock(READ)

Habilita leitura a todos acessos


Controla a concorrncia permitindo um nico acesso Aplicvel a classes e mtodos Especifica o tempo que um mtodo pode ficar bloqueado

@Lock(Write)

@AccessTimeout(value=1,unit=SECONDS)

Session Bean Singleton

Container Managed Concurrency

Session Bean Singleton

Bean Managed Concurrency

Controle pelo desenvolvedor

Exemplo:

Session Bean Singleton

@DependsOn

Define um grau de dependncia para seqncia de inicializao de EJBs.

Exemplo:

Container deve garantir que A inicializado aps B

Session Beans - Outras caractersticas

Invocaes assncronas de session beans


Uma classe de um session bean, ou mtodos individuais, podem ser anotados com @javax.ejb.Asynchronous Mtodos assncronos podem retornar void, ou uma instncia de java.util.concurrent.Future<V>.

Future permite o controle do tratamento do resultado, de uma exceo ou cancelamento do processamento.

Session Beans - Outras caractersticas

Invocaes assncronas de session beans

O cliente pode consultar a instncia do Future procurando o resultado a qualquer momento posteriormente, mas o resultado da invocao devolvido imediatamente thread do cliente, e no bloqueia.

Session Beans - Outras caractersticas

Invocaes assncronas de session beans

@javax.ejb.Stateless public CarHotelAndAirLineBookingServiceBean implements CarHotelAndAirLineBookingService { @javax.ejb.Asynchronous public Future bookCarHotelAndAirLine( Car rental, Hotel hotel, AirLine airLine) { /** ... */ }

Bibliografias

A Sampling of EJB 3.1 http://blogs.sun.com/enterprisetechtips/entry/a_samp ling_of_ejb_3 Enterprise JavaBeans 3.1 (EJB 3.1) Technology Overview TS-4605. http://developers.sun.com/learning/javaoneonline/j1s essn.jsp?sessn=TS-4605&yr=2009&track=javaee BURKE, Bill and MONSON, Richard. Enterprise Java Beans 3.0, 2007. JEE 6

http://www.oracle.com/technetwork/java/javaee/tech/index .html

Вам также может понравиться