Post on 06-Apr-2018
8/3/2019 EJB3 - Aula1 - Intro
1/45
EJB 3 Introduo
Prof. Dr. Francisco Isidro Massettofrancisco.isidro@techschool.com.br
8/3/2019 EJB3 - Aula1 - Intro
2/45
2
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
8/3/2019 EJB3 - Aula1 - Intro
3/45
3
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!
8/3/2019 EJB3 - Aula1 - Intro
4/45
4
EJB O que isso
O interessante do EJB poder efetivamente terelementos para que as regras do negcio sejam
efetivamente separadas da infra-estrutura(armazenamento, controle do ciclo de vida dosobjetos)
Importante ressaltar que todos os EJB executam emuma mquina virtual especializada - container
8/3/2019 EJB3 - Aula1 - Intro
5/45
5
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
8/3/2019 EJB3 - Aula1 - Intro
6/45
6
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, apenasatravs de uso de uma anotao
Evita a escrita excessiva de cdigo para realizar umlookup de um objeto no container
8/3/2019 EJB3 - Aula1 - Intro
7/45
7
EJB como um componente
No fundo o EJB um POJO (Plain-Old Java Object) comalguns recursos adicionais no visveis aplicao
Propsito de encapsular de forma eficaz o comportamentoda 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
8/3/2019 EJB3 - Aula1 - Intro
8/45
8
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/3/2019 EJB3 - Aula1 - Intro
9/45
9
O Container EJB
Container Java EE
WebContainer EJBContainer Prov. Persist
Pgina JSP
Componente JSF
Credit Check EJB
Cart EJB
Entidade Cliente
Entidade Catlogo
8/3/2019 EJB3 - Aula1 - Intro
10/45
10
Arquiteturas de aplicaes
Aplicaes em camadas so extremamente teis portornarem 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 epermite um maior grau de interoperabilidade entre objetos
8/3/2019 EJB3 - Aula1 - Intro
11/45
11
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
8/3/2019 EJB3 - Aula1 - Intro
12/45
12
Beans de Sesso
Implementam as regras do negcio da aplicao
Fornecem, como j vistos, elementos para o controle deconcorrncia,
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
8/3/2019 EJB3 - Aula1 - Intro
13/45
13
Beans Dirigidos por Mensagens
Tambm implementam regras de negcio, porm de formaassncrona
Para sistemas com uma maior necessidade de robustez ouque 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 seremgeradas as notas fiscais
8/3/2019 EJB3 - Aula1 - Intro
14/45
14
Entidades
Beans podem ter o contedo de seus atributosarmazenados em tabelas de um banco de dados
Possibilidade de se mapear relacionamentos entretabelas 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
8/3/2019 EJB3 - Aula1 - Intro
15/45
15
Entidades
2 elementos principais Entidade
API EntityManager Entidades
Contm os dados a serem armazenados e os respectivosmapeamentos 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)
8/3/2019 EJB3 - Aula1 - Intro
16/45
EJB 3 A Injeo de Dependncia
Facilitando o uso de recursos
8/3/2019 EJB3 - Aula1 - Intro
17/45
17
A Injeo de Dependncia
Em geral, quando se busca adicionar recursos emum 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 realizaesta busca e isso torna a programao muito maisrpida, pois toda a responsabilidade delegada aocontainer
8/3/2019 EJB3 - Aula1 - Intro
18/45
18
A injeo de Dependncia
Busca
EJB Busca JNDI
Recursos
Beans
Injeo de
Dependncia
EJB
Recursos
BeansContainer Injeo
8/3/2019 EJB3 - Aula1 - Intro
19/45
19
A Injeo de Dependncia
No modelo JNDI, sempre que o programador necessitar deum recurso ou bean adicional, ele deve realizar toda acodificao 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
8/3/2019 EJB3 - Aula1 - Intro
20/45
Beans de Sesso
Como implementar as regras do negciode forma simples e eficiente
8/3/2019 EJB3 - Aula1 - Intro
21/45
21
Beans de Sesso
Stateless No preciso armazenar nenhum histrico de execuo
Statefull A a conversa outra
O questionamento bsico para diferenciar um e outro anecessidade de se armazenar informaes
temporariamente por um tempo determinado e depoisconsolidar estas informaes Exemplo: carrinho de compras, lista de alunos com notas
8/3/2019 EJB3 - Aula1 - Intro
22/45
22
Ciclo de Vida dos Beans deSesso
O Cliente obtmuma referncia
do bean
O Container invoca
newInstance noObjeto do bean desesso
Injeta algumadependncia no
bean
Bean est poronto
para serinvocado
8/3/2019 EJB3 - Aula1 - Intro
23/45
23
O Ciclo de vida dos Beans
Depois que o container determina que uma instncia no maisnecessria, 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
8/3/2019 EJB3 - Aula1 - Intro
24/45
24
Anotaes de CallBacks
Anotao Tipo de Bean
@PostConstruct Beans de Sesso com Estado esem Estado
@PreDestroy Beans de Sesso com Estado esem Estado
@PostActivate Somente Beans com Estado
@PrePassivate Somente Beans com Estado
8/3/2019 EJB3 - Aula1 - Intro
25/45
25
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)
8/3/2019 EJB3 - Aula1 - Intro
26/45
26
As regras de programao
Todo Bean de sesso deve ter, pelo menos 1 interface denegcios
A classe do Bean de Sesso (que implementa a interface)deve ser concreta
A classe deve ter um construtor sem argumentos (mesmoque este construtor chame outro com argumentos)
Um Bean de sesso pode ser uma subclasse de outro Beande Sesso ou de um outro POJO
8/3/2019 EJB3 - Aula1 - Intro
27/45
27
As regras de programao
Os mtodos de negcio e os mtodos de CallBack do ciclode vida podem ser definidos na prpria classe do bean ouem 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 comearcom ejb para evitar conflitos com a gerao de cdigofeita em tempo de execuo pelo container
8/3/2019 EJB3 - Aula1 - Intro
28/45
28
Beans de Sesso sem Estado
Anotao @Stateless
Idia bsica: o container pode (e realmente o faz)
gerenciar um conjunto de Beans stateless demaneira transparente e isso torna o modelo deprogramao mais eficiente
Todo gerenciamento do ciclo de vida dos Beans ficaalheio programao da aplicao
8/3/2019 EJB3 - Aula1 - Intro
29/45
29
Beans de Sesso sem Estado
Cliente 1
Cliente 3
Cliente 2
Pool de Beans
Instncia1
Instncia 2
8/3/2019 EJB3 - Aula1 - Intro
30/45
30
Tipos e Interface para uso comBeans 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
8/3/2019 EJB3 - Aula1 - Intro
31/45
31
Exemplos
@Local
public interface MinhaInterface
{...}
@Remote
public interface MinhaInterfaceRemota
[implements java.rmi.Remote]
{...}
@WebService
public interface MinhaInterfaceWS
{...}
8/3/2019 EJB3 - Aula1 - Intro
32/45
32
Vrias interfaces de Negcio
Interface
InterfaceLocal
Serviosespecficos
InterfaceRemote
Serviosespecficos
InterfaceWS
Serviosespecficos
8/3/2019 EJB3 - Aula1 - Intro
33/45
33
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
8/3/2019 EJB3 - Aula1 - Intro
34/45
34
Beans de Sesso com Estado
Cliente 1
Cliente 3
Cliente 2
Instncia1
Instncia 2
Instncia 3
Estado
Estado
Estado
8/3/2019 EJB3 - Aula1 - Intro
35/45
35
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 interfacejava.io.Serializable)
Como beans de Sesso com Estado no podem ser matindos empool, 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 estadoauxiliam a programao (@PostActivate e @PrePassivate)
8/3/2019 EJB3 - Aula1 - Intro
36/45
36
Interfaces de Negcios paraBeans de Sesso com Estado
Beans de Sesso com Estado aceitam somente asanotaes @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 aanotao @Remove (obrigatoriamente)
8/3/2019 EJB3 - Aula1 - Intro
37/45
37
Clientes de Beans de Sesso
Basicamente qualquer POJO, Servlet, JSP, SwingGUI 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)
8/3/2019 EJB3 - Aula1 - Intro
38/45
38
Clientes para Beans de Sesso
O cliente obtm uma referncia ao bean direta ouindiretamente do JNDI
Todas as invocaes so feitas atravs de umainterface 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
@Remove
8/3/2019 EJB3 - Aula1 - Intro
39/45
39
Um pequeno Exemplo
public class MeuCliente implements MinhaInterfaceCliente
{
@EJB (name=NomeDeUmaInterfaceEspecifica)
private Bean varBean
.... Mtodos que usam...
} Esta anotao informa ao container queser feita uma referncia a um Bean
Entretanto pode-se especificar um beanespecfico (ex: a herana com tiposespecializados Remote, WebService -que definimos alguns slides atrs)
8/3/2019 EJB3 - Aula1 - Intro
40/45
40
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 oHttpSession 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
8/3/2019 EJB3 - Aula1 - Intro
41/45
41
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 ouservlet 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 clientesdiferentes
possvel injetar beans de sesso com estado em outro bean
de sesso com estado ou uma aplicao cliente
8/3/2019 EJB3 - Aula1 - Intro
42/45
42
Mais Prticas de Programao
Separar funcionalidades de LOG ou outro controlefora 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 grandesobjetos aninhados
No esquea do mtodo de Remoo
8/3/2019 EJB3 - Aula1 - Intro
43/45
43
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
8/3/2019 EJB3 - Aula1 - Intro
44/45
44
Mas e a Busca JNDI?
Ideal usar a busca para uso de beans com estado eservlets
Em um servlet:Context c = new InitialContext();
ServicosStatefull sf = (ServicosStatefull)
c.lookup("java:global/TesteEJB/TesteEJB-
ejb/ServicosStatefullBean!services.ServicosStatefull");if (sf == null)
response.sendRedirect("erro.jsp");
8/3/2019 EJB3 - Aula1 - Intro
45/45
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 osEJB
TesteEJB-ejb Nome do Mdulo onde esto armazenados os EJB