- jBPM 3.1.2 to 3.2 upgrade

- Implementation of Workflow Timers (primarily for WCM content launch, but also useful in other scenarios)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5578 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
David Caruana
2007-04-30 17:21:52 +00:00
parent 9878ca5b2a
commit 7567867be1
37 changed files with 1030 additions and 97 deletions

View File

@@ -34,14 +34,23 @@
<mapping resource="org/jbpm/graph/action/Script.hbm.xml"/>
<!-- following mapping files have a dependendy on -->
<!-- 'jbpm-identity-{version}.jar', mapping files -->
<!-- 'jbpm-identity.jar', mapping files -->
<!-- of the pluggable jbpm identity component. -->
<!-- comment out the following 3 lines if you don't-->
<!-- want to use the default jBPM identity mgmgt -->
<!-- component -->
<!-- Uncomment the following 3 lines if you -->
<!-- want to use the jBPM identity mgmgt -->
<!-- component. -->
<!-- identity mappings (begin) -->
<mapping resource="org/jbpm/identity/User.hbm.xml"/>
<mapping resource="org/jbpm/identity/Group.hbm.xml"/>
<mapping resource="org/jbpm/identity/Membership.hbm.xml"/>
<!-- identity mappings (end) -->
<!-- following mapping files have a dependendy on -->
<!-- the JCR API -->
<!-- jcr mappings (begin) ===
<mapping resource="org/jbpm/context/exe/variableinstance/JcrNodeInstance.hbm.xml"/>
==== jcr mappings (end) -->
<!-- ###################### -->
<!-- # jbpm mapping files # -->
@@ -115,13 +124,11 @@
<mapping resource="org/jbpm/context/exe/variableinstance/NullInstance.hbm.xml"/>
<mapping resource="org/jbpm/context/exe/variableinstance/StringInstance.hbm.xml"/>
<!-- msg.db mapping files -->
<mapping resource="org/jbpm/msg/Message.hbm.xml"/>
<mapping resource="org/jbpm/msg/db/TextMessage.hbm.xml"/>
<mapping resource="org/jbpm/command/ExecuteActionCommand.hbm.xml"/>
<mapping resource="org/jbpm/command/ExecuteNodeCommand.hbm.xml"/>
<mapping resource="org/jbpm/command/SignalCommand.hbm.xml"/>
<mapping resource="org/jbpm/command/TaskInstanceEndCommand.hbm.xml"/>
<!-- job mapping files -->
<mapping resource="org/jbpm/job/Job.hbm.xml"/>
<mapping resource="org/jbpm/job/Timer.hbm.xml"/>
<mapping resource="org/jbpm/job/ExecuteNodeJob.hbm.xml"/>
<mapping resource="org/jbpm/job/ExecuteActionJob.hbm.xml"/>
<!-- taskmgmt.exe mapping files -->
<mapping resource="org/jbpm/taskmgmt/exe/TaskMgmtInstance.hbm.xml"/>
@@ -129,9 +136,6 @@
<mapping resource="org/jbpm/taskmgmt/exe/PooledActor.hbm.xml"/>
<mapping resource="org/jbpm/taskmgmt/exe/SwimlaneInstance.hbm.xml"/>
<!-- scheduler.exe mapping files -->
<mapping resource="org/jbpm/scheduler/exe/Timer.hbm.xml"/>
<!-- logging mapping files -->
<mapping resource="org/jbpm/logging/log/ProcessLog.hbm.xml"/>
<mapping resource="org/jbpm/logging/log/MessageLog.hbm.xml"/>

View File

@@ -0,0 +1,14 @@
test.workflow.title=Test
test.workflow.description=Workflow for testing purposes
test.node.start.title=Start
test.node.start.description=The Start
test.node.review.title=Review
test.node.review.description=The Review
test.node.end.title=End
test.node.end.description=The End
test.node.start.transition.review=Review
test.task.submit.title=Submit Review Title
test.task.submit.description=Submit Review Description

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="test_decision_patch">
<swimlane name="initiator" />
<start-state name="start">
<task name="wf:submitTask" swimlane="initiator" />
<transition name="" to="decide" />
<event type="node-leave">
<script>
<variable name="value" access="write"/>
<expression>value = false</expression>
</script>
</event>
</start-state>
<swimlane name="assignee">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<actor>#{bpm_assignee}</actor>
</assignment>
</swimlane>
<decision name="decide">
<event type="node-enter">
<script>System.out.println("Value = " + value);</script>
</event>
<transition name="true" to="true">
<condition>#{value == true}</condition>
</transition>
<transition name="false" to="false">
<condition>#{value == false}</condition>
</transition>
</decision>
<node name="true">
<event type="node-enter">
<script>System.out.println("TRUE");</script>
</event>
<transition name="" to="end" />
</node>
<node name="false">
<event type="node-enter">
<script>System.out.println("FALSE");</script>
</event>
<transition name="" to="end" />
</node>
<end-state name="end" />
</process-definition>

