UFG - Instituto de Informática Especialização em Desenvolvimento de Aplicações Web com Interfaces Ricas EJB 3.0 Prof.: Fabrízzio A A M N Soares [email protected] Aula 6 – EJB Enterprise Java Beans EJB ou Enterprise JavaBeans é um dos principais componentes da plataforma JavaEE (Java Enterprise Edition). É um componente do tipo servidor que executa no container do servidor de aplicação. Os principais objetivos da tecnologia EJB são fornecer um rápido e simplificado desenvolvimento de aplicações Java baseado em componentes distribuídos, transacionais, seguros e portáveis. Enterprise Java Beans Atualmente ele encontra-se na versão 3.1 e o seu futuro é definido conjuntamente entre grandes empresas como IBM, Oracle e HP como também por uma vasta comunidade de programadores numa rede mundial de colaboração sob o portal do JCP. Enterprise Java Beans EJB 2.1 vs EJB 3.0 A grande mudança entre a versão 2.1 e a versão 3.0 é a introdução de anotações Java. As anotações facilitam o desenvolvimento diminuindo a quantidade de código e o uso de arquivos de configuração XML. Enterprise Java Beans A plataforma JavaEE providencia algumas facilidades dedicadas à camada de lógica de negócio e para o acesso a banco de dados. Através do EJB o programador utiliza a infraestrutura do servidor de aplicação voltada para o desenvolvimento de aplicações de missão crítica (de alta importância para a empresa) e de aplicações empresariais em geral. Enterprise Java Beans Acesso aos Java Beans Para acessar os EJB é necessário definir as suas interfaces de acesso que são: Interface Local, Interface Remota ou Ambas. A Interface Local define o acesso ao bean somente no computador onde está sendo executado o servidor de aplicação. A Interface Remota define o acesso ao bean somente a computadores externos. Ambas define acesso ao bean tanto do computador com o servidor de aplicação ou computadores externos. Acesso aos Java Beans Acesso aos Java Beans Acesso aos Java Beans Tipos de EJB Session Beans Message Driven Beans Entity Beans Session Beans É o tipo mais simples de EJB. Atuam como controlador da interação entre outros beans Representam um fluxo de tarefas Contêm a lógica de negócio Gerenciam as interações entre os beans de entidade Tipos de Session Beans Há dois tipos de beans de sessão: com preservação de estado e sem preservação de estado. Parte da identificação de um bean de sessão é a definição de suas responsabilidades - uma das quais pode ser manter o estado do cliente entre as chamadas. Beans de Sessão sem Estado Beans de Sessão com Estado Beans de Sessão com Estado Os beans de sessão com preservação de estado contêm informações de estado sobre a conversação entre o cliente e o contêiner EJB. Uma instância de bean de sessão com preservação de estado existe apenas durante a conversação do cliente. Beans de Sessão com Estado Normalmente, esses beans executam os serviços utilizando esses dados para o cliente. Os serviços fornecidos pelo bean de sessão com preservação de estado podem coordenar as interações de outros objetos de negócios (beans de sessão e beans de entidade). Exemplo Um carrinho de compras contendo objetos para compra pode ser implementado utilizando um bean de sessão com preservação de estado, porque ele retém as informações enquanto o cliente está interagindo com o aplicativo. Beans de Sessão com Estado Os beans de sessão com preservação de estado são alocados para um cliente específico Eles consomem mais recursos do sistema que um bean de sessão sem preservação de estado, visando a vantagem de reter o estado do cliente. O contêiner gerencia esses recursos, normalmente “passivando” (gravando no disco) os beans de sessão com preservação de estado e reativando-os quando e conforme necessário. Ciclo de vida de um Bean com Estado Beans de Sessão sem Estado Os beans de sessão sem preservação de estado não contêm informações de estado sobre a conversação entre o cliente e o contêiner EJB. “Sem preservação de estado” significa realmente sem estado da conversação do cliente. Portanto, um bean de sessão sem preservação de estado pode conter outros tipos de estado, como uma conexão com o banco de dados, que pode ser utilizada por qualquer cliente. Beans de Sessão sem Estado Os beans de sessão sem estado executam serviços genéricos que não utilizam dados do estado do cliente de chamadas de método anteriores Em vez disso, recebem toda a entrada apropriada como parâmetros na chamada de método atual ou obtêm os dados de outras origens durante a chamada de método (como de beans de entidade ou acessando um banco de dados por meio do JDBC). Beans de Sessão sem Estado Os beans de sessão sem preservação de estado são normalmente desenhados a partir de um conjunto pronto e utilizados para despacho, conforme necessário, para manipular os pedidos que chegam. Beans de Sessão sem Estado Como todas as instâncias são equivalentes, os beans de sessão sem preservação de estado não precisam conhecer seu cliente. Isso pode permitir aumento no desempenho e na escalabilidade. Os beans de sessão sem preservação de estado são mais eficientes porque é possível compartilhar uma instância entre os pedidos não-contíguos, em vez de “ligar” a uma determinada sessão de atividade. Ciclo de vida do Bean sem Estado Qual Bean de Sessão usar? Em geral, escolha o tipo de bean de sessão que mais naturalmente se adapte à conversação com o cliente. Há estratégias para forçar o ajuste de um bean de sessão com preservação de estado em um bean de sessão sem preservação de estado, como armazenar o estado do cliente no cliente e reenviar em cada chamada ou armazenar e recuperar o estado do cliente a partir de um banco de dados em cada chamada de método. Essas estratégias, entretanto, podem realmente reduzir a escalabilidade em razão de códigos extras no tráfego de rede e no acesso a dados. Beans de Sessão na Web Se o bean de sessão for criado para implementar um serviço da Web, será necessário utilizar um bean de sessão sem preservação de estado, conforme definido na especificação da API JSR 1.3. Padrão Fachada de Sessão Uma utilização comum dos beans de sessão é como uma fachada que encapsula interações entre os objetos na Camada de Negócios. O bean de sessão serve para resumir essa complexidade, fornecendo uma interface mais simples para os clientes. Esse padrão é descrito detalhadamente em Padrões do JavaEE - Padrão de Fachada de Sessão. Padrão Fachada de Sessão Por exemplo, geralmente é um bom hábito tirar a lógica entre os beans de entidade e mover para os beans de sessão para minimizar o acoplamento entre os beans de entidade. Os beans de entidade podem ser acessados por meio de interfaces locais, uma vez que a fachada do bean de sessão fornece acesso aos clientes remotos. Essa abordagem é mais efetiva quando há vários beans de entidade estreitamente relacionados. Nó de Extremidade de Serviços da Web Os beans de sessão sem preservação de estado podem ser utilizados para implementar serviços da Web. Esse bean também é chamado de Bean de Implementação de Serviço e precisa preencher os requisitos a seguir: Ele deve ter um construtor público padrão. Ele deve implementar todos os métodos declarados pelo Service Endpoint Interface e seu método de negócios deve ser público e não final ou estático. Ele deve ser um bean sem preservação de estado. A classe deve ser pública, mas não final ou abstrata.