[
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