JBCache 2.0.0 / Weblogic 9: Exception while trying to rollba
spennec Jan 23, 2008 8:30 AMI'm experiencing a strange problem, with TreeCache seemingly trying to rollback a Weblogic transaction.
Here's the setup:
- Two weblogic 9 servers, running a clustered application.
- Each night, the cached data must be refreshed. Since this process requires other external processes to succeed before running, it is triggered by an external client. It's a simple Java app that calls two methods in a stateless session bean.
The cache reloader client calls one instance. This instance reloads its cache. When a specific event occurs, the second instances catches it thanks to a CacheListener and starts its own reload. We do not use replication for this reloading process since the data that would be transfered at commit-time is too big. While the cache normally uses replications, for daily operations, the reloading puts the cache in LOCAL mode, only for the reloading duration.
The following exception was encountered on the client app that triggered the reloading of the cache. On the servers, there were absolutely no exceptions, and everything went smoothly. All logs show that the two instances reloaded their cached data successfully.
Here is the stacktrace:
###### CLIENT APPLICATION com.myCompany.commons.exception.SystemException: See nested for more details. at com.myCompany.dac.ejb.DacRemoteExceptionInterceptor.handleRemote(DacRemoteExceptionInterceptor.java:55) at com.myCompany.dac.ejb.DacRemoteExceptionInterceptor.execute(DacRemoteExceptionInterceptor.java:22) at com.myCompany.util.bizdel.BusinessDelegateInvocationContext.proceed(BusinessDelegateInvocationContext.java:46) at com.myCompany.util.bizdel.BusinessDelegate$1.invoke(BusinessDelegate.java:286) at $Proxy6.resetAndLoadCache(Unknown Source) at com.myCompany.dac.cache.DacCacheReloader.main(DacCacheReloader.java:24) ###### CAUGHT EXCEPTION Caused by: javax.transaction.TransactionRolledbackException: BEA1-2AB0DCA982790F4DB46C: weblogic.transaction.internal.AppSetRollbackOnlyException at weblogic.transaction.internal.TransactionImpl.setRollbackOnly(TransactionImpl.java:524) at org.jboss.cache.interceptors.TxInterceptor$LocalSynchronizationHandler.beforeCompletion(TxInterceptor.java:1172) at org.jboss.cache.interceptors.OrderedSynchronizationHandler.beforeCompletion(OrderedSynchronizationHandler.java:84) at weblogic.transaction.internal.ServerSCInfo.doBeforeCompletion(ServerSCInfo.java:1150) at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:1128) at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:115) at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1288) at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:2098) at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:259) at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:228) at weblogic.ejb.container.internal.BaseEJBObject.postInvoke1(BaseEJBObject.java:539) at weblogic.ejb.container.internal.StatelessEJBObject.postInvoke1(StatelessEJBObject.java:72) at weblogic.ejb.container.internal.BaseEJBObject.postInvokeTxRetry(BaseEJBObject.java:374) at com.myCompany.dac.svc.ejb.session.DacAdmin_accoim_EOImpl.resetAndLoadCache(DacAdmin_accoim_EOImpl.java:191) at com.myCompany.dac.svc.ejb.session.DacAdmin_accoim_EOImpl_WLSkel.invoke(ILweblogic.rmi.spi.InboundRequest; Lweblogic.rmi.spi.OutboundResponse;Ljava.lang.Object;)Lweblogic.rmi.spi.OutboundResponse;(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:548) at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224) at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:438) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:388) at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:57) at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:965) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) at weblogic.work.ExecuteThread.run(ExecuteThread.java:181) ; nested exception is: weblogic.transaction.internal.AppSetRollbackOnlyException at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:211) at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:338) at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:252) at com.myCompany.myProject.svc.ejb.session.myProjectAdmin_accoim_EOImpl_921_WLStub.resetAndLoadCache(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at com.myCompany.util.bizdel.BusinessDelegateInvocationContext.proceed(BusinessDelegateInvocationContext.java:49) at com.myCompany.dac.ejb.DacRemoteExceptionInterceptor.execute(DacRemoteExceptionInterceptor.java:20) ... 4 more Caused by: weblogic.transaction.internal.AppSetRollbackOnlyException at weblogic.transaction.internal.TransactionImpl.setRollbackOnly(TransactionImpl.java:524) at org.jboss.cache.interceptors.TxInterceptor$LocalSynchronizationHandler.beforeCompletion(TxInterceptor.java:1172) at org.jboss.cache.interceptors.OrderedSynchronizationHandler.beforeCompletion(OrderedSynchronizationHandler.java:84) at weblogic.transaction.internal.ServerSCInfo.doBeforeCompletion(ServerSCInfo.java:1150) at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:1128) at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:115) at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1288) at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:2098) at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:259) at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:228) at weblogic.ejb.container.internal.BaseEJBObject.postInvoke1(BaseEJBObject.java:539) at weblogic.ejb.container.internal.StatelessEJBObject.postInvoke1(StatelessEJBObject.java:72) at weblogic.ejb.container.internal.BaseEJBObject.postInvokeTxRetry(BaseEJBObject.java:374) at com.myCompany.dac.svc.ejb.session.DacAdmin_accoim_EOImpl.resetAndLoadCache(DacAdmin_accoim_EOImpl.java:191) at com.myCompany.dac.svc.ejb.session.DacAdmin_accoim_EOImpl_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:548) at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224) at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:438) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147) at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:388) at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:57) at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:965) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
The org.jboss lines seem to show that some JBossCache component provoked an Exception while trying to trigger the rollback. Unfortunately there is no message explaining the reason of the problem.
I am also very confused by the fact that there are absolutely no Exceptions on the servers.
- Is is correct to say that JBossCache was trying to mark the weblogic transaction as rollbacked but didn't succeed?
- How can I know which problem lead JBossCache to trigger the rollback?
- Is that a JBossCache bug?
- What is the state of the cache after such an Exception?
- Why is this exception not caused by an Exception on one of the servers? (or at least: why is there no trace of this exception on any of the servers?)
Thanks for your answers,
Sebastien