Você está na página 1de 45

EJB 3 Introduo

Prof. Dr. Francisco Isidro Massetto francisco.isidro@techschool.com.br

Agenda
Conceitos de EJB
EJB como um framework e como um componente

Por que EJB Beans de sesso e Beans de Entidades


Tipos de beans, formas de implementao, padres de codificao

Arquitetura das aplicaes EJB


2

EJB Ento, o que isso?


EJB Enterprise Java Beans uma plataforma de desenvolvimento de aplicaes corporativas
Portvel Reutilizvel Escalvel

2 provveis interpretaes
Componente ou framework

Idia central no ter que reinventar nada!


3

EJB O que isso


O interessante do EJB poder efetivamente ter elementos para que as regras do negcio sejam efetivamente separadas da infra-estrutura (armazenamento, controle do ciclo de vida dos objetos) Importante ressaltar que todos os EJB executam em uma mquina virtual especializada - container
4

Por que o EJB?


EJB fornece uma srie de servios j integrados, tais como:
Integrao Controle de pool Thread-safety Gerenciamento de estado Envio de mensagens e interceptadores (logging, auditting) Transaes Segurana Acesso remoto (RMI e WebServices) Persistncia

Por que EJB?


Modelo de programao simplificado
Anotaes ao invs de toneladas de XML descrevendo como os objetos devem ser implantados

Injeo de Dependncia (DI)


Possibilidade de incluso, em tempo de execuo de objetos ou recursos gerenciados pelo container, apenas atravs de uso de uma anotao Evita a escrita excessiva de cdigo para realizar um lookup de um objeto no container
6

EJB como um componente


No fundo o EJB um POJO (Plain-Old Java Object) com alguns recursos adicionais no visveis aplicao Propsito de encapsular de forma eficaz o comportamento da aplicao
Modelando as regras do negcio Sendo armazenado em meio persistente

Idia de reutilizao comea a ficar mais atraente A aplicao (independente qual seja ou se est executando dentro do container ou no) apenas invoca o servio do Bean 7

EJB como um Framework


Beans residem em um container Juntos podem ser vistos como um framework que oferece servios, recursos e funcionalidades Entretanto algumas funcionalidades extrapolam a lgica do bean simplesmente
Controle de transao, pool de objetos, persistncia

Tudo isso pode ser acessvel atravs dos beans fazendo uso de anotaes
8

O Container EJB
Container Java EE WebContainer
Pgina JSP

EJBContainer
Credit Check EJB

Prov. Persist
Entidade Cliente

Componente JSF

Cart EJB

Entidade Catlogo

Arquiteturas de aplicaes
Aplicaes em camadas so extremamente teis por tornarem elementos separados Quais elementos?
Quem cuida do Armazenamento Quem cuida da seqncia das aes durante a regra do negcio Quem cuida da apresentao das informaes

Separar estas funcionalidades diminui o acoplamento e permite um maior grau de interoperabilidade entre objetos
10

Entendendo os Tipos de Beans


Basicamente 3 tipos
Beans de Sesso Beans Dirigidos por Mensagens Entidades

Objetivo principal
Saber organizar a aplicao, atribuindo servios, funcionalidades e papis especficos para cada caso

Foco principal deste treinamento


Beans de Sesso e Entidades
11

Beans de Sesso
Implementam as regras do negcio da aplicao Fornecem, como j vistos, elementos para o controle de concorrncia, 2 tipos de beans de sesso
Stateless
Exemplo: um pagamento de conta

Statefull
Exemplo: encher um carrinho de compras

Formas distintas de se operar e com desempenhos distintos


Container mantm informaes do histrico da execuo
12

Beans Dirigidos por Mensagens


Tambm implementam regras de negcio, porm de forma assncrona Para sistemas com uma maior necessidade de robustez ou que faam integraes com outros sistemas Forma de operao como produtor-consumidor Exemplo:
Sistema de varejo, onde os PDAs enviam solicitaes de vendas e essas solicitaes so processadas para, posteriormente serem geradas as notas fiscais
13

Entidades
Beans podem ter o contedo de seus atributos armazenados em tabelas de um banco de dados Possibilidade de se mapear relacionamentos entre tabelas atravs de anotaes no prprio bean Definio de atributos-chave e mapeamento dos atributos para as colunas das tabelas Uso do ORM Object Relationship Mapping
14

Entidades
2 elementos principais
Entidade API EntityManager

Entidades
Contm os dados a serem armazenados e os respectivos mapeamentos para colunas/tabelas do banco de dados

EntityManager
Atua como um elemento de infra-estrutura, lendo estas especificaes e realizando as respectivas manipulaes na base (consulta, excluso, recuperao)
15

EJB 3 A Injeo de Dependncia

Facilitando o uso de recursos