View File

@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:grouptasks">
<swimlane name="initiator" />
<start-state name="start">
<task name="wf:submitGroupReviewTask" swimlane="initiator" />
<transition name="" to="review" />
<transition name="parallel" to="parallel" />
</start-state>
<swimlane name="reviewer">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<pooledactors>#{bpm_groupAssignee}</pooledactors>
</assignment>
</swimlane>
<task-node name="review">
<task name="wf:reviewTask" swimlane="reviewer"/>
<transition name="reject" to="end" />
<transition name="approve" to="end" />
</task-node>
<node name="parallel">
<action class="org.alfresco.repo.workflow.jbpm.ForEachFork">
<foreach>#{people.getMembers(bpm_groupAssignee)}</foreach>
<var>reviewer</var>
</action>
<transition name="review" to="parallelreview" />
</node>
<task-node name="parallelreview">
<task name="wf:reviewTask">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<actor>#{reviewer}</actor>
</assignment>
</task>
<transition name="" to="endparallel" />
</task-node>
<join name="endparallel">
<transition to="end" />
</join>
<end-state name="end" />
</process-definition>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:pooledtasks">
<swimlane name="initiator" />
<start-state name="start">
<task name="wf:submitParallelReviewTask" swimlane="initiator" />
<transition name="" to="review" />
</start-state>
<swimlane name="reviewer">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<pooledactors>#{bpm_assignees}</pooledactors>
</assignment>
</swimlane>
<task-node name="review">
<task name="wf:reviewTask" swimlane="reviewer"/>
<transition name="" to="end" />
</task-node>
<end-state name="end" />
</process-definition>

View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="test">
<swimlane name="initiator"></swimlane>
<start-state name="start">
<task name="submit" swimlane="initiator">
<controller>
<variable name="reviewer" access="write,required" />
<variable name="testNode" access="write,required" />
</controller>
</task>
<transition name="" to="review">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
<expression>
function result()
{
return ("Initiator: " + initiator.properties["cm:userName"] + ", process instance = " + executionContext.processInstance.id + ", testNode children = " + testNode.children.length);
}
result();
</expression>
<variable name="scriptResult" access="write"/>
</script>
</action>
</transition>
<transition name="end" to="end"/>
</start-state>
<swimlane name="reviewer">
<assignment actor-id="#{reviewer}"></assignment>
</swimlane>
<task-node name="review">
<event type="node-enter">
<script>
System.out.println("company home: " + companyhome.name);
System.out.println("initiator home: " + initiatorhome.name);
System.out.println("the reviewer is " + reviewer);
System.out.println("node " + testNode.name + " contains " + testNode.children.length + " children");
System.out.println("scriptResult = " + scriptResult);
</script>
</event>
<task name="review" duedate="1 business day" blocking="true" swimlane="reviewer">
<controller>
<variable name="comment" access="read,write,required"></variable>
</controller>
</task>
<transition name="" to="end"></transition>
</task-node>
<end-state name="end"></end-state>
</process-definition>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="test_processevents">
<event type="process-start">
<script>
System.out.println("Process start");
</script>
</event>
<start-state name="start">
<transition to="end"/>
</start-state>
<end-state name="end"/>
<event type="process-end">
<script>
if (cancelled) { System.out.println("cancelled"); }
System.out.println("Process end: " + cancelled);
</script>
</event>
</process-definition>

View File

