<?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; java</title>
	<atom:link href="http://www.hespanha.com.br/blog/category/java/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>Rumo ao JBoss World 2009, Chicago, USA</title>
		<link>http://www.hespanha.com.br/blog/2009/08/rumo-ao-jboss-world-2009-chicago-usa/</link>
		<comments>http://www.hespanha.com.br/blog/2009/08/rumo-ao-jboss-world-2009-chicago-usa/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 17:13:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jboss world]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=49</guid>
		<description><![CDATA[Na próxima semana estarei pela primeira vez indo para os EUA participar do Jboss World. Como no projeto que eu estou atualmente aqui no UOL nós usamos 4 ferramentas da Jboss: JBoss AS, JBoss Drools, JBoss jBPM e Hibernate, a empresa acredita que é interessante a minha ida ao evento para estar acompanhando as últimas [...]]]></description>
			<content:encoded><![CDATA[<p>Na próxima semana estarei pela primeira vez indo para os EUA participar do Jboss World. Como no projeto que eu estou atualmente aqui no UOL nós usamos 4 ferramentas da Jboss: JBoss AS, JBoss Drools, JBoss jBPM e Hibernate, a empresa acredita que é interessante a minha ida ao evento para estar acompanhando as últimas novidades do mundo JBoss.</p>
<p>Pretendo postar aqui as coisas bacanas que eu ver, e estarei em real-time twittando o que eu ver de legal por lá, então, se alguém tiver interesse e quiser me seguir, o meu twitter é luiz_hespanha.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2009/08/rumo-ao-jboss-world-2009-chicago-usa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Monitorando arquiteturas JMS</title>
		<link>http://www.hespanha.com.br/blog/2009/06/monitorando-arquiteturas-jms/</link>
		<comments>http://www.hespanha.com.br/blog/2009/06/monitorando-arquiteturas-jms/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 20:42:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jboss]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=39</guid>
		<description><![CDATA[Qualquer sistema sério precisa de monitoração, isso é um fato. Existem vários pontos para serem monitorados dentro de um sistema, o pessoal da Globo.com fez uma excelente apresentação sobre isso no FISL. Veja em: http://www.slideshare.net/denao/fisl-monitoracao-inteligente No sistema que eu trabalho aqui na empresa, usamos muito JMS, então para nós, é imprecindível uma monitoração em cima [...]]]></description>
			<content:encoded><![CDATA[<p>Qualquer sistema sério precisa de monitoração, isso é um fato. Existem vários pontos para serem monitorados dentro de um sistema, o pessoal da Globo.com fez uma excelente apresentação sobre isso no FISL. Veja em: <a href="http://www.slideshare.net/denao/fisl-monitoracao-inteligente">http://www.slideshare.net/denao/fisl-monitoracao-inteligente</a></p>
<p>No sistema que eu trabalho aqui na empresa, usamos muito JMS, então para nós, é imprecindível uma monitoração em cima dessa tecnologia.</p>
<p>Para quem não sabe, uma aplicação tenta enviar uma mensagem JMS um número configurado de vezes, caso a aplicação que recebe essa mensagem tenha problemas para receber a mensagem. Após o número X de vezes, a mensagem é enviada para uma DLQ, que traduzindo para o português é &#8220;fila-morta&#8221;. É este o ponto que estamos monitorando na nossa aplicação.</p>
<p>Criamos um método JMX que é chamado pelo Nagios de tempos em tempos, e que retorna OK se não existe nenhuma mensagem na DLQ, e NOK cc.</p>
<p>Caso retorne NOK, a minha equipe é avisada para que entre em ação e investigar o porquê da mensagem ter ido para a DLQ, e após isso, resgatar a mensagem da DLQ caso necessário.</p>
<p>O código para fazer isso é o seguinte:</p>
<pre name="code" class="java">
public String validateMessagesSentToDLQ() {
   logger.info("+++++ Validando se ha ou nao mensagens na DLQ +++++");
   ObjectName name = null;
   List&lt;SpyMessage&gt; listMessages = null;
   String ret = RETURN_NOK;

   try {
      name = new ObjectName("jboss.mq.destination:service=Queue,name=DLQ");
      listMessages = (List&lt;SpyMessage&gt;) getRmiAdaptor().invoke(name, "listMessages", null, null);
      logger.info("Quantidade de mensages na DLQ: " + listMessages.size());
      if (listMessages.size() == 0) {
         ret = RETURN_OK;
      }
   } catch (Exception e) {
      logger.error("Problemas ao verificar se há mensagens na DLQ!", e);
   }
   return ret;
}
</pre>
<p>Este código funciona no JBoss 4.0.4. Não sei dizer se funciona em outros servidores ou versões do JBoss, mas se não funcionar, não deve ser difícil adaptar ele.</p>
<p>Bom, tá aí a dica! Recomendo essa monitoração. Já nos ajudou bastante aqui no UOL!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2009/06/monitorando-arquiteturas-jms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Scheduler do JBoss rodando uma hora depois do configurado</title>
		<link>http://www.hespanha.com.br/blog/2009/06/scheduler-do-jboss-rodando-uma-hora-depois-do-configurado/</link>
		<comments>http://www.hespanha.com.br/blog/2009/06/scheduler-do-jboss-rodando-uma-hora-depois-do-configurado/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 20:48:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[jboss]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=21</guid>
		<description><![CDATA[Nós passamos por um problema curioso no projeto que eu estou trabalhando aqui no UOL. Nós tinhamos um processo batch que estava configurado para rodar todos os dias as 3:00 da manhã. Esse processo batch era iniciado via scheduler do Jboss. O problema é que surpreendentemente o processo ao invez de rodar as 3:00 da [...]]]></description>
			<content:encoded><![CDATA[<p>Nós passamos por um problema curioso no projeto que eu estou trabalhando aqui no UOL. Nós tinhamos<br />
um processo batch que estava configurado para rodar todos os dias as 3:00 da manhã. Esse processo<br />
batch era iniciado via scheduler do Jboss. O problema é que surpreendentemente o processo ao invez<br />
de rodar as 3:00 da manhã, começpi a rodar as 4:00 da manhã sem nenhum motivo aparente.</p>
<p>A configuração estava feita da seguinte forma:</p>
<pre name="code" class="xml">
&lt;mbean code="org.jboss.varia.scheduler.Scheduler"
name="jboss.docs:service=MyScheduler"&gt;
&lt;attribute name="TimerName"&gt;jboss:service=MyTimer&lt;/attribute&gt;
&lt;attribute name="SchedulableClass"&gt;br.com.uol.MyScheduler&lt;/attribute&gt;
&lt;attribute name="StartAtStartup"&gt;true&lt;/attribute&gt;
&lt;attribute name="DateFormat"&gt;dd/MM/yyyy HH:mm&lt;/attribute&gt;
&lt;attribute name="InitialStartDate"&gt;01/01/2006 03:00&lt;/attribute&gt;
&lt;attribute name="SchedulePeriod"&gt;86400000&lt;/attribute&gt;&lt;!-- Roda uma vez por dia --&gt;
&lt;attribute name="InitialRepetitions"&gt;-1&lt;/attribute&gt;
&lt;depends&gt;administration:custom=MyJMX&lt;/depends&gt;
&lt;depends&gt;
&lt;mbean code="javax.management.timer.Timer"
name="jboss:service=MyTimer"/&gt;
&lt;/depends&gt;

&lt;/mbean&gt;
</pre>
<p>Foram levantadas hipóteses que o horário da máquina estava configurado errado, que o timezone estava errado, que<br />
o horário de verão estava configurado errado etc. A gente investigou uma por uma e tudo estava OK.</p>
<p>Até que começou a fase do desespero, de começar a etapa de tentar resolver o problema por tentativa e erro, e dessa<br />
forma, descobrimos o problema.</p>
<p>Por uma razão desconhecida, se o campo &#8220;InitialStartDate&#8221; é configurado para alguma data dentro do horário de verão,<br />
ele só inicia no horário correto quando estamos no horário de verão. Para resolver esse problema, nós apelamos<br />
e mudamos este campo para 01/09/2006, e finalmente o scheduler começou a rodar conforme esperado, as 3:00 da manhã.</p>
<p>Fica aí a dica para caso alguém também passe por este problema. A versão do JBoss usada é 4.0.4_GA.</p>
<p>É impressionante como horário de verão sempre traz problemas, mesmo a cada ano a gente cercando cada vez mais, sempre<br />
tem algum efeito colateral!</p>
<p>[]&#8216;s e até a próxima.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2009/06/scheduler-do-jboss-rodando-uma-hora-depois-do-configurado/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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>
		<item>
		<title>Cuidados com o uso de enum no Java</title>
		<link>http://www.hespanha.com.br/blog/2008/06/cuidados-com-o-uso-de-enum-no-java/</link>
		<comments>http://www.hespanha.com.br/blog/2008/06/cuidados-com-o-uso-de-enum-no-java/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 22:28:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=10</guid>
		<description><![CDATA[É preciso tomar cuidado quando você está usando uma enum como retorno de um Session Bean. Tanto o servidor quanto o cliente precisam estar sempre com a mesma versão da enum. Caso você altere a enum do lado do servidor, mas não mudar a versão que está no cliente, se por um acaso a constante [...]]]></description>
			<content:encoded><![CDATA[<p>É preciso tomar cuidado quando você está usando uma enum como retorno de um Session Bean. Tanto o servidor quanto o cliente precisam estar sempre com a mesma versão da enum. Caso você altere a enum do lado do servidor, mas não mudar a versão que está no cliente, se por um acaso a constante que você adicionou no enum for a retornada pelo Session Bean, subirá uma exceção no cliente. Não existe nada parecido com o conceito de serialVersionUid com o uso de enums.</p>
<p>Por um lado, essa característica é boa, pois força o seu cliente a sempre estar com a mesma versão da que está rodando no servidor. Mas, por outro lado, as vezes você quer adicionar uma constante ao seu enum, que em nada interfirá na maioria dos sistemas que estão usando o seu. Por exemplo:</p>
<p>-Um determinado sistema trata retornos com status PAGO e NÂO_PAGO.</p>
<p>Você quer adicionar um novo status de ANALISE na sua enum. Em tese, esse status não interessa para o sistema descrito acima, então, caso ele receba esse status ele poderia simplesmente ignora-lo. Mas com enum isso não é possível. Ou seja, se você tem 50 sistemas usuários do seu, e quer adicionar um novo status que só interessa para um deles, você é obrigado a forçar os 50 sistemas a atualizarem a versão &#8220;client&#8221; que receberam do seu.</p>
<blockquote></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2008/06/cuidados-com-o-uso-de-enum-no-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss: Qual tipo de datasoruce eu uso?</title>
		<link>http://www.hespanha.com.br/blog/2008/06/jboss-qual-tipo-de-datasoruce-eu-uso/</link>
		<comments>http://www.hespanha.com.br/blog/2008/06/jboss-qual-tipo-de-datasoruce-eu-uso/#comments</comments>
		<pubDate>Mon, 23 Jun 2008 16:37:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=8</guid>
		<description><![CDATA[Vi pelas estatisticas do blog que bastante gente cai aqui pesquisando sobre como configurar o Datasource no Jboss, por isso resolvi fazer esse post. O primeiro ponto é que o site da Jboss tem uma documentação muito boa ensinando fazer essa configuração. Segue o link: http://wiki.jboss.org/wiki/ConfigDataSources Porém, uma dúvida que o pessoal costuma ter é [...]]]></description>
			<content:encoded><![CDATA[<p>Vi pelas estatisticas do blog que bastante gente cai aqui pesquisando sobre como configurar o Datasource<br />
no Jboss, por isso resolvi fazer esse post.</p>
<p>O primeiro ponto é que o site da Jboss tem uma documentação muito boa ensinando fazer essa configuração.<br />
Segue o link: <a title="http://wiki.jboss.org/wiki/ConfigDataSources" href="http://wiki.jboss.org/wiki/ConfigDataSources" target="_blank">http://wiki.jboss.org/wiki/ConfigDataSources</a></p>
<p>Porém, uma dúvida que o pessoal costuma ter é quando usar &lt;local-tx-datasource&gt; e quando usar &lt;xa-datasource&gt;.</p>
<p>Bom, a principal diferença entre os dois é que o &lt;xa-datasource&gt; suporta transações distribuidas, ou seja, vamos supor que você tem um método que realiza mudanças em duas tabelas. Até ai tudo bem. Porém, estas tabelas estão<br />
em banco de dados diferentes. É nessa situação que você precisa de um &lt;xa-datasource&gt;. Se der algum problema e você<br />
precisar fazer rollback, você precisa fazer rollback nas duas bases de dados. Um XADataSource fornece essa<br />
caracteristica ao seu sistema. Ele gerencia a sua transação que passa por vários bancos de dados.</p>
<p>Se sua aplicação lida apenas com um banco de dados em uma máquina, o que você precisa é simplesmente de um &lt;local-tx-datasource&gt;.</p>
<p>Então é isso.</p>
<p>[]&#8216;s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2008/06/jboss-qual-tipo-de-datasoruce-eu-uso/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Datasources XA e suas peculiaridades</title>
		<link>http://www.hespanha.com.br/blog/2008/06/datasources-xa-e-suas-peculiaridades/</link>
		<comments>http://www.hespanha.com.br/blog/2008/06/datasources-xa-e-suas-peculiaridades/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 15:50:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[java jboss XA]]></category>

		<guid isPermaLink="false">http://www.hespanha.com.br/blog/?p=3</guid>
		<description><![CDATA[Tivemos uma grande dor de cabeça por causa de um problema com o banco de dados aqui na empresa. Por algum motivo, a equipe de DBAs precisou reiniciar um dos bancos de dados utilizado na nossa aplicação. Após isso, nossa aplicação não conseguiu mais se conectar com o banco de dados. Nosso sistema é uma [...]]]></description>
			<content:encoded><![CDATA[<p>Tivemos uma grande dor de cabeça por causa de um problema com o banco de dados aqui na empresa. Por algum motivo, a equipe de DBAs precisou reiniciar um dos bancos de dados utilizado na nossa aplicação. Após isso, nossa aplicação  não conseguiu mais se conectar com o banco de dados. Nosso sistema é uma aplicação EJB que roda sobre o JBoss, nós usamos o pool de conexões do próprio Jboss e nossos datasources são XA.</p>
<p>Após diversos testes, descobrimos que para que as conexões do pool sejam recuperadas é preciso adicionar o seguinte parâmetro nas configurações do datasource:</p>
<p><code>[sourcecode language='xml']&lt;valid-connection-checker-class-name&gt;org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker&lt;/valid-connection-checker-class-name&gt;</code>[/sourcecode]<br />
Esse parâmetro faz com que antes do pool devolver uma conexão, ele a valida, e se ela estiver inválida, ele descarta essa conexão e cria uma nova. Ao meu ver, isso deveria ser algo feito por &#8220;default&#8221;, mas infelizmente não é.</p>
<p>Esse problema só ocorre se você usa datasources XA. Com datasources &#8220;normais&#8221; nem é preciso adicionar este parâmetro.</p>
<p>Nós aqui da equipe também executamos outros testes como trocar a senha do banco de dados por exemplo, e neste caso, mesmo sem o parâmetro o sistema consegue se recuperar.</p>
<p>Então, pra finalizar, segue a configuração completa de um datasource XA:</p>
<p><code>[sourcecode language='xml']&lt;xa-datasource&gt;<br />
&lt;jndi-name&gt;NameDS&lt;/jndi-name&gt;<br />
&lt;track-connection-by-tx/&gt;<br />
&lt;isSameRM-override-value&gt;false&lt;/isSameRM-override-value&gt;<br />
&lt;xa-datasource-class&gt;oracle.jdbc.xa.client.OracleXADataSource&lt;/xa-datasource-class&gt;<br />
&lt;xa-datasource-property name="URL"&gt;jdbc:oracle:thin:@host:1521:SID&lt;/xa-datasource-property&gt;<br />
&lt;xa-datasource-property name="User"&gt;user&lt;/xa-datasource-property&gt;<br />
&lt;xa-datasource-property name="Password"&gt;password&lt;/xa-datasource-property&gt;             &lt;exception-sorter-class-name&gt;org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter&lt;/exception-sorter-class-name&gt;<br />
&lt;no-tx-separate-pools/&gt;<br />
&lt;max-pool-size&gt;3&lt;/max-pool-size&gt;<br />
&lt;valid-connection-checker-class-name&gt;org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker&lt;/valid-connection-checker-class-name&gt;</code></code></p>
<p></xa-datasource>[/sourcecode]</p>
<p>Espero que essas dicas sejam utéis e possam ajudar a outros também que tiverem esse mesmo problema.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hespanha.com.br/blog/2008/06/datasources-xa-e-suas-peculiaridades/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
