SlideShare une entreprise Scribd logo
1  sur  91
Dominando
Enterprise JavaBeans
    Usando a tecnologia See*Fix
O que é EJB?
Plataforma para construir aplicações corporativas
que são portáveis, reutilizáveis e escaláveis
Pode ser visto como “modelo de componentes” ou
“framework”
O programador não precisa reinventar ser viços
como transação, segurança, persitência automática
e outras.
Programador “ganha” ser viços de
infraestrutura.
Para o programador...
EJB é código Java executado em um
ambiente de execução especializado,
denominado de
EJB Contêiner
Este contêiner oferece serviços de
infraestrutura aos componentes
Serviço de persistência é oferecido pelo
persistence provider
Questões
EJB é uma biblioteca de classes?
EJB é o nome de uma API?
EJB oferece serviços de persistência?
Código que faz uso ou se beneficia de
EJB é executado como uma classe
convencional pela máquina virtual
Java?
Duas perspectivas


 Componentes EJB
 Framework EJB
Então EJB é...

AO MESMO TEMPO, conforme a
perspectiva adotada, tanto um
modelo de componentes
quanto
um framework
Componentes EJB


Nesta perspectiva componentes EJB são
partes de uma aplicação que
implementam lógica de negócio ou
código de persistência
Framework EJB


Nesta perspectiva Framework EJB é
a combinação de componentes EJB
e o contêiner onde são executados
Componente?
Nada extraordinário! Apenas um POJO
(plain old java object) + poderes especiais
Ou seja, um objeto Java “ordinário”,
“comum”, ... ACRESCIDO de poderes
Encapsula comportamento da aplicação,
clientes precisam conhecer apenas como
requisitar e o que esperar na saída
Quais os tipos?

 Session beans
 Message-driven beans
 Entities
Uso dos tipos

Session beans e
message-driven beans
(lógica de negócio)
Entity beans
(persistência)
Reutilização

Quem pode comprar o quê?
(pode ser reutilizado
tanto pelo sistema de
venda ao cliente quanto
pelo sistema de despacho
de mercadoria)
Framework EJB
Componentes ou EJBs
vivem ou são executados
em um contêiner
EJB contêiner e EBjs (ou componentes)
podem ser vistos como um framework
EJB contêiner oferece serviços úteis a
aplicações corporativas
Pode ser útil...
Armazenar e recuperar
informação de base relacional
Gerenciar transações
Implementar segurança
Processamento assíncrono
Integrar sistemas, ...
Mensagem

• Contêiner EJB oferece serviços aos
  componentes ou EJBs
• EBJs ou componentes não precisam
  implementá-los
Segurança
 Em vez de implementar serviços
 de segurança, você pode criar
 um componente (ou EJB) e
 executá-lo em um contêiner
 (onde a segurança será
 fornecida e configurada de
 forma declarativa)
Resumo
Contêiner EJB oferece serviços que não
precisam ser implementados pelos EJBs
  Transação, segurança,
  persistência, acesso remoto,
  interceptadores, timers, gerência
  de estado e troca de mensagens
Conclusão                 Transação, segurança,
                        persistência, acesso remoto,
                          interceptadores, timers,
                         gerência de estado e troca
                               de mensagens



Se a sua aplicação precisa de um ou
mais destes serviços, considere o emprego
de EJBs.
Como criar um EJB?

POJO + Anotações (Java 5) = EJB


                                  Objeto
      Objeto
                                    com
      comum
                                  poderes
O que são anotações?
Elementos que “marcam” código (classe,
método ou atributo) com um atributo
Forma declarativa de programar
Exemplo (Junit 4.0)
@Test
public void casoTrivial() {
  ...
}
Voltando a EJBs...
Anotações permitem adicionar serviços
declarativamente
Anotações são usadas para outras finalidade.
Por exemplo, descrever o tipo de EJB
   Session beans (@Stateless, @Stateful)
   Message-driven beans (@MessageDriven)
   Entity bean (@Entity)
Outro fator importante
Disponibilidade e escalabilidade são
atributos que todo “conceituado”
contêiner EJB oferece
Se necessário sua aplicação pode ser
executada em um cluster. Tudo o que
precisa ser feito é um pouco de
configuração.
Mais um fator relevante

Acerca de Service-oriented architecture
(SOA) e interoperabilidade
Seus componentes EJB podem ser
empregados para que sua aplicação
ofereça serviços via web services!
Especificação aberta


JSR-220: Enterprise JavaBeans 3.0
            http://jcp.org
Implementações open source
OpenEJB

Geronimo

Glassfish

JBoss

JFox

JOnAS
Implementações proprietárias

WebLogic

HP AS

IBM WebSphere

Macromedia JRun

Oracle e outras
O que isto significa?

 Muitos estão trabalhando para manter seus
produtos competitivos e, consequentemente,
EJB.
 Adicionalmente, você não está “preso” a um
fornecedor.
Aplicações corporativas


Como podem estar organizadas?
Arquitetura em camadas
Extraído do livro EJB 3 in Action
Onde EJB é útil?

Presentation layer (definitivamente não)
Business logic layer (SIM)
   Segurança, interceptadores, transações, ...
Persistence layer (SIM)
   Integração, persistência, cache
Tipo de EJB por camada
Presentation layer (não contemplada)
Business logic layer
   Session beans
   Message-driven beans
Persistence layer
   Entity beans
Críticas (às camadas clássicas)


  Enfatiza a modelagem dos processos do negócio
  Não adequadamente modela o domínio como objetos
  Lógica de negócio assemelha-se à aplicação procedural
  Componentes da persistência apenas retêm dados

Domain-driven design é uma alternativa!
Domain-driven design


Domain-Driven Design: Tackling
Complexity in the Heart of Software
Eric Evans, Addison-Wesley, 2003
O que é DDD?
Domínio deve ser modelado como objetos
Objetos devem conter lógica de negócio
Objetos não devem ser espelhos “burros” de registros
Objetos do domínio são entities em EJB 3
Exemplo: Requisito (entity) possui método
verificaConsistencia(), por exemplo.
Comentário

Patterns of Enterprise Application Architecture
Martin Fowler, Addison-Wesley, 2002

Lógica de negócio “complexa” em objetos do domínio é comumente
transferida para a “camada de serviço” ou “camada de aplicação”

Tal camada é similar à camada de lógica de negócio, mas bem mais “fina”

