This content has been marked as final. Show 1 reply
I'm thinking you're asking what you can do with an instance that has an uncaught exception and not how to have modeled it so they can be properly handled. If you're not catching the exception, in any of the 7 techniques listed below - you're kind of stuck.
If you have a service task and you'd like to handle the exception (manually or other), you have the choices listed below. If you are using none of these, then you're allowing the BPMN engine to handle the exception and about all you can do is to delete the instance in Enterprise Manager.
1) You could add a catch error event to the boundary of the Service task and have that event designated to handle the exception thrown. From the boundary event, you might have a sequence flow to an Interactive activity that lets you hande the exception. Once handled, the instance can continue on with the process.
2) You could add an event subprocess in the same process as the Service activity that has a start error event and have that event designated to handle the exception thrown. From the event subprocess, you might have a sequence flow to an Interactive activity that lets you hande the exception. The difference between this scenario and the first is that the instance in the process has to terminate in the end event in the event subprocess.
3) If your process is invoked as an embedded subprocess, you could add a boundary event (1 above) or catch it in an event subprocess (2 above).
4) If your process is a reusable process invoked from a parent process using a Call activity, if the exception isn't caught inside the called subprocess you could add a boundary event to the Call activity in the parent process. This is similiar to 1 above and you'd need a sequence flow comingin out of the boundary catch error event on the Call activity to go somewhere in the process to handle the exception.
5) If your process is a reusable process invoked from a parent process using a Call activity, if the exception isn't caught inside the called subprocess and it is not caught by a boundary error event on the parent's call activity then you could add an event subprocess in the parent process that has a start error event and have that event designated to handle the exception thrown inside the child process.
6) There is a way to handle exceptions thrown inside a peer process but I'm guessing that might be too much for this post.
7) You can handle exceptions using a Policy outside of the processes. Rather than using the above to handle exceptions, you could use policy based exception handling where you give the policy the different types of faults you want to catch and if you want to retry, let it be handled by someone in Enterprise Manager and if you just want to abort the instance.
If the exception is not caught, then you're in the scenario you're in now and the BPMN engine is where it is unfortunately caught. Although you can see it, it is a non-recoverable exception and about all you can do is delete the instance in Enterprise Manager.
Hope this helps,