Introdução: EJBs de Sessão Prof. Fellipe Aleixo (fellipe.aleixo@ifrn.edu.br)
O Que é um Enterprise Bean? Written in the Java programming language, an enterprise bean is a server-side component that encapsulates the business logic of an application. The business logic is the code that fulfills the purpose of the application. In an inventory control application, for example, the enterprise beans might implement the business logic in methods called checkinventorylevel and orderproduct. By invoking these methods, clients can access the inventory services provided by the application. Tutorial JEE 7
Definição de Enterprise JavaBeans Definição simplificada: Modelo padrão de componentes do lado do servidor para aplicativos de negócio distribuídos Componentes executando processos do negócio Arquitetura distribuída: Balanceamento da carga de processamento Aumento da confiabilidade
Tidos de Enterprise Beans Sessão Session Bean Responsável por gerenciar processos ou tarefas Acessado por um protocolo de objetos distribuídos (RMI-IIOP) Pode implementar um Web Service Orientado a mensagens Message-driven Bean Atua como ouvinte para um tipo específico de mensagem Processa as mensagens assincronamente a partir de sistemas como o Java Message Service API
EJBs de Sessão Session Beans
Beans de Sessão Encapsulam a lógica de negócio Acessível a partir de uma contexto local, remoto do WS Controlar a interação entre outros beans Representando um fluxo de tarefas Gerenciam a interação com as classes de entidade (JPA)
Tipos de Beans de Sessão 1. COMinformação de estado - @Stateful Trabalha em favor de um cliente, mantendo o estado estado conversacional que expira com o tempo O estado é compartilhado por todos os seus métodos 2. SEM informação de estado @Stateless Coleção de serviços relacionados (métodos) Não mantém estado entre uma e outra invocação de método 3. @Singleton É instanciado apenas um por aplicação Perdura por todo o ciclo de vida da aplicação
Quando Usar um Bean de Sessão?... Stateful: Necessário guardar informação da interação com o cliente As informações são requeridas em vários métodos É responsável por intermediar a interação entre o cliente e outros componentes da aplicação Responsável por coordenar um fluxo trabalho de vários EJBs... Stateless: Para melhorar a performance Não é necessário guardar informações entre métodos Pode implementar um Web Service
Quando Usar um Bean de Sessão?... Singleton: Informações necessitam ser compartilhadas por toda aplicação Um único EJB necessita ser acessado concorrentemente por múltiplas threads A aplicação precisa de um EJB realizar tarefas desde o início da aplicação até o seu término Pode implementar um Web Service
Acessando um Bean de Sessão Um cliente pode acessar um bean de sessão através de uma interface de negócio ou diretamente No acesso direto o cliente conhece a classe que implementa as funcionalidades que ele está buscando Dependência direta No acesso através de uma interface, o cliente não sabe qual classe implementa as funcionalidades desejadas Dependência abstrata Podem ser definidas interfaces REMOTAS e LOCAIS
Acessando um Bean de Sessão Um cliente executando no mesmo servidor de aplicação pode ter acesso através da injeção de dependência Ambiente gerenciado pelo servidor (JSF, WS, EJBs e cliente JEE) Anotação javax.ejb.ejb Um cliente que não executa sob a gerência do servidor JEE tem acesso através do serviço de nomes (JNDI)
Acessando um Bean de Sessão Espaços de nomes JNDI: java:global java:global[/application]/module /enterprise bean [/interface] java:module java:module/enterprise bean name/[interface name] java:app java:app[/module name]/enterprise bean name [/interface name]
Acesso Local ou Remoto? Aspectos a levar em consideração: Acoplamento forte ou franco entre os beans em questão Tipo do cliente (necessariamente remoto) Distribuição dos componentes Performance Na dúvida escolha acesso REMOTO Anotações para as interfaces: @Remote e @Local É possível que um mesmo bean ofereça ao mesmo tempo acessos local e remoto
Criando Beans de Sessão de Acesso Local Criar uma implementação de EJB sem interface de acesso @Session public class MyBean {... } Anotar uma interface de negócio com @Local @Local public interface InterfaceName {... } Especificar a interface através da anotação @Local @Local(InterfaceName.class) public class BeanName implements InterfaceName {... }
Acessando um Beans de Sessão sem Interface Obtendo a referência através da injeção de dependência @EJB ExampleBean examplebean; Obtendo a referência através de uma pesquisa (lookup) no JNDI interface javax.naming.initialcontext ExampleBean examplebean = (ExampleBean) InitialContext.lookup("java:module/ExampleBean");
Acessando um Beans de Sessão com Interface Local Obtendo a referência através da injeção de dependência @EJB Example example; Obtendo a referência através de uma pesquisa (lookup) no JNDI interface javax.naming.initialcontext ExampleLocal example = (ExampleLocal) InitialContext.lookup("java:module/ExampleLocal");
Criando Beans de Sessão de Acesso Remoto Anotar uma interface de negócio com @Remote @Remote public interface InterfaceName {... } Especificar a interface através da anotação @Remote @Remote(InterfaceName.class) public class BeanName implements InterfaceName {... }
Acessando um Beans de Sessão com Interface Remota
Acessando um Beans de Sessão com Interface Remota Obtendo a referência através da injeção de dependência @EJB Example example; Obtendo a referência através de uma pesquisa (lookup) no JNDI interface javax.naming.initialcontext ExampleRemote example = (ExampleRemote) InitialContext.lookup("java:global/myApp/ExampleRemote");
Métodos, Parâmetros e Acesso Isolamento Os parâmetros de uma chamada remota são mais isolados, comparados com os parâmetros em uma chamada local Em uma chamada remota cliente e o bean operam com diferentes cópias dos objetos passados por parâmetro Em uma chamada local cliente e o bean podem modificar o mesmo objeto passado por parâmetro
Métodos, Parâmetros e Acesso Granularidade dos dados acessados Dado que chamadas remotas são mais lentas que as chamadas locais, os parâmetros passados para métodos remotos não devem ser de granularidade grossa
Conteúdo de um EJB Para desenvolver um EJB são necessários: A classe de implementação do EJB implementa os métodos Uma ou mais interfaces de negócio define os métodos Classes auxiliares, caso seja necessário exceções e utilitárias
Convenções de Nomes Elemento Sintaxe Exemplo Enterprise bean name Name Bean AccountBean Enterprise bean class Name Bean AccountBean Business interface Name Account
Ciclo de Vida dos EJBs Bean de sessão COM informações de estado:
Ciclo de Vida dos EJBs Bean de sessão SEM informações de estado:
Ciclo de Vida dos EJBs Bean de sessão SINGLETON: Semelhando ao ciclo de vida do Bean de Sessão SEM estado O mesmo é instanciado no início da aplicação se estiver anotado com @Startup
Mais Informações Enterprise JavaBeans 3.2 specification: http://www.jcp.org/en/jsr/detail?id=345 Enterprise JavaBeans 3.2 specification project: https://java.net/projects/ejb-spec/