A Injeo de Dependncia
Em geral, quando se busca adicionar recursos em um Bean, utiliza-se o recurso JNDI
JNDI Java Naming and Directory Interface Busca, dentro de um container, por um objeto ou um bean por seu nome

Na ID, ao invs do EJB buscar, o container realiza esta busca e isso torna a programao muito mais rpida, pois toda a responsabilidade delegada ao container 17

A injeo de Dependncia
Busca

Recursos
EJB Busca JNDI Beans

Recursos

Injeo de Dependncia
Container Injeo EJB
18

Beans

A Injeo de Dependncia
No modelo JNDI, sempre que o programador necessitar de um recurso ou bean adicional, ele deve realizar toda a codificao da busca
Usando mdotos como Lookup da classe InitialContext e narrow da PortableRemoteObject

Na ID, h a idia simples e elegante de deixar toda a lgica da busca e instanciao do recurso por conta do container
Uso de annotations

19

Beans de Sesso

Como implementar as regras do negcio de forma simples e eficiente

Beans de Sesso
Stateless
No preciso armazenar nenhum histrico de execuo

Statefull
A a conversa outra

O questionamento bsico para diferenciar um e outro a necessidade de se armazenar informaes temporariamente por um tempo determinado e depois consolidar estas informaes
Exemplo: carrinho de compras, lista de alunos com notas
21

Ciclo de Vida dos Beans de Sesso


O Cliente obtm uma referncia do bean

Injeta alguma dependncia no bean

O Container invoca newInstance no Objeto do bean de sesso

Bean est poronto para ser invocado

22

O Ciclo de vida dos Beans


Depois que o container determina que uma instncia no mais necessria, ela eliminada E em situaes nas quais o bean injetado uma fonte de dados JDBC
Como fazer para fechar a conexo com o banco de dados?

CallBacks!
Mtodos que o bean possui de forma no exposta regra de negcio, que executada a cada mudana de estado no ciclo de vida do bean

Alguns CallBacks so comuns aos beans de Sesso com e sem estado e outros apenas para os Com Estado
23

Anotaes de CallBacks
Anotao Tipo de Bean

@PostConstruct
@PreDestroy @PostActivate

@PrePassivate

Beans de Sesso com Estado e sem Estado Beans de Sesso com Estado e sem Estado Somente Beans com Estado Somente Beans com Estado

24

Uso dos CallBacks


@PostConstruct
Invocado imediatamente aps a criao do objeto (usado, em geral para a alocao de recursos, conexo com banco de dados)

@PreDestroy
Invocado imediatamente antes da destruio do objeto (fechar conexes com bancos, liberar recursos)

@PostActivate
Invocado logo aps uma instncia ser ativada (no criado)

@PrePassivate
Invocado imediatamente antes dela ser passivada (no destrudo)
25

As regras de programao
Todo Bean de sesso deve ter, pelo menos 1 interface de negcios A classe do Bean de Sesso (que implementa a interface) deve ser concreta A classe deve ter um construtor sem argumentos (mesmo que este construtor chame outro com argumentos) Um Bean de sesso pode ser uma subclasse de outro Bean de Sesso ou de um outro POJO
26

As regras de programao
Os mtodos de negcio e os mtodos de CallBack do ciclo de vida podem ser definidos na prpria classe do bean ou em alguma superclasse
As anotaes de indicao do tipo de bean (@stateless ou @stateful) so suportadas com limitaes Entretanto os callbacks so herdados numa boa

Nomes dos mtodos de negcio nunca devem comear com ejb para evitar conflitos com a gerao de cdigo feita em tempo de execuo pelo container
27

Beans de Sesso sem Estado


Anotao @Stateless Idia bsica: o container pode (e realmente o faz) gerenciar um conjunto de Beans stateless de maneira transparente e isso torna o modelo de programao mais eficiente
Todo gerenciamento do ciclo de vida dos Beans fica alheio programao da aplicao
28

Beans de Sesso sem Estado


Cliente 1
Cliente 2

Pool de Beans Instncia1 Instncia 2

Cliente 3

29

Tipos e Interface para uso com Beans de Sesso


Interface Local @Local
Usado para tornar disponvel os servios dos beans para clientes que estejam executando na mesma mquina virtual

Interface Remota @Remote


Usado para tornar disponvel os servios de um bean de sesso pra clientes em outras mquinas virtuais
Comunicao feita via RMI

Interface WebService @WebService


Beans armazenados em um servidor Web (com um container acoplado) e clientes em quaisquer localizaes
Comunicao feita via padra WSDL
30

Exemplos
@Local public interface MinhaInterface {...}
@Remote public interface MinhaInterfaceRemota [implements java.rmi.Remote] {...} @WebService public interface MinhaInterfaceWS {...}

31

Vrias interfaces de Negcio


Interface

InterfaceLocal Servios especficos