@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="test_script">
<swimlane name="initiator"></swimlane>
<start-state name="start">
<task name="submit" swimlane="initiator">
<event type="task-assign">
<script>
System.out.println("taskInstance.create: " + taskInstance.create);
System.out.println("taskInstance.description: " + taskInstance.description);
</script>
</event>
<controller>
<variable name="testNode" access="write,required" />
<variable name="bpm_workflowDescription" access="write" />
</controller>
</task>
<transition name="" to="doit" />
</start-state>
<node name="doit">
<event type="node-enter">
<script>
<expression>
System.out.println("testNode.created: " + testNode.properties{"cm:created"});
System.out.println("test node " + testNode.name + " contains " + testNode.children.length + " children");
</expression>
<variable name="testNode" access="read" />
</script>
</event>
<event type="node-enter">
<action
class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
<!-- following line fails as it attempts to convert properties of children to javascript objects -->
<!-- except the beanshell line above has already pre-created the children without the javascript scope -->
<!-- object -->
<!-- var result = "testNode.created: " + testNode.properties["cm:created"] + ", testNode.children.length: " + testNode.children[0].properties["cm:name"]; -->
<expression>
var result = "testNode.created: " + theTestNode.properties["cm:created"] + ", theTestNode.children.length: " + theTestNode.children.length;
if (logger.isLoggingEnabled())
{
logger.log(result);
}
result;
</expression>
<variable name="testNode" access="read" mapped-name="theTestNode" />
<variable name="alfrescoScriptResult" access="write" />
</script>
</action>
</event>
<transition name="" to="end" />
</node>
<end-state name="end">
<event type="node-enter">
<script>
System.out.println("javascript: " + alfrescoScriptResult);
System.out.println("bpm_workflowDescription: " + bpm_workflowDescription);
</script>
</event>
</end-state>
</process-definition>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:testtaskassign">
<swimlane name="initiator" />
<start-state name="start">
<task name="bpm:startTask" swimlane="initiator" />
<transition name="" to="assign" />
</start-state>
<swimlane name="assignee">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<actor>#{bpm_assignee}</actor>
</assignment>
</swimlane>
<task-node name="assign">
<task name="wf:workflowTask" swimlane="assignee">
<event type="task-assign">
<script>
System.out.println("Task assigned: " + executionContext.getTaskInstance().getActorId());
</script>
</event>
</task>
<transition name="" to="end" />
</task-node>
<end-state name="end" />
</process-definition>

View File

@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:testtimers">
<swimlane name="initiator" />
<start-state name="start">
<task name="bpm:startTask" swimlane="initiator" />
<transition name="" to="launchpending">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
<expression>
new Date(new Date().getTime() + 5000); // launch date = now + 1 minute
</expression>
<variable name="launchDate" access="write"/>
</script>
</action>
</transition>
</start-state>
<swimlane name="assignee">
<assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<actor>#{bpm_assignee}</actor>
</assignment>
</swimlane>
<task-node name="launchpending">
<task swimlane="assignee">
<timer duedate="#{launchDate}" transition="launched">
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
logger.log("Launched at " + launchDate + " by " + person.properties.userName);
</script>
</action>
</timer>
</task>
<transition name="cancel" to="end" /> <!-- signalling this transition will cancel timer -->
<transition name="launched" to="end" /> <!-- signalling this transition will cancel timer -->
</task-node>
<end-state name="end" />
</process-definition>

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="wf:xor">
<swimlane name="initiator" />
<start-state name="start">
<task name="submit" swimlane="initiator" />
<transition name="" to="orsplit" />
</start-state>
<fork name="orsplit">
<transition name="a" to="a" />
<transition name="bc" to="bc" />
</fork>
<task-node name="a">
<task name="a">
<assignment actor-id="usera" />
</task>
<transition name="" to="orjoin" />
</task-node>
<fork name="bc">
<transition name="b" to="b" />
<transition name="c" to="c" />
</fork>
<task-node name="b">
<task name="b">
<assignment actor-id="userb" />
</task>
<transition name="" to="bcjoin" />
</task-node>
<task-node name="c">
<task name="c">
<assignment actor-id="userc" />
</task>
<transition name="" to="bcjoin" />
</task-node>
<join name="bcjoin">
<transition name="" to="orjoin" />
</join>
<join name="orjoin">
<event type="node-enter">
<script>
node.nOutOfM = 1;
</script>
</event>
<transition name="" to="wait" />
</join>
<state name="wait">
<transition name="" to="end" />
</state>
<end-state name="end" />
</process-definition>