Hi, I have packaged a process that has a flow with 2 sequences containing invoke(one-way)->assign->wait->receive->assign. This process has been verified on ODE 1.3.5 and embedded Derby database.
I have highlighted the execution of the 2 sequences (yellow and brown) within the flow in a couple of excel sheets. One of the excel sheet demonstrates the execution of process instance to completion and the other excel sheet demonstrates the process instance waiting for external message to arrive. The execution of the flow activity looks perfectly fine in this scenario. You may run this process in your environment and see how it goes. Download the process artefact and excel sheet from this archive: https://dl.dropboxusercontent.com/u/92429475/FlowParallelInvoke.zip FlowParallelInvoke.bpel --------------------------------- <?xml version="1.0" encoding="UTF-8"?> <bpel:process exitOnStandardFault="yes" name="FlowParallelInvoke.bpel" targetNamespace="http://www.example.org/FlowParallelInvoke/" xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable" xmlns:ns="http://www.example.org/FlowParallelInvoke/Artifacts" xmlns:ns0="http://www.example.org/FlowParallelInvoke/" xmlns:ns1=" http://www.example.org/FirstAsync/" xmlns:ns2="http://www.example.org/SecondAsync/" xmlns:ns3=" http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0" expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"> <bpel:import namespace="http://www.example.org/SecondAsync/" location="SecondAsync.wsdl" importType=" http://schemas.xmlsoap.org/wsdl/"></bpel:import> <bpel:import namespace="http://www.example.org/FirstAsync/" location="FirstAsync.wsdl" importType=" http://schemas.xmlsoap.org/wsdl/"></bpel:import> <bpel:import importType="http://schemas.xmlsoap.org/wsdl/" location="FlowParallelInvoke.wsdl" namespace=" http://www.example.org/FlowParallelInvoke/" /> <bpel:import importType="http://schemas.xmlsoap.org/wsdl/" location="FlowParallelInvokeArtifacts.wsdl" namespace=" http://www.example.org/FlowParallelInvoke/Artifacts" /> <bpel:partnerLinks> <bpel:partnerLink myRole="FlowParallelInvokeRole" name="bpelProcessPartner" partnerLinkType="ns:FlowParallelInvokePLT" /> <bpel:partnerLink name="firstAsyncPartner" partnerLinkType="ns1:FirstAsyncLinkType" myRole="FirstCallbackRole" partnerRole="FirstAsyncRole" initializePartnerRole="yes"></bpel:partnerLink> <bpel:partnerLink name="secondAsyncPartner" partnerLinkType="ns2:SecondAsyncLinkType" myRole="SecondCallbackRole" partnerRole="SecondAsyncRole" initializePartnerRole="yes"></bpel:partnerLink> </bpel:partnerLinks> <bpel:variables> <bpel:variable name="initiateProcessRequest" messageType="ns0:initiateProcessRequest" /> <bpel:variable name="firstAsyncInvoke" messageType="ns1:initiateRequest"> </bpel:variable> <bpel:variable name="firstAsyncCallback" messageType="ns1:callbackRequest"></bpel:variable> <bpel:variable name="secondAsyncInvoke" messageType="ns2:initiateRequest"></bpel:variable> <bpel:variable name="secondAsyncCallback" messageType="ns2:callbackRequest"></bpel:variable> <bpel:variable name="correlationVar" type="xs:string"></bpel:variable> <bpel:variable name="executionFlowVarSeq1" type="xs:string"></bpel:variable> <bpel:variable name="executionFlowVarSeq2" type="xs:string"></bpel:variable> </bpel:variables> <bpel:correlationSets> <bpel:correlationSet name="inCorrelation" properties="ns:firstin"></bpel:correlationSet> </bpel:correlationSets> <bpel:sequence name="MainSequence"> <bpel:receive name="Receive" partnerLink="bpelProcessPartner" operation="initiateProcess" portType="ns0:FlowParallelInvoke" variable="initiateProcessRequest" createInstance="yes"></bpel:receive> <bpel:assign validate="no" name="Assign"> <bpel:copy> <bpel:from>current-dateTime()</bpel:from> <bpel:to>$correlationVar</bpel:to> </bpel:copy> <bpel:copy> <bpel:from> <bpel:literal xml:space="preserve"><ns1:initiate> <in>?</in> </ns1:initiate></bpel:literal> </bpel:from> <bpel:to> <![CDATA[$firstAsyncInvoke.parameters]]> </bpel:to> </bpel:copy> <bpel:copy> <bpel:from>$correlationVar</bpel:from> <bpel:to><![CDATA[$firstAsyncInvoke.parameters/in]]></bpel:to> </bpel:copy> <bpel:copy> <bpel:from> <bpel:literal xml:space="preserve"><ns2:initiate> <in>?</in> </ns2:initiate></bpel:literal> </bpel:from> <bpel:to> <![CDATA[$secondAsyncInvoke.parameters]]> </bpel:to> </bpel:copy> <bpel:copy> <bpel:from>$correlationVar</bpel:from> <bpel:to><![CDATA[$secondAsyncInvoke.parameters/in]]></bpel:to> </bpel:copy> </bpel:assign> <bpel:flow name="FlowParallelInvokeReceive"> <bpel:sequence name="Sequence1"> <bpel:invoke name="Invoke1" partnerLink="firstAsyncPartner" operation="initiate" portType="ns1:FirstAsync" inputVariable="firstAsyncInvoke"> <bpel:correlations> <bpel:correlation set="inCorrelation" initiate="join"></bpel:correlation> </bpel:correlations> </bpel:invoke> <bpel:assign validate="no" name="assignexecutionFlowVarSeq1-to1"> <bpel:copy> <bpel:from>"1"</bpel:from> <bpel:to>$executionFlowVarSeq1</bpel:to> </bpel:copy> </bpel:assign> <bpel:wait name="Wait1"> <bpel:for>'PT1S'</bpel:for> </bpel:wait> <bpel:receive name="Receive1" partnerLink="firstAsyncPartner" operation="callback" portType="ns1:FirstCallbackSOAP" variable="firstAsyncCallback"> <bpel:correlations> <bpel:correlation set="inCorrelation" initiate="no"></bpel:correlation> </bpel:correlations> </bpel:receive> <bpel:assign validate="no" name="assignexecutionFlowVarSeq1-to2"> <bpel:copy> <bpel:from>"2"</bpel:from> <bpel:to>$executionFlowVarSeq1</bpel:to> </bpel:copy> </bpel:assign> </bpel:sequence> <bpel:sequence name="Sequence2"> <bpel:invoke name="Invoke2" partnerLink="secondAsyncPartner" operation="initiate" portType="ns2:SecondAsync" inputVariable="secondAsyncInvoke"> <bpel:correlations> <bpel:correlation set="inCorrelation" initiate="join"></bpel:correlation> </bpel:correlations> </bpel:invoke> <bpel:assign validate="no" name="assignexecutionFlowVarSeq2-to1"> <bpel:copy> <bpel:from>"1"</bpel:from> <bpel:to>$executionFlowVarSeq2</bpel:to> </bpel:copy> </bpel:assign> <bpel:wait name="Wait2"> <bpel:for>'PT1S'</bpel:for> </bpel:wait> <bpel:receive name="Receive2" partnerLink="secondAsyncPartner" operation="callback" portType="ns2:SecondCallbackSOAP" variable="secondAsyncCallback"> <bpel:correlations> <bpel:correlation set="inCorrelation" initiate="no"></bpel:correlation> </bpel:correlations> </bpel:receive> <bpel:assign validate="no" name="assignexecutionFlowVarSeq2-to2"> <bpel:copy> <bpel:from>"2"</bpel:from> <bpel:to>$executionFlowVarSeq2</bpel:to> </bpel:copy> </bpel:assign> </bpel:sequence> </bpel:flow> </bpel:sequence> </bpel:process> regards, sathwik On Tue, Oct 6, 2015 at 4:54 PM, Vinay Vijay <[email protected]> wrote: > Hi Sathwik, > Yes, process execution stalls in other branch also, till an > external message arrives for receive in the first branch. > > Regards, > Vinay > > -----Original Message----- > From: Sathwik B P [mailto:[email protected]] > Sent: Tuesday, October 06, 2015 4:25 PM > To: [email protected] > Subject: Re: Receive activities inside a Flow activity > > "the non-executed activities in other branch are not started till the > receive activity of the first branch is completed" > > What do you mean by receive activity is completed? Does it mean the > process execution stalls till an external message arrives for this Receive? > > > On Mon, Oct 5, 2015 at 7:28 PM, Vinay Vijay <[email protected]> > wrote: > > > Hi, > > I am having 2 parallel branches in a flow activity. > > Inside each branch I have a receive activity. When the process is > > executed, the activities in each branch are executed in parallel, but > > as soon as the receive activity is started in one branch, the > > non-executed activities in other branch are not started till the > > receive activity of the first branch is completed. > > Is this the intended behavior? If yes, can you please > > throw more light on why is it so? I am using ODE 1.3.5. Thanks in > advance. > > Regards, > > Vinay > > >
