ode-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alexandre SAPANEL <alexandre.sapa...@photobox.com>
Subject Parallel foreach with correlation
Date Wed, 13 Jul 2011 14:30:46 GMT
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

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message