Uma feature muito legal de mensagens JMS é a possibilidade de poder agendar quando uma mensagem deverá ser recebida pelo MDB. Eu não sei se isso faz parte da especificação, ou se apenas o JBoss possui isso. O exemplo que eu vou demonstrar funciona apenas para o JBoss.
Primeiro vamos a um cenário onde este agendamento é útil.
Vamos supor que a seguinte regra é solicitada: Ao tentarmos cobrar o cartão do cliente, se a operadora retornar transação negada, o sistema deve re-tentar cobrar este cartão por mais 2 dias, sendo que cada tentativa deve ser feita após 24hs.
É possível resolver este requisito usando banco de dados e as famosas flags, mas essa definitivamente não é uma solução elegante. Imagina que você precisaria ficar fazendo pooling no banco para ver quais cobranças já passaram de 24 horas para processa-las novamente. Ou seja, horrível.
Com JMS dá pra fazer algo muito melhor. Se quando a compra é feita, retornar negado, basta enviar uma mensagem JMS pra fila, agendando essa mensagem para ser processada apenas após 24 horas. Quando der essas 24hhs, o MDB lê a mensagem e chama novamente o módulo de cobrança.
Muito simples e elegante. Sem pooling, sem ficar controlando status manualmente, nem nada desse tipo.
O código para fazer isso é extremamente simples:
[sourcecode language='java']
ObjectMessage message = session.createObjectMessage();
message.setLongProperty("JMS_JBOSS_SCHEDULED_DELIVERY", (new Date().getTime() + (1000 * 60 * 60 * 24)));[/sourcecode]
Pronto, você acabou de agendar a entrega da sua mensagem para daqui a 24 horas. Essa conta maluca aí é porque a data precisa ser passada em milisegundos.
Eu sou um grande fã de JMS, e essa é mais uma das caracteristicas que me fazem gostar dessa tecnologia.
[]'s
huummm, para esse tipo de situação prefiro usar o quartz, mas a sua solução é bem simples… parabens!!!
Parabéns pelo Mestrado!! E parabéns pelo blog, fiquei surpresa! Até pra mim (uma leiga total), achei a leitura super leve e dinâmica!
Te amo! Beijão!!!
Luiz, não surtiria o mesmo efeito se eu configurasse o MDB para reprocessar a mensagem a cada 24 horas, no máximo 3 vezes ?