嫻佺▼瀹氫箟鏂囦歡
<?xml version="1.0" encoding="UTF-8"?>
<process-definition
xmlns="urn:jbpm.org:jpdl-3.2" name="forkjoin">
<start-state name="寮濮?>
<transition name="to join" to="fork"></transition>
</start-state>
<fork name="fork">
<script>
<variable name="transitionNames" access="write"></variable>
<expression>
transitionNames=new ArrayList();
if(param>100){
transitionNames.add("to node1");
transitionNames.add("to node2");
}else{
transitionNames.add("to node3");
transitionNames.add("to node4");
}
</expression>
</script>
<transition name="to node1" to="node1"></transition>
<transition name="to node2" to="node2"></transition>
<transition name="to node3" to="node3"></transition>
<transition name="to node4" to="node4"></transition>
</fork>
<join name="join">
<transition name="to 緇撴潫" to="緇撴潫"></transition>
</join>
<end-state name="緇撴潫"></end-state>
<node name="node1">
<transition name="to join" to="join"></transition>
<event type="node-enter">
<script>
print("緇忚繃"+node.getName());
</script>
</event>
</node>
<node name="node2">
<transition name="to join" to="join"></transition>
<event type="node-enter">
<script>
print("緇忚繃"+node.getName());
</script>
</event>
</node>
<node name="node3">
<transition name="to join" to="join"></transition>
<event type="node-enter">
<script>
print("緇忚繃"+node.getName());
</script>
</event>
</node>
<node name="node4">
<transition name="to join" to="join"></transition>
<event type="node-enter">
<script>
print("緇忚繃"+node.getName());
</script>
</event>
</node>
</process-definition>
宸ヤ綔鏈哄埗:鏄氳繃鍦╢ork鑺傜偣娣誨姞<script></script>鏍囩錛屽湪script鍐呴儴璁劇疆
<variable name="transitionNames" access="write"></variable>鍒囪姝ゅaccess灞炴ц緗負write
鍜?br /><expression>
transitionNames=new ArrayList();
if(param>100){
transitionNames.add("to node1");
transitionNames.add("to node2");
}else{
transitionNames.add("to node3");
transitionNames.add("to node4");
}
</expression>
涓婇潰鍦ㄦ祦紼嬪疄渚嬩笂涓嬫枃涓畾涔変簡涓涓彉閲弍aram,褰損aram澶т簬100鏃訛紝鎵цnode1鍜宯ode2鑺傜偣
嫻嬭瘯涓涓?
package com.jbpm;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
public class TestForkJoin {
public static void main(String[] args) {
ProcessDefinition processDefinition=ProcessDefinition.parseXmlResource("forkjoin/processdefinition.xml");
ProcessInstance processInstance=new ProcessInstance(processDefinition);
processInstance.getContextInstance().setVariable("param", 200);
//processInstance.signal();
System.err.println("褰撳墠鑺傜偣鏄?"+processInstance.getRootToken().getNode().getName());
processInstance.signal();
System.err.println("褰撳墠鑺傜偣鏄?"+processInstance.getRootToken().getNode().getName());
}
}
榪愯緇撴灉
褰撳墠鑺傜偣鏄?寮濮?br />11:44:07,703 [main] DEBUG GraphElement : event 'before-signal' on 'StartState(寮濮?' for 'Token(/)'
11:44:07,703 [main] DEBUG GraphElement : event 'node-leave' on 'StartState(寮濮?' for 'Token(/)'
11:44:07,718 [main] DEBUG GraphElement : event 'transition' on 'Transition(to join)' for 'Token(/)'
11:44:07,718 [main] DEBUG GraphElement : event 'node-enter' on 'Fork(fork)' for 'Token(/)'
11:44:07,719 [main] DEBUG Script : script input: {node=Fork(fork), param=200, token=Token(/), task=null, executionContext=ExecutionContext[Token(/)], taskInstance=null}
11:44:07,814 [main] DEBUG Script : script output: {transitionNames=[to node1, to node2]}
11:44:07,830 [main] DEBUG GraphElement : event 'node-leave' on 'Fork(fork)' for 'Token(/to node1)'
11:44:07,830 [main] DEBUG GraphElement : event 'transition' on 'Transition(to node1)' for 'Token(/to node1)'
11:44:07,830 [main] DEBUG GraphElement : event 'node-enter' on 'Node(node1)' for 'Token(/to node1)'
11:44:07,830 [main] DEBUG GraphElement : executing action 'Script(10f6d3)'
11:44:07,830 [main] DEBUG Token : token[0] is locked by token[0]
11:44:07,830 [main] DEBUG Script : script input: {node=Node(node1), param=200, token=Token(/to node1), task=null, executionContext=ExecutionContext[Token(/to node1)], taskInstance=null}
緇忚繃node1
11:44:07,861 [main] DEBUG Script : script output: {}
11:44:07,861 [main] DEBUG Token : token[0] is unlocked by token[0]
11:44:07,861 [main] DEBUG GraphElement : event 'node-leave' on 'Node(node1)' for 'Token(/to node1)'
11:44:07,861 [main] DEBUG GraphElement : event 'transition' on 'Transition(to join)' for 'Token(/to node1)'
11:44:07,861 [main] DEBUG GraphElement : event 'node-enter' on 'Join(join)' for 'Token(/to node1)'
11:44:07,861 [main] DEBUG Join : join will not yet reactivate parent: found concurrent token 'Token(/to node2)'
11:44:07,861 [main] DEBUG GraphElement : event 'node-leave' on 'Fork(fork)' for 'Token(/to node2)'
11:44:07,861 [main] DEBUG GraphElement : event 'transition' on 'Transition(to node2)' for 'Token(/to node2)'
11:44:07,861 [main] DEBUG GraphElement : event 'node-enter' on 'Node(node2)' for 'Token(/to node2)'
11:44:07,861 [main] DEBUG GraphElement : executing action 'Script(cfec48)'
11:44:07,861 [main] DEBUG Token : token[0] is locked by token[0]
11:44:07,861 [main] DEBUG Script : script input: {node=Node(node2), param=200, token=Token(/to node2), task=null, executionContext=ExecutionContext[Token(/to node2)], taskInstance=null}
緇忚繃node2 
]]>