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>