jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jukka Zitting (JIRA)" <j...@apache.org>
Subject [jira] Resolved: (JCR-2796) Restoring a node fails (partially) if done within a XA transaction
Date Mon, 08 Nov 2010 22:24:23 GMT

     [ https://issues.apache.org/jira/browse/JCR-2796?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Jukka Zitting resolved JCR-2796.
--------------------------------

       Resolution: Fixed
    Fix Version/s: 2.2.0
         Assignee: Jukka Zitting

Thanks for reporting this, and for including a good test case! Fixed in revision 1032770.

> Restoring a node fails (partially) if done within a XA transaction
> ------------------------------------------------------------------
>
>                 Key: JCR-2796
>                 URL: https://issues.apache.org/jira/browse/JCR-2796
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-core
>    Affects Versions: 2.1.1
>         Environment: Jackrabbit 2.1.1
>            Reporter: Dominik Klaholt
>            Assignee: Jukka Zitting
>             Fix For: 2.2.0
>
>
> A problem occurs with the following sequence of steps: 
> 1) Create a versionable node that has a child and a grandchild.
> 2) Perform a check-in of the versionable node and give a version-label.
> 3) Perform a restore by using the version-label.
> 4) Access the grandchild.
> Step 4 fails, if step 3 is executed within a transaction. If no transaction is used,
then step 4 succeeds. 
> The test-case attached below can be executed within XATest.java (http://svn.apache.org/repos/asf/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/XATest.java).
> public void testRestore() throws Exception {
>         Session session = null;
>         try {
>             session = getHelper().getSuperuserSession();
>             // make sure that 'testNode' does not exist at the beginning of the test
>             for (NodeIterator ni = session.getRootNode().getNodes(); ni.hasNext();) {
>                 Node aNode = ni.nextNode();
>                 if (aNode.getName().equals("testNode")) {
>                     aNode.remove();
>                 }
>             }
>             // 1) create 'testNode' that has a child and a grandchild
>             session.getRootNode().addNode("testNode").addMixin(NodeType.MIX_VERSIONABLE);
>             session.getRootNode().getNode("testNode").addNode("child").addNode("grandchild");
>             session.save();
>             // 2) check in 'testNode' and give a version-label
>             Version version = session.getWorkspace().getVersionManager().checkin(
>                     session.getRootNode().getNode("testNode").getPath());
>             session.getWorkspace().getVersionManager().getVersionHistory(
>                     session.getRootNode().getNode("testNode").getPath()).addVersionLabel(version.getName(),
>                     "testLabel", false);
>             // 3) do restore by label
>             UserTransaction utx = new UserTransactionImpl(session);
>             utx.begin();
>             session.getWorkspace().getVersionManager().restoreByLabel(
>                     session.getRootNode().getNode("testNode").getPath(), "testLabel",
true);
>             utx.commit();
>             // 4) try to get the grandchild (fails if the restoring has been done within
a transaction)
>             session.getRootNode().getNode("testNode").getNode("child").getNode("grandchild");
>         } finally {
>             if (session != null) {
>                 session.logout();
>             }
>         }
>     } 

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


Mime
View raw message