Yang Yang Qian [
http://community.jboss.org/people/yangyang.qian] created the discussion
"Modelling a Process Cancellation"
To view the discussion, visit:
http://community.jboss.org/message/573760#573760
--------------------------------------------------------------
Hi all,
I am a new user to jBPM and I've been trying to use it as a simple state-machine to
model a process-cancellation proof-of-concept.
My aim is to define a workflow where two approvers need to sequentially approve a request
that has been submitted. At any point in the process, someone, for example the person for
whom the request was made, can cancel / withdraw the request. As soon as the request is
cancelled, all tasks / executions / states must stop.
(I suppose I'm trying to implement the type of pattern that is decribed here
http://www.workflowpatterns.com/patterns/control/cancellation/wcp20.php
http://www.workflowpatterns.com/patterns/control/cancellation/wcp20.php ... perhaps
it's over-described :p )
My current process definition tries to do this by introducing a Monitor state that lasts
until there is an external event to trigger the "cancel" transition, at which
time the process goes to the cancel end state and stops the other executions. But creating
a Monitor state purely for cancellation seems rather awkward ...
I wasn't sure what the recommended practice for modelling a process cancellation would
be in jBPM ... I've found some posts on using the API (the
ExecutionService.deleteProcessInstance() function I suppose?) but I am not sure that doing
so is correct since that will be a runtime solution? I suppose I can call it at runtime
from the servlet associated with the cancellation button? Or is there a more elegant
model-based solution?
Thanks all!
test_Cancellation_Model.jpdl.xml:
<?xml version="1.0" encoding="UTF-8"?>
<process name="test"
xmlns="http://jbpm.org/4.4/jpdl">
<start g="39,68,48,48" name="Start">
<transition to="fork1"/>
</start>
<fork g="135,158,48,48" name="fork1">
<transition to="Approval 1"/>
<transition to="Monitor"/>
</fork>
<state g="115,272,92,52" name="Monitor">
<transition g="-39,-18" name="cancel" to="End -
Cancelled Request"/>
</state>
<state g="247,154,92,52" name="Approval 1">
<on event="start"><event-listener
class="OnApprovalListener1"/></on>
<transition g="-30,-4" name="approve" to="Approval
2"/>
<transition g="-34,-18" name="reject" to="End - Rejected
Request"/>
</state>
<state g="396,60,92,52" name="Approval 2">
<on event="start"><event-listener
class="OnApprovalListener2"/></on>
<transition g="-25,-9" name="approve" to="End - Approved
Request"/>
<transition g="-4,-8" name="reject" to="End - Rejected
Request"/>
</state>
<end g="638,77,48,48" name="End - Approved Request"
state="Completed"/>
<end g="635,154,48,48" name="End - Rejected Request"
state="Rejected"/>
<end-cancel g="641,277,48,48" name="End - Cancelled
Request"/>
</process>
--------------------------------------------------------------
Reply to this message by going to Community
[
http://community.jboss.org/message/573760#573760]
Start a new discussion in jBPM at Community
[
http://community.jboss.org/choose-container!input.jspa?contentType=1&...]