I’m sure a lot of you remember the movie Dude, where's my car? and one of its famous lines:
- Q: What is the Continuum Transfunctioner?
- A: It is a very mysterious and powerful device and its mystery is only exceeded by its power.
While researching BPM on the Internet, I came across a very interesting challenge set by Ismael Ghalimi of Intalio. The whole thing started when Ismael argued that BPEL should be the language of choice for BPMN because it is based on Pi-Calculus. After which followed quite a few heated arguments, resulting in Ismael challenging vendors who serialize in anything other than BPEL (read XPDL) to show how they can model this particular process, failure of which everyone must accept that BPEL is the superior language of choice. I presume that the reasoning behind this is that only if a BPMS based on the Pi-Calculus theory (does the Pi-Calculus process engine sound like the Continuum Transfunctioner?) will indeed be able to model and execute this. To which Bruce Silver responded that a few tools can do it, including Oracle BPM (aka ALBPM) and to drop the Pi-Calculus claim. A few responses to his challenge later, Ismael goes on to say that Oracle BPM can do it because it relies on BPMN and BPEL.
So let me start with a couple of disclaimers first to avoid the kind of responses typical of "religious" wars:
- I don’t know anything about Pi-Calculus so I will refrain from embarrassing myself by talking about it
- I’m not a BPEL-basher and I don’t view the world in terms of BPEL-lovers vs. BPEL-haters; I take the view such as the one very elegantly described by Sandy Kemsley in reply to Arthur ter Hofstede:"it doesn't really matter whether it's BPEL or XPDL or a proprietary execution language, as long as the model can directly translate to execution".
Now, to clarify one important thing: Oracle BPM (aka ALBPM which Bruce was referring to) serializes the process definitions in XPDL (at least as of 10gR3). As Manoj Das, our BPM Product Manager, noted in the BPMN 2.0 roundtable, in response to a question on the relationship between BPMN and XPDL:
“Since BPMN 1.1 did not specify a persistence format, products, including ours, used XPDL as the persistence and inter-change format for it.”
Which brings us to the challenge itself. Since we don't normally talk about Pi-Calculus, I would have tackled this using both Oracle BPEL PM and Oracle BPM, but I think that 1) the proof that Oracle BPEL can do this has already been provided by Ismael himself (i.e. by saying that BPEL can do it) 2) the gauntlet was really thrown to vendors whose tool(s) serialize in XPDL. I’ll therefore limit my response to Oracle BPM.
Here we go then. Exhibit A, Process P1:
Exhibit B, Process P2:
I’ll now explain the processes. P1 starts with a “Global Creation” activity called “Receive Input from user to start P1”. Now, for some of you who might find that activity not linked to the rest of the process, rest assured. The “Global Creation Activity” has an implicit link to the Begin Activity (indicated by a circle). If that activity is successful, then a process instance is created. If not (e.g. if the user decides to abandon), no instance is created.
The “Start P2” activity is an asynchronous sub-process call to P2. The “Wait for P2” is a notification wait activity. The notification wait forces a calling (parent) process to wait until a message notification is received from the called (child) process through, say a “Send Message” activity (there are other methods to do this but that’s not the point). The remainder of the other activities in P1 are just simple displays of data (without any pretty UI but you'll get the idea).
Process P2 starts when called by P1 and allows a user to enter some data. It then sends a notification message to P1 and P2 ends.
For the purpose of execution, I’ll be using 3 variables, to show their use and modification in the various processes. So, I start by executing the "Receive Input from user to start P1" activity.
After submitting, the process is now in the activity “Add P1 Specific Data”:
I then execute “Add P1 Specific Data” and make some changes:
Now, being a lazy hacker, I created just one role and gave it to the only participant I used in this example but of course one can create more process roles and assign the roles to many more participants. Because of this, I now have 2 work items in my queue:
Please note their respective next activity: “Something is happening here” and “Add P2 Specific Data”. I now execute “Add P2 Specific Data”, followed by “Something is happening here ” (you can execute it in any order):
I finally execute the “Final display” activity:
You can notice that the value of the 3rd variable is passed from Process P2 as well. I believe I have now demonstrated the solution to the challenge.
Continued in Part 2.
Cheers,
Ali