O documento apresenta um mini-curso gratuito sobre Enterprise Java Beans (EJB) 3.0. A agenda inclui tópicos como a plataforma Java EE, conceitos iniciais de EJB, session beans, message-driven beans, Java Persistence API e serviços disponíveis como injeção de dependência e transações. O curso será ministrado por um palestrante com 8 anos de experiência na área de desenvolvimento Java.
3. 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
Globalcode Slide 3
4. Palestrante
Rodrigo Cândido da Silva – rcandidosilva@gmail.com
Trabalha: Arquiteto Java / Instrutor
Experiência: 8 anos na área de desenvolvimento
de sistemas, trabalhando com Java desde 2001;
Certificações: SCJA, SCJP, SCWCD, SCBCD, SCEA
Hobby Favorito: Futebol, Praia, Filmes, etc
Globalcode Slide 4
5. 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
Globalcode Slide 5
6. 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 para
aplicaçõ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
Globalcode Slide 6
9. 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
…
Globalcode Slide 9
10. Plataforma Java EE
• Servidores 100% compatíveis com a especificação Java EE 5
Globalcode Slide 10
11. 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
Globalcode Slide 11
12. Conceitos Iniciais (EJB)
Porque Precisamos de EJB?
Cliente
SOA / WS
Regras de
Negócio
web
Swing /
JavaFX
Web Browser Java Web
JVM + Container EE
Rede Local
Globalcode Slide 12
13. 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.
Globalcode Slide 13
14. Conceitos Iniciais (EJB)
Componentes de Negócio Compartilhados
Cliente
SOA / WS
EJB
Session Bean
web
Swing /
JavaFX
Web Browser Java Web
JVM + Container EE
Rede Local
Globalcode Slide 14
15. Conceitos Iniciais (EJB)
javax.ejb
EJB Server / Container
Nível programação
JRMP / RMI - IIOP
TCP / IP java.rmi
Aplicação
Apresentação
Transporte
rede
java.net
Globalcode Slide 15
16. Conceitos Iniciais (EJB)
Infra Estrutura do Container
EJB
Controle Transacional
Escalabilidade
Segurança
EJB
Session Bean
Config. de Dados
Ambiente Legados
Middleware
de
Mensagens
Globalcode Slide 16
17. Conceitos Iniciais (EJB)
• 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
Globalcode Slide 17
18. 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
Globalcode Slide 18
19. Session Bean
• 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;
Globalcode Slide 19
20. Session Bean
• Stateless (sem estado)
Período que uma instancia do
EJB fica “preso” a um cliente
Globalcode Slide 20
21. Session Bean
• Stateless (sem estado)
Globalcode Slide 21
22. Session Bean
• Stateful (com estado)
Período que uma
instancia do EJB fica
“preso” a um cliente
Globalcode Slide 22
24. 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).
Globalcode Slide 24
26. 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
Globalcode Slide 26
27. 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;
Globalcode Slide 27
28. 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
Globalcode Slide 28
29. 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;
Globalcode Slide 29
30. 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;
Globalcode Slide 30
32. 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.
Globalcode Slide 32
34. 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
Globalcode Slide 34
35. 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 (ligthweigth
container)
• Uso de injeção de dependência ao invés de lookups JNDI
Globalcode Slide 35
42. 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
Globalcode Slide 42
43. 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.
B
A
C
Globalcode Slide 43
44. 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.
lookups
Serviço de Nomes
A
“ejb/componenteB”
“jdbc/dataSourceC”
B
C
Globalcode Slide 44
46. 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
Globalcode Slide 46
47. Injeção de Dependência
class ComponenteA {
@EJB(name=“ejb/componenteB”) InterfaceB b;
@Resource(name=“jdbc/dataSourceC”) DataSource c;
}
injeção
Serviço de Nomes
A
“ejb/componenteB”
“jdbc/dataSourceC”
B
C
Globalcode Slide 47
49. 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)
Globalcode Slide 49
50. 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
Globalcode Slide 50
51. 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
Globalcode Slide 51
53. 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
Globalcode Slide 53
54. 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
Globalcode Slide 54
55. 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
Globalcode Slide 55
56. Transações
• Exemplo de Utilização de CMT
Globalcode Slide 56
57. Transações
• Exemplo de Utilização de BMT
Globalcode Slide 57
58. 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
Globalcode Slide 58
59. 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.
Globalcode Slide 59
60. Segurança
• Exemplo de Verificações de Segurança Declarativa
Globalcode Slide 60
61. Segurança
• Exemplo de Verificações de Segurança Programática
Globalcode Slide 61
62. 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
Globalcode Slide 62
63. 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;
Globalcode Slide 63
64. Interceptors
• Exemplo de Classe Interceptor
Globalcode Slide 64
65. Interceptors
• Exemplo de Configuração para Interceptação
Globalcode Slide 65
66. 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
Globalcode Slide 66
67. 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.
Globalcode Slide 67
68. 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 que
identifique o target, ele deverá chamar o método responsável
pela execução da tarefa.
Globalcode Slide 68
69. Timer
• Exemplo de EJB Timer
Globalcode Slide 69
70. 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
Globalcode Slide 70
71. Conclusões
Problemas das especificações EJB < 3.0
• Muitas Interfaces ia
• Interface Home Remota e Local
c
ra
• Interfaces de Ciclo de Vida
c
• SessionBean ro
• EntityBean u
• MessageDrivenBean
B
lta
• Interface S.E.I. (Web Service JAX-RPC)
ADescriptors
• Deployment
Globalcode Slide 71
72. Conclusões
Objetivos da especificação JSR-220
• Simplificar o trabalho do desenvolvedor
d e
• Defaults programáticos
id a
• Meta-dados = Annotations javax.ejb.*
iv
• Configuration by Exception t
• Injeção de Dependência dmenos
u lookup )
•
ro(
Menos Interfaces Obrigatórias
• Interfaces Home
P
• Interfaces de
a isciclo de vida
M
Globalcode Slide 72
73. Conclusões
• 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?
Globalcode Slide 73