ODE
  1. ODE
  2. ODE-484

Implicit Correlations i.e. Magic session(soap header filled with session information,not p2p mode) failed when ODE heavily loaded

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.2
    • Fix Version/s: 1.3.2
    • Component/s: BPEL Runtime
    • Labels:
      None
    • Environment:
      JDK 5.0+

      Description

      We use tempo and ODE to deal with human tasks,but when the system is heavily loaded,sothing goes wrong.The following is adapted from the error log:

      14:47:08,174 ERROR [JacobVPU] Method "run" in class "org.apache.ode.bpel.runtime.INVOKE" threw an unexpected exception.
      org.w3c.dom.DOMException: NOT_FOUND_ERR: An attempt is made to reference a node in a context where it does not exist.
      at org.apache.xerces.dom.ParentNode.internalRemoveChild(Unknown Source)
      at org.apache.xerces.dom.ParentNode.removeChild(Unknown Source)
      at org.apache.xerces.dom.ParentNode.setTextContent(Unknown Source)
      at org.apache.ode.bpel.epr.WSAEndpoint.setSessionId(WSAEndpoint.java:63)
      at org.apache.ode.axis2.SoapExternalService.writeHeader(SoapExternalService.java:271)
      at org.apache.ode.axis2.SoapExternalService.invoke(SoapExternalService.java:124)
      at org.apache.ode.axis2.MessageExchangeContextImpl.invokePartner(MessageExchangeContextImpl.java:52)
      at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.invoke(BpelRuntimeContextImpl.java:775)
      at org.apache.ode.bpel.runtime.INVOKE.run(INVOKE.java:100)
      at sun.reflect.GeneratedMethodAccessor30.invoke(Unknown Source)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
      at java.lang.reflect.Method.invoke(Method.java:597)
      at org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.run(JacobVPU.java:451)
      at org.apache.ode.jacob.vpu.JacobVPU.execute(JacobVPU.java:139)
      at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.execute(BpelRuntimeContextImpl.java:835)
      at org.apache.ode.bpel.engine.PartnerLinkMyRoleImpl.invokeNewInstance(PartnerLinkMyRoleImpl.java:197)
      at org.apache.ode.bpel.engine.BpelProcess.invokeProcess(BpelProcess.java:204)
      at org.apache.ode.bpel.engine.BpelProcess.handleWorkEvent(BpelProcess.java:372)
      at org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:326)
      at org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerImpl.java:373)
      at org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:337)
      at org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:336)
      at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:174)
      at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:335)
      at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:332)
      at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
      at java.util.concurrent.FutureTask.run(FutureTask.java:138)
      at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
      at java.lang.Thread.run(Thread.java:619)

      and the soap header with session infomation is as follows:

      <soapenv:Header>
      <addr:To xmlns:addr="http://www.w3.org/2005/08/addressing">http://localhost:8080/ode/processes/UserTasks/UserTaskProcess/SERVER/USER/WFmagic_mI5Ioi3yEd2UMrUDYRiGVQ</addr:To>
      <addr:Action xmlns:addr="http://www.w3.org/2005/08/addressing">http://agree.com.cn/Userform2/xform/Process/notifyTaskCompletion</addr:Action>
      <addr:ReplyTo xmlns:addr="http://www.w3.org/2005/08/addressing">
      <addr:Address>http://www.w3.org/2005/08/addressing/anonymous</addr:Address>
      </addr:ReplyTo>
      <addr:MessageID xmlns:addr="http://www.w3.org/2005/08/addressing">uuid:hqejbhcnphr3ttmu6oosaj</addr:MessageID>
      <intalio:session xmlns:intalio="http://www.intalio.com/type/session">hqejbhcnphr3ts7h0ppumk</intalio:session>
      <session xmlns="http://www.intalio.com/type/session">hqejbhcnphr3ts7h0ppumk</session>
      </soapenv:Header>

      1. geronimo.log
        23 kB
        Shammy Chen

        Activity

        Hide
        Matthieu Riou added a comment -

        My bard, patched too quickly. Thanks for following up! It should be better now.

        Show
        Matthieu Riou added a comment - My bard, patched too quickly. Thanks for following up! It should be better now.
        Hide
        Shammy Chen added a comment - - edited

        I downloaded the patch and tried again,still a minor bug remained,my fix to this is as follows:

        replace line 288 of class org.apache.ode.axis2.soapbinding.SoapExternalService

        options.setProperty(ODEService.CALLBACK_SESSION_ENDPOINT, odeMex.getMyRoleEndpointReference());

        for

        options.setProperty(ODEService.CALLBACK_SESSION_ENDPOINT,myRoleEPR);

        Show
        Shammy Chen added a comment - - edited I downloaded the patch and tried again,still a minor bug remained,my fix to this is as follows: replace line 288 of class org.apache.ode.axis2.soapbinding.SoapExternalService options.setProperty(ODEService.CALLBACK_SESSION_ENDPOINT, odeMex.getMyRoleEndpointReference()); for options.setProperty(ODEService.CALLBACK_SESSION_ENDPOINT,myRoleEPR);
        Hide
        Matthieu Riou added a comment -

        Good catch! I fixed this in the 1.X branch last week but the patch hadn't been applied on trunk yet. I'm assuming you run on trunk, correct? I've just committed the fix there as well, it should work better now.

        Show
        Matthieu Riou added a comment - Good catch! I fixed this in the 1.X branch last week but the patch hadn't been applied on trunk yet. I'm assuming you run on trunk, correct? I've just committed the fix there as well, it should work better now.
        Hide
        Shammy Chen added a comment -

        If you can debug ODE in eclipse or sothing else,you will find class org.apache.ode.axis2.SoapExternalService is the source of this problem.Just set a breakpoint at line 273,just before the following statement:

        options.setProperty("callbackSessionEndpoint", odeMex.getMyRoleEndpointReference());

        When two client come at the same time,variable myRoleEPR of writeHeader method is the same,that is,they have the same reference.We can't control the execution sequence of two thread,so we can't tell what will happen when concurrently executing the following statement:

        myRoleEPR.setSessionId(myRoleSessionId);

        Show
        Shammy Chen added a comment - If you can debug ODE in eclipse or sothing else,you will find class org.apache.ode.axis2.SoapExternalService is the source of this problem.Just set a breakpoint at line 273,just before the following statement: options.setProperty("callbackSessionEndpoint", odeMex.getMyRoleEndpointReference()); When two client come at the same time,variable myRoleEPR of writeHeader method is the same,that is,they have the same reference.We can't control the execution sequence of two thread,so we can't tell what will happen when concurrently executing the following statement: myRoleEPR.setSessionId(myRoleSessionId);

          People

          • Assignee:
            Matthieu Riou
            Reporter:
            Shammy Chen
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development