I'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
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4122628#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...