Session beans são usados para construir a camada de aplicação
Camada de aplicação - DDD
“Serviços relevantes para o negócio ou interação com outras
camadas de aplicação (outros sistemas).
É mantida fina, não contém regras de negócio ou
conhecimento, mas apenas coordena tarefas e delega trabalho
para a colaboração de objetos do domínio na camada
imediatamente abaixo. Não contém estado refletindo a situação
do negócio, mas pode ter estado para refletir o progresso de
uma tarefa para o usuário ou programa”.
Modelo resultante
Extraído de
Domain-Driven Design: Tackling Complexity in the
Heart of Software, Eric Evans, Addison-Wesley, 2003
Comparação




 Clássico    DDD
Tipos de EJBs

Session beans
Message-driven beans
Entity beans
OBSERVAÇÃO:
Cada tipo usa um subconjunto dos serviços EJB
Conforme o uso

Lógica de negócio
  Session beans
  Message-driven beans (MDBs)
Persistência
  Entity beans
Onde são executados?
Session beans and Message-driven beans (MDBs) vivem no
contêiner

Um contêiner gerencia e oferece serviços a session beans e MDBs

Entity beans são gerenciados pelo
persistence provider

Persistence provider é parte substituível de um contêiner

Esta parte é abstraída pela Java Persistence API (JPA)
Resumo

Uma implementção de EJB inclui duas partes:

  EJB contêiner
    Cuida de session beans e MDBs

  Persistence provider
    Cuida de entity beans (ou entities)
Session beans

Um session bean é chamado por um cliente para
executar uma operação de um negócio.
Exemplos:
  recuperar itens de um “carrinho de compra”
  efetuar alterações em um requisito
Há 2 tipos de session beans
Stateless session bean
 Não mantém estado

 Serviço completado em única chamada

 Extrair raiz quadrada


Stateful session bean
 Mantém estado entre chamadas

 “Carrinho de compras” em aplicações web (inserir, atualizar,...)
