EJB

50 %
50 %
Information about EJB

Published on January 8, 2009

Author: kyrios

Source: slideshare.net

Description

EJB 3 (introdução)

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

Add a comment

Related presentations