Galera tô com um problema que ta meio difícil resolver. Se alguém conseguir ajudar eu agradeço muito!
Seguinte, no sistema que estou trabalhando (struts 1.2 e ejb 2.1) existe uma action que quando é chamada executa uma serie de chamadas a serviços remotos para validar algumas contas. Dentre os serviço existem diversas chamadas a filas de mensagens. Se algum serviço esta fora, simplesmente gravo o histórico da execução e envio um email inforando o pessoal da infra.
O problema é que o numero de validações aumentou, e no meu teste reparei que ao verificar o último serviço, este esta fora do ar, e ao tentar fazer um lookup para envio do email o sistema dá um rollback exception.
Fiz alguns testes e descobri que o problema nao esta na validação: removi algumas e a minha última funcionou (mesmo estando fora). Descobri também que se nenhum serviço estiver fora o sistema tudo funciona sem problemas.
Isolando o problema, tudo leva a crer que a action esta sobrecarregada: existem muitas rotinas sendo executadas e quando chega no fim, se algum serviço esta fora, ele perde mais tempo tentando obter resposta que estoura algum time out relacionado a action, forçando um rollback e fazendo estourar o erro quando tenho fazer o lookup do ejb no final. A minha dúvida é: estou certo? Isso é possível? Onde posso configurar esse tempo de timeout?
O erro continua… ninguem tem uma ideia de como fazer isso?
Tem como eu em algum lugar onde estão todas as transações ativas, para pelo menos eu saber qual é a que está estourando o tempo de conexão?
Bom, vou colocando aqui as coisas conforme for descobrindo hehe
Dei uma boa debugada no sistema, mas não adiantou muita coisa. O Log do servidor indica algum erro ocorreu (sem informar qual) e que foi marcada a UserTransaction com setRollBackOnly. Como disse antes, acredito que foi marcado com rollback a transaction pois foi atingido o tempo de timeout, mas não consigo verificar isso. Dentre os diversos logs, estão os seguintes:
Exception = org.omg.CORBA.TRANSACTION_ROLLEDBACK
Source = com.ibm.ejs.container.RemoteExceptionMappingStrategy.setUncheckedException
probeid = 200
Stack Dump = org.omg.CORBA.TRANSACTION_ROLLEDBACK: javax.transaction.TransactionRolledbackException: ; nested exception is:
com.ibm.websphere.csi.CSITransactionRolledbackException: Transaction rolled back vmcid: 0x0 minor code: 0 completed: No
at java.lang.Throwable.<init>(Throwable.java)
at java.lang.Throwable.<init>(Throwable.java)
at org.omg.CORBA.SystemException.<init>(SystemException.java:81)
at org.omg.CORBA.TRANSACTION_ROLLEDBACK.<init>(TRANSACTION_ROLLEDBACK.java:70)
at com.ibm.ejs.csi.OrbUtilsImpl.mapException(OrbUtilsImpl.java:76)
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapCSIException(RemoteExceptionMappingStrategy.java:305)
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.mapException(RemoteExceptionMappingStrategy.java:102)
at com.ibm.ejs.container.RemoteExceptionMappingStrategy.setUncheckedException(RemoteExceptionMappingStrategy.java:202)
at com.ibm.ejs.container.EJSDeployedSupport.setUncheckedException(EJSDeployedSupport.java:296)
at com.ibm.ejs.container.EJSContainer.preInvoke_internal(EJSContainer.java:2787)
at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2487)
at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2472)
Exception = com.ibm.websphere.csi.CSITransactionRolledbackException
Source = com.ibm.ejs.container.RemoteExceptionMappingStrategy.setUncheckedException
probeid = 200
Stack Dump = com.ibm.websphere.csi.CSITransactionRolledbackException: Transaction rolled back
at java.lang.Throwable.<init>(Throwable.java)
at java.lang.Throwable.<init>(Throwable.java)
at java.rmi.RemoteException.<init>(RemoteException.java:71)
at com.ibm.websphere.csi.CSIException.<init>(CSIException.java:60)
at com.ibm.ejs.csi.TransactionControlImpl.getCurrentTransactionalUOW(TransactionControlImpl.java:674)
at com.ibm.ejs.csi.TransactionControlImpl.preInvoke(TransactionControlImpl.java:365)
at com.ibm.ejs.container.EJSContainer.preInvoke_internal(EJSContainer.java:2733)
at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2487)
at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2472)
Exception = com.ibm.websphere.csi.CSITransactionRolledbackException
Source = com.ibm.ejs.container.EJSContainer.preInvoke_internal
probeid = 2038
Stack Dump = com.ibm.websphere.csi.CSITransactionRolledbackException: Transaction rolled back
at java.lang.Throwable.<init>(Throwable.java)
at java.lang.Throwable.<init>(Throwable.java)
at java.rmi.RemoteException.<init>(RemoteException.java:71)
at com.ibm.websphere.csi.CSIException.<init>(CSIException.java:60)
at com.ibm.ejs.csi.TransactionControlImpl.getCurrentTransactionalUOW(TransactionControlImpl.java:674)
at com.ibm.ejs.csi.TransactionControlImpl.preInvoke(TransactionControlImpl.java:365)
at com.ibm.ejs.container.EJSContainer.preInvoke_internal(EJSContainer.java:2733)
at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2487)
at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2472)
Exception = com.ibm.websphere.csi.CSITransactionRolledbackException
Source = com.ibm.ejs.csi.TransactionControlImpl.preInvoke
probeid = 266
Stack Dump = com.ibm.websphere.csi.CSITransactionRolledbackException: Transaction rolled back
at java.lang.Throwable.<init>(Throwable.java)
at java.lang.Throwable.<init>(Throwable.java)
at java.rmi.RemoteException.<init>(RemoteException.java:71)
at com.ibm.websphere.csi.CSIException.<init>(CSIException.java:60)
at com.ibm.ejs.csi.TransactionControlImpl.getCurrentTransactionalUOW(TransactionControlImpl.java:674)
at com.ibm.ejs.csi.TransactionControlImpl.preInvoke(TransactionControlImpl.java:365)
at com.ibm.ejs.container.EJSContainer.preInvoke_internal(EJSContainer.java:2733)
at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2487)
at com.ibm.ejs.container.EJSContainer.preInvoke(EJSContainer.java:2472)
Exception = javax.transaction.xa.XAException
Source = com.ibm.ws.Transaction.JTA.RegisteredResources
probeid = 651
Stack Dump = javax.transaction.xa.XAException
at java.lang.Throwable.<init>(Throwable.java)
at javax.transaction.xa.XAException.<init>(XAException.java:63)
at com.ibm.ws.Transaction.JTS.CORBAResourceWrapper.processCORBASystemException(CORBAResourceWrapper.java:450)
at com.ibm.ws.Transaction.JTS.CORBAResourceWrapper.rollback(CORBAResourceWrapper.java:348)
at com.ibm.ws.Transaction.JTA.RegisteredResources.distributeOutcome(RegisteredResources.java:1112)
at com.ibm.ws.Transaction.JTA.RegisteredResources.distributeRollback(RegisteredResources.java:1838)
at com.ibm.ws.Transaction.JTA.TransactionImpl.internalRollback(TransactionImpl.java:1461)
at com.ibm.ws.Transaction.JTA.TransactionImpl.rollback(TransactionImpl.java:1129)
at com.ibm.ws.Transaction.JTA.TranManagerImpl.rollback(TranManagerImpl.java:177)
at com.ibm.ws.Transaction.JTA.TranManagerSet.rollback(TranManagerSet.java:228)
at com.ibm.ejs.csi.TranStrategy.rollback(TranStrategy.java:908)
at com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java:155)
at com.ibm.ejs.csi.TranStrategy.handleException(TranStrategy.java:210)
at com.ibm.ejs.csi.TransactionControlImpl.postInvoke(TransactionControlImpl.java:567)
at com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java:3038)