JBoss: Qual tipo de datasoruce eu uso?

June 23rd, 2008

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 é quando usar <local-tx-datasource> e quando usar <xa-datasource>.

Bom, a principal diferença entre os dois é que o <xa-datasource> 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
em banco de dados diferentes. É nessa situação que você precisa de um <xa-datasource>. Se der algum problema e você
precisar fazer rollback, você precisa fazer rollback nas duas bases de dados. Um XADataSource fornece essa
caracteristica ao seu sistema. Ele gerencia a sua transação que passa por vários bancos de dados.

Se sua aplicação lida apenas com um banco de dados em uma máquina, o que você precisa é simplesmente de um <local-tx-datasource>.

Então é isso.

[]‘s

Endereço do meu antigo blog

June 20th, 2008

Esse post é apenas para deixar uma referência aqui para o meu blog antigo, para que assim, quem entre pela primeira vez neste novo blog possa ver o que eu já escrevi.

Eu tentei migrar o conteúdo do antigo blog para este novo mas não obtive sucesso. Eu tentei fazer a importação via RSS mas não funcionou. :-( Acho que o UOL não quer colaborar muito com quem quer migrar do servidor de blogs deles para algum outro.

Mas enfim, chega de papo! O endereço do meu antigo blog é:  http://lavh.zip.net

Datasources XA e suas peculiaridades

June 13th, 2008

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.

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:

[sourcecode language='xml']<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>[/sourcecode]
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 “default”, mas infelizmente não é.

Esse problema só ocorre se você usa datasources XA. Com datasources “normais” nem é preciso adicionar este parâmetro.

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.

Então, pra finalizar, segue a configuração completa de um datasource XA:

[sourcecode language='xml']<xa-datasource>
<jndi-name>NameDS</jndi-name>
<track-connection-by-tx/>
<isSameRM-override-value>false</isSameRM-override-value>
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
<xa-datasource-property name="URL">jdbc:oracle:thin:@host:1521:SID</xa-datasource-property>
<xa-datasource-property name="User">user</xa-datasource-property>
<xa-datasource-property name="Password">password</xa-datasource-property> <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
<no-tx-separate-pools/>
<max-pool-size>3</max-pool-size>
<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name>

[/sourcecode]

Espero que essas dicas sejam utéis e possam ajudar a outros também que tiverem esse mesmo problema.