Observe que...
Um session bean (stateless ou stateful) pode ser
chamado de uma mesma JVM (local) ou de JVM
diferente daquela em que é executado (remotamente)
Chamada remota ocorre via Java RMI
Um stateless session bean pode ser exposto como
um web service
Um stateful session bean não pode ser exposto
como um web service
Em tempo...
Web service, conforme W3C,
“é um software projetado para
oferecer suporte de interação
entre máquinas sobre uma
rede”.
Web API que pode ser explorada sobre uma rede (por exemplo,
Em tempo...
Java RMI, segundo a Sun,
“permite que um programador
crie aplicações distribuídas onde
métodos de objetos Java remotos
podem ser invocados de outros
objetos Java, executados em
outras JVMs, possivelmente em
computadores distintos”.
Message-driven beans
          (MDBs)
Processam lógica de negócio à semelhança de session beans

Diferença:
não são chamados diretamente por um cliente
Quem os chama?
  São “disparados” por mensagens enviadas a um
  servidor de mensagens
Em tempo...
Servidor de mensagens, segundo a Sun,
“fornece um local centralizado para a troca
de informações por meio do envio e
recebimento de mensagens”.
Forma de trocar informações, na forma de mensagens,
entre programas
Há dois modelos: point-to-point e publish/subscribe
Servidores de mensagem
      (open source)
ActiveMQ
OpenJMS
JORAM
Open Message Queue
Somnifugi
UberMQ, Presumo, Hermes JMS, MantaRay, ...
Entity beans

Usado para implementar a camada de persistência
É função da persistência:
Automaticamente armazenar dados de objetos em bancos
de dados relacionais e, no sentido inverso, “dar vida” a
objetos a partir de registros de tabelas em tais bancos”
Visão Geral
Java Persistence API (JPA) gerencia entity beans
JPA automaticamente persiste objetos usando ORM
ORM (Object-Relational Mapping)
  ORM = mapeamento de dados em objetos para
  tabelas por meio de configuração
Sem ORM, o programador tem que escrever código de
“baixo nível” que usa JDBC, vejamos um exemplo...
Exemplo JDBC
    Sem conexões, sem exceções, ...
    Usando código como este, como persistir um objeto?
    Como recuperar um objeto?
    Como atualizar? E as referências para outros objetos?
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(quot;SELECT a, b, c FROM Table1quot;);

while (rs.next()) {
    int x = rs.getInt(quot;aquot;);
    String s = rs.getString(quot;bquot;);
    float f = rs.getFloat(quot;cquot;);
}
Exemplo JPA
Sem conexões, sem exceções, ...
Ao persistir Turma, todos os alunos correspondentes
são persistidos (1->N)
Atributos de turma são persistidos, objetos
referenciados por turma (List de Aluno) são persistidos,
os atributos de cada instância de Aluno são
persistidos, ...

                 em.persist(turma);
Em tempo...
JDBC API
 API de acesso a praticamente todo e qualquer dado
 armazenado em tabelas
 Padrão da indústria para conectividade de aplicações
 Java com bancos de dados
 Mesmo código é empregado para ter acesso a um
 grande número de SGBDs
JPA define:

Padrão para criação de configurações de como mapear
objetos para tabelas (ORM)
EntityManager API - API para execução de operações
CRUD (create, remove, update, delete)
Java Persistence Query Language (JPQL) para consultas
Recapitulando, JPA

Define como mapear objetos em tabelas (ORM)

Inclui uma API, EntityManager API para que
aplicações possam requisitar serviços de persistência
JPQL para realização de consultas (lembra SQL)
Relembrando...
EJB compreende:
  EJB contêiner
  Persistence provider
O persistence provider é “plugável”, “substituível”, ...
Ou seja, você pode optar pelo persistence provider que
considerar mais apropriado
Quais as implementações
      disponíveis?
Persistence providers:
  JBoss Hibernate
  Oracle TopLink
  BEA Kodo (uniu-se com Oracle?)
  DataNucleous (sucessor do JPOX)
  EclipseLink
Entity
Um Entity bean é um objeto a ser persistido
JPA usa entity beans para oferecer serviços de
persistência
Session beans modela processos
Entity beans modela conceitos do domínio
Entity beans são manipulados por processos do negócio
Session beans manipulam Entity beans
Perspectiva

     Session
                       Entity beans
      beans
                      (substantivos)
     (verbos)


 Não sobreve vive a     Estado é
crahses e shutdowns     persistido
Como isto funciona?

                 ORM       Entity




                   Persistence
Requisição via
                    provider
EntityManager
                                    CRUD
EntityManager
    package javax.persistence;

    public interface EntityManager { ... }




    Serviços de persistência são
oferecidos por meio desta interface!
O que um
    EntityManager faz?
  package javax.persistence;

  public interface EntityManager { ... }




Usa os metadados (ORM) de uma entidade
para inserir uma entidade na base de dados,
 atualizar, remover e recuperar entidades!
JPQL

Java Persistence Query Language é uma linguagem
como SQL
Consulta por entidades em uma base de dados!
Exemplo (obter todas as instâncias de Requisito)
SELECT r FROM Requisito r
Algumas questões
Precisamos de um persistence provider para executar um MDB?

Precisamos de um contêiner e um persistence provider para executar um stateful
session bean?

Precisamos de um contêiner para executar um stateless session bean e não é
necessário um persistence provider?

Um MDB é proposta para implementar a camada de lógica de negócio, assim como
session beans?

Entity beans é a proposta EJB 3 para implementar a camada de persistência?

Metadados ORM são geralmente fornecidos por meio de anotações Java?
Como funciona EJB 3?
      Alguns detalhes
Ambiente de execução
•   Classe Java é executada pela JVM
    public class X {
       public static void main(String[] args) {
       ...
       }
    }

•   Session bean ou Message-Driven Bean (MDB)
    exige contêiner EJB

•   Entity bean exige um persistence provider
Termos relevantes

• Java EE contêiner é um servidor de
  aplicações que oferece suporte a EJB 3, um
  contêiner web, outras EE APIs e serviços.
• Java EE contêiner, inclui um contêiner EJB
Contêiner Java EE




  Extraído de EJB 3 in Action
Contêiner EJB
• JVM gerencia transparentemente memória
• Contêiner EJB oferece vários serviços
  como transação, ...
• Ou seja,
  contêiner EJB = JVM estendida
• JVM estendida para executar EJBs
Enquanto...
• Na JVM você...
  java meupacote.MinhaClasse
• Em um contêiner EJB você faz uma
  implantação (ou deployment)

• Colocamos um componente EJB em um
  contêiner EJB, deployment, para que este
  componente possa usufruir dos serviços
  oferecidos pelo contêiner EJB
Após o deploy...

• Seu bean, ou seu componente EJB, ou seu
  session bean (seja stateful ou stateless) ou
  seu message-driven bean (MDB) pode ser
  usado pela sua aplicação
• Faz-se o deploy para que a funcionalidade
  possa ser usufruída por um cliente
Isto se parece com...
• Um objeto que implementa algumas
  funções e queremos que aplicações possam
  ter acesso a tais funções, possivelmente de
  outro ponto em uma rede
• Eu desejo criar objetos que ofereçam
  funcionalidades para todo um conjunto de
  aplicações
JPA é diferente
• Não usa um contêiner (é implementado
  por um persistence provider)
• Os serviços oferecidos (CRUD) são
  requisitados via interface
  EntityManager
• Cliente deve requisitar os serviços a tal
  interface
Observação

• Contêiner EJB e um persistence provider
  não precisam ser do mesmo fornecedor
• Lembre-se: o persistence provider é
  separável, destacável, substituível, “plugável”
  a um contêiner EJB
Importante
• Por que eu preciso de um contêiner EJB?
  PRODUTIVIDADE
• Todos os serviços oferecidos podem ser
  implementados em cada aplicação, embora
  de alto risco, alto custo, ...
• Para usufruir, você cria componentes e os
  implanta em um contêiner
Ou seja, ...
• EJB 3 resume-se a um conjunto de serviços
  que você pode implementar, mas seria
  oneroso
• Contêiner EJB e persistence provider
  implementa e oferece tais serviços
• Aprender EJB é aprender como usufruir
  destes serviços
Crítica a EJB 2

• Era muito complexo usufruir dos serviços
• Implementá-los era inviável, usá-los era
  difícil
• EJB 3 é uma “revolução” quanto ao uso dos
  serviços
Quais os serviços? (1/4)
•   Integração via injeção de dependência
    [session beans e MDBs]

•   Pooling. Contêiner cria um pool de instâncias
    [stateless session beans e MDBs]

•   Thread-safety. Todos os componentes EJB são
    thread-safe [session beans e MDBs]

•   Gerência de estado. Contêiner gerencia o
    estado de [stateful session beans]. Você pode
    guardar estado em tal tipo de bean como se fosse
    um objeto de aplicação convencional.
Quais os serviços? (2/4)
•   Troca de mensagens. Componentes que
    consomem mensagens sem detalhes de Java
    Messaging Service (JMS) API.
    [Message-driven beans]

•   Transações. Gerência declarativa de transações
    (sem código). Se o método termina normalmente,
    então é executado um commit, caso contrário, um
    rollback. [session beans e MDBs]

•   Segurança. Configurada (sem necessidade de
    código) [session beans]
Quais os serviços? (3/4)
•   Interceptadores. Forma “light” de AOP via
    configuração. [session beans e MDBs]

•   Acesso remoto. Componentes podem ser
    acessados remotamente (sem código adicional).
    Cliente acessa como se fosse local via injeção de
    dependência. [session beans]

•   Web services. Transparentemente torna
    componentes em serviços web. [stateless session
    beans]
Quais os serviços? (4/4)


•   Persistência. Alternativa ao oneroso uso de
    JDBC. [entity beans]

•   Caching e desempenho. JPA oferece serviços
    de caching e otimização de desempenho. [entity
    beans]
Óbvio


• Se os serviços apresentados anteriormente
  não são relevantes para a aplicação, então o
  uso de EJB 3 não é aconselhado.
Como é um bean?


• Já foi dito, uma classe com anotação
• A classe
  public class StringBean implements StringInterface {
      public String maiuscula(String entrada) {
          return entrada != null : entrada.toUpperCase() : “NULL”;
      }
  }
A “transformação”

• A classe devidamente anotada, agora um
  stateless session bean
  import javax.ejb.Stateless;

  @Stateless
  public class StringBean implements StringInterface {
      public String maiuscula(String entrada) {
          return entrada != null : entrada.toUpperCase() : “NULL”;
      }
  }
Como executar?

• Precisamos:
 • Compilar
 • Executar o deploy
 • Criar um cliente que faz uma requisição
• Fique tranquilo, faremos isto (não agora)
Como seria o cliente?
•   Cliente (usando injeção de dependência)

    import javax.ejb.EJB;
    ...

    @EJB
    public StringInterface strImpl;
    ...

    void metodo() {
        String x = strImpl.maiuscula(“teste”);
        // Neste ponto, x deve ser “TESTE”
    }
JPA (detalhe)
• JPA é uma solução de persistência para
  toda e qualquer aplicação Java
• Ou seja, não é necessário um contêiner
• Não é necessário um servidor de
  aplicações
• O persistence provider é suficiente
Importante


• Componentes EJB são POJOs
• Ou seja, podemos testá-los sem a presença
  de um contêiner
EJB x Spring


• São complementares (fuja da guerra!)
• Em muitos aspectos Spring facilita o acesso
  aos serviços oferecidos por EJB

Contenu connexe

Tendances

Base De Dados Documentais
Base De Dados DocumentaisBase De Dados Documentais
Base De Dados Documentaisjosecosme
 
Modelagem de casos de uso e diagramas de sequência
Modelagem de casos de uso e diagramas de sequênciaModelagem de casos de uso e diagramas de sequência
Modelagem de casos de uso e diagramas de sequênciaJorge Linhares
 
Ensinar e aprender com TIC
Ensinar e aprender com TICEnsinar e aprender com TIC
Ensinar e aprender com TICCarlos Pinheiro
 
Usabilidade - Uma introdução
Usabilidade - Uma introduçãoUsabilidade - Uma introdução
Usabilidade - Uma introduçãoErico Fileno
 
Uml Diagramas estruturais - parte escrita
Uml   Diagramas estruturais - parte escritaUml   Diagramas estruturais - parte escrita
Uml Diagramas estruturais - parte escritathaisedd
 
Personalização e customização no produto RM
Personalização e customização no produto RMPersonalização e customização no produto RM
Personalização e customização no produto RMTOTVS Connect
 
Modelo plano de_testes
Modelo plano de_testesModelo plano de_testes
Modelo plano de_testesIsaias Silva
 
Modelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de softwareModelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de softwareFrancilvio Roberto Alff
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosArthur Emanuel
 
Aula 1 - Gestão de Projetos
Aula 1 - Gestão de ProjetosAula 1 - Gestão de Projetos
Aula 1 - Gestão de ProjetosFernando Dantas
 
A Evolucao dos Processos de Desenvolvimento de Software
A Evolucao dos Processos de Desenvolvimento de SoftwareA Evolucao dos Processos de Desenvolvimento de Software
A Evolucao dos Processos de Desenvolvimento de SoftwareRobson Silva Espig
 
Google Docs: Aprendizagem Colaborativa
Google Docs: Aprendizagem ColaborativaGoogle Docs: Aprendizagem Colaborativa
Google Docs: Aprendizagem ColaborativaGrupo 5
 

Tendances (20)

Escrevendo Estórias do Usuário Eficazes
Escrevendo Estórias do Usuário EficazesEscrevendo Estórias do Usuário Eficazes
Escrevendo Estórias do Usuário Eficazes
 
Curso Java Avanzado 5 Ejb
Curso Java Avanzado   5 EjbCurso Java Avanzado   5 Ejb
Curso Java Avanzado 5 Ejb
 
Spring framework
Spring frameworkSpring framework
Spring framework
 
Cladograma - aprofundamento
Cladograma - aprofundamentoCladograma - aprofundamento
Cladograma - aprofundamento
 
Base De Dados Documentais
Base De Dados DocumentaisBase De Dados Documentais
Base De Dados Documentais
 
Modelagem de casos de uso e diagramas de sequência
Modelagem de casos de uso e diagramas de sequênciaModelagem de casos de uso e diagramas de sequência
Modelagem de casos de uso e diagramas de sequência
 
UML - Diagrama de Pacotes
UML - Diagrama de PacotesUML - Diagrama de Pacotes
UML - Diagrama de Pacotes
 
Diagramas de pacotes
Diagramas de pacotesDiagramas de pacotes
Diagramas de pacotes
 
Teste de Software - Introdução
Teste de Software - IntroduçãoTeste de Software - Introdução
Teste de Software - Introdução
 
Ensinar e aprender com TIC
Ensinar e aprender com TICEnsinar e aprender com TIC
Ensinar e aprender com TIC
 
Usabilidade - Uma introdução
Usabilidade - Uma introduçãoUsabilidade - Uma introdução
Usabilidade - Uma introdução
 
Uml Diagramas estruturais - parte escrita
Uml   Diagramas estruturais - parte escritaUml   Diagramas estruturais - parte escrita
Uml Diagramas estruturais - parte escrita
 
Personalização e customização no produto RM
Personalização e customização no produto RMPersonalização e customização no produto RM
Personalização e customização no produto RM
 
Indicadores e Métricas TI
Indicadores e Métricas TIIndicadores e Métricas TI
Indicadores e Métricas TI
 
Modelo plano de_testes
Modelo plano de_testesModelo plano de_testes
Modelo plano de_testes
 
Modelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de softwareModelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de software
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a Objetos
 
Aula 1 - Gestão de Projetos
Aula 1 - Gestão de ProjetosAula 1 - Gestão de Projetos
Aula 1 - Gestão de Projetos
 
A Evolucao dos Processos de Desenvolvimento de Software
A Evolucao dos Processos de Desenvolvimento de SoftwareA Evolucao dos Processos de Desenvolvimento de Software
A Evolucao dos Processos de Desenvolvimento de Software
 
Google Docs: Aprendizagem Colaborativa
Google Docs: Aprendizagem ColaborativaGoogle Docs: Aprendizagem Colaborativa
Google Docs: Aprendizagem Colaborativa
 

En vedette

MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesRodrigo Cândido da Silva
 
Os Melhores do Mundo, um comparativo entre Spring e EJB 3.0
Os Melhores do Mundo, um comparativo entre Spring e EJB 3.0Os Melhores do Mundo, um comparativo entre Spring e EJB 3.0
Os Melhores do Mundo, um comparativo entre Spring e EJB 3.0Rafael Carneiro
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBAdriano Teixeira de Souza
 
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)mauriciopel
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 

