globalcode – open4education 1 ejb3 interceptors ricardo limonta
TRANSCRIPT
Globalcode – Open4Education1
EJB3 Interceptors
Ricardo Limonta
Globalcode – Open4Education2
Agenda
• Introdução• Conceitos de AOP• Implementando Interceptors• Exemplos• Melhores Práticas• Novidades na versão 3.1• Perguntas & Comentários
Globalcode – Open4Education3
Palestrante
Ricardo LimontaRicardo Limonta
Arquiteto JEE / Instrutor Java VOfficeArquiteto JEE / Instrutor Java VOffice
12 anos na área de sistemas, atuando em projetos 12 anos na área de sistemas, atuando em projetos nacionais e offshore, médio e grande portes;nacionais e offshore, médio e grande portes;
Certificações: Certificações: SCJP 5 / SCEA.SCJP 5 / SCEA.
Hobby Favorito: Hobby Favorito: SurfSurf
Globalcode – Open4Education4
Introdução
• Recurso introduzido na versão EJB 3.0;
• Utiliza o recurso AOP (Aspect-oriented programming).
• Permite a criação de métodos que interceptam a chamada a métodos de negócio e eventos de ciclo de vida dos beans;
• Podem ser configurados em beans de sessão e beans baseados em mensagens.
Globalcode – Open4Education5
Conceitos de AOP
Aspect-Orientation Programming: É um paradigma de programação que permite uma separação de código orientada à importância (separation of concerns).
Conceito criado por Gregor Kiczales e sua equipe da Xerox.
O Intuito principal na utilização de AOP é separar claramente a responsabilidade dos objetos e diminuir massivamente a quantidade de funcionalidades secundárias repetitivas.
Globalcode – Open4Education6
Conceitos de AOP
PedidoBean
pedido: Pedido
Insert()update()delete()log()
Pedido
numero: Stringdata: Datevalor: Double
Globalcode – Open4Education7
Conceitos de AOP
PedidoBean
pedido: Pedido
Insert()update()delete()
Pedido
numero: Stringdata: Datevalor: Double
Logger
log()
Globalcode – Open4Education8
Conceitos de AOP
PedidoBean
pedido: Pedido
Insert()update()delete()
Logger
log()
Combinação
Globalcode – Open4Education9
Conceitos de AOP
Cenário:
1. Um componente deve ser capaz de incluir pedidos;
2. Deve existir uma aprovação sobre o valor do pedido em relação ao perfil do usuário logado no sistema;
3. Deve existir um log de transação, as informações de usuário, ação executada e tempo de execução devem ser gravados;
Globalcode – Open4Education10
Conceitos de AOP public Pedido insert(Pedido pedido) throws BusinessException { long startTime = System.currentTimeMillis(); try{ //verifica se o usuário tem perfil para aprovação de pedidos. if ((pedido.getValor() > 10000.0d) && (! principal.getName().equals("supervisor"))){ throw new BusinessException("O usuário não tem permissão ..."); }
//implementa as regras de negócio… save(pedido);
} catch (Exception e) { throw new BusinessException(e); } finally { long endTime = System.currentTimeMillis() - startTime; System.out.println("insert() - " + endTime + " - " + principal.getName()); } return pedido; }
Globalcode – Open4Education11
Conceitos de AOP
@Interceptors(LogInterceptor.class) public Pedido insert(Pedido pedido) throws BusinessException {
//verifica se o usuário tem perfil para aprovação de pedidos. if ((pedido.getValor() > 10000.0d) && (! principal.getName().equals("supervisor"))){ throw new BusinessException("O usuário não tem permissão ..."); }
//implementa as regras de negócio… save(pedido);
return pedido; }
Globalcode – Open4Education12
Conceitos de AOP
@Interceptors(values={LogInterceptor.class, PedidoAlcadaInterceptor.class}) public Pedido insert(Pedido pedido) throws BusinessException {
//implementa as regras de negócio… save(pedido);
return pedido; }
Globalcode – Open4Education13
Interceptors
• São objetos capazes de interceptar chamadas a métodos de negócio ou eventos de ciclo de vida dos beans;
• “Rodam” na mesma pilha de processamento do bean, no mesmo contexto de transação e segurança, do método requisitado.
• Acesso a todos recursos do container JEE (@…);
• Funcionam como uma extensão do EJB.
Globalcode – Open4Education14
Interceptors
@AroundInvoke public Object <Name>(InvocationContext invocation) throws Exception {
… }
Interceptador para de métodos de negócio…
Globalcode – Open4Education15
Interceptors
public class LogInterceptor { @AroundInvoke public Object logger(InvocationContext invocation) throws Exception { long startTime = System.currentTimeMillis(); try { return invocation.proceed(); } finally { long endTime = System.currentTimeMillis() - startTime; System.out.println("Method: " + invocation.getMethod().getName() + " - " + "Values: " + invocation.getParameters()[0] + " - " + "Time: " + endTime + " - " + "User: " + ctx.getCallerPrincipal().getName()); } }}
Exemplo: LogInterceptor.java
Globalcode – Open4Education16
Interceptors
@<Callback-Annotation> public void <Name>(InvocationContext invocation) {
… }
Interceptando eventos dos beans…
Exemplo:
@PostConstruct public void <Name>(InvocationContext invocation) {
… }
Globalcode – Open4Education17
Interceptors
InvocationContext: Contém as informações do objeto interceptado.
Principais métodos:
Método DescriçãoObject getTarget() Retorna a referência do EJBMethod getMethod() Retorna um objeto que faz
referência ao método invocado
Object[] getParameters() Lista de parâmetros do método
Map getContextData() Mapa de objetos que percorre todo o ciclo de invocação do método
Object proceed() Invoca o interceptor seguinte ou o método de negócio do bean
Globalcode – Open4Education18
Interceptors
Client PedidoBeanInsert(pedido)
Chamada a um bean sem interceptor…
Globalcode – Open4Education19
Combinação
Interceptors
Client PedidoBeanInterceptor A
Interceptor B
Interceptor C
Insert(pedido)
Chamada a um bean com interceptors…
Globalcode – Open4Education20
Exemplos
Show Demo…
Globalcode – Open4Education21
Melhores Práticas
- Procure sempre identificar necessidades genéricas que se faça necessário o uso de interceptors. Logs, Handlers, Validadores, etc.
- Crie interceptors com baixa complexidade;
- Documentação é tudo !
Globalcode – Open4Education22
Novidades
@Interceptors(LogInterceptor.class) public @Interface Auditoria{}
@Auditoria public void delete(Long idPedido) {
… }
Definir sua própria anotação de interceptors…
Forma de uso:
Globalcode – Open4Education23
Perguntas & Comentários
?