[ 
https://issues.apache.org/jira/browse/JCR-1633?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12601341#action_12601341
 ] 

Roman Puchkovskiy commented on JCR-1633:
----------------------------------------

Node is actually saved (session.save() in one test, testRootNode.save() in the 
another). Yes, it's not _persisted_ immediately, but for the caller who is in 
this transaction this should look like as there's no any transaction. So I 
don't see what is incorrect here.
For instance, for versioning and checkin() there's same situation: you cannot 
checkin a node with unsaved changes, but node which was just created and saved 
still may be checked in in a transaction. Following test passes, while its only 
difference is that it uses checkin() instead of lock():

    public void testCheckinInTx() throws Exception {
        UserTransaction tx = new UserTransactionImpl(superuser);
        tx.begin();
        Node n = testRootNode.addNode(nodeName1);
        n.addMixin(mixVersionable);
        testRootNode.save();
        n.checkin();
        tx.commit();
    }

> When node is created and locked in same transaction, exception is thrown
> ------------------------------------------------------------------------
>
>                 Key: JCR-1633
>                 URL: https://issues.apache.org/jira/browse/JCR-1633
>             Project: Jackrabbit
>          Issue Type: Bug
>          Components: jackrabbit-core, locks, transactions
>    Affects Versions: core 1.4.3, core 1.4.4
>         Environment: Jackrabbit Core 1.4.4, Jencks 2.0, Springmodules 0.8a, 
> Jackrabbit JCA 1.4
>            Reporter: Roman Puchkovskiy
>         Attachments: test-create-and-lock-in-same-tx.zip, XALockTest.java
>
>
> Following code fails when executed inside an XA transaction:
> Node n = session.getRootNode().addNode("n");
> n.addMixin("mix:lockable");
> session.save();
> Lock lock = n.lock(false, false);
> Stacktrace is
> Caused by: javax.transaction.xa.XAException
>       at 
> org.apache.jackrabbit.core.TransactionContext.prepare(TransactionContext.java:155)
>       at 
> org.apache.jackrabbit.core.XASessionImpl.commit(XASessionImpl.java:337)
>       at 
> org.apache.jackrabbit.jca.TransactionBoundXAResource.commit(TransactionBoundXAResource.java:39)
>       at 
> org.apache.geronimo.transaction.manager.WrapperNamedXAResource.commit(WrapperNamedXAResource.java:47)
>       at 
> org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:301)
>       ... 32 more
> Caused by: org.apache.jackrabbit.core.TransactionException: Unable to update.
>       at 
> org.apache.jackrabbit.core.lock.XAEnvironment.prepare(XAEnvironment.java:275)
>       at 
> org.apache.jackrabbit.core.lock.XALockManager.prepare(XALockManager.java:245)
>       at 
> org.apache.jackrabbit.core.TransactionContext.prepare(TransactionContext.java:138)
>       ... 36 more
> Caused by: javax.jcr.ItemNotFoundException: failed to build path of 
> 48fb59d8-ac77-4b9f-8b53-9f2492dca5e5: 48fb59d8-ac77-4b9f-8b53-9f2492dca5e5: 
> 48fb59d8-ac77-4b9f-8b53-9f2492dca5e5
>       at 
> org.apache.jackrabbit.core.HierarchyManagerImpl.getPath(HierarchyManagerImpl.java:407)
>       at 
> org.apache.jackrabbit.core.CachingHierarchyManager.getPath(CachingHierarchyManager.java:272)
>       at 
> org.apache.jackrabbit.core.lock.LockManagerImpl.getPath(LockManagerImpl.java:651)
>       at 
> org.apache.jackrabbit.core.lock.LockManagerImpl.internalLock(LockManagerImpl.java:276)
>       at 
> org.apache.jackrabbit.core.lock.XAEnvironment$LockInfo.update(XAEnvironment.java:409)
>       at 
> org.apache.jackrabbit.core.lock.XAEnvironment.prepare(XAEnvironment.java:273)
>       ... 38 more
> Caused by: org.apache.jackrabbit.core.state.NoSuchItemStateException: 
> 48fb59d8-ac77-4b9f-8b53-9f2492dca5e5
>       at 
> org.apache.jackrabbit.core.state.SessionItemStateManager.getItemState(SessionItemStateManager.java:189)
>       at 
> org.apache.jackrabbit.core.HierarchyManagerImpl.getItemState(HierarchyManagerImpl.java:188)
>       at 
> org.apache.jackrabbit.core.HierarchyManagerImpl.getPath(HierarchyManagerImpl.java:402)
>       ... 43 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to