Sunday, 27 July 2008

Business Process Failures

Business Process Failures Examples of business processes that cover the 'normal path' abound and I often come across organisations that will present completed requirement specifications that pay scant regard for exception conditions leaving it to some IT practitioner to make it all up. This may not matter when the computer systems are recording what has happened in business processes after the event, but when there is a BPMS facilitating the end to end process, leaving the exception flows to the end is a risky approach. You are likely to end up with the business operation grinding to a halt.
Bruce Silver provided this useful example of the ease with which the business semantics involved in exceptions can be expressed formally in BPMN. This shows a requirement to undo a hotel booking if the corresponding flight cannot be booked. I loaded this into a BPMN tool (Intalio) to confirm that this fitted with BPMN1.1 and had an executable solution in BPEL. Intalio generates BPEL from the BPMN diagram. To allow it to be executed, I added the Initiator pool which causes a simple UI to be generated for the start of the process.
Unfortunately, at Intalio 5.2 Beta, the "end no flight" compensation end event is flagged as an error "The compensation activity can only be used in an exception flow". I modified the original further, putting the test for success in booking the flight into the subprocess Book Air. This seems a reasonable view of the real life business situation as well.
That did not work either. Perhaps I have misunderstood the meaning of the compensation end event. Looking at some Intalio Reference information the compensation end event is not mentioned, so how about simply failing the subprocess and not trapping the failure.
That does the compensation cancel Hotel on failure of sub-process Book Air, BUT the process fails and the Confirmation task is not executed! Fair enough, there is no handling specified for failure ( I was limiting the changes made to locate the thing that was stopping the compensation). Now add a failure handler on the outer sub-process. I was glad I had one of those, because Intalio does not allow you to put a subprocess around existing elements and I would have had to start again!
Surprisingly that stopped both the failure and the compensation action! HELP!
[Update: This relates to a post on the Intalio forum]

1 comment:

ihab said...

Nice Post David! Thanks for taking the time to document your scenario and the different workarounds you have tried.
Just to make sure our community can also benefit from this discussion, I have created a post in our forum with an exhaustive answer that I hope will solve your problem. You may find it here.

Your feedback and comments are more than Welcome.
Thanks again!

P.S: you can always group shapes in a subprocess by selecting those shapes and using the " group as sub-process" button ;)

Ihab El Alami
Intalio, the open Source BPMS company