<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hespanha &#187; jms</title>
	<atom:link href="http://www.hespanha.com.br/blog/tag/jms/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hespanha.com.br/blog</link>
	<description>Apenas um programador que ama o que faz e servo do Senhor Jesus</description>
	<lastBuildDate>Sat, 24 Jul 2010 18:59:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Mensagens JMS agendadas Just-In-Time</title>
		<link>http://www.hespanha.com.br/blog/2008/08/mensagens-jms-agendadas-just-in-time/</link>
		<comments>http://www.hespanha.com.br/blog/2008/08/mensagens-jms-agendadas-just-in-time/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 15:17:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jms]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=15</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>Primeiro vamos a um cenário onde este agendamento é útil.</p>
<p>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.</p>
<p>É 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.</p>
<p>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.</p>
<p>Muito simples e elegante. Sem pooling, sem ficar controlando status manualmente, nem nada desse tipo.</p>
<p>O código para fazer isso é extremamente simples:</p>
<p><code>[sourcecode language='java']<br />
ObjectMessage message = session.createObjectMessage();</code></code></code></p>
<p>message.setLongProperty("JMS_JBOSS_SCHEDULED_DELIVERY", (new Date().getTime() + (1000 * 60 * 60 * 24)));[/sourcecode]</p>
<p>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. <img src='http://www.hespanha.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Eu sou um grande fã de JMS, e essa é mais uma das caracteristicas que me fazem gostar dessa tecnologia.</p>
<p>[]'s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2008/08/mensagens-jms-agendadas-just-in-time/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Contendo falhas de forma elegante com auxílio de JMS</title>
		<link>http://www.hespanha.com.br/blog/2008/07/contendo-falhas-de-forma-elegante-com-auxilio-de-jms/</link>
		<comments>http://www.hespanha.com.br/blog/2008/07/contendo-falhas-de-forma-elegante-com-auxilio-de-jms/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 15:18:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jms]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=11</guid>
		<description><![CDATA[JMS é uma API do Java para lidar com troca de mensagens em aplicações. Devido a popularização da integração de sistemas por meio de mensagens, seu uso tem aumentado muito nos últimos tempos, principalmente pelo fato de ser extremamente simples integrar dois sistemas usando JMS. Porém, neste post, pretendo falar de uma outra utilidade muito [...]]]></description>
			<content:encoded><![CDATA[<p>JMS é uma API do Java para lidar com troca de mensagens em aplicações. Devido a popularização da integração de sistemas por meio de mensagens, seu uso tem aumentado muito nos últimos tempos, principalmente pelo fato de ser extremamente simples integrar dois sistemas usando JMS. Porém, neste post, pretendo falar de uma outra utilidade muito interessante de JMS, a qual adotamos no último projeto que participei e que deu um resultado muito positivo para o sistema aumentando significativamente a sua robustez.</p>
<p>Tinhamos o seguinte cenário:</p>
<p>&#8220;É tentado cobrar um determinado valor do cartão de crédito do cliente, caso a operadora retorne OK, ou seja, a compra foi executada com sucesso, deve ser chamada uma API aqui da empresa que autoriza o cliente a usar o nosso sistema&#8221;</p>
<p>Agora pense na seguinte situação: O cliente é cobrado, debita o valor do seu cartão de crédito, mas quando<br />
a API de autorização é chamada, acontece um erro e o cliente não é liberado para usar o sistema. O que fazer neste caso? Rollback da transação??? ahmmmm&#8230;não existe rollback na operadora de cartão de crédito! <img src='http://www.hespanha.com.br/blog/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  Mas mesmo se tivesse, ao meu ver essa não seria a solução ideal, afinal de contas, você perderia uma &#8220;venda&#8221;.</p>
<p>É aí que entra JMS e o título do post: &#8220;Contendo falhas de forma elegante&#8221;.</p>
<p>Nós adotamos a seguinte solução para este caso: Quando a operadora cobra o cliente, não há mais como voltar atrás, então, até esse ponto é fluxo é sincrono e, a autorização se tornou um fluxo assincrono. Com isso, foi criada uma  fila JMS e o cliente é colocado nesta fila para ser autorizado. A grande vantagem disso é que, em caso de um problema, a API do JMS possui uma propriedade configurável que faz com que ele retente processar de tempos em tempos. Com isso, caso o sistema não consiga autorizar o cliente na primeira vez, ele vai tentar novamente após 30 minutos, até 10 tentativas. Tempo suficiente para, se for um problema de banco por exemplo, o problema ser corrigido.</p>
<p>Mas não acaba aí, no JMS existe um conceito chamado &#8220;fila morta&#8221;. Caso após as 10 tentativas, o sistema não consiga processar aquela tarefa, ela será enviada para está fila. No nosso sistema, foi criada uma monitoração nesta fila. Caso algum registro caia na famigerada &#8220;fila morta&#8221;, o sistema irá alarmar e uma equipe responsável entrará em ação para solucionar o problema e após isso, reprocessar o registro.</p>
<p>Com isso, é possível uma ação totalmente pró-ativa, evitando assim chamadas na &#8220;Central de Atendimento&#8221; de clientes que pagaram e não receberam autorização para acessar o sistema.</p>
<p>Na nossa experiência aqui na empresa, JMS tem se mostrado uma excelente solução, tanto pela sua facilidade de uso com o auxílio de um servidor de aplicação, como o Jboss por exemplo, como também pela elegância e robustez que ele prove no seu uso.</p>
<p>Recomendo a todos os programadores Java a se aprofundarem neste assunto!</p>
<p>Um abraço!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2008/07/contendo-falhas-de-forma-elegante-com-auxilio-de-jms/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
