12 de jun de 2012

Pq EJB ?

Quando nos deparamos com um problema e surge a sugestão de utilizar o EJB para resolvê-lo, sempre existe a pergunta clássica para quem não conhece esta API. Mas o que é EJB? Muitos falam que consiste em um gerenciador de injeção de dependência, ai surge outra pergunta, pq não utilizar Spring, pois questão de custo beneficio é até melhor?


O EJB ou Enterprise Java Bean está muito além de injeção de dependência, quando começamos a estudar orientação a objetos aprendemos que um software deve ser:

(1) Desacoplado;
(2) Fortemente modularizado;
(3) Fortemente coeso.

O termo desacoplado significa que o nível de interligação entre os componentes do sistema deve ser o menor possível.
Fortemente modularizado significa que o sistema deve ser dividído em módulos, pois a reutilização de código se torna muito alta.
Uma tarefa fortemente coesa significa que a tarefa tem apenas uma função, ou seja, facilita a modularização e reduz o acoplamento.

Visando isto o EJB permite um sistema com todas estas qualidades, sem contar outras inumeras soluções. Para mostrar isto vamos ao princípio, que são os SessionBeans, eles permitem a disponibilização de serviços de forma remota, ou seja, permite buscar a referência de um objeto através de um encapsulamento de um RMI ou disponibilizar através de um webservice, de maneira muito simples, utilizando apenas anotações.
O foco deste artigo não é um tutorial sobre este assunto, é apensa uma dica, para ver tutoriais sobre isto acesse {EJB,JNDI}.

Os sessionbeans podem ser de duas formas, stateless, ou seja, não são capazes de armazenar estados, ou stateful, são capazes de armazenar o estado. O container EJB é capaz de controlar toda a criação e gerenciamento de concorrência dos beans. Seguindo estes princípios uma situação ideal se torna possível utilizando os sessionbeans do tipo stateless, pois ele fica totalmente desacoplado de qualquer parametro ou estado, se tornando completamente coeso, pois um serviço é requerido e uma resposta retornada.

Além destes princípios de projetos, existem outros como a utilização de serviços desacoplados quanto ao tempo, ou seja, tarefas podem ser chamadas assincronamente. Para isto, o EJB disponibiliza um excelente serviço de filas apartir da api jms que é chamado de messageDrive que é bem descrito oficialmente pela oracle.

Caso exista a necessidade de utilizar uma rotina executando no sistema, é possivel a criação de timerService, pois este recurso ja está disponível no container EJB, sendo possível a configuração de sequência de eventos, ou agendamento de eventos para determinadas horas do dia, utilizando apenas anotações. Pois existe um alto custo ao usar threads nativas do java em uma aplicação que utiliza o container EJB.

Acho que ja esta bom de propagando sobre uma API, que particularmente considero muito poderosa porém muito desconhecida pela maioria. Ao longo do tempo vou postar alguns tutoriais sobre EJB no blog.

Nenhum comentário:

Postar um comentário