[ https://issues.apache.org/jira/browse/JCR-3422?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13462884#comment-13462884 ]
Amit Parikh commented on JCR-3422: ---------------------------------- This issue occurs when concurrently multiple XA transaction commit are occurring on same set of nodes. This issue is similar to JCR-1554 In our scenario, there are two threads T1 and T2. Thread T1 started XA transaction, called node.setProperty() on Node X, in the meantime thread T2 started XA transaction and called node.setProperty() on same Node X. Now Thread T1 committed transaction which goes fine. When Thread T2 calls commit transaction, Jackrabbit throws an exception because it seems Jackrabbit compares current state of node with the state it had read before calling setProperty() from Thread T2 and since Thread T1 has committed transaction, node state has changed causing StaleItemStateException. > Jackrabbit throwing StaleItemStateException on XA transaction commit > -------------------------------------------------------------------- > > Key: JCR-3422 > URL: https://issues.apache.org/jira/browse/JCR-3422 > Project: Jackrabbit Content Repository > Issue Type: Bug > Components: jackrabbit-core, transactions > Affects Versions: 2.4.1, 2.4.2, 2.4.3 > Environment: Linux (RHEL 6.3), JDK 1.7, Glassfish 3.1.2 > Reporter: Amit Parikh > Priority: Blocker > > The issue occurs when concurrent XA transaction commits are happening. > On XA transaction commit call from MDB (Message Driven Bean) container > following exception is thrown by Jackrabbit > javax.transaction.xa.XAException > at > org.apache.jackrabbit.core.TransactionContext.prepare(TransactionContext.java:160) > at > org.apache.jackrabbit.core.XASessionImpl.prepare(XASessionImpl.java:310) > at > org.apache.jackrabbit.jca.TransactionBoundXAResource.prepare(TransactionBoundXAResource.java:78) > at > com.sun.enterprise.resource.XAResourceWrapper.prepare(XAResourceWrapper.java:111) > at com.sun.jts.jtsxa.OTSResourceImpl.prepare(OTSResourceImpl.java:273) > at > com.sun.jts.CosTransactions.RegisteredResources.distributePrepare(RegisteredResources.java:518) > at > com.sun.jts.CosTransactions.TopCoordinator.prepare(TopCoordinator.java:1846) > at > com.sun.jts.CosTransactions.CoordinatorTerm.commit(CoordinatorTerm.java:357) > at > com.sun.jts.CosTransactions.TerminatorImpl.commit(TerminatorImpl.java:250) > at > com.sun.jts.CosTransactions.CurrentImpl.commit(CurrentImpl.java:633) > at > com.sun.jts.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:332) > at > com.sun.enterprise.transaction.jts.JavaEETransactionManagerJTSDelegate.commitDistributedTransaction(JavaEETransactionManagerJTSDelegate.java:174) > at > com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:861) > at > com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5136) > at > com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4901) > at > com.sun.ejb.containers.MessageBeanContainer.afterMessageDeliveryInternal(MessageBeanContainer.java:1211) > at > com.sun.ejb.containers.MessageBeanContainer.afterMessageDelivery(MessageBeanContainer.java:1186) > at > com.sun.ejb.containers.MessageBeanListenerImpl.afterMessageDelivery(MessageBeanListenerImpl.java:86) > at > com.sun.enterprise.connectors.inbound.MessageEndpointInvocationHandler.invoke(MessageEndpointInvocationHandler.java:143) > at $Proxy264.afterDelivery(Unknown Source) > at > com.sun.messaging.jms.ra.OnMessageRunner.run(OnMessageRunner.java:328) > at com.sun.enterprise.connectors.work.OneWork.doWork(OneWork.java:114) > at > com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497) > at > com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540) > Caused by: org.apache.jackrabbit.core.TransactionException: Unable to prepare > transaction. > at > org.apache.jackrabbit.core.state.XAItemStateManager.prepare(XAItemStateManager.java:169) > at > org.apache.jackrabbit.core.TransactionContext.prepare(TransactionContext.java:143) > ... 23 more > Caused by: org.apache.jackrabbit.core.state.StaleItemStateException: > 781c1637-120a-4b6b-8916-d2cb232b9848/{http://www.hitachi-hta.com/iframe/1.0}lastModified > has been modified externally > at > org.apache.jackrabbit.core.state.SharedItemStateManager$Update.begin(SharedItemStateManager.java:673) > at > org.apache.jackrabbit.core.state.SharedItemStateManager.beginUpdate(SharedItemStateManager.java:1467) > at > org.apache.jackrabbit.core.state.XAItemStateManager.prepare(XAItemStateManager.java:163) > ... 24 more -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira