ODE
  1. ODE
  2. ODE-532

Using both xquery and activityRecovery causes compile error

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.3.2
    • Fix Version/s: 1.3.2
    • Labels:
      None

      Description

      I added an activityRecovery tag to xquery test and I got quite interesting exception:

      [junit] ERROR - DeploymentUnitDir.compile(174) | Compile error in /mnt/i/home/joker/dev/ode1x-xquery-activityrecovery/bpel-test/target/test-classes/bpel/2.0/TestXQueryExpression/HelloXQueryWorld.bpel
      [junit] java.io.NotSerializableException: org.apache.ode.bpel.elang.xpath20.compiler.JaxpFunctionResolver
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
      [junit] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      [junit] at java.util.Hashtable.writeObject(Hashtable.java:813)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [junit] at java.lang.reflect.Method.invoke(Method.java:585)
      [junit] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      [junit] at java.util.Hashtable.writeObject(Hashtable.java:813)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [junit] at java.lang.reflect.Method.invoke(Method.java:585)
      [junit] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      [junit] at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:391)
      [junit] at org.apache.xerces.dom.NodeImpl.writeObject(Unknown Source)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [junit] at java.lang.reflect.Method.invoke(Method.java:585)
      [junit] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      [junit] at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:391)
      [junit] at org.apache.xerces.dom.NodeImpl.writeObject(Unknown Source)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [junit] at java.lang.reflect.Method.invoke(Method.java:585)
      [junit] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      [junit] at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:391)
      [junit] at org.apache.xerces.dom.NodeImpl.writeObject(Unknown Source)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [junit] at java.lang.reflect.Method.invoke(Method.java:585)
      [junit] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      [junit] at java.util.HashMap.writeObject(HashMap.java:1039)
      [junit] at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
      [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [junit] at java.lang.reflect.Method.invoke(Method.java:585)
      [junit] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      [junit] at java.util.HashSet.writeObject(HashSet.java:254)
      [junit] at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
      [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [junit] at java.lang.reflect.Method.invoke(Method.java:585)
      [junit] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      [junit] at java.util.ArrayList.writeObject(ArrayList.java:569)
      [junit] at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
      [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [junit] at java.lang.reflect.Method.invoke(Method.java:585)
      [junit] at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:917)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1339)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
      [junit] at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
      [junit] at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
      [junit] at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
      [junit] at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
      [junit] at org.apache.ode.bpel.o.Serializer.writeOProcess(Serializer.java:124)
      [junit] at org.apache.ode.bpel.compiler.BpelC.compile(BpelC.java:283)
      [junit] at org.apache.ode.bpel.compiler.BpelC.compile(BpelC.java:330)
      [junit] at org.apache.ode.store.DeploymentUnitDir.compile(DeploymentUnitDir.java:172)
      [junit] at org.apache.ode.store.DeploymentUnitDir.compile(DeploymentUnitDir.java:136)
      [junit] at org.apache.ode.store.ProcessStoreImpl.deploy(ProcessStoreImpl.java:175)
      [junit] at org.apache.ode.test.BPELTestAbstract.doDeployment(BPELTestAbstract.java:306)
      [junit] at org.apache.ode.test.BPELTestAbstract.doDeployments(BPELTestAbstract.java:294)
      [junit] at org.apache.ode.test.BPELTestAbstract.go(BPELTestAbstract.java:266)
      [junit] at org.apache.ode.test.BPELTestAbstract.go(BPELTestAbstract.java:206)
      [junit] at org.apache.ode.test.BPELTestAbstract.go(BPELTestAbstract.java:191)
      [junit] at org.apache.ode.test.DataHandling20Test.testXQueryExpression(DataHandling20Test.java:80)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      [junit] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
      [junit] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      [junit] at java.lang.reflect.Method.invoke(Method.java:585)
      [junit] at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
      [junit] at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
      [junit] at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
      [junit] at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
      [junit] at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
      [junit] at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
      [junit] at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
      [junit] at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
      [junit] at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
      [junit] at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
      [junit] at junit.framework.JUnit4TestAdapter.run(JUnit4TestAdapter.java:32)
      [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:421)
      [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:912)
      [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:766)

        Activity

        Alexis Midon made changes -
        Affects Version/s 1.3.2 [ 12313906 ]
        Affects Version/s 1.3.1 [ 12313680 ]
        Fix Version/s 1.3.2 [ 12313906 ]
        Fix Version/s 1.3.1 [ 12313680 ]
        Karthick Sankarachary made changes -
        Status Resolved [ 5 ] Closed [ 6 ]
        Alexis Midon made changes -
        Affects Version/s 1.3.1 [ 12313680 ]
        Affects Version/s 1.3 [ 12313165 ]
        Alexis Midon made changes -
        Fix Version/s 1.3.1 [ 12313680 ]
        Fix Version/s 1.3 [ 12313165 ]
        Karthick Sankarachary made changes -
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Hide
        Karthick Sankarachary added a comment - - edited

        I would rather not make that field transient, as it will pretty much render it useless in the event of a failure in a process instance. Thankfully, upon further analysis, it was revealed that the root cause lies elsewhere.

        The problem stems from the fact that the XQuery expression node contains a user data that points to a (non-serializable) function resolver object. This gets pulled into the debug information object corresponding to the activity recovery construct. I removed that user data (revision 748724) on the expression after it gets compiled - and sure enough, the process serializes without incident.

        Show
        Karthick Sankarachary added a comment - - edited I would rather not make that field transient, as it will pretty much render it useless in the event of a failure in a process instance. Thankfully, upon further analysis, it was revealed that the root cause lies elsewhere. The problem stems from the fact that the XQuery expression node contains a user data that points to a (non-serializable) function resolver object. This gets pulled into the debug information object corresponding to the activity recovery construct. I removed that user data (revision 748724) on the expression after it gets compiled - and sure enough, the process serializes without incident.
        Alex Boisvert made changes -
        Assignee Karthick Sankarachary [ karthick ]
        Rafal Rusin made changes -
        Attachment xquery-activityrecovery-patch.diff [ 12401118 ]
        Hide
        Rafal Rusin added a comment -

        I noticed by examining stackstrace in debugger that bpel-obj/src/main/java/org/apache/ode/bpel/o/DebugInfo.java extensibilityElements field causes problem. I saw in debugger that there's a binary serialization of xml content, which I think is not proper for process serialization.

        So I made this field transient and test passed.

        However I'm not sure of implications of such modifications.Is DebugInfo used only for debugging? If so, this simple fix is ok.

        Show
        Rafal Rusin added a comment - I noticed by examining stackstrace in debugger that bpel-obj/src/main/java/org/apache/ode/bpel/o/DebugInfo.java extensibilityElements field causes problem. I saw in debugger that there's a binary serialization of xml content, which I think is not proper for process serialization. So I made this field transient and test passed. However I'm not sure of implications of such modifications.Is DebugInfo used only for debugging? If so, this simple fix is ok.
        Rafal Rusin made changes -
        Field Original Value New Value
        Attachment xquery-activityrecovery-test.diff [ 12401116 ]
        Rafal Rusin created issue -

          People

          • Assignee:
            Karthick Sankarachary
            Reporter:
            Rafal Rusin
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development