Posts Tagged ‘java jboss XA’

Datasources XA e suas peculiaridades

Friday, 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:

<valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.OracleValidConnectionChecker</valid-connection-checker-class-name></code>

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:

<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></code></code>

</xa-datasource>

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