Mini-curso Gratuito




Globalcode             Slide 1
Mini-curso Gratuito


                       Introdução
             Enterprise Java Beans (EJB) 3.0




Globalcode                                     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

Globalcode                                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: SCJA, SCJP, SCWCD, SCBCD, SCEA

             Hobby Favorito: Futebol, Praia, Filmes, etc


Globalcode                                                    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

Globalcode                                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



Globalcode                                                                           Slide 6
Plataforma Java EE
  • Arquitetura em camadas




Globalcode                   Slide 7
Plataforma Java EE
  • Containers Java EE




Globalcode               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
             …




Globalcode                                                                     Slide 9
Plataforma Java EE
  • Servidores 100% compatíveis com a especificação Java EE 5




Globalcode                                                 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

Globalcode                                Slide 11
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
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
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
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
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
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
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
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
Session Bean
  • Stateless (sem estado)




                             Período que uma instancia do
                             EJB fica “preso” a um cliente




Globalcode                                                   Slide 20
Session Bean
  • Stateless (sem estado)




Globalcode                   Slide 21
Session Bean
  • Stateful (com estado)




                              Período que uma
                            instancia do EJB fica
                            “preso” a um cliente



Globalcode                                     Slide 22
Session Bean
  • Stateful (com estado)




Globalcode                  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).




Globalcode                                                                            Slide 24
Session Bean
  • Local Interface




  • Remote Interface




Globalcode             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

Globalcode                                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;



Globalcode                                          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




Globalcode                                                  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;




Globalcode                                                                      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;




Globalcode                                                                            Slide 30
Message-Driven Bean (MDB)
  • Exemplo de um MDB




Globalcode                  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.




Globalcode                                            Slide 32
Message-Driven Bean (MDB)
  • Exemplo de um cliente JMS




Globalcode                      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

Globalcode                                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


Globalcode                                                              Slide 35
Java Persistence API




Globalcode             Slide 36
Java Persistence API
  • Entidades JPA




Globalcode             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




Globalcode                                                                  Slide 38
Java Persistence API
  • PersistenceContext
             Conjunto de objetos “managed” associados a um
             EntityManager




             EntityManager         PersistenceContext


                  obj5             obj1     obj2      obj3      obj4
                NEW / DETACHED
                                  MANAGED   MANAGED   MANAGED   MANAGED




Globalcode                                                                Slide 39
Java Persistence API
  • Persistence Unit
             Uma unidade de persistência define um contexto de
             funcionamento para os EntityManagers




Globalcode                                                       Slide 40
Java Persistence API
  • Exemplo de utilização de JPA




Globalcode                         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

Globalcode                                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.

                                             B
                             A
                                             C


Globalcode                                                            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.



                                      lookups
             Serviço de Nomes
                                                 A
               “ejb/componenteB”
               “jdbc/dataSourceC”


                                                       B
                                         C

Globalcode                                                         Slide 44
Injeção de Dependência
  • Exemplo Sem Injeção de Dependência




Globalcode                               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




Globalcode                                                           Slide 46
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
Injeção de Dependência
  • Exemplo de Utilização




Globalcode                  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)




Globalcode                                                    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

Globalcode                                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




Globalcode                                                                   Slide 51
Callback Methods
  • Exemplo de Utilização




Globalcode                  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

Globalcode                                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



Globalcode                                                     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



Globalcode                                                                          Slide 55
Transações
  • Exemplo de Utilização de CMT




Globalcode                         Slide 56
Transações
  • Exemplo de Utilização de BMT




Globalcode                         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

Globalcode                                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.




Globalcode                                                     Slide 59
Segurança
  • Exemplo de Verificações de Segurança Declarativa




Globalcode                                             Slide 60
Segurança
  • Exemplo de Verificações de Segurança Programática




Globalcode                                         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

Globalcode                                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;


Globalcode                                                  Slide 63
Interceptors
  • Exemplo de Classe Interceptor




Globalcode                          Slide 64
Interceptors
  • Exemplo de Configuração para Interceptação




Globalcode                                       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

Globalcode                                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.



Globalcode                                                          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.




Globalcode                                                    Slide 68
Timer
  • Exemplo de EJB Timer




Globalcode                 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

Globalcode                                Slide 70
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
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
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
Perguntas & Respostas




Globalcode               Slide 74
Mini-curso Gratuito


              Agradecemos a presença!




             vofficejava.googlecode.com



Globalcode                                Slide 75

Introducao EJB 3

  • 1.
  • 2.
    Mini-curso Gratuito Introdução Enterprise Java Beans (EJB) 3.0 Globalcode Slide 2
  • 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
  • 7.
    Plataforma Java EE • Arquitetura em camadas Globalcode Slide 7
  • 8.
    Plataforma Java EE • Containers Java EE Globalcode Slide 8
  • 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
  • 23.
    Session Bean • Stateful (com estado) Globalcode Slide 23
  • 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
  • 25.
    Session Bean • Local Interface • Remote Interface Globalcode Slide 25
  • 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
  • 31.
    Message-Driven Bean (MDB) • Exemplo de um MDB Globalcode Slide 31
  • 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
  • 33.
    Message-Driven Bean (MDB) • Exemplo de um cliente JMS Globalcode Slide 33
  • 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
  • 36.
  • 37.
    Java Persistence API • Entidades JPA Globalcode Slide 37
  • 38.
    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 Globalcode Slide 38
  • 39.
    Java Persistence API • PersistenceContext Conjunto de objetos “managed” associados a um EntityManager EntityManager PersistenceContext obj5 obj1 obj2 obj3 obj4 NEW / DETACHED MANAGED MANAGED MANAGED MANAGED Globalcode Slide 39
  • 40.
    Java Persistence API • Persistence Unit Uma unidade de persistência define um contexto de funcionamento para os EntityManagers Globalcode Slide 40
  • 41.
    Java Persistence API • Exemplo de utilização de JPA Globalcode Slide 41
  • 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
  • 45.
    Injeção de Dependência • Exemplo Sem Injeção de Dependência Globalcode Slide 45
  • 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
  • 48.
    Injeção de Dependência • Exemplo de Utilização Globalcode Slide 48
  • 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
  • 52.
    Callback Methods • Exemplo de Utilização Globalcode Slide 52
  • 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 Problemasdas 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 daespecificaçã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
  • 74.
  • 75.
    Mini-curso Gratuito Agradecemos a presença! vofficejava.googlecode.com Globalcode Slide 75