InterfaceRemote Servios especficos

InterfaceWS Servios especficos


32

Beans de Sesso com Estado


Mantm histrico da conversao com o cliente Gerenciamento do bean por parte do container diferente
Agora no existe mais pool de beans, e sim, um nico bean para cada cliente Justamente por causa do estado de conversao

Este relacionamento um para um feito automaticamente (automagicamente ) pelo container

33

Beans de Sesso com Estado


Cliente 1
Cliente 2 Cliente 3

Instncia1
Estado

Instncia 2
Estado

Instncia 3
Estado

34

Beans de Sesso com Estados


Algumas regras de programao adicionais
Variveis de instncia do bean utilizadas para armazenar o estado de conversao devem ser tipos primitivos Java ou Objetos Serializveis (implementam a interface java.io.Serializable) Como beans de Sesso com Estado no podem ser matindos em pool, isso pode gerar um acmulo desnecessrio. Para tanto, deve-se ter uma funcionalidade para trmino do servio (anotao @Remove) Os CallBacks adicionais dos Beans de Sesso com estado auxiliam a programao (@PostActivate e @PrePassivate)
35

Interfaces de Negcios para Beans de Sesso com Estado


Beans de Sesso com Estado aceitam somente as anotaes @Local e @Remote @WebService no suportado
Isso porque as requisies de WebServices utilizam o padro SOAP, que , por definio Stateless

Alm disso, pelo menos 1 mtodo deve ter a anotao @Remove (obrigatoriamente)
36

Clientes de Beans de Sesso


Basicamente qualquer POJO, Servlet, JSP, Swing GUI ou aplicao linha de comando podem ser clientes de Beans de sesso. Beans com endpoint @WebService podem ser, inclusive acessveis por clientes no Java (.net por exemplo) Foco maior: invocao local ou ainda remota (via RMI)
37

Clientes para Beans de Sesso


O cliente obtm uma referncia ao bean direta ou indiretamente do JNDI Todas as invocaes so feitas atravs de uma interface apropriada para este tipo de acesso O cliente realiza chamadas de mtodos quantas vezes forem necessrias No caso de um Bean com Estado, a ltima invocao deve ser o mtodo anotado com 38 @Remove

Um pequeno Exemplo
public class MeuCliente implements MinhaInterfaceCliente {
@EJB (name=NomeDeUmaInterfaceEspecifica) private Bean varBean

.... Mtodos que usam...

Esta anotao informa ao container que ser feita uma referncia a um Bean
Entretanto pode-se especificar um bean especfico (ex: a herana com tipos especializados Remote, WebService que definimos alguns slides atrs)
39

Mais Prticas de Programao


Escolher o tipo de Bean cuidadosamente
Beans de sesso com estado possuem um alto preo Para clientes Web, mais vantajoso, por exemplo, usar o HttpSession do que necessariamente beans com Estado

Escolher o tipo de interface cuidadosamente


Interfaces remotas usam rede compromete desempenho da aplicao Beans e clientes iro residir na mesma VM?
Se sim interface Local
40

Mais Prticas de Programao


Cuidado com a Injeo de Dependncias
Certifique-se de que no ir injetar um bean de sesso com estado em um bean de sesso sem estado ou servlet
Pelo fato dos beans de sesso sem estado so enviados para o pool gerenciado pelo container e tornam-se globais Isso pode gerar um acmulo desnecessrio de informaes, alm de possibilitar a manuteno de sesso para clientes diferentes possvel injetar beans de sesso com estado em outro bean 41 de sesso com estado ou uma aplicao cliente

Mais Prticas de Programao


Separar funcionalidades de LOG ou outro controle fora da camada de negcios
Deixa o cdigo mais fcil de ser mantido

Analise quais tipos de dados sero armazenados no histrico de conversao


prefervel usar tipos primitivos em relao a grandes objetos aninhados

No esquea do mtodo de Remoo


42

Uma aplicao Real (mais uma rs)


Sistema de Controle Universitrio
Anlise de requisitos Diagrama de classes Alguns diagramas de casos de uso Formas de acesso aos dados
Web, desktop, linha de comando

43

Mas e a Busca JNDI?


Ideal usar a busca para uso de beans com estado e servlets Em um servlet:
Context c = new InitialContext(); ServicosStatefull sf = (ServicosStatefull) c.lookup("java:global/TesteEJB/TesteEJBejb/ServicosStatefullBean!services.ServicosStatefull"); if (sf == null) response.sendRedirect("erro.jsp");

44

Padro do nome
java:global
Uma referncia a usar um nome dentro de um contexto global no Container

TesteEJB
Nome da aplicao que abriga o mdulo que contm os EJB

TesteEJB-ejb
Nome do Mdulo onde esto armazenados os EJB

Nome do Bean ! Nome da Interface

45