Enterprise Java Beans é uma arquitetura de componentes Java para o desenvolvimento e implantação (deployment) de aplicações distribuídas. Um componente EJB possui como principais características a portabilidade e a escalabilidade. Ele pode ser escrito uma única vez e ser executado em diferentes plataformas (i.e., sistemas operacionais) através dos contêiners EJB ( e.g., J2EE Web Server, JBoss). Um contêiner, por sua vez, gerencia os aspectos não-funcionais de uma aplicação comercial (enterprise application): controle de transações, segurança, persistência, distribuição de carga e gestão do ciclo de vida. Essas características do contêiner permitem ao desenvolvedor se concentrar nas funcionalidades da sua aplicação, em especial, nos aspectos ligados a camada de negócio do sistema de informação.
O contêiner EJB fornece funções para o controle do ciclo de vida de um componente, como, por exemplo: implantação, ativação, desativação e desinstalação de um componente EJB. Além disso, a comunicação entre um componente EJB e “o mundo externo” ao componente é realizado através de interfaces controladas pelo contêiner.
Modelo de Componente EJB
Um Enterprise Java Bean é um componente caixa-preta distribuível (distributed black-box component) que executa em um contêiner EJB. Um componente EJB fornece seus “serviços” ou métodos através de interfaces. Os clientes de um EJB utilizam o componente desconhecendo os detalhes de como os métodos deste são implementados. Por exemplo, em um acesso remoto, um cliente de um componente requisita ao contêiner EJB o acesso à interface remota do componente provedor do serviço. O contêiner cria uma instância do componente requisitado e intercepta todas as “mensagens” entre o cliente e o componente provedor do serviço. Esta indireção é que permite ao contêiner controlar o ciclo de vida de um componente e realizar as operações não funcionais descritas anteriormente
O modelo de componente EJB suporta basicamente os seguintes tipos de enterprise beans:
Stateless SessionBeans. Os Beans de sessão são idealizados para realizar a comunicação entre a camada de interface com usuário e a camada de negócio de um sistema. Os beans de sessão sem estado (sem memória) são instanciados uma única vez pelo contêiner e são compartilhados por todas os clientes do componente. Assim, eles devem ser usados como “bibliotecas de funções” que recebem toda a informação necessária para sua execução através de seus parâmetros. São exemplos de Stateless Session Beans: uma classe para checar se usuário está logado e uma classe que fornece um conversor de moedas.
Stateful SessionBeans. Para esse tipo de Bean de sessão, o contêiner criará uma instância para cada cliente. Desta forma, um Stateful Bean pode conter variáveis e objetos que guardem/acumulem informação sobre a sessão de comunicação entre cada cliente e o “provedor” do serviço. Um exemplo simples que ilustra o uso de Stateful Bean é o « carrinho de compras » de um site de vendas. Cada sessão (e.g., cada navegador de um usuário) conterá sua própria instância do carrinho e este acumulará as compras de cada usuário durante toda a duração da sessão.
EJB Web Services Components. Componentes EJB à serem transformados em Web Services (Stateless beans neste caso).
Bean Managed Persistence (BMP) entity beans. Uma das principais funções de sistemas de informações é a manipulação de dados. Os entity beans foram conceptualizadas para facilitar a escrita de código que manipula informação à ser persistida/acessada em/de um banco de dados relacional. No caso dos BMP entity beans, o código de persistência esta contido no próprio entity bean. Assim, o desenvolver escreve o código de persistência que mapeia o objeto em uma ou mais tuplas de uma base relacional.
Container Managed Persistence (CMP) entity beans. Um contêiner EJB pode gerenciar ele mesmo a persistência de objetos. Neste caso, os entity beans a serem mapeados automaticamente pelo contêiner em uma base de dados são chamados de CMP entity beans.
Modelo de Conexão/Comunicação de componente EJB (“glue code” or Connection Model)
Os componentes EJB se conectam através de suas interfaces remota e local. No caso de uma comunicação remota, o componente utiliza RMI para concretizar a passagem de mensagens entre os componentes. Durante a invocação de um método, os parâmetros e o resultado da função são serializados e passados por valor entre os componentes.
Para obter acesso a um serviço de um componente, o cliente utiliza os métodos lookup do contêiner e informa o nome do serviço que deseja acessar (i.e., o nome da interface publicada pelo componente). O contêiner, por sua vez, acessa a JNDI (Java Name Directory Interface) para obter acesso ao componente provedor do serviço. O uso da JNDI garante a independência de localização, característica desejável em sistema distribuídos para facilitar a integração entre sistemas.
-
A interface remota de um componente EJB pode ser acessada de dois modos:
Síncrono (Tight Coupling Synchronous Connection). O cliente do componente envia uma requisição ao contêiner para obter acesso a uma determinada interface. Após o acesso concedido, o cliente invoca o método desejado e resta em estado de bloqueio até o obter o resultado do método remoto. Assim, a aplicação cliente resta bloqueada até que o componente remoto termine a execução do serviço requisitado.
Assíncrono (Loosely Coupled Asynchronous Communication). Este modo de comunicação permite uma melhor vazão (throughput) do sistema. Um componente cliente em modo assíncrono requisita um serviço através de uma fila de mensagens JMS (Java Message Service). Desta forma, o contêiner notificará ao cliente quando sua requisição estiver sido processada. Assim, o cliente não precisa continuar bloqueado em quanto o serviço remoto é executado.
Modelo de Implantação do EJB (Deployment Model)
Os componentes EJB, assim como os Java Beans, podem ser distribuídos em arquivos .jar. Para sua execução, ele são encapsualdos em .ear ( J2EE application file). Na versão EJB 2.*, um componente contém um arquivo XML de descrição de suas interfaces (Deployment Descriptor-DD). Na versão EJB 3.*, toda a descrição do componente esta contida em seu próprio código Java. Anotações, isto é meta-dados, descrevem o tipo de componente, seu nome de mapeamento e quais são suas interfaces remotas.
Uso de anotação na versão 3.0 facilita a construção de componentes EJB e diminui sensivelmente o número de arquivos de configuração de um sistema baseado em EJB.
Principais Vantagens e Desvantagens de EJB
Vantagens
+ Portabilidade dos componentes entre plataformas ( e.g;, entre sistemas operacionais)
+ Suporte a distribuição
+ Gestão do ciclo de vida de um componente pelo contêiner
Desvantagens
- Um componente EJB é dependente de uma linguagem de programação. Ou seja, somente pode ser acessado normalmente por clientes escritos em JAVA. Esta uma das desvantagens se compararmos EJB com CORBA e Web Services.
- A extensa configuração é facilmente passível de erro. O uso de anotações da versão 3.0 combinado com as novas IDEs de desenvolvimento Java ( NeteBEans 6.0 e Eclipse) facilitam.
- A reconfiguração dinâmica não é suportada nativamente pelos contêiners, mas pode ser realizada usando alguns procedimentos adicionais.
Aucun commentaire:
Enregistrer un commentaire