Mini-curso Gratuito Slide 1
Mini-curso Gratuito Introdução Enterprise Java Beans (EJB) 3.0 Slide 2
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 3
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 ões: : SCJA, SCJP, SCWCD, SCBCD, SCEA Hobby Favorito: : Futebol,, Praia, Filmes,, etc Slide 4
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 5
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 Slide 6
Plataforma Java EE Arquitetura em camadas Slide 7
Plataforma Java EE Containers Java EE Slide 8
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 9
Plataforma Java EE Servidores 100% compatíveis com a especificação Java EE 5 Slide 10
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 11
Conceitos Iniciais (EJB) Porque Precisamos de EJB? Cliente SOA / WS web Web Browser Swing / JavaFX Rede Local Regras de Negócio Java Web JVM + Container EE Slide 12
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 13
Conceitos Iniciais (EJB) Componentes de Negócio Compartilhados Cliente SOA / WS web Web Browser Swing / JavaFX Rede Local EJB Session Bean Java Web JVM + Container EE Slide 14
Conceitos Iniciais (EJB) Nível programação EJB Server / Container JRMP / RMI - IIOP TCP / IP Aplicação Apresentação Transporte rede javax.ejb java.rmi java.net Slide 15
Conceitos Iniciais (EJB) Infra Estrutura do Container EJB Segurança Controle Transacional Escalabilidade Config. de Ambiente EJB Session Bean Dados Legados Middleware de Mensagens Slide 16
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 Slide 17
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 18
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; Slide 19
Session Bean Stateless (sem estado) Período que uma instancia do EJB fica preso a um cliente Slide 20
Session Bean Stateless (sem estado) Slide 21
Session Bean Stateful (com estado) Período que uma instancia do EJB fica preso a um cliente Slide 22
Session Bean Stateful (com estado) Slide 23
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 24
Session Bean Local Interface Remote Interface Slide 25
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 26
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 27
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 28
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 29
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 30
Message-Driven Bean (MDB) Exemplo de um MDB Slide 31
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 32
Message-Driven Bean (MDB) Exemplo de um cliente JMS Slide 33
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 34
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 Slide 35
Java Persistence API Slide 36
Java Persistence API Entidades JPA Slide 37
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 38
Java Persistence API PersistenceContext Conjunto de objetos managed associados a um EntityManager EntityManager PersistenceContext obj5 NEW / DETACHED obj1 obj2 obj3 obj4 MANAGED MANAGED MANAGED MANAGED Slide 39
Java Persistence API Persistence Unit Uma unidade de persistência define um contexto de funcionamento para os EntityManagers Slide 40
Java Persistence API Exemplo de utilização de JPA Slide 41
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 42
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. A B C Slide 43
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. Serviço de Nomes ejb/componenteb jdbc/datasourcec lookups A C B Slide 44
Injeção de Dependência Exemplo Sem Injeção de Dependência Slide 45
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 46
Injeção de Dependência class ComponenteA { @EJB(name= ejb/componenteb ) InterfaceB b; @Resource(name= jdbc/datasourcec ) DataSource c; } Serviço de Nomes ejb/componenteb jdbc/datasourcec injeção A C B Slide 47
Injeção de Dependência Exemplo de Utilização Slide 48
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 49
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 50
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 51
Callback Methods Exemplo de Utilização Slide 52
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 53
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 54
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 55
Transações Exemplo de Utilização de CMT Slide 56
Transações Exemplo de Utilização de BMT Slide 57
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 58
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 59
Segurança Exemplo de Verificações de Segurança Declarativa Slide 60
Segurança Exemplo de Verificações de Segurança Programática Slide 61
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 62
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 63
Interceptors Exemplo de Classe Interceptor Slide 64
Interceptors Exemplo de Configuração para Interceptação Slide 65
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 66
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 67
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. Slide 68
Timer Exemplo de EJB Timer Slide 69
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 70
Conclusões 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 Descriptors Alta Burocracia Slide 71
Conclusões 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 Mais Mais Produtividade Produtividade Slide 72
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? Slide 73
Perguntas & Respostas Slide 74
Mini-curso Gratuito Agradecemos a presença! vofficejava.googlecode.com Slide 75