Whenever we create new bpel process three files are created by default viz.
- [processName].bpel
- [processName].wsdl
- bpel.xml
But the difference between the Synchronous and Asynchronous process remains in the .bpel and .wsdl files only.
For explaining how to convert the synchronous process to asynchronous one I have created a BPEL process SynchBP. I’ll be converting SynchBP which is a Synchronous BPEL process to an asynchronous one. As earlier said the difference is only in .bpel and .wsdl file so we'll concentrate only on these two files.
For ease of understanding I have used colours in the text so as to highlight what to change and what to add.
So, first start with SynchBP.bpel file.
There are three places where we have to make changes viz. partnerlink, receive, and reply element.
Partnerlink:
This is how the partnerlink element is of a SynchBP:
<partnerLink name="client" partnerLinkType="client:SynchBP" myRole="SynchBPProvider"/>
Add another attribute partnerRole="SynchBPRequester" to this element. The partnerlink will look like this:
<partnerLink name="client" partnerLinkType="client:SynchBP" myRole="SynchBPProvider" partnerRole="SynchBPRequester"/>
Receive Element:
Below is the receive element of SynchBP
Change the value of attribute operation from process to initiate. The partnerlink will look like this:
Reply element:
Below is the reply element of SynchBP
<reply name="replyOutput" partnerLink="client" portType="client:SynchBP" operation="process" variable="outputVariable"/>
Do the following changes to make it for asynchronous process:
- Change the element name from reply to invoke.
- Change the name attribute value from replyOutput to callbackClient.
- Change the value of attribute portType from client:SynchBP to client:SynchBPCallback (or simply [processName]Callback ).
- Change operation=”process” to operation=”onResult”.
- Change the name of last attribute i.e. variable to inputvariable.
<invoke name="callbackClient" partnerLink="client" portType="client:SynchBPCallback" operation="onResult" inputVariable="outputVariable"/>
Here we are done with SynchBP.bpel, now we need to edit SynchBP.wsdl.
There are very few changes to be made in the .wsdl file.
The elements that need to be changed are portType and partnerLinkType.
portType:
This is how a portType is defined in a synchronous process:
Create another portType element with name SynchronousProcessCallback and operation as onResult. Now delete the output element from both portTypes and in the SynchronousProcessCallback portType, change the attribute value from client:SynchBPRequestMessage to client:SynchBPResponseMessage. (Help: Copy & paste the already defined portType and do as below)
This is how partnerlink information is provided in a wsdl of a synchronous process:
Inside partnerLinkType create one more role element and give it a name as SynchronousProcessRequester. Now inside the role element for portType element change the value of name attribute to client:SynchronousProcessCallback.
Here we are done with .wsdl file and the SynchBP process is now an asynchronous BPEL Process.