[ 
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

Reply via email to