Uploaded image for project: 'ModeShape'
  1. ModeShape
  2. MODE-1819

Session.move() fails when using user transactions

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 3.1.3.Final, 3.2.0.Final
    • 3.1.1.Final
    • None
    • None

    Description

      UPDATED: This is not restricted to EJB scenarios, and can be replicated in a JavaSE environment when using a real transaction manager and user transactions. The title and description were updated to reflect this.

      The following bit of code works when not using user transactions, but it fails when using a user transaction:

          public static void moveDocument(Session session, String nodeName)
                            throws Exception
          {
              Node section = session.getRootNode().addNode(nodeName, "inf:section");
              section.setProperty("inf:name", nodeName);
      
              section.addNode("temppath", "inf:document");
              session.save();
      
              String srcAbsPath  = "/"+nodeName+"/temppath";
              String destAbsPath = "/"+nodeName+"/20130104";
      
              session.move(srcAbsPath, destAbsPath);
              
              NodeIterator nitr = section.getNodes();
      
              System.err.println("Child Nodes of "+nodeName+" are:");
              while(nitr.hasNext())
              {
                  Node n = nitr.nextNode();
                  System.err.println("  Node: " + n.getName());
              }
              session.save();
          }
      

      Output from the three cases is:

      12:44:40,498 ERROR [stderr] (http--127.0.0.1-8080-2) Child Nodes of TestOutOfContainer are:
      12:44:40,499 ERROR [stderr] (http--127.0.0.1-8080-2)   Node: 20130104
      12:44:40,642 ERROR [stderr] (http--127.0.0.1-8080-2) Child Nodes of TestInEjbNoTx are:
      12:44:40,643 ERROR [stderr] (http--127.0.0.1-8080-2)   Node: 20130104
      12:44:40,717 ERROR [stderr] (http--127.0.0.1-8080-2) Child Nodes of TestInEjbWithTx are:
      12:44:40,717 ERROR [stderr] (http--127.0.0.1-8080-2)   Node: temppath
      

      which looks like the move has not occurred or is not visible within the current transaction when present.

      In the third case the session.save() call results in the following exception:

      javax.jcr.InvalidItemStateException: This session tried to save changes to node with key 'Cannot locate child node: 81513257505d641ceb9861-4917-44b1-972f-c444331ee943 within parent: 81513257505d64/', but it was removed by another session.
      	at org.modeshape.jcr.JcrSession.save(JcrSession.java:985)
      	at au.com.infomedix.modeshapetest.AppTest.moveDocument(AppTest.java:158)
      	at au.com.infomedix.modeshapetest.AppBean.testMethodWithTx(AppBean.java:45)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.jboss.as.ee.component.ManagedReferenceMethodInterceptorFactory$ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptorFactory.java:72)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:374)
      	at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:127)
      	at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:135)
      	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
      	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:36)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:82)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
      	at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:228)
      	at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304)
      	at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:32)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
      	at org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:165)
      	at org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:173)
      	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)
      	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
      	at org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:72)
      	at au.com.infomedix.modeshapetest.AppBean$$$view1.testMethodWithTx(Unknown Source)
      	at au.com.infomedix.modeshapetest.AppTest.testSessionMoveDocumentInEJBWithTx(AppTest.java:131)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
      	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
      	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
      	at org.jboss.arquillian.junit.Arquillian$6$1.invoke(Arquillian.java:270)
      	at org.jboss.arquillian.container.test.impl.execution.LocalTestExecuter.execute(LocalTestExecuter.java:60)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
      	at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
      	at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
      	at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
      	at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:115)
      	at org.jboss.arquillian.core.impl.EventImpl.fire(EventImpl.java:67)
      	at org.jboss.arquillian.container.test.impl.execution.ContainerTestExecuter.execute(ContainerTestExecuter.java:38)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
      	at org.jboss.arquillian.core.impl.EventContextImpl.invokeObservers(EventContextImpl.java:99)
      	at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:81)
      	at org.jboss.arquillian.test.impl.TestContextHandler.createTestContext(TestContextHandler.java:89)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
      	at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
      	at org.jboss.arquillian.test.impl.TestContextHandler.createClassContext(TestContextHandler.java:75)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
      	at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
      	at org.jboss.arquillian.test.impl.TestContextHandler.createSuiteContext(TestContextHandler.java:60)
      	at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      	at java.lang.reflect.Method.invoke(Method.java:597)
      	at org.jboss.arquillian.core.impl.ObserverImpl.invoke(ObserverImpl.java:94)
      	at org.jboss.arquillian.core.impl.EventContextImpl.proceed(EventContextImpl.java:88)
      	at org.jboss.arquillian.core.impl.ManagerImpl.fire(ManagerImpl.java:135)
      	at org.jboss.arquillian.test.impl.EventTestRunnerAdaptor.test(EventTestRunnerAdaptor.java:111)
      	at org.jboss.arquillian.junit.Arquillian$6.evaluate(Arquillian.java:263)
      	at org.jboss.arquillian.junit.Arquillian$4.evaluate(Arquillian.java:226)
      	at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:314)
      	at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46)
      	at org.jboss.arquillian.junit.Arquillian$5.evaluate(Arquillian.java:240)
      	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
      	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
      	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
      	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
      	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
      	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
      	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
      	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
      	at org.jboss.arquillian.junit.Arquillian$2.evaluate(Arquillian.java:185)
      	at org.jboss.arquillian.junit.Arquillian.multiExecute(Arquillian.java:314)
      	at org.jboss.arquillian.junit.Arquillian.access$100(Arquillian.java:46)
      	at org.jboss.arquillian.junit.Arquillian$3.evaluate(Arquillian.java:199)
      	at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
      	at org.jboss.arquillian.junit.Arquillian.run(Arquillian.java:147)
      	at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
      	at org.junit.runner.JUnitCore.run(JUnitCore.java:136)
      	at org.jboss.arquillian.junit.container.JUnitTestRunner.execute(JUnitTestRunner.java:65)
      	at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.executeTest(ServletTestRunner.java:160)
      	at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.execute(ServletTestRunner.java:126)
      	at org.jboss.arquillian.protocol.servlet.runner.ServletTestRunner.doGet(ServletTestRunner.java:90)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
      	at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
      	at org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:280)
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
      	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
      	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
      	at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
      	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
      	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
      	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
      	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
      	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
      	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
      	at java.lang.Thread.run(Thread.java:680)
      Caused by: org.modeshape.jcr.cache.NodeNotFoundInParentException: Cannot locate child node: 81513257505d641ceb9861-4917-44b1-972f-c444331ee943 within parent: 81513257505d64/
      	at org.modeshape.jcr.cache.document.LazyCachedNode.parentReferenceToSelf(LazyCachedNode.java:214)
      	at org.modeshape.jcr.cache.document.LazyCachedNode.getSegment(LazyCachedNode.java:252)
      	at org.modeshape.jcr.cache.document.LazyCachedNode.getPath(LazyCachedNode.java:278)
      	at org.modeshape.jcr.cache.PathCache.getPath(PathCache.java:49)
      	at org.modeshape.jcr.cache.document.LazyCachedNode.getPath(LazyCachedNode.java:277)
      	at org.modeshape.jcr.cache.PathCache.getPath(PathCache.java:49)
      	at org.modeshape.jcr.cache.document.WritableSessionCache.persistChanges(WritableSessionCache.java:974)
      	at org.modeshape.jcr.cache.document.WritableSessionCache.save(WritableSessionCache.java:517)
      	at org.modeshape.jcr.JcrSession.save(JcrSession.java:978)
      	... 141 more
      

      I'll attach an arquillian test case that shows the problem.

      Attachments

        Issue Links

          Activity

            People

              rhauch Randall Hauch (Inactive)
              bwallis42_jira Brian Wallis (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: