ode-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tammo van Lessen <tvanles...@gmail.com>
Subject Re: Parallel foreach with correlation
Date Wed, 13 Jul 2011 14:59:44 GMT
Hi Alexandre,

which ODE version do you use?

I could look only briefly at your example, I think it should work
actually. What you could try is moving the partnerlink declaration into
the scope within the foreach, this should actually work.

Tammo

On 13.07.2011 16:30, Alexandre SAPANEL wrote:
> Hi,
> 
> 
> 
> I have a process which defines a parallel foreach which contains an invoke
> and a receive with correlation. It is defined as following:
> 
> 
> 
> …
> 
> <vprop:property name=*"prodOrderId"* type=*"p:long"*/>
> 
>       <vprop:property name=*"itemComponentId"* type=*"p:long"*/>
> 
>       </vprop:propertyAlias>
> 
>       <vprop:propertyAlias messageType=*"pim:processPictures"* part=*
> "parameters"* propertyName=*"tns:itemComponentId"*>
> 
>         <vprop:query>//*[local-name()='printingComponentId']</vprop:query>
> 
>     </vprop:propertyAlias>
> 
>       <vprop:propertyAlias messageType=*
> "tns:processedOrderPicturesRequestMessage"* part=*"parameters"* propertyName
> =*"tns:itemComponentId"*>
> 
>             <vprop:query>//*[local-name()='itemComponentId']</vprop:query>
> 
>       </vprop:propertyAlias>
> 
>       <vprop:propertyAlias messageType=*
> "tns:processedOrderPicturesRequestMessage"* part=*"parameters"* propertyName
> =*"tns:prodOrderId"*>
> 
>             <vprop:query>//*[local-name()='productionOrderId']</vprop:query>
> 
>       </vprop:propertyAlias>
> 
> …
> 
> <bpel:forEach parallel=*"yes"* counterName=*"CounterItemComponent"*
> 
>                                                name=*
> "ForEach_Component_In_OrderItem"*>
> 
>                                                <bpel:startCounterValue
>> <![CDATA[1]]></bpel:startCounterValue>
> 
>                                                <bpel:finalCounterValue
>> <![CDATA[$nbItemComponent]]></bpel:finalCounterValue>
> 
>                                                <bpel:scope name=*
> "SplitOrderItemIntoComponents"*>
> 
>                                                      <bpel:variables>
> 
>                                                            <bpel:variable
> name=*"itemComponent"* type=*"dom:itemComponent"* />
> 
>                                                      </bpel:variables>
> 
> 
> 
>                                                      <bpel:sequence name=*
> "Sequence1"*>
> 
>                                                            <bpel:assign
> validate=*"no"* name=*"AssignComponent"*>
> 
>                                                                  <bpel:copy>
> 
>                                                                        <
> bpel:from>
> 
> 
> <![CDATA[$orderItem/dom:components/dom:component[position()
> = $CounterItemComponent]]]>
> 
>                                                                        </
> bpel:from>
> 
>                                                                        <
> bpel:to variable=*"itemComponent"*></bpel:to>
> 
>                                                                  </bpel:copy
>>
> 
>                                                            </bpel:assign>
> 
>                                                            <bpel:if name=*
> "If_Printable"*>
> 
>                                                                  <
> bpel:condition><![CDATA[$itemComponent/dom:type/dom:printable='true']]></
> bpel:condition>
> 
>                                                                  <bpel:scope
> name=*"processItemPrintingComponentPictures"*>
> 
>                                                                        <
> bpel:variables>
> 
> 
> <bpel:variable name=*"processPicturesInput"*
> 
> 
>             messageType=*"pim:processPictures"*></bpel:variable>
> 
> 
> <bpel:variable name=*"processedOrderPicturesStatus"*
> 
> 
>             messageType=*"process:processedOrderPicturesRequestMessage"* />
> 
>                                                                        </
> bpel:variables>
> 
>                                                                        <
> bpel:correlationSets>
> 
> 
> <bpel:correlationSet name=*"ItemComponent"*
> 
> 
>             properties=*"process:itemComponentId"*></bpel:correlationSet>
> 
>                                                                        </
> bpel:correlationSets>
> 
>                                                                        <
> bpel:sequence>
> 
> 
> <bpel:assign validate=*"no"* name=*"prepareProcessPictures"*>
> 
> 
>             <bpel:copy>
> 
> 
>                   <bpel:from>
> 
> 
>                         <bpel:literal xml:space=*"preserve"*>
> 
> 
>                               <tns:processOrderPictures
> 
> 
>                               xmlns:tns=*"xxx"*
> 
> 
>                               xmlns:xsi=*"
> http://www.w3.org/2001/XMLSchema-instance"*>
> 
> 
>                                     <printingComponentId>23</
> printingComponentId>
> 
> 
>                               </tns:processOrderPictures>
> 
> 
>                         </bpel:literal>
> 
> 
>                   </bpel:from>
> 
> 
>                   <bpel:to part=*"parameters"* variable=*
> "processPicturesInput"* />
> 
> 
>             </bpel:copy>
> 
> 
>             <bpel:copy>
> 
> 
>                   <bpel:from> <![CDATA[$itemComponent/dom:id]]>
> 
> 
>                   </bpel:from>
> 
> 
>                   <bpel:to part=*"parameters"* variable=*
> "processPicturesInput"*>
> 
> 
>                         <bpel:query
> 
> 
>                               queryLanguage=*
> "urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"*>
> 
> 
>                               <![CDATA[printingComponentId]]>
> 
> 
>                         </bpel:query>
> 
> 
>                   </bpel:to>
> 
> 
>             </bpel:copy>
> 
> 
> </bpel:assign>
> 
> 
> <bpel:invoke name=*"InvokeProcessPictures"*
> 
> 
>             partnerLink=*"PictureServicePartner"* operation=*
> "processPictures"*
> 
> 
>             portType=*"pim:PictureService"* inputVariable=*
> "processPicturesInput"*>
> 
> 
> 
> 
>             <bpel:correlations>
> 
> 
>                   <bpel:correlation set=*"ProductionOrder"*
> 
> 
>                         initiate=*"no"* pattern=*"response"*></
> bpel:correlation>
> 
> 
>                   <bpel:correlation set=*"ItemComponent"*
> 
> 
>                         initiate=*"yes"* pattern=*"request"*></
> bpel:correlation>
> 
> 
>             </bpel:correlations>
> 
> 
> </bpel:invoke>
> 
> 
> <bpel:receive name=*"ReceiveProcessPictures"*
> 
> 
>             partnerLink=*"PictureServicePartner"* operation=*
> "processedOrderPictures"*
> 
> 
>             portType=*"process:PictureServiceCallbackPT"* variable=*
> "processedOrderPicturesStatus"*>
> 
> 
> 
> 
> 
>             <bpel:correlations>
> 
> 
>                   <bpel:correlation set=*"ProductionOrder"*
> 
> 
>                         initiate=*"no"*></bpel:correlation>
> 
> 
>                   <bpel:correlation set=*"ItemComponent"*
> 
> 
>                         initiate=*"no"*></bpel:correlation>
> 
> 
>             </bpel:correlations>
> 
> 
> </bpel:receive>
> 
>                                                                        </
> bpel:sequence>
> 
>                                                                  </
> bpel:scope>
> 
> 
> 
>                                                                  <bpel:else>
> 
>                                                                        <
> bpel:empty name=*"Empty"*></bpel:empty>
> 
>                                                                  </bpel:else
>>
> 
>                                                            </bpel:if>
> 
>                                                      </bpel:sequence>
> 
>                                                </bpel:scope>
> 
>                                          </bpel:forEach>
> 
> 
> 
> 
> 
> After the processPictures operation is invoked for each item in the loop,
> ODE sends a conflictingReceive error.
> 
> 
> 
> I found on different forums that I am not the only one having problems with
> parallel foreach with correlation but I did not find any working solution …
> 
> 
> 
> Any help will be appreciated
> 
> 
> 
> Thanks
> 
> 
> 
> Alexandre
> 

-- 
Tammo van Lessen - http://www.taval.de

Mime
View raw message