Introducao EJB 3
-
Upload
rodrigo-candido-da-silva -
Category
Technology
-
view
16.263 -
download
0
description
Transcript of Introducao EJB 3
Slide 1Globalcode
Mini-curso Gratuito
Slide 2Globalcode
IntroduIntroduççãoão
Enterprise Java Beans (EJB) 3.0Enterprise Java Beans (EJB) 3.0
Mini-curso Gratuito
Slide 3Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 4Globalcode
Rodrigo Rodrigo CândidoCândido dada Silva Silva –– [email protected]@gmail.com
TrabalhaTrabalha: : ArquitetoArquiteto Java / Java / InstrutorInstrutor
ExperiênciaExperiência: : 8 8 anosanos nana áárearea de de desenvolvimentodesenvolvimento
de de sistemassistemas, , trabalhandotrabalhando com Java com Java desdedesde 2001;2001;
CertificaCertificaççõesões: : SCJA, SCJP, SCWCD, SCBCD, SCEASCJA, SCJP, SCWCD, SCBCD, SCEA
Hobby Hobby FavoritoFavorito: : FutebolFutebol, Praia, , Praia, FilmesFilmes, etc, etc
Palestrante
Slide 5Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 6Globalcode
Plataforma Java EE
• Suporte ao desenvolvimento de aplicações “enterprise”
� Aplicações distribuídas, seguras, escaláveis, de alta disponibilidade e com
baixo custo de manutenção
• Plataforma para desenvolvimento de componentes paraaplicações em multicamadas
� Enterprise JavaBeans
� JavaServer Pages
� Servlets
• Componentes “rodam” em um servidor Java EE
� Gerencia e oferece serviços de alto nível aos componentes por meio de
Containers
� container � segue uma especificação padrão
Slide 7Globalcode
Plataforma Java EE
• Arquitetura em camadas
Slide 8Globalcode
Plataforma Java EE
• Containers Java EE
Slide 9Globalcode
Plataforma Java EE
• Serviços oferecidos pelos containers:
� Escalabilidade
� Gestão de memória, ciclo de vida de objetos e estado de objetos
� Conexões, Transações, Serviço de nomes
� Segurança
� Tolerância a falhas
� Integração
� WebServices
� Clustering
� Alta disponibilidade
� Confiabilidade
� …
Slide 10Globalcode
Plataforma Java EE
• Servidores 100% compatíveis com a especificação Java EE 5
Slide 11Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 12Globalcode
Rede LocalJVM + Container EE
Regras de Negócio
Java Web
Swing / JavaFX
Web Browser
web
Cliente SOA / WS
Porque Precisamos de EJB?
Conceitos Iniciais (EJB)
Slide 13Globalcode
Conceitos Iniciais (EJB)
• Plataforma para criação de aplicações de negócio portáveis,
robustas e reutilizáveis usando a linguagem de programação Java;
• Componente para construir aplicações sem precisar reinventar uma série de recursos e serviços (transações, segurança,
persistência);
• Modelo de alto nível para objetos distribuídos (computação
distribuída);
• Padrão de mercado para componentes de negócio;
• É o CICS do Java.
Slide 14Globalcode
Rede LocalJVM + Container EE
EJB Session Bean
Java Web
Swing / JavaFX
Web Browser
web
Cliente SOA / WS
Componentes de Negócio Compartilhados
Conceitos Iniciais (EJB)
Slide 15Globalcode
TCP / IP
Aplicação
Apresentação
Transporte
rede
EJB Server / Container
JRMP / RMI - IIOP
java.net
java.rmi
javax.ejb
Nív
elpro
gra
mação
Conceitos Iniciais (EJB)
Slide 16Globalcode
Seg
ura
nça
Co
ntr
ole
Tra
nsacio
nal
Escala
bilid
ad
e
Dados Legados
EJB
EJBSession Bean
Config. de Ambiente
Middleware de
Mensagens
Conceitos Iniciais (EJB)
Infra Estrutura do Container
Slide 17Globalcode
• Tipos de EJB:
�Session Bean
� Representa um simples processo de negócio
�Message-Driven Bean
� Trabalha de forma assíncrona
�Entity Bean
� Representa um objeto persistente
� Definido pela especificação JPA
Conceitos Iniciais (EJB)
Slide 18Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 19Globalcode
• Representa um processo de negócio (regra de negócio);
• Pode ser do tipo Stateless ou Stateful;
• Stateless
� Não mantém estado de conversão com o cliente;
� Não tem compromisso de manter uma sessão;
� Não devemos utilizar atributos de negócio, somente atributos técnicos em
cache;
� É um EJB econômico;
• Stateful
� Mantém estado de conversão com o cliente;
� Cada cliente terá uma instancia do EJB exclusiva, desde a criação até a
remoção;
� Podemos ter atributos de negócio com métodos getters e setters;
Session Bean
Slide 20Globalcode
Session Bean
• Stateless (sem estado)
Período que uma instancia do EJB fica “preso” a um cliente
Slide 21Globalcode
Session Bean
• Stateless (sem estado)
Slide 22Globalcode
Session Bean
• Stateful (com estado)
Período que umainstancia do EJB fica“preso” a um cliente
Slide 23Globalcode
Session Bean
• Stateful (com estado)
Slide 24Globalcode
Session Bean
• Clientes acessam o Session Bean através de uma interface Java
simples (POJI);
• Métodos (serviços) são publicados através desta interface;
• A interface deve ser implementada pela classe do Bean;
• Tipos de Interfaces
� Local (@Local)
� Somente acesso local (mesma JVM);
� Cliente pode ser um componente Web ou outro EJB;
� Localização não é transparente (não suporta clusterização).
� Remota (@Remote)
� Suporta acesso remoto (fora da JVM);
� Cliente pode ser um componente Web, outro EJB ou aplicação desktop;
� Transparência de localização (suporta clusterização).
Slide 25Globalcode
Session Bean
• Local Interface
• Remote Interface
Slide 26Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 27Globalcode
Message-Driven Bean (MDB)
• EJB que é acionado de forma assíncrona;
• Trabalha totalmente vinculado ao conceito de
utilização de um serviço de mensagens;
• Utiliza a API do Java Message Service (JMS) em
conjunto com Session Beans;
• Facilita a quebra de acoplamento entre o cliente e o
destino;
• Serviços de mensagens introduzem novos conceitos de
arquiteturas e aumenta a confiabilidade da solução;
Slide 28Globalcode
Message-Driven Beans (MDB)
• Vejamos o comparativo de uma chamada síncrona, e uma
chamada assíncrona utilizando um serviço de mensagens
Síncrono Assíncrono
Slide 29Globalcode
Message-Driven Beans (MDB)
• Existem dois tipos de destinos JMS
� Point-to-point (queue): uma mensagem enviada para a fila será consumida
apenas por um cliente;
� Publish-subscriber (topic): uma mensagem pode ser recepcionada por
múltiplos clientes;
Slide 30Globalcode
Message-Driven Beans (MDB)
• MDB fica anexado a uma fila ou tópico;
• Ao receber uma mensagem, o EJB será acionado para consumir a
mensagem, o container chama o método onMessage(...) do EJB;
• Vantagens:
� Limitar o número de EJBs consumidores, evitando super-consumo do servidor;
� Requisições dos usuários são armazenadas em filas e processadas conforme
capacidade do servidor;
Slide 31Globalcode
Message-Driven Bean (MDB)
• Exemplo de um MDB
Slide 32Globalcode
Message-Driven Bean (MDB)
• Como enviar uma mensagem
� Configurar um repositório de conexões;
� Abrir uma nova conexão;
� Criar uma sessão de envio;
� Criar um produtor de mensagens
associado a um destino;
� Criar uma nova mensagem;
� Solicitar ao produtor enviar a
mensagem para o destino associado.
Slide 33Globalcode
Message-Driven Bean (MDB)
• Exemplo de um cliente JMS
Slide 34Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 35Globalcode
Java Persistence API
• Primeira especificação (padrão) de mapeamento de objetos Java para base de dados relacional� Integração com outros frameworks
� Hibernate é uma implementação de JPA
� TopLink Essencials é uma implementação de JPA (RI)
• POJO (Plain Old Java Objects) ���� Entidades� Mapeamento via metadados (annotation Java 5)
• Pode ser utilizado fora de containres EJBs (ligthweigthcontainer)
• Uso de injeção de dependência ao invés de lookups JNDI
Slide 36Globalcode
Java Persistence API
Slide 37Globalcode
Java Persistence API
• Entidades JPA
Slide 38Globalcode
Java Persistence API
• EntityManager (javax.persistence)
�Gerencia o ciclo de vida das entidades
(B) find / query(C) persist(D) clear / serialização(E) merge(F) remove
Slide 39Globalcode
Java Persistence API
• PersistenceContext
�Conjunto de objetos “managed” associados a um
EntityManager
EntityManager PersistenceContext
obj1 obj4obj2 obj3obj5
MANAGED MANAGED MANAGED MANAGED
NEW / DETACHED
Slide 40Globalcode
Java Persistence API
• Persistence Unit
�Uma unidade de persistência define um contexto de
funcionamento para os EntityManagers
Slide 41Globalcode
Java Persistence API
• Exemplo de utilização de JPA
Slide 42Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 43Globalcode
Injeção de Dependência
• Mecanismo de “injeção” de recursos necessários a um
componente de forma automática
�Sem a presença de instruções explícitas para acessar o
recurso
• Exemplo:
�O componente de negócios A depende do componente de
negócios B e do pool de conexões C.
AB
C
Slide 44Globalcode
Injeção de Dependência
• Sem injeção de dependência:
�Código fonte do componente A contém instruções para
“buscar” o componente B e o recurso C.
A
B
C
Serviço de Nomes
“ejb/componenteB”
“jdbc/dataSourceC”
lookups
Slide 45Globalcode
Injeção de Dependência
• Exemplo Sem Injeção de Dependência
Slide 46Globalcode
Injeção de Dependência
• Com injeção de dependência
�Código do componente A não busca recursos e outros
componentes
�Devemos declarar as dependências de componentes e
recursos nos atributos ou métodos setters do componente A
�Container (Java EE) interpreta as dependências declaradas no
componente A e “injeta” os recursos e componentes
necessários
Slide 47Globalcode
Injeção de Dependência
A
B
C
Serviço de Nomes
“ejb/componenteB”
“jdbc/dataSourceC”
injeção
class ComponenteA {
@EJB(name=“ejb/componenteB”) InterfaceB b;
@Resource(name=“jdbc/dataSourceC”) DataSource c;
}
Slide 48Globalcode
Injeção de Dependência
• Exemplo de Utilização
Slide 49Globalcode
Injeção de Dependência
�Quem pode receber injeção ?
� EJB, Interceptor
� Servlet, Filter, *Listener, JSP Tag Handler
� JSF Managed Beans
� Endpoints JAX-WS e Handlers
�O que pode ser injetado ?
� Referências a EJBs e a Web Services
� DataSource JDBC
� Destination e ConnectionFactory JMS
� UserTransaction
� EntityManager (JPA)
Slide 50Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 51Globalcode
Callback Methods
• Anotações para tratamento de eventos nas fases do ciclo de
vida dos EJBs;
• Gerenciados pelo container Java EE;
• Substitui os antigos métodos definidos nas interfaces do EJB
2.x e implementados pela classe EJB;
� @PostConstruct
� Após o container criar uma nova instância de um EJB
� @PrePassivate
� Imediatamente antes do EJB sofrer o processo de passivação
� @PostActivate
� Imediatamente depois do EJB sofrer o processo de ativação
� @PreDestroy
� Antes do EJB ser destruído pelo container
Slide 52Globalcode
Callback Methods
• Exemplo de Utilização
Slide 53Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 54Globalcode
Transações
• São unidades de trabalho com propriedades ACID
�Atomicidade
�Consistência
� Isolamento
�Durabilidade
• São gerenciadas pelo container EJB (JTA)
• Transações nos EJB podem ser
�Container Managed Transaction (CMT) - (default)
� Definida declarativamente
�Bean Managed Transaction (BMT)
� Programada através UserTransaction API
Slide 55Globalcode
Transações
• Configurações Transacionais para CMT
�Required (default)� Sempre deve rodar dentro de uma transação
�RequiresNew� Sempre deve rodar dentro de sua própria transação
�Mandatory� Deve ser chamado dentro de uma transação já iniciada
�Supports� Utiliza transação somente se uma transação já estiver acontecendo
�Not Supported� Executa sem nenhuma transação
�Never
� Não poderá ser executado caso esteja acontecendo uma transação
Slide 56Globalcode
Transações
• Exemplo de Utilização de CMT
Slide 57Globalcode
Transações
• Exemplo de Utilização de BMT
Slide 58Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 59Globalcode
Segurança
• Java EE suporta todos os níveis de segurança;
• Utiliza o Java Authentication and Autorization Service (JAAS);
• Consiste no mecanismo de autenticação e autorização de
usuários, baseado em uma identidade e roles (perfil de acesso)
associados.
Slide 60Globalcode
Segurança
• Exemplo de Verificações de Segurança Declarativa
Slide 61Globalcode
Segurança
• Exemplo de Verificações de Segurança Programática
Slide 62Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 63Globalcode
Interceptors
• Novidade introduzida com o EJB 3.0;
• Permite que um código customizado seja aplicado para um EJB;
• Utiliza conceitos de programação orientada à aspectos (AOP);
• Intercepta a chamada do método do EJB para executar um
código intermediário;
• Utiliza anotações plugáveis nos EJBs;
• Podem ser configurados no próprio Bean ou em classes
externas;
• Exemplos de utilização
� Auditoria;
� Logging;
� Segurança customizada;
Slide 64Globalcode
Interceptors
• Exemplo de Classe Interceptor
Slide 65Globalcode
Interceptors
• Exemplo de Configuração para Interceptação
Slide 66Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 67Globalcode
Timers
• Desde a versão 1.4 foi criado o serviço de timer para os
componentes EJB;
• Permite a programação de tarefas para serem executadas em
um determinado horário (processos agendados);
• Equivalente a CRONTAB, Quartz, etc;
• É gerenciado pelo container Java EE;
• Os tipos de agendamentos suportados são:
� Tarefa para execução única (one-shot);
� Tarefas periódicas com taxa fixa (fixed-rate);
• Exemplos de utilização de agendamento
� Realizar backups periódicos;
� Rodar a folha de pagamento;
� Enviar e-mails de expiração de senhas para usuários.
Slide 68Globalcode
Timers
• Para criar o agendamento, o EJB deve se registrar no serviço de
timer, criando um novo timer;
• Além disto o EJB precisa definir um método Timeout
responsável por realizar a executação da tafera (utilizando
@Timeout);
• O serviço de timer irá gerenciar o agendamento, e uma vez queidentifique o target, ele deverá chamar o método responsável
pela execução da tarefa.
Slide 69Globalcode
Timer
• Exemplo de EJB Timer
Slide 70Globalcode
Agenda
Plataforma Java EE
Conceitos Iniciais (EJB)
Session Bean
Message-Driven Bean (MDB)
Java Persistence API (JPA)
Serviços Disponíveis
Injeção de Dependência
Callback Methods
Transações
Segurança
Interceptors
Timers
Conclusões
Perguntas e Respostas
Slide 71Globalcode
Problemas das especificações EJB < 3.0
• Muitas Interfaces• Interface Home Remota e Local• Interfaces de Ciclo de Vida
• SessionBean• EntityBean• MessageDrivenBean
• Interface S.E.I. (Web Service JAX-RPC)
• Deployment DescriptorsA
lta
B
u
ro
c
ra
c
ia
A
lta
B
u
ro
c
ra
c
ia
A
lta
B
u
ro
c
ra
c
ia
A
lta
B
u
ro
c
ra
c
ia
Conclusões
Slide 72Globalcode
Objetivos da especificação JSR-220
• Simplificar o trabalho do desenvolvedor• Defaults programáticos
• Meta-dados = Annotations javax.ejb.*
• Configuration by Exception
• Injeção de Dependência ( menos lookup )
• Menos Interfaces Obrigatórias
• Interfaces Home• Interfaces de ciclo de vida
M
a
is
P
r
o
d
u
t
iv
id
a
d
e
M
a
is
P
r
o
d
u
t
iv
id
a
d
e
M
a
is
P
r
o
d
u
t
iv
id
a
d
e
M
a
is
P
r
o
d
u
t
iv
id
a
d
e
Conclusões
Slide 73Globalcode
• EJB’s:
�Componentes distribuídos que podem rodar em vários
servidores;
�Clustering;
�Persistência automática utilizando JPA;
�Suporte transacional;
�Segurança declarativa;
�Programação AOP;
�Serviços de agendamento de tarefas;
�Tunning de Threads e entidades de banco;
�Otimização de memória e threads;
• E você ainda esta pensando se vale a pena?
Conclusões
Slide 74Globalcode
Perguntas & Respostas
Slide 75Globalcode
Mini-curso Gratuito
Agradecemos a presença!
vofficejava.googlecode.com