JBoss Community

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction

created by Siddhesh M in jBPM Development - View the full discussion

Hi ,

 

   I am using JBPM 4.3. I can see following exception in production env.

 

<Nov 12, 2011 3:03:10 PM CET> <Notice> <Stdout> <BEA-000000> <12-Nov-2011 15:03:10.576 | ERROR | DispatcherThread | .AbstractFlushingEventListener | Could not synchronize database state with session

org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [org.jbpm.pvm.internal.model.op.ExecuteActivityMessage#683270098]

        at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1792)

        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2435)

        at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2335)

        at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2635)

        at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115)

        at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)

        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)

        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)

        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)

        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)

        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)

        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)

        at org.hibernate.transaction.CacheSynchronization.beforeCompletion(CacheSynchronization.java:88)

        at weblogic.transaction.internal.ServerSCInfo.doBeforeCompletion(ServerSCInfo.java:1224)

        at weblogic.transaction.internal.ServerSCInfo.callBeforeCompletions(ServerSCInfo.java:1199)

        at weblogic.transaction.internal.ServerSCInfo.startPrePrepareAndChain(ServerSCInfo.java:118)

        at weblogic.transaction.internal.ServerTransactionImpl.localPrePrepareAndChain(ServerTransactionImpl.java:1310)

        at weblogic.transaction.internal.ServerTransactionImpl.globalPrePrepare(ServerTransactionImpl.java:2126)

        at weblogic.transaction.internal.ServerTransactionImpl.internalCommit(ServerTransactionImpl.java:266)

        at weblogic.transaction.internal.ServerTransactionImpl.commit(ServerTransactionImpl.java:233)

        at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:286)

        at weblogic.transaction.internal.TransactionManagerImpl.commit(TransactionManagerImpl.java:280)

        at org.jbpm.pvm.internal.tx.JtaTransaction.commit(JtaTransaction.java:104)

        at org.jbpm.pvm.internal.tx.JtaTransactionInterceptor.executeInNewTx(JtaTransactionInterceptor.java:89)

        at org.jbpm.pvm.internal.tx.JtaTransactionInterceptor.execute(JtaTransactionInterceptor.java:66)

        at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)

        at org.jbpm.pvm.internal.tx.JtaRetryInterceptor.executeWithRetry(JtaRetryInterceptor.java:52)

        at org.jbpm.pvm.internal.tx.JtaRetryInterceptor.execute(JtaRetryInterceptor.java:45)

 

<Nov 12, 2011 3:03:10 PM CET> <Notice> <Stdout> <BEA-000000> <12-Nov-2011 15:03:10.579 | ERROR | DispatcherThread | l.jobexecutor.DispatcherThread | excep

tion in job executor thread. waiting 5000 milliseconds

org.jbpm.api.JbpmException: couldn't rollback: Transaction does not exist

        at org.jbpm.pvm.internal.tx.JtaTransaction.rollback(JtaTransaction.java:96)

        at org.jbpm.pvm.internal.tx.JtaTransactionInterceptor.executeInNewTx(JtaTransactionInterceptor.java:92)

        at org.jbpm.pvm.internal.tx.JtaTransactionInterceptor.execute(JtaTransactionInterceptor.java:66)

        at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)

        at org.jbpm.pvm.internal.tx.JtaRetryInterceptor.executeWithRetry(JtaRetryInterceptor.java:52)

        at org.jbpm.pvm.internal.tx.JtaRetryInterceptor.execute(JtaRetryInterceptor.java:45)

        at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)

        at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)

        at org.jbpm.pvm.internal.svc.SkipInterceptor.execute(SkipInterceptor.java:43)

        at org.jbpm.pvm.internal.jobexecutor.DispatcherThread.acquireJobs(DispatcherThread.java:126)

        at org.jbpm.pvm.internal.jobexecutor.DispatcherThread.run(DispatcherThread.java:67)

Caused by: java.lang.IllegalStateException: Transaction does not exist

        at weblogic.transaction.internal.TransactionManagerImpl.rollback(TransactionManagerImpl.java:301)

        at weblogic.transaction.internal.TransactionManagerImpl.rollback(TransactionManagerImpl.java:296)

        at org.jbpm.pvm.internal.tx.JtaTransaction.rollback(JtaTransaction.java:94)

        ... 10 more>

 

 

  Anybody has any clue.

 

  What I have noted is though above exception is comming my workflow get completed successully. What I think two different thread trying to access same data , one successufully updates the data and which is why the workflow gets completed , but the other one keeps retrying for many times.  Please let me know any solution to such race condition.

 

Thanks.

Reply to this message by going to Community

Start a new discussion in jBPM Development at Community