jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Amit Parikh (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (JCR-3422) Jackrabbit throwing StaleItemStateException on XA transaction commit
Date Tue, 25 Sep 2012 15:39:08 GMT

    [ 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

Mime
View raw message