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