En vedette (9)

EJB 3.1
EJB 3.1EJB 3.1
EJB 3.1
 
Visão Geral de EJB 3.0
Visão Geral de EJB 3.0Visão Geral de EJB 3.0
Visão Geral de EJB 3.0
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
 
Os Melhores do Mundo, um comparativo entre Spring e EJB 3.0
Os Melhores do Mundo, um comparativo entre Spring e EJB 3.0Os Melhores do Mundo, um comparativo entre Spring e EJB 3.0
Os Melhores do Mundo, um comparativo entre Spring e EJB 3.0
 
Java ee com ejb 3
Java ee com ejb 3Java ee com ejb 3
Java ee com ejb 3
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJB
 
Introducao EJB 3
Introducao EJB 3Introducao EJB 3
Introducao EJB 3
 
ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)ApresentaçãO Ejb (Enterprise Java Beans)
ApresentaçãO Ejb (Enterprise Java Beans)
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 

Similaire à Dominando EJB com See*Fix

GUJavaSC - Desenvolvendo uma Aplicação com Java EE
GUJavaSC - Desenvolvendo uma Aplicação com Java EEGUJavaSC - Desenvolvendo uma Aplicação com Java EE
GUJavaSC - Desenvolvendo uma Aplicação com Java EERodrigo Cândido da Silva
 
