Thank you very much for that clarification! -----Message d'origine----- De : Sathwik B P [mailto:[email protected]] Envoyé : mercredi 23 septembre 2015 14:04 À : [email protected] Objet : Re: question
A queued message is not literally a message stored on a queue. It's just a status of the message which has arrived early even before the process instance has reached at that point of pick or receive. Concurrent messages that has already arrived (status=queued) or arriving in real time will compete for the process instance lock and whichever messages gets the lock will execute and the other message which could not attain the instance lock will try to attain it based on a exponential backoff algo. There is no way to enforce FIFO. On Wed, Sep 23, 2015 at 4:59 PM, TMAR Fadwa <[email protected]> wrote: > Thank you for your reply. I wanted to know if there are two messages > in the queue waiting for the activation of the same pick. How apache > ode chooses the message to be proceeded. > I did a simpler experiment with only a wait and a pick (on op1 and on > op2). I invoked the two operations before the deadline expires. I > repeated the experiment many times and I found that it serves message > randomly without taking into account reception order of the messages. > Is there a solution to inforce the engine to serve messages in order > (FIFO)? > > -----Message d'origine----- > De : Sathwik B P [mailto:[email protected]] Envoyé : samedi 19 > septembre 2015 10:45 À : [email protected] Objet : Re: question > > Ah my bad, I overlooked your correlations definition within Pick. > > Post creation of the instance the pick onAlarm will trigger after 2 > seconds, within which the onMessage should arrive. Either way, the > while loop will run only one iteration and your process instance should > complete. > > After the instance is completed, if the onMessage is triggered again, > ODE will not reject it. No new instance will be created and the > message will be queued waiting for the first receive to arrive with > the same correlating value that arrived for the onMessage. When the > first receive message arrives a new instance will be created and when > it encounters the Pick onMessage, ODE will check for any queued > messages with the same correlating value and since it finds one the > pick completes and thus the instance will complete. > > Does it answer your question. > > On Fri, Sep 18, 2015 at 2:47 PM, Sathwik B P <[email protected]> wrote: > > > Hi, > > > > Apologise for my late reply. > > > > Would you explain what are you trying to do in your process? > > > > Correlation is initiated in the first receive, but pick-onMessage > > doesn't have a correlation defined. There is no way that your > > onMessage would be routed to the instance. > > > > Which ODE version are you on? > > > > Note: No attachments will come through. You need to embed all your > > process artefacts inline or use something like https://gist.github.com/. > > > > regards, > > sathwik > > > > On Thu, Sep 10, 2015 at 12:50 PM, TMAR Fadwa <[email protected]> wrote: > > > >> Here is my bpel. > >> > >> <!-- tstbpel BPEL Process [Generated by the Eclipse BPEL Designer] > >> --> > >> <!-- Date: Mon Jul 27 14:57:23 CEST 2015 --> > >> > >> <bpel:process name="tstbpel" targetNamespace=" > >> http://eclipse.org/bpel/tstbpel" > >> suppressJoinFailure="yes" xmlns:tns=" > >> http://eclipse.org/bpel/tstbpel" > >> xmlns:bpel=" > >> http://docs.oasis-open.org/wsbpel/2.0/process/executable" > >> > >> xmlns:ns="http://sample.bpel.org/bpel/ShippingOrderAsynchCaller > " > >> xmlns:xsd="http://shippingservice.services.com" xmlns:ns1=" > >> http://www.w3.org/2001/XMLSchema"> > >> <!-- Import the client WSDL --> > >> <bpel:import namespace="http://shippingservice.services.com" > >> location="1.xsd" importType=" > >> http://www.w3.org/2001/XMLSchema"></bpel:import> > >> <bpel:import location="tstbpelArtifacts.wsdl" namespace=" > >> http://eclipse.org/bpel/tstbpel" > >> importType="http://schemas.xmlsoap.org/wsdl/" /> > >> > >> <!-- > >> ================================================================= --> > >> <!-- PARTNERLINKS --> > >> <!-- List of services participating in this BPEL process --> > >> <!-- > >> ================================================================= --> > >> <bpel:partnerLinks> > >> <!-- The 'client' role represents the requester of > >> this service. It is > >> used for callback. The location and > >> correlation information associated with > >> the client role are automatically set using > >> WS-Addressing. --> > >> <bpel:partnerLink name="client" > >> partnerLinkType="tns:process" > >> myRole="process" /> > >> <bpel:partnerLink name="PartnerLink" > >> partnerLinkType="tns:partner" > >> partnerRole="partnerRole"></bpel:partnerLink> > >> </bpel:partnerLinks> > >> > >> <!-- > >> ================================================================= --> > >> <!-- VARIABLES --> > >> <!-- List of messages and XML documents used within this > >> BPEL process --> > >> <!-- > >> ================================================================= --> > >> <bpel:variables> > >> <!-- Reference to the message passed as input > >> during initiation --> > >> <bpel:variable name="input" > >> messageType="tns:tstbpelRequestMessage" /> > >> > >> <!-- Reference to the message that will be sent > >> back to the requester during > >> callback --> > >> > >> > >> > >> <bpel:variable name="clientRequest" > >> messageType="tns:secondOpRequest"></bpel:variable> > >> <bpel:variable name="clientRequest1" > >> messageType="tns:Op3Request"></bpel:variable> > >> <bpel:variable name="clientRequest2" > >> messageType="tns:Op4Request"></bpel:variable> > >> > >> <bpel:variable name="counter" > >> type="ns1:int"></bpel:variable> > >> <bpel:variable name="PartnerLinkRequest1" > >> messageType="ns:onResult"></bpel:variable> > >> </bpel:variables> > >> > >> <!-- > >> ================================================================= --> > >> <!-- ORCHESTRATION LOGIC --> > >> <!-- Set of activities coordinating the flow of messages > >> across the --> > >> <!-- services integrated within this business process --> > >> <!-- > >> ================================================================= --> > >> <bpel:correlationSets> > >> <bpel:correlationSet name="CorrelationSet" > >> properties="tns:id"></bpel:correlationSet> > >> </bpel:correlationSets> > >> <bpel:sequence name="main"> > >> <bpel:sequence name="Sequence"> > >> <bpel:receive name="receiveOp1" > >> partnerLink="client" > >> portType="tns:tstbpel" > >> operation="initiate" variable="input" > >> createInstance="yes"> > >> <bpel:correlations> > >> <bpel:correlation > >> set="CorrelationSet" initiate="yes"></bpel:correlation> > >> </bpel:correlations> > >> </bpel:receive> > >> <bpel:assign validate="no" name="assign"> > >> <bpel:copy> > >> <bpel:from> > >> <bpel:literal> > >> > >> <tns:OrderShippingResponse > >> xmlns:tns="http://shippingservice.services.com > >> " > >> > >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> > >> > >> <tns:confirmationNo>tns:confirmationNo</tns:confirmationNo> > >> > >> <tns:estimatedDate>tns:estimatedDate</tns:estimatedDate> > >> > >> </tns:OrderShippingResponse> > >> </bpel:literal> > >> </bpel:from> > >> <bpel:to > >> variable="PartnerLinkRequest1" part="payload"></bpel:to> > >> </bpel:copy> > >> <bpel:copy> > >> <bpel:from part="payload" > >> variable="input"> > >> <bpel:query > >> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"> > >> <![CDATA[tns:input]]> > >> </bpel:query> > >> </bpel:from> > >> <bpel:to part="payload" > >> variable="PartnerLinkRequest1"> > >> <bpel:query > >> > queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDAT > A[xsd:confirmationNo]]></bpel:query> > >> </bpel:to> > >> </bpel:copy> > >> <bpel:copy> > >> <bpel:from part="payload" > >> variable="input"> > >> <bpel:query > >> > queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDAT > A[tns:input]]></bpel:query> > >> </bpel:from> > >> <bpel:to part="payload" > >> variable="PartnerLinkRequest1"> > >> <bpel:query > >> > queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDAT > A[xsd:estimatedDate]]></bpel:query> > >> </bpel:to> > >> </bpel:copy> > >> </bpel:assign> > >> <bpel:assign validate="no" name="Assigncounter"> > >> <bpel:copy> > >> <bpel:from > >> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"> > >> <![CDATA[0]]> > >> </bpel:from> > >> <bpel:to > >> variable="counter"></bpel:to> > >> </bpel:copy> > >> </bpel:assign> > >> <bpel:invoke name="InvokePrintService" > >> partnerLink="PartnerLink" > >> operation="onResult" > >> portType="ns:ShippingOrderAsynchCallerCallback" > >> > >> inputVariable="PartnerLinkRequest1"></bpel:invoke> > >> > >> <bpel:wait name="WaitFor20Second"> > >> <bpel:for><![CDATA['PT15S']]></bpel:for> > >> </bpel:wait> > >> <bpel:while name="While"> > >> <bpel:condition > >> > expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><! > [CDATA[$counter<1]]></bpel:condition> > >> <bpel:sequence> > >> <bpel:assign validate="no" > >> name="Assign1"> > >> <bpel:copy> > >> <bpel:from > >> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"> > >> <![CDATA[$counter+1]]> > >> </bpel:from> > >> <bpel:to > >> variable="counter"></bpel:to> > >> </bpel:copy> > >> </bpel:assign> > >> > >> <bpel:pick name="Pick"> > >> <bpel:onMessage > >> partnerLink="client" operation="Op3" > >> > >> portType="tns:tstbpel" variable="clientRequest1"> > >> > >> <bpel:sequence name="Sequence1"> > >> > >> > >> <bpel:assign validate="no" name="Assign2"> > >> > >> <bpel:copy> > >> > >> <bpel:from> > >> > >> <bpel:literal> > >> > >> <tns:OrderShippingResponse > >> > >> xmlns:tns=" > >> http://shippingservice.services.com" xmlns:xsi=" > >> http://www.w3.org/2001/XMLSchema-instance"> > >> > >> > >> <tns:confirmationNo>tns:confirmationNo</tns:confirmationNo> > >> > >> > >> <tns:estimatedDate>tns:estimatedDate</tns:estimatedDate> > >> > >> </tns:OrderShippingResponse> > >> > >> </bpel:literal> > >> > >> </bpel:from> > >> > >> <bpel:to variable="PartnerLinkRequest1" > >> part="payload"></bpel:to> > >> > >> </bpel:copy> > >> > >> <bpel:copy> > >> > >> <bpel:from > >> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0" > >> > > >> > >> <![CDATA["op3"]]> > >> > >> </bpel:from> > >> > >> <bpel:to part="payload" variable="PartnerLinkRequest1"> > >> > >> <bpel:query > >> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![C > >> DA TA[xsd:confirmationNo]]></bpel:query> > >> > >> </bpel:to> > >> > >> </bpel:copy> > >> > >> <bpel:copy> > >> > >> <bpel:from > >> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0" > >> > > >> > >> <![CDATA["op3"]]> > >> > >> </bpel:from> > >> > >> <bpel:to part="payload" variable="PartnerLinkRequest1"> > >> > >> <bpel:query > >> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![C > >> DA TA[xsd:estimatedDate]]></bpel:query> > >> > >> </bpel:to> > >> > >> </bpel:copy> > >> > >> </bpel:assign> > >> > >> <bpel:invoke name="InvokePrintService" partnerLink="PartnerLink" > >> > >> operation="onResult" portType="ns:ShippingOrderAsynchCallerCallback" > >> > >> inputVariable="PartnerLinkRequest1"> > >> > >> > >> </bpel:invoke> > >> > >> </bpel:sequence> > >> > >> <bpel:correlations> > >> > >> <bpel:correlation set="CorrelationSet" > >> > >> initiate="no"></bpel:correlation> > >> > >> </bpel:correlations> > >> </bpel:onMessage> > >> <bpel:onMessage > >> partnerLink="client" operation="Op4" > >> > >> portType="tns:tstbpel" variable="clientRequest2"> > >> > >> <bpel:sequence name="Sequence1"> > >> > >> > >> <bpel:assign validate="no" name="Assign3"> > >> > >> <bpel:copy> > >> > >> <bpel:from> > >> > >> <bpel:literal> > >> > >> <tns:OrderShippingResponse > >> > >> xmlns:tns=" > >> http://shippingservice.services.com" xmlns:xsi=" > >> http://www.w3.org/2001/XMLSchema-instance"> > >> > >> > >> <tns:confirmationNo>tns:confirmationNo</tns:confirmationNo> > >> > >> > >> <tns:estimatedDate>tns:estimatedDate</tns:estimatedDate> > >> > >> </tns:OrderShippingResponse> > >> > >> </bpel:literal> > >> > >> </bpel:from> > >> > >> <bpel:to variable="PartnerLinkRequest1" > >> part="payload"></bpel:to> > >> > >> </bpel:copy> > >> > >> <bpel:copy> > >> > >> <bpel:from > >> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0" > >> > > >> > >> <![CDATA["op4"]]> > >> > >> </bpel:from> > >> > >> <bpel:to part="payload" variable="PartnerLinkRequest1"> > >> > >> <bpel:query > >> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![C > >> DA TA[xsd:confirmationNo]]></bpel:query> > >> > >> </bpel:to> > >> > >> </bpel:copy> > >> > >> <bpel:copy> > >> > >> <bpel:from > >> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0" > >> > > >> > >> <![CDATA["op4"]]> > >> > >> </bpel:from> > >> > >> <bpel:to part="payload" variable="PartnerLinkRequest1"> > >> > >> <bpel:query > >> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![C > >> DA TA[xsd:estimatedDate]]></bpel:query> > >> > >> </bpel:to> > >> > >> </bpel:copy> > >> > >> </bpel:assign> > >> > >> <bpel:invoke name="InvokePrintService" partnerLink="PartnerLink" > >> > >> operation="onResult" portType="ns:ShippingOrderAsynchCallerCallback" > >> > >> inputVariable="PartnerLinkRequest1"> > >> > >> > >> </bpel:invoke> > >> > >> </bpel:sequence> > >> > >> <bpel:correlations> > >> > >> <bpel:correlation set="CorrelationSet" > >> > >> initiate="no"></bpel:correlation> > >> > >> </bpel:correlations> > >> </bpel:onMessage> > >> > >> <bpel:onAlarm> > >> > >> <bpel:scope> > >> > >> <bpel:sequence name="Sequence1"> > >> > >> <bpel:assign validate="no" name="Assign4"> > >> > >> <bpel:copy> > >> > >> <bpel:from> > >> > >> <bpel:literal> > >> > >> <tns:OrderShippingResponse > >> > >> xmlns:tns=" > >> http://shippingservice.services.com" xmlns:xsi=" > >> http://www.w3.org/2001/XMLSchema-instance"> > >> > >> > >> <tns:confirmationNo>tns:confirmationNo > >> > >> </tns:confirmationNo> > >> > >> > >> <tns:estimatedDate>tns:estimatedDate</tns:estimatedDate> > >> > >> </tns:OrderShippingResponse> > >> > >> </bpel:literal> > >> > >> </bpel:from> > >> > >> <bpel:to variable="PartnerLinkRequest1" > >> part="payload"></bpel:to> > >> > >> </bpel:copy> > >> > >> <bpel:copy> > >> > >> <bpel:from > >> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"> > >> <![CDATA["onAlarm"]]> > >> > >> </bpel:from> > >> > >> <bpel:to part="payload" > >> variable="PartnerLinkRequest1"> > >> > >> <bpel:query > >> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![C > >> DA TA[xsd:confirmationNo]]></bpel:query> > >> > >> </bpel:to> > >> > >> </bpel:copy> > >> > >> <bpel:copy> > >> > >> <bpel:from > >> expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"> > >> > >> <![CDATA["onAlarm"]]> > >> > >> </bpel:from> > >> > >> <bpel:to part="payload" > >> variable="PartnerLinkRequest1"> > >> > >> <bpel:query > >> queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![C > >> DA TA[xsd:estimatedDate]]></bpel:query> > >> > >> </bpel:to> > >> > >> </bpel:copy> > >> > >> </bpel:assign> > >> > >> <bpel:invoke name="InvokePrintService" partnerLink="PartnerLink" > >> > >> operation="onResult" > portType="ns:ShippingOrderAsynchCallerCallback" > >> > >> inputVariable="PartnerLinkRequest1"> > >> > >> > >> </bpel:invoke> > >> > >> </bpel:sequence> > >> > >> </bpel:scope> > >> > >> <bpel:for><![CDATA['PT2S']]></bpel:for> > >> </bpel:onAlarm> > >> </bpel:pick> > >> <bpel:wait name="Wait1"> > >> > >> <bpel:for><![CDATA['PT0S']]></bpel:for> > >> > >> </bpel:wait> > >> </bpel:sequence> > >> </bpel:while> > >> > >> > >> </bpel:sequence> > >> > >> </bpel:sequence> > >> </bpel:process> > >> > >> > >> -----Message d'origine----- > >> De : Sathwik B P [mailto:[email protected]] Envoyé : mercredi 9 > >> septembre 2015 19:05 À : [email protected] Objet : Re: question > >> > >> Hi, > >> > >> Attachments will not come through. Embed your bpel inline. > >> > >> regards, > >> sathwik > >> > >> On Wed, Sep 9, 2015 at 8:05 PM, TMAR Fadwa <[email protected]> wrote: > >> > >> > Hi, > >> > > >> > I’m testing the behavior of <pick> <on message> if there are more > >> > than one message that was already sent and the pick has to choose > >> > among several events. > >> > > >> > I want to test with many messages so I do this experiment with a > >> > <while> and a <wait> (before the <while>) to be sure that I > >> > received many messages before entering to the while and executing > >> > the pick (I attached a screen shot of my process). > >> > > >> > By sending only two messages, one to invoke op3 and one to invoke > >> > op4, the process executed the while more than 2 times and each > >> > time the process executed the branches attached to <on op3> and <on op4>. > >> > Normally it must execute twice (one for each received message) > >> > and then > >> execute on alarm. > >> > Could anybody give me an explanation of this behavior? > >> > > >> > > >> > > > > >
