XA Exception DSRA0304E, DSRA0302E, WTRN0037W

Erro:

[17/10/11 18:02:00:446 BRST] 00000023 WSRdbXaResour E DSRA0304E: XAException occurred. XAException contents and details are: The cause is : null.

[17/10/11 18:02:00:447 BRST] 00000023 WSRdbXaResour E DSRA0302E: XAException occurred. Error code is: XAER_RMERR (-3). Exception is: <null>

[17/10/11 18:02:00:447 BRST] 00000023 XARminst E WTRN0037W: The transaction service encountered an error on an xa_recover operation. The resource was com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl@69ff69ff. The error code was XAER_RMERR. The exception stack trace follows: javax.transaction.xa.XAException

at oracle.jdbc.xa.OracleXAResource.recover(OracleXAResource.java:703)

at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.recover(WSRdbXaResourceImpl.java:1086)

at com.ibm.ws.Transaction.JTA.XARminst.recover(XARminst.java:141)

at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:626)

at com.ibm.tx.jta.PartnerLogTable.recover(PartnerLogTable.java:389)

at com.ibm.tx.jta.RecoveryManager.resync(RecoveryManager.java:1530)

at com.ibm.tx.jta.RecoveryManager.performResync(RecoveryManager.java:2265)

at com.ibm.ws.tx.jta.RecoveryManager.performResync(RecoveryManager.java:114)

at com.ibm.tx.jta.RecoveryManager.run(RecoveryManager.java:2218)

at java.lang.Thread.run(Thread.java:736)

Descrição:

Este problema ocorre porque, uma aplicação falhou em dar commit ou rollback em uma transação, então ele fica pendente. O Websphere armazena estas informações em arquivos de log (log1 e log2):

[WAS_ROOT]/profiles/[PROFILE]/tranlog/[CÉLULA]/[NÓ]/[SERVIDOR]/transaction/partnerlog/

e

[WAS_ROOT]/profiles/[PROFILE]/tranlog/[CÉLULA]/[NÓ]/[SERVIDOR]/transaction/tranlog/

Este erro ocorre porque o Websphere não consegue apagar a transação que ficou armazenada no Oracle. A cada período de tempo o Websphere acessa o banco de dados e tenta encerrar as transações pendentes ou sincronizar os últimos status nos arquivos acima. Se o Websphere não consegue sincronizar, seja porque as transações foram limpas no banco ou por falta de acesso, este erro ocorre.

Solução: Esta solução é divida em duas partes:

1) Acessar os dois diretórios acima e apagar os arquivos log1 e log2 de ambos (desta forma o problema deixa de ocorrer até que outra transação fique pendente, sendo necessário aplicar uma das soluções listadas abaixo para uma solução permanente);

2) Verificar com o time de banco de dados se as permissões estão corretas. Podemos verificar isto nos seguintes links:

a. Item Transaction recovery failure (for XA data sources) do seguinte link: http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frtrb_dsaccess2.html

b. Outra descrição: https://www-304.ibm.com/support/docview.wss?uid=swg21196663

c. Ainda este outro: http://www-01.ibm.com/support/docview.wss?uid=swg21215890