Parte 1 Introducao
Parte 1 IntroducaoParte 1 Introducao
Parte 1 Introducaoguest7ff4e2
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesRafael Ponte
 
Java EE: soluções para o mundo corporativo
Java EE: soluções para o mundo corporativoJava EE: soluções para o mundo corporativo
Java EE: soluções para o mundo corporativoThiago Faria de Andrade
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e DependênciasWende Mendes
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"sbcars
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves PagesAmanda Luz
 
Enterprise JavaBeans
Enterprise JavaBeansEnterprise JavaBeans
Enterprise JavaBeanselliando dias
 
Maratona JBoss 2010 - JBoss-ESB
Maratona JBoss 2010 - JBoss-ESBMaratona JBoss 2010 - JBoss-ESB
Maratona JBoss 2010 - JBoss-ESBDextra
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCMichael Costa
 
Padrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEBPadrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEBRafael França
 

Similaire à Dominando EJB com See*Fix (20)

GUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EEGUJavaSC - Mini-curso Java EE
GUJavaSC - Mini-curso Java EE
 
GUJavaSC - Desenvolvendo uma Aplicação com Java EE
GUJavaSC - Desenvolvendo uma Aplicação com Java EEGUJavaSC - Desenvolvendo uma Aplicação com Java EE
GUJavaSC - Desenvolvendo uma Aplicação com Java EE
 
Parte 1 Introducao
Parte 1 IntroducaoParte 1 Introducao
Parte 1 Introducao
 
Palestra
PalestraPalestra
Palestra
 
Serra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EESerra StarTec 2013 - Java EE
Serra StarTec 2013 - Java EE
 
Anatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer FacesAnatomia do JSF, JavaServer Faces
Anatomia do JSF, JavaServer Faces
 
Java EE: soluções para o mundo corporativo
Java EE: soluções para o mundo corporativoJava EE: soluções para o mundo corporativo
Java EE: soluções para o mundo corporativo
 
Curso jsf
Curso jsfCurso jsf
Curso jsf
 
CDI -Contextos e Dependências
CDI -Contextos e DependênciasCDI -Contextos e Dependências
CDI -Contextos e Dependências
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
 
JavaServer Faces
JavaServer FacesJavaServer Faces
JavaServer Faces
 
Asp net mvc
Asp net mvcAsp net mvc
Asp net mvc
 
J530 15 workshop
J530 15 workshopJ530 15 workshop
J530 15 workshop
 
Resumo SCEA
Resumo SCEAResumo SCEA
Resumo SCEA
 
JSP - Java Serves Pages
JSP - Java Serves PagesJSP - Java Serves Pages
JSP - Java Serves Pages
 
Enterprise JavaBeans
Enterprise JavaBeansEnterprise JavaBeans
Enterprise JavaBeans
 
Maratona JBoss 2010 - JBoss-ESB
Maratona JBoss 2010 - JBoss-ESBMaratona JBoss 2010 - JBoss-ESB
Maratona JBoss 2010 - JBoss-ESB
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
Padrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEBPadrão Arquitetural MVC e suas aplicações para WEB
Padrão Arquitetural MVC e suas aplicações para WEB
 

Plus de Fábio Nogueira de Lucena

Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017Fábio Nogueira de Lucena
 
Engenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoEngenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoFábio Nogueira de Lucena
 
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Fábio Nogueira de Lucena
 

Plus de Fábio Nogueira de Lucena (20)

CSS
CSSCSS
CSS
 
Fundamentos de Programação Front-End
Fundamentos de Programação Front-EndFundamentos de Programação Front-End
Fundamentos de Programação Front-End
 
JavaScript: Aprendendo a programar
JavaScript: Aprendendo a programarJavaScript: Aprendendo a programar
JavaScript: Aprendendo a programar
 
HTML5: Primeiros Contatos (visão geral)
HTML5: Primeiros Contatos (visão geral)HTML5: Primeiros Contatos (visão geral)
HTML5: Primeiros Contatos (visão geral)
 
HTTP: Um Curso Básico
HTTP: Um Curso BásicoHTTP: Um Curso Básico
HTTP: Um Curso Básico
 
Apresentacao curso-2017-08-08
Apresentacao curso-2017-08-08Apresentacao curso-2017-08-08
Apresentacao curso-2017-08-08
 
Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017Jornada Goiana em Engenharia de Software 2017
Jornada Goiana em Engenharia de Software 2017
 
Arquétipos
ArquétiposArquétipos
Arquétipos
 
Introducao integracao
Introducao integracaoIntroducao integracao
Introducao integracao
 
Healthdb Visão Geral
Healthdb Visão GeralHealthdb Visão Geral
Healthdb Visão Geral
 
Engenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógicoEngenharia de Software - planejamento pedagógico
Engenharia de Software - planejamento pedagógico
 
Arquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADAArquitetura de Software EXPLICADA
Arquitetura de Software EXPLICADA
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Arquitetura software
Arquitetura softwareArquitetura software
Arquitetura software
 
Prontuário Eletrônico do Paciente
Prontuário Eletrônico do PacienteProntuário Eletrônico do Paciente
Prontuário Eletrônico do Paciente
 
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)Especificação por meio de exemplos (BDD, testes de aceitação, ...)
Especificação por meio de exemplos (BDD, testes de aceitação, ...)
 
Introducao
IntroducaoIntroducao
Introducao
 
