Hi Sathwik, >> In BPEL a sub-process is implemented by using a <SCOPE /> within the <PROCESS />. Just to clarify your sub process definition is actually a full blown process. Am I right? Yes, my sub process is a full blown process (defined in a separate .bpel file).
I am restructuring my query about While loop. I am considering explicit correlations to implement this because we will have to relate invoke-receive activities. While loop executes its child activity in sequence, i.e. start new activity after first is complete. This is OK for one way <invoke>. However I do not understand how it will work for <receive>. Considering the sequential behavior of while loop, in the first iteration it will execute the first <receive> activity and wait till it is complete. Once the first <receive> is complete, it will execute the second <receive> and wait till is is complete and so on. However, while it is waiting for second <receive>, what if the process receives a response from 3rd <invoke>? It will fail because there is no corresponding <receive> on. Is my understanding correct or I am missing something here? Regards, JK On Wed, Nov 2, 2016 at 6:46 PM, Sathwik B P <sathwik...@gmail.com> wrote: > Response Inline > > On Wed, Nov 2, 2016 at 4:50 PM, Jit K <jkf...@gmail.com> wrote: > > > Hi Sathwik, > > > > Thank you for taking time to suggest these ideas. > > > > I was thinking on the same line but did not implement because I was not > > sure about calling <receive /> in a loop. > > Since <receive /> is a blocking activity, I thought the loop will stop > > during the first iteration when it executes the first <receive /> > activity > > and will not not complete. > > > > I have few queries. > > > > 1) Iterative forEach parallel='yes' > > In my case I would like to collate the result of all sub-processes in the > > main process. So in the first approach (forEach) do you think I can add a > > <receive /> after <invoke /> as shown below > > > > <bpel:forEach parallel='yes' ...> > > initialize the counter here > > <scope> > > <partnerlink .. /> access the EPR array using the index > > counter and assign it to the partnerlink. > > <invoke .../> > > <receive .../> to receive the response from above invoke > > </scope> > > </bpel:forEach> > > > > > In BPEL a sub-process is implemented by using a <SCOPE /> within the > <PROCESS />. Just to clarify your sub process definition is actually a full > blown process. Am I right? > Yes, you can add a <RECEIVE /> after <INVOKE />, make sure you use > correlations. Also, any variables defined within the <SCOPE /> is a local > variable and cannot be accessed outside of it. > > Example forEach Parallel: > https://github.com/apache/ode/blob/master/bpel-scripts/src/ > main/resources/2.0/good/foreach/ForEach2-2.0.bpel > > > > 2) While loop with async communication and explicit correlation > > In case of while loop, the execution is sequential. This is ok for > <invoke > > /> activities. But may not work for <receive /> activities because there > is > > no guarantee that the responses will be received in the same order of > > invoke. > > Or putting <receive /> in <while> will create an implicit <flow> like > > <forEach> loop? > > > > Thank you once again. > > > > JK > > > > There is no guarantee of order of message processing. But, if you can make > a unique correlated value relate for every invoke-receive then you can know > which receive relates to the invoke. So, it doesn't matter in which order > the receive has arrived. > > <FOREACH> creates an implicit <FLOW> as per the bpel specification: > http://docs.oasis-open.org/wsbpel/2.0/OS/wsbpel-v2.0-OS.html#_Toc164738521 > <WHILE> does not create any implicit <FLOW>. > > regards, > sathwik >