De que trata o artigo:

O artigo apresenta os recursos disponibilizados pela tecnologia Java EE para criação e administração de agendamento de tarefas em componentes de negócio implementados com EJB 3.


Para que serve:

O agendamento de tarefas em componentes de negócio tem o objetivo de disponibilizar recursos para que o agendamento seja realizado no próprio componente, tornando a aplicação independente de recursos do Sistema Operacional.


Em que situação o tema é útil:

Os recursos disponibilizados pela API Timer Service são úteis para sistemas que possuem em suas regras de negócio processos que precisam ser executados por eventos temporais.

>

Atualmente, está cada vez maior a necessidade de criação de softwares que estejam focados nas regras de negócio das empresas; sejam estas pequenas, médias ou grandes corporações.

O software não só deve contemplar as regras de negócio, mas criar o fluxo de todo o processo de trabalho da empresa. A estes sistemas que automatizam todo ou parte de um processo de trabalho são denominados de Sistemas de Workflow.

O grande desafio na construção de softwares de workflow é conseguir mapear todo o processo, que muitas vezes é extremamente complexo, e ainda é relevante identificar o que pode ser melhorado no processo atual.

Em determinados cenários deste fluxo de trabalho, partes do processo podem ser acionados por eventos temporais surgindo assim à necessidade do agendamento das suas ações.

É neste cenário que a tecnologia Java EE se destaca, oferecendo aos profissionais de TI recursos para desenvolvimento de softwares baseados em componentes portáveis, distribuídos e seguros.

Um destes recursos é o EJB que unido à API Timer Service disponibiliza ferramentas para criação de agendamento de tarefas para componentes de negócio.

O objetivo deste artigo é apresentar os recursos de agendamento de componentes de negócio disponibilizados pelo EJB 3.0 e ilustrar o que estará por vir com a EJB 3.1.

O agendamento de tarefas será apresentado através de um estudo de caso que implementa os recursos do EJB 3.0 com Stateless Session Bean (Bean de Sessão sem Estado) e da API Timer Service utilizando o JBossAS 5.

A administração dos agendamentos será realizada através de uma interface Web, que funcionará como software cliente do componente de negócio criado. A seguir veremos mais detalhes da estrutura da API Timer Service e como utilizá-la com os recursos do EJB 3 utilizando o JBossAS 5.

Breve histórico da API

Como todo recurso de software amadurecido e confiável que já passou por processos evolutivos, é importante conhecer as melhorias introduzidas ao longo do tempo. Vejamos um pouco da evolução da api EJB Timer Service:

• A api Timer Service foi introduzida ao EJB na sua versão 2.1 através da JSR 153. Nesta versão, era possível efetuar agendamento de Stateless Session Bean (Bean de Sessão sem estado), Message Driven Beans e Entity Beans.

• Com o surgimento do EJB 3.0, especificado formalmente pela JSR 220, os recursos da Api Timer Service foram mantidos, porém nesta versão do EJB não é possível efetuar agendamento em Entity Beans. A JSR 220 não entra em muitos detalhes do motivo da retirada dos Entity Beans do processo de agendamento.

• A proposta futura apresentada pelo EJB 3.1, especificado pela JSR 318 ainda não finalizada até a presente data, é disponibilizar os recursos de agendamento de componentes de negócio fazendo uso de anotações. A principal anotação a ser disponibilizada pelo EJB 3.1 é @Schedule.

• A especificação 3.1 traz novas propostas para flexibilizar o processo de agendamento e torná-lo mais objetivo para atender requisitos mais complexos de agendamento.

Apesar das anotações terem sido introduzidas no EJB 3.0, não foi disponibilizada muitas anotações para o agendamento de método de negócio nesta versão.

A única anotação definida para esta versão tem a tarefa de informar ao Application Server que o método anotado deve ser gerenciado e executar a chamada a este método quando o timeout do agendamento ocorrer para este EJB.

A seguir veremos a estrutura da Api EJB Timer Service.

Estrutura do EJB Timer Service

O EJB Timer Service é uma pequena api que disponibiliza recursos gerenciados pelo Application Server para efetuar o agendamento de métodos de negócios permitindo a um determinado Enterprise Java Bean ser executado pelo Application Server na data e horário agendados, ou quando o período agendado estiver expirado, ou ainda quando o EJB possui um agendamento dentro de um intervalo de tempo.

O EJB Timer Service permite que sejam criados agendamentos para Stateless Session Bean (Bean de Sessão sem Estado) e Message Driven Bean (Beans de Mensagem) em se tratando de EJB 3.0.

Não é permitido criar agendamento para Statefull Session Beans (Bean de Sessão com Estado), tendo em vista o ciclo de vida deste Bean de Sessão e sua natureza; um Statefull Session Bean é criado exclusivamente para um cliente e não são mantidas instâncias no “pool de beans” do Application Server. Um Statefull Session Bean permanece ativo até que este seja finalizado pelo Application Server, ou seja, executado algum método anotado com @Remove informando ao Application Server que está “sessão” deva ser finalizada.

Para que um componente EJB utilize a API EJB Timer Service, este EJB deve implementar a interface javax.ejb.TimedObject. A interface TimedObject define apenas um único método denomidado ejbTimeout().

No que se refere ao EJB 3.0, o Enterprise Java Bean que necessite efetuar agendamentos deve fazer uso da anotação @Timeout em um método que retorne void ou receba um objeto javax.ejb.Timer como parâmetro. O método anotado com @Timeout indicará indiretamente ao Application Server que este EJB implementa a interface TimedObject. Esta interface era utilizada para implementar agendamento em componentes de negócio em versões anteriores dos Enterprises Java Beans.

Os EJBs acessam o api TimerService por injeção de dependência através da captura de uma instância da interface javax.ejb.SessionContext. A interface SessionContext disponibiliza acesso em tempo de execução a captura da sessão definido para uma instância do EJB. A injeção de dependência pode ser realizada utilizando a anotação @Resource.

É possível também efetuar diretamente a injeção de dependência diretamente na interface TimerService com a notação @Resource.

Ainda é possível acessar a api EJB Timer Service efetuando um “lookup” do objeto EJB através da hierarquia JNDI definida para o componente de negócio. Em um EJB, a estrutura a ser acessada na árvore JNDI pode ser definida utilizando a anotação @RemoteBinding.

...

Quer ler esse conteúdo completo? Tenha acesso completo