Uml
UmlUml
Uml
 
Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
 
Orientação a Objetos (3)
Orientação a Objetos (3)Orientação a Objetos (3)
Orientação a Objetos (3)
 

Dominando EJB com See*Fix

  • 1. Dominando Enterprise JavaBeans Usando a tecnologia See*Fix
  • 2. O que é EJB? Plataforma para construir aplicações corporativas que são portáveis, reutilizáveis e escaláveis Pode ser visto como “modelo de componentes” ou “framework” O programador não precisa reinventar ser viços como transação, segurança, persitência automática e outras. Programador “ganha” ser viços de infraestrutura.
  • 3. Para o programador... EJB é código Java executado em um ambiente de execução especializado, denominado de EJB Contêiner Este contêiner oferece serviços de infraestrutura aos componentes Serviço de persistência é oferecido pelo persistence provider
  • 4. Questões EJB é uma biblioteca de classes? EJB é o nome de uma API? EJB oferece serviços de persistência? Código que faz uso ou se beneficia de EJB é executado como uma classe convencional pela máquina virtual Java?
  • 5. Duas perspectivas Componentes EJB Framework EJB
  • 6. Então EJB é... AO MESMO TEMPO, conforme a perspectiva adotada, tanto um modelo de componentes quanto um framework
  • 7. Componentes EJB Nesta perspectiva componentes EJB são partes de uma aplicação que implementam lógica de negócio ou código de persistência
  • 8. Framework EJB Nesta perspectiva Framework EJB é a combinação de componentes EJB e o contêiner onde são executados
  • 9. Componente? Nada extraordinário! Apenas um POJO (plain old java object) + poderes especiais Ou seja, um objeto Java “ordinário”, “comum”, ... ACRESCIDO de poderes Encapsula comportamento da aplicação, clientes precisam conhecer apenas como requisitar e o que esperar na saída
  • 10. Quais os tipos? Session beans Message-driven beans Entities
  • 11. Uso dos tipos Session beans e message-driven beans (lógica de negócio) Entity beans (persistência)
  • 12. Reutilização Quem pode comprar o quê? (pode ser reutilizado tanto pelo sistema de venda ao cliente quanto pelo sistema de despacho de mercadoria)
  • 13. Framework EJB Componentes ou EJBs vivem ou são executados em um contêiner EJB contêiner e EBjs (ou componentes) podem ser vistos como um framework EJB contêiner oferece serviços úteis a aplicações corporativas
  • 14. Pode ser útil... Armazenar e recuperar informação de base relacional Gerenciar transações Implementar segurança Processamento assíncrono Integrar sistemas, ...
  • 15. Mensagem • Contêiner EJB oferece serviços aos componentes ou EJBs • EBJs ou componentes não precisam implementá-los
  • 16. Segurança Em vez de implementar serviços de segurança, você pode criar um componente (ou EJB) e executá-lo em um contêiner (onde a segurança será fornecida e configurada de forma declarativa)
  • 17. Resumo Contêiner EJB oferece serviços que não precisam ser implementados pelos EJBs Transação, segurança, persistência, acesso remoto, interceptadores, timers, gerência de estado e troca de mensagens
  • 18. Conclusão Transação, segurança, persistência, acesso remoto, interceptadores, timers, gerência de estado e troca de mensagens Se a sua aplicação precisa de um ou mais destes serviços, considere o emprego de EJBs.
  • 19. Como criar um EJB? POJO + Anotações (Java 5) = EJB Objeto Objeto com comum poderes
  • 20. O que são anotações? Elementos que “marcam” código (classe, método ou atributo) com um atributo Forma declarativa de programar Exemplo (Junit 4.0) @Test public void casoTrivial() { ... }
  • 21. Voltando a EJBs... Anotações permitem adicionar serviços declarativamente Anotações são usadas para outras finalidade. Por exemplo, descrever o tipo de EJB Session beans (@Stateless, @Stateful) Message-driven beans (@MessageDriven) Entity bean (@Entity)
  • 22. Outro fator importante Disponibilidade e escalabilidade são atributos que todo “conceituado” contêiner EJB oferece Se necessário sua aplicação pode ser executada em um cluster. Tudo o que precisa ser feito é um pouco de configuração.
  • 23. Mais um fator relevante Acerca de Service-oriented architecture (SOA) e interoperabilidade Seus componentes EJB podem ser empregados para que sua aplicação ofereça serviços via web services!
  • 24. Especificação aberta JSR-220: Enterprise JavaBeans 3.0 http://jcp.org
  • 26. Implementações proprietárias WebLogic HP AS IBM WebSphere Macromedia JRun Oracle e outras
  • 27. O que isto significa? Muitos estão trabalhando para manter seus produtos competitivos e, consequentemente, EJB. Adicionalmente, você não está “preso” a um fornecedor.
  • 29. Arquitetura em camadas Extraído do livro EJB 3 in Action
  • 30. Onde EJB é útil? Presentation layer (definitivamente não) Business logic layer (SIM) Segurança, interceptadores, transações, ... Persistence layer (SIM) Integração, persistência, cache
  • 31. Tipo de EJB por camada Presentation layer (não contemplada) Business logic layer Session beans Message-driven beans Persistence layer Entity beans
  • 32. Críticas (às camadas clássicas) Enfatiza a modelagem dos processos do negócio Não adequadamente modela o domínio como objetos Lógica de negócio assemelha-se à aplicação procedural Componentes da persistência apenas retêm dados Domain-driven design é uma alternativa!
  • 33. Domain-driven design Domain-Driven Design: Tackling Complexity in the Heart of Software Eric Evans, Addison-Wesley, 2003
  • 34. O que é DDD? Domínio deve ser modelado como objetos Objetos devem conter lógica de negócio Objetos não devem ser espelhos “burros” de registros Objetos do domínio são entities em EJB 3 Exemplo: Requisito (entity) possui método verificaConsistencia(), por exemplo.
  • 35. Comentário Patterns of Enterprise Application Architecture Martin Fowler, Addison-Wesley, 2002 Lógica de negócio “complexa” em objetos do domínio é comumente transferida para a “camada de serviço” ou “camada de aplicação” Tal camada é similar à camada de lógica de negócio, mas bem mais “fina” Session beans são usados para construir a camada de aplicação
  • 36. Camada de aplicação - DDD “Serviços relevantes para o negócio ou interação com outras camadas de aplicação (outros sistemas). É mantida fina, não contém regras de negócio ou conhecimento, mas apenas coordena tarefas e delega trabalho para a colaboração de objetos do domínio na camada imediatamente abaixo. Não contém estado refletindo a situação do negócio, mas pode ter estado para refletir o progresso de uma tarefa para o usuário ou programa”.
  • 37. Modelo resultante Extraído de Domain-Driven Design: Tackling Complexity in the Heart of Software, Eric Evans, Addison-Wesley, 2003
  • 39. Tipos de EJBs Session beans Message-driven beans Entity beans OBSERVAÇÃO: Cada tipo usa um subconjunto dos serviços EJB
  • 40. Conforme o uso Lógica de negócio Session beans Message-driven beans (MDBs) Persistência Entity beans
  • 41. Onde são executados? Session beans and Message-driven beans (MDBs) vivem no contêiner Um contêiner gerencia e oferece serviços a session beans e MDBs Entity beans são gerenciados pelo persistence provider Persistence provider é parte substituível de um contêiner Esta parte é abstraída pela Java Persistence API (JPA)
  • 42. Resumo Uma implementção de EJB inclui duas partes: EJB contêiner Cuida de session beans e MDBs Persistence provider Cuida de entity beans (ou entities)
  • 43. Session beans Um session bean é chamado por um cliente para executar uma operação de um negócio. Exemplos: recuperar itens de um “carrinho de compra” efetuar alterações em um requisito
  • 44. Há 2 tipos de session beans Stateless session bean Não mantém estado Serviço completado em única chamada Extrair raiz quadrada Stateful session bean Mantém estado entre chamadas “Carrinho de compras” em aplicações web (inserir, atualizar,...)
  • 45. Observe que... Um session bean (stateless ou stateful) pode ser chamado de uma mesma JVM (local) ou de JVM diferente daquela em que é executado (remotamente) Chamada remota ocorre via Java RMI Um stateless session bean pode ser exposto como um web service Um stateful session bean não pode ser exposto como um web service
  • 46. Em tempo... Web service, conforme W3C, “é um software projetado para oferecer suporte de interação entre máquinas sobre uma rede”. Web API que pode ser explorada sobre uma rede (por exemplo,
  • 47. Em tempo... Java RMI, segundo a Sun, “permite que um programador crie aplicações distribuídas onde métodos de objetos Java remotos podem ser invocados de outros objetos Java, executados em outras JVMs, possivelmente em computadores distintos”.
  • 48. Message-driven beans (MDBs) Processam lógica de negócio à semelhança de session beans Diferença: não são chamados diretamente por um cliente Quem os chama? São “disparados” por mensagens enviadas a um servidor de mensagens
  • 49. Em tempo... Servidor de mensagens, segundo a Sun, “fornece um local centralizado para a troca de informações por meio do envio e recebimento de mensagens”. Forma de trocar informações, na forma de mensagens, entre programas Há dois modelos: point-to-point e publish/subscribe
  • 50. Servidores de mensagem (open source) ActiveMQ OpenJMS JORAM Open Message Queue Somnifugi UberMQ, Presumo, Hermes JMS, MantaRay, ...
  • 51. Entity beans Usado para implementar a camada de persistência É função da persistência: Automaticamente armazenar dados de objetos em bancos de dados relacionais e, no sentido inverso, “dar vida” a objetos a partir de registros de tabelas em tais bancos”
  • 52. Visão Geral Java Persistence API (JPA) gerencia entity beans JPA automaticamente persiste objetos usando ORM ORM (Object-Relational Mapping) ORM = mapeamento de dados em objetos para tabelas por meio de configuração Sem ORM, o programador tem que escrever código de “baixo nível” que usa JDBC, vejamos um exemplo...
  • 53. Exemplo JDBC Sem conexões, sem exceções, ... Usando código como este, como persistir um objeto? Como recuperar um objeto? Como atualizar? E as referências para outros objetos? Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(quot;SELECT a, b, c FROM Table1quot;); while (rs.next()) { int x = rs.getInt(quot;aquot;); String s = rs.getString(quot;bquot;); float f = rs.getFloat(quot;cquot;); }
  • 54. Exemplo JPA Sem conexões, sem exceções, ... Ao persistir Turma, todos os alunos correspondentes são persistidos (1->N) Atributos de turma são persistidos, objetos referenciados por turma (List de Aluno) são persistidos, os atributos de cada instância de Aluno são persistidos, ... em.persist(turma);
  • 55. Em tempo... JDBC API API de acesso a praticamente todo e qualquer dado armazenado em tabelas Padrão da indústria para conectividade de aplicações Java com bancos de dados Mesmo código é empregado para ter acesso a um grande número de SGBDs
  • 56. JPA define: Padrão para criação de configurações de como mapear objetos para tabelas (ORM) EntityManager API - API para execução de operações CRUD (create, remove, update, delete) Java Persistence Query Language (JPQL) para consultas
  • 57. Recapitulando, JPA Define como mapear objetos em tabelas (ORM) Inclui uma API, EntityManager API para que aplicações possam requisitar serviços de persistência JPQL para realização de consultas (lembra SQL)
  • 58. Relembrando... EJB compreende: EJB contêiner Persistence provider O persistence provider é “plugável”, “substituível”, ... Ou seja, você pode optar pelo persistence provider que considerar mais apropriado
  • 59. Quais as implementações disponíveis? Persistence providers: JBoss Hibernate Oracle TopLink BEA Kodo (uniu-se com Oracle?) DataNucleous (sucessor do JPOX) EclipseLink
  • 60. Entity Um Entity bean é um objeto a ser persistido JPA usa entity beans para oferecer serviços de persistência Session beans modela processos Entity beans modela conceitos do domínio Entity beans são manipulados por processos do negócio Session beans manipulam Entity beans
  • 61. Perspectiva Session Entity beans beans (substantivos) (verbos) Não sobreve vive a Estado é crahses e shutdowns persistido
  • 62. Como isto funciona? ORM Entity Persistence Requisição via provider EntityManager CRUD
  • 63. EntityManager package javax.persistence; public interface EntityManager { ... } Serviços de persistência são oferecidos por meio desta interface!
  • 64. O que um EntityManager faz? package javax.persistence; public interface EntityManager { ... } Usa os metadados (ORM) de uma entidade para inserir uma entidade na base de dados, atualizar, remover e recuperar entidades!
  • 65. JPQL Java Persistence Query Language é uma linguagem como SQL Consulta por entidades em uma base de dados! Exemplo (obter todas as instâncias de Requisito) SELECT r FROM Requisito r
  • 66. Algumas questões Precisamos de um persistence provider para executar um MDB? Precisamos de um contêiner e um persistence provider para executar um stateful session bean? Precisamos de um contêiner para executar um stateless session bean e não é necessário um persistence provider? Um MDB é proposta para implementar a camada de lógica de negócio, assim como session beans? Entity beans é a proposta EJB 3 para implementar a camada de persistência? Metadados ORM são geralmente fornecidos por meio de anotações Java?
  • 67. Como funciona EJB 3? Alguns detalhes
  • 68. Ambiente de execução • Classe Java é executada pela JVM public class X { public static void main(String[] args) { ... } } • Session bean ou Message-Driven Bean (MDB) exige contêiner EJB • Entity bean exige um persistence provider
  • 69. Termos relevantes • Java EE contêiner é um servidor de aplicações que oferece suporte a EJB 3, um contêiner web, outras EE APIs e serviços. • Java EE contêiner, inclui um contêiner EJB
  • 70. Contêiner Java EE Extraído de EJB 3 in Action
  • 71. Contêiner EJB • JVM gerencia transparentemente memória • Contêiner EJB oferece vários serviços como transação, ... • Ou seja, contêiner EJB = JVM estendida • JVM estendida para executar EJBs
  • 72. Enquanto... • Na JVM você... java meupacote.MinhaClasse • Em um contêiner EJB você faz uma implantação (ou deployment) • Colocamos um componente EJB em um contêiner EJB, deployment, para que este componente possa usufruir dos serviços oferecidos pelo contêiner EJB
  • 73. Após o deploy... • Seu bean, ou seu componente EJB, ou seu session bean (seja stateful ou stateless) ou seu message-driven bean (MDB) pode ser usado pela sua aplicação • Faz-se o deploy para que a funcionalidade possa ser usufruída por um cliente
  • 74. Isto se parece com... • Um objeto que implementa algumas funções e queremos que aplicações possam ter acesso a tais funções, possivelmente de outro ponto em uma rede • Eu desejo criar objetos que ofereçam funcionalidades para todo um conjunto de aplicações
  • 75. JPA é diferente • Não usa um contêiner (é implementado por um persistence provider) • Os serviços oferecidos (CRUD) são requisitados via interface EntityManager • Cliente deve requisitar os serviços a tal interface
  • 76. Observação • Contêiner EJB e um persistence provider não precisam ser do mesmo fornecedor • Lembre-se: o persistence provider é separável, destacável, substituível, “plugável” a um contêiner EJB
  • 77. Importante • Por que eu preciso de um contêiner EJB? PRODUTIVIDADE • Todos os serviços oferecidos podem ser implementados em cada aplicação, embora de alto risco, alto custo, ... • Para usufruir, você cria componentes e os implanta em um contêiner
  • 78. Ou seja, ... • EJB 3 resume-se a um conjunto de serviços que você pode implementar, mas seria oneroso • Contêiner EJB e persistence provider implementa e oferece tais serviços • Aprender EJB é aprender como usufruir destes serviços
  • 79. Crítica a EJB 2 • Era muito complexo usufruir dos serviços • Implementá-los era inviável, usá-los era difícil • EJB 3 é uma “revolução” quanto ao uso dos serviços
  • 80. Quais os serviços? (1/4) • Integração via injeção de dependência [session beans e MDBs] • Pooling. Contêiner cria um pool de instâncias [stateless session beans e MDBs] • Thread-safety. Todos os componentes EJB são thread-safe [session beans e MDBs] • Gerência de estado. Contêiner gerencia o estado de [stateful session beans]. Você pode guardar estado em tal tipo de bean como se fosse um objeto de aplicação convencional.
  • 81. Quais os serviços? (2/4) • Troca de mensagens. Componentes que consomem mensagens sem detalhes de Java Messaging Service (JMS) API. [Message-driven beans] • Transações. Gerência declarativa de transações (sem código). Se o método termina normalmente, então é executado um commit, caso contrário, um rollback. [session beans e MDBs] • Segurança. Configurada (sem necessidade de código) [session beans]
  • 82. Quais os serviços? (3/4) • Interceptadores. Forma “light” de AOP via configuração. [session beans e MDBs] • Acesso remoto. Componentes podem ser acessados remotamente (sem código adicional). Cliente acessa como se fosse local via injeção de dependência. [session beans] • Web services. Transparentemente torna componentes em serviços web. [stateless session beans]
  • 83. Quais os serviços? (4/4) • Persistência. Alternativa ao oneroso uso de JDBC. [entity beans] • Caching e desempenho. JPA oferece serviços de caching e otimização de desempenho. [entity beans]
  • 84. Óbvio • Se os serviços apresentados anteriormente não são relevantes para a aplicação, então o uso de EJB 3 não é aconselhado.
  • 85. Como é um bean? • Já foi dito, uma classe com anotação • A classe public class StringBean implements StringInterface { public String maiuscula(String entrada) { return entrada != null : entrada.toUpperCase() : “NULL”; } }
  • 86. A “transformação” • A classe devidamente anotada, agora um stateless session bean import javax.ejb.Stateless; @Stateless public class StringBean implements StringInterface { public String maiuscula(String entrada) { return entrada != null : entrada.toUpperCase() : “NULL”; } }
  • 87. Como executar? • Precisamos: • Compilar • Executar o deploy • Criar um cliente que faz uma requisição • Fique tranquilo, faremos isto (não agora)
  • 88. Como seria o cliente? • Cliente (usando injeção de dependência) import javax.ejb.EJB; ... @EJB public StringInterface strImpl; ... void metodo() { String x = strImpl.maiuscula(“teste”); // Neste ponto, x deve ser “TESTE” }
  • 89. JPA (detalhe) • JPA é uma solução de persistência para toda e qualquer aplicação Java • Ou seja, não é necessário um contêiner • Não é necessário um servidor de aplicações • O persistence provider é suficiente
  • 90. Importante • Componentes EJB são POJOs • Ou seja, podemos testá-los sem a presença de um contêiner
  • 91. EJB x Spring • São complementares (fuja da guerra!) • Em muitos aspectos Spring facilita o acesso aos serviços oferecidos por EJB

Notes de l'éditeur