Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.3.2
-
None
Description
I made a following process:
<bpws:receive createInstance="yes" operation="initiate">
<bpws:correlations>
<bpws:correlation initiate="yes"/>
</bpws:correlations>
</bpws:receive>
<bpws:reply operation="initiate"/>
<bpws:scope>
<bpws:eventHandlers>
<bpws:onEvent operation="initiate">
<bpws:correlations>
<bpws:correlation initiate="no"/>
</bpws:correlations>
<bpws:scope>
<bpws:sequence>
<bpws:reply operation="initiate"/>
</bpws:sequence>
</bpws:scope>
</bpws:onEvent>
</bpws:eventHandlers>
<bpws:sequence>
<bpws:wait>
<bpws:for><![CDATA['PT30M']]></bpws:for>
</bpws:wait>
</bpws:sequence>
</bpws:scope>
Then I sent two requests with delay 1 second:
initiate 101
wait 1 second
initiate 101
A delay is for not causing conflictingRequest fault (which is not distinguished by ODE and thrown as conflictingReceive according to this: http://cwiki.apache.org/confluence/display/ODExSITE/WS-BPEL+2.0+Specification+Compliance).
For second request I got a conflictingReceive fault.
However, here, no error should be thrown.
Here's a stacktrace for throwing conflictingReceive:
17:18:44,223 | ERROR | ODEServer-1 | BpelRuntimeContextImpl | eronimo.kernel.log.GeronimoLog 108 | conflictingReceive
java.lang.Exception
at org.apache.ode.bpel.engine.BpelRuntimeContextImpl.select(BpelRuntimeContextImpl.java:333)
at org.apache.ode.bpel.runtime.EH_EVENT$SELECT.run(EH_EVENT.java:137)
at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
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:870)
at org.apache.ode.bpel.engine.PartnerLinkMyRoleImpl.invokeInstance(PartnerLinkMyRoleImpl.java:240)
at org.apache.ode.bpel.engine.BpelProcess.invokeProcess(BpelProcess.java:224)
at org.apache.ode.bpel.engine.BpelProcess.handleWorkEvent(BpelProcess.java:392)
at org.apache.ode.bpel.engine.BpelEngineImpl.onScheduledJob(BpelEngineImpl.java:391)
at org.apache.ode.bpel.engine.BpelServerImpl.onScheduledJob(BpelServerImpl.java:388)
at org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:386)
at org.apache.ode.scheduler.simple.SimpleScheduler$4$1.call(SimpleScheduler.java:380)
at org.apache.ode.scheduler.simple.SimpleScheduler.execTransaction(SimpleScheduler.java:208)
at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:379)
at org.apache.ode.scheduler.simple.SimpleScheduler$4.call(SimpleScheduler.java:376)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:269)
at java.util.concurrent.FutureTask.run(FutureTask.java:123)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
So, I think an OutstandingRequestManager may incorrectly throw an exception on select registration, while there should be an error later on receiving an actual request.
This will allow to dispatch a request via reply during onevent without any fault.