Ola pessoal feliz natal,faz tempo que não apareço mais acredito que ano novo vida nova.
Então venho deixar um artigo que escrevi e inicialmente não iria postar por aqui, mais por questões particulares resolvi postar aqui mesmo.
Este artigo é para quem conhece um pouco de JSF e Desenvolvimento Web, para quem gostaria de entrar no mundo EJB, o foco do artigo é mostrar a combinação de serviços e detalhar os Interceptadores e o Serviço de Tempo.
No entanto QUALQUER UM sem importar o seu nível de conhecimento e que queria ver como funciona o mundo EJB pode seguir os passos que vai chegar no resultado final, o artigo da a base teórica, mostra como obter todas as ferramentas necessárias.
Bom a formatação não esta uma beleza mais foi o que deu para fazer pois não tenho muito tempo.
Video de auxilio para testar os codigos.
http://www.youtube.com/watch?v=6s8IZW2uM6U
Baixar condigo fonte do projeto
Sem mais enrolação, let’s go!
A necessidade de agendamento de tarefas em sistemas corporativos é uma realidade, e um dos importantes recursos da especificação EJB. Antigamente não havia maneira de realizar agendamento de forma padronizada em nossas aplicações. Com o EJB 2.1 foi introduzido o primeiro sistema de agendamento ainda bem limitado. Na especificação do EJB 3.0 API foi expandida, porém ainda deixava a desejar por falta de formas mais sofisticadas de realizar os agendamentos. Atualmente o EJB 3.1 demonstra o amadurecimento da API, e nos oferece diversas formas elegantes para trabalhar com o agendamento de tarefas. Outra importante ferramenta incluída na especificação EJB 3.0 são os interceptadores e nos oferecem uma infinidade de possibilidades como será apresentado no artigo.
A aplicação e tecnologias
Para nossa aplicação utilizaremos o NetBeans IDE 6.9.1, que já vem integrado com o servidor de aplicação Java EEGlassFish e o framework JavaServer Faces 2.0, proporcionando assim uma fácil configuração do ambiente de trabalho. A aplicação realizará o agendamento do envio de mensagens e tem o propósito de demonstrar o uso do Serviço de Tempo (Timer Service) do container java EE, em nosso caso Glassfish. Implementaremos também uma auditoria simples demonstrando o uso dos Interceptadores(Interceptors). Trabalharemos com um Stateless Session Bean estudando seu ciclo de vida e os métodos de callback. Para a camada de apresentação utilizaremos o JavaServer Faces e realizaremos o controle de acesso a aplicação de forma simples com JAAS.
O que são Stateless Session Bean
Os Stateless Session Bean são utilizados para fornecer métodos de negócio que realizam tarefas específicas e não mantêm qualquer estado. Cada chamada de método é independente das chamadas anteriores, todos os dados necessários ao método deverão ser passados em seus parâmetros. Os Stateless Session Bean são mantidos em um pool no servidor de aplicação de forma que qualquer instância poderá atender qualquer solicitação da mesma forma. Vamos dar uma olhada em seu ciclo de vida (veja a Figura 1).
Figura 1. Ciclo de vida Stateless Session Bean.
Seus ciclo de vida é bem simples, consiste em apenas dois estados. O de inexistente onde ainda não foi instanciado pelo container e o de preparado no pool, onde esta já está pronto para atender as solicitações dos clientes. Na transição do estado de inexistente para o de preparado no pool podemos anotar um método com a anotação @PostContruct, neste método de callback podemos inicializar algum recurso como uma conexão com o banco de dados. E no caminho de volta antes de destruir o bean podemos anotar um método com @PreDestroy, e realizar processamentos antes do container destruir o bean, como fechar a conexão com o banco de dados.
A aplicação Stateless Session Bean ao projeto
Nosso Stateless Session Bean será utilizado para prover as funcionalidades de agendamento e cancelamento de envio de mensagens. Inicialmente marcaremos um método chamado inicio() com @PostConstruct para que sejamos notificados no console cada vez que é criada uma nova instância deste Session Bean. Desejamos também manter uma estatística do número de realizados. Para esta tarefa utilizaremos uma variável de instancia em nosso EJB e a cada processamento incrementaremos esta variável. Para finalizar anotaremos o método fim() com @PreDestroy e antes do container destruir o Session Bean, ele nos mostrará o número de processamentos no console.
O que são Interceptadores
Um Interceptador (Interceptor) é uma classe POJO(PlainOld Java Object) que tem a capacidade de interceptar tanto chamadas de métodos de negócio quanto os eventos de ciclo de vida de um EJB. O ciclo de vida do interceptador é igual ao do tipo do EJB onde ele é aplicado, por exemplo, em nossa aplicação utilizamos um Stateless Session Bean então o interceptador tem exatamente os mesmos dois estados. Cada interceptador pode receber quaisquer recursos por injeção de dependência, em nosso caso utilizaremos a anotação @Resource para receber um objeto SessionContext, o qual nos fornece informações importantes para nossa auditoria.
Interceptadores podem manipular tanto os parâmetros de entrada dos métodos , como o retorno dos mesmos, isto pode ser útil para por exemplo validar esses parâmetros utilizando um serviço externo. Outra aplicação do uso de interceptadores é separar o que é de lógica de negocio de lógica funcional. Supondo que seja necessário que o retorno de um método de negócio seja compactado, este código de compactação não faz parte da regra negócio, então colocando em um interceptador podemos reutilizar o código de compactação e ao mesmo tempo manter nosso EJB coeso.
Outra importante funcionalidade dos interceptadores é de que podemos aplicá-los um conjunto de métodos particulares ou classes inteiras, oferecendo então um leve suporte a Orientação a Aspectos.
A aplicação dos Interceptadores ao projeto
Em nossa aplicação teremos duas tarefas para os interceptadores: um deles realizará a auditoria de nossos métodos de negocio. Será rastreado varias informações, como método invocado e a qual classe pertence, usuário que o chamou e a interface utilizada. Finalizando o interceptador irá sinalizar no console quando os métodos de callback forem executados no EJB.
Enquanto nosso outro interceptador terá a responsabilidade de marcar o tempo de execução dos métodos de negocio e notificar no console.
O serviço de tempo
A API Timer Service atualmente no EJB 3.1 evoluiu muito e nos disponibiliza hoje diversas maneiras de agendar tarefas. Atualmente podemos trabalhar com expressões através de ScheduleExpression que nos oferece uma sintaxe bem simples e flexível. Temporizadores automáticos são configurados com a anotação @Schedule e são agendados ao instanciar o bean.
Ao trabalhar com os métodos do objeto TimerService podemos agendar tarefas para serem executadas em determinada data e hora ou por intervalos de tempo. Os timers podem ser aplicados em uma serie de atividades comuns como a geração de relatórios e processamentos batch, realizar tarefas chave periodicamente como testes de conexão com serviços externos entre outros.

Muito bom, partindo para o 2.
[...] O seu dia mais activo do ano foi 24 de dezembro com 73 visitas. O artigo mais popular desse dia foi Explorando serviços Java EE / Interceptadores e o Serviço de Tempo – Part 1. [...]
Lendo…
Bacana viu…
André AS
Só tive tempo de ver agora, gostei.
Muito bom o material
É uma mão na roda pra quem está começando como eu, e além de aprender a rodar o nosso primeiro EJB, aprendemos também como funciona os Interceptors e Timers.
Bacana d+
Valeww
Ótimo!!!!
Parabéns pela Atitude….
Excelente post, continue escrevendo, muito bom!