Hi all,

I have created a simple project to test the correlation in BPEL, but I've got 
an unexpected behaviour (or at least I think it is). Let's show you the example 
while trying to explain the output. 

The process is quite simple, as it is a receive - assign - invoke - reply - 
Pick - invoke1 or invoke2. The idea is that the receive initialize the 
correlation set or variable property, and then in the pick it is used to 
continue the same process.

I call the BPEL WS using the process method and customerID "jo". Then I check 
in ODE management web and the process is active and it has returned the 
expected value from the reply. So I guess it is waiting at the pick function. 
Now I call the BPEL WS with the seller function and the process is completed. 
Till now, no problem and everything as expected. 

I repeat the process with other different customerIDs and there is no problem.

However if I repeat a call to BPEL WS using the process method and customerID 
"jo" (the same as the first call), I get the answer from the reply but when I 
check the process state the ODE management web shows the project is completed. 
Why is it not waiting at the pick and therefore active? If I call the seller 
function to trigger the pick it seems that nothing happens as far as the ODE 
log display (I have DEBUG enabled).

Any idea? This is the normal behaviour? Could you further explain the 
correlation behaviour? Does it mean that once you have a correlation variable 
set to a value it is keep in the internal database for the whole life of the 
server? How do you can set the correlation set to "off"?

TA.
Jorge


Here is main code for the correlation example:

<vprop:property name="customerID" type="xsd:string"/>

<vprop:propertyAlias propertyName="tns:customerID" 
  messageType="tns:BPEL_MultipleRequestMessage"
  part="payload">
  <vprop:query>tns:input</vprop:query>  
</vprop:propertyAlias>

<vprop:propertyAlias propertyName="tns:customerID" 
  messageType="tns:sellerRequestMessage"
  part="parameters">
  <vprop:query>tns:input</vprop:query>  
</vprop:propertyAlias>

<vprop:propertyAlias propertyName="tns:customerID" 
  messageType="tns:buyerRequestMessage"
  part="parameters">
  <vprop:query>tns:input</vprop:query>  
</vprop:propertyAlias>


...........


<bpel:receive name="receiveProcess" partnerLink="client"
  portType="tns:BPEL_Multiple" operation="process" variable="input"
  createInstance="yes">
  <bpel:correlations>
    <bpel:correlation set="order" initiate="yes" />
  </bpel:correlations>
</bpel:receive> 

..........


<bpel:pick name="PickToStopForAWhile">
  <!-- Seller -->
  <bpel:onMessage partnerLink="client"
    portType="tns:BPEL_Multiple" 
    operation="seller" 
    variable="inputSeller">
    <bpel:correlations>
              <bpel:correlation set="order" initiate="no"/>
    </bpel:correlations>
    <bpel:sequence name="Call1">
      <bpel:invoke name="InvokeServiceEmulator" partnerLink="ServiceEmulatorPL"
        operation="setUser" portType="srvemu:ServiceEmulatorPortType" 
        inputVariable="ServiceEmulatorPLSetUserRequest">
      </bpel:invoke>
    </bpel:sequence>
  </bpel:onMessage>
  <!-- Buyer -->
  <bpel:onMessage partnerLink="client"
    portType="tns:BPEL_Multiple" 
    operation="buyer" 
    variable="inputBuyer">
    <bpel:correlations>
      <bpel:correlation set="order" initiate="no" />
    </bpel:correlations>
    <bpel:sequence name="Call2">
      <bpel:invoke name="InvokeCalculator" partnerLink="CalculatorPL"
        operation="Add" portType="calc:CalculatorPortType" 
inputVariable="CalculatorPLAddRequest"
        outputVariable="CalculatorPLAddResponse">
      </bpel:invoke>
    </bpel:sequence>
  </bpel:onMessage>   
</bpel:pick>

Reply via email to