EJB

7,292 views

Published on

EJB 3 (introdução)

2 Comments
18 Likes
Statistics
Notes
No Downloads
Views
Total views
7,292
On SlideShare
0
From Embeds
0
Number of Embeds
58
Actions
Shares
0
Downloads
641
Comments
2
Likes
18
Embeds 0
No embeds

No notes for slide
















































































































































































































































































  • EJB

    1. 1. Dominando Enterprise JavaBeans Usando a tecnologia See*Fix
    2. 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. 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. 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. 5. Duas perspectivas Componentes EJB Framework EJB
    6. 6. Então EJB é... AO MESMO TEMPO, conforme a perspectiva adotada, tanto um modelo de componentes quanto um framework
    7. 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. 8. Framework EJB Nesta perspectiva Framework EJB é a combinação de componentes EJB e o contêiner onde são executados
    9. 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. 10. Quais os tipos? Session beans Message-driven beans Entities
    11. 11. Uso dos tipos Session beans e message-driven beans (lógica de negócio) Entity beans (persistência)
    12. 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. 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. 14. Pode ser útil... Armazenar e recuperar informação de base relacional Gerenciar transações Implementar segurança Processamento assíncrono Integrar sistemas, ...
    15. 15. Mensagem • Contêiner EJB oferece serviços aos componentes ou EJBs • EBJs ou componentes não precisam implementá-los
    16. 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. 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. 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. 19. Como criar um EJB? POJO + Anotações (Java 5) = EJB Objeto Objeto com comum poderes
    20. 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. 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. 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. 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. 24. Especificação aberta JSR-220: Enterprise JavaBeans 3.0 http://jcp.org
    25. 25. Implementações open source OpenEJB Geronimo Glassfish JBoss JFox JOnAS
    26. 26. Implementações proprietárias WebLogic HP AS IBM WebSphere Macromedia JRun Oracle e outras
    27. 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.
    28. 28. Aplicações corporativas Como podem estar organizadas?
    29. 29. Arquitetura em camadas Extraído do livro EJB 3 in Action
    30. 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. 31. Tipo de EJB por camada Presentation layer (não contemplada) Business logic layer Session beans Message-driven beans Persistence layer Entity beans
    32. 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. 33. Domain-driven design Domain-Driven Design: Tackling Complexity in the Heart of Software Eric Evans, Addison-Wesley, 2003
    34. 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. 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. 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. 37. Modelo resultante Extraído de Domain-Driven Design: Tackling Complexity in the Heart of Software, Eric Evans, Addison-Wesley, 2003
    38. 38. Comparação Clássico DDD
    39. 39. Tipos de EJBs Session beans Message-driven beans Entity beans OBSERVAÇÃO: Cada tipo usa um subconjunto dos serviços EJB
    40. 40. Conforme o uso Lógica de negócio Session beans Message-driven beans (MDBs) Persistência Entity beans
    41. 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. 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. 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. 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. 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. 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. 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. 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. 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. 50. Servidores de mensagem (open source) ActiveMQ OpenJMS JORAM Open Message Queue Somnifugi UberMQ, Presumo, Hermes JMS, MantaRay, ...
    51. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 61. Perspectiva Session Entity beans beans (substantivos) (verbos) Não sobreve vive a Estado é crahses e shutdowns persistido
    62. 62. Como isto funciona? ORM Entity Persistence Requisição via provider EntityManager CRUD
    63. 63. EntityManager package javax.persistence; public interface EntityManager { ... } Serviços de persistência são oferecidos por meio desta interface!
    64. 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. 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. 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. 67. Como funciona EJB 3? Alguns detalhes
    68. 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. 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. 70. Contêiner Java EE Extraído de EJB 3 in Action
    71. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 87. Como executar? • Precisamos: • Compilar • Executar o deploy • Criar um cliente que faz uma requisição • Fique tranquilo, faremos isto (não agora)
    88. 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. 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. 90. Importante • Componentes EJB são POJOs • Ou seja, podemos testá-los sem a presença de um contêiner
    91. 91. EJB x Spring • São complementares (fuja da guerra!) • Em muitos aspectos Spring facilita o acesso aos serviços oferecidos por EJB

    ×