﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-雪山飞鹄-随笔分类-jbpm4</title><link>http://www.blogjava.net/sxyx2008/category/46464.html</link><description>温馨提示：您的每一次转载,体现了我写此文的意义!!!烦请您在转载时注明出处http://www.blogjava.net/sxyx2008/谢谢合作!!!
</description><language>zh-cn</language><lastBuildDate>Thu, 16 Jun 2011 09:06:11 GMT</lastBuildDate><pubDate>Thu, 16 Jun 2011 09:06:11 GMT</pubDate><ttl>60</ttl><item><title>Jbpm3中设置fork按条件执行</title><link>http://www.blogjava.net/sxyx2008/archive/2011/06/16/352412.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Thu, 16 Jun 2011 03:45:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2011/06/16/352412.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/352412.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2011/06/16/352412.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/352412.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/352412.html</trackback:ping><description><![CDATA[<div>流程定义文件
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br /><br /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">process-definition<br />&nbsp;&nbsp;</span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="urn:jbpm.org:jpdl-3.2"</span><span style="color: #ff0000">&nbsp;&nbsp;name</span><span style="color: #0000ff">="forkjoin"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">start-state&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="开始"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;join"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="fork"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">start-state</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">fork&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="fork"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">variable&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="transitionNames"</span><span style="color: #ff0000">&nbsp;access</span><span style="color: #0000ff">="write"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">variable</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">expression</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transitionNames=new&nbsp;ArrayList();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(param&gt;100){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transitionNames.add("to&nbsp;node1");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transitionNames.add("to&nbsp;node2");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transitionNames.add("to&nbsp;node3");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;transitionNames.add("to&nbsp;node4");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">expression</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;node1"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="node1"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;node2"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="node2"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;node3"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="node3"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;node4"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="node4"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">fork</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">join&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="join"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;结束"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="结束"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">join</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">end-state&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="结束"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">end-state</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">node&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="node1"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;join"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="join"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">event&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="node-enter"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("经过"+node.getName());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">event</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">node</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">node&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="node2"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;join"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="join"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">event&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="node-enter"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("经过"+node.getName());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">event</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">node</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">node&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="node3"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;join"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="join"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">event&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="node-enter"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("经过"+node.getName());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">event</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">node</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">node&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="node4"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">transition&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="to&nbsp;join"</span><span style="color: #ff0000">&nbsp;to</span><span style="color: #0000ff">="join"</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">transition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">event&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="node-enter"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print("经过"+node.getName());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">script</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">event</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">node</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">process-definition</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br /></span></div><br />工作机制:是通过在fork节点添加&lt;script&gt;&lt;/script&gt;标签，在script内部设置<br />&lt;variable name="transitionNames" access="write"&gt;&lt;/variable&gt;切记此处access属性设置为write<br />和<br />&lt;expression&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;transitionNames=new ArrayList();<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;if(param&gt;100){<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;transitionNames.add("to node1");<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;transitionNames.add("to node2");<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;}else{<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;transitionNames.add("to node3");<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;transitionNames.add("to node4");<br />&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;}<br />&lt;/expression&gt;<br />上面在流程实例上下文中定义了一个变量param,当param大于100时，执行node1和node2节点<br />测试一下:<br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.jbpm;<br /><br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.jbpm.graph.def.ProcessDefinition;<br /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.jbpm.graph.exe.ProcessInstance;<br /><br /><br /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestForkJoin&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessDefinition&nbsp;processDefinition</span><span style="color: #000000">=</span><span style="color: #000000">ProcessDefinition.parseXmlResource(</span><span style="color: #000000">"</span><span style="color: #000000">forkjoin/processdefinition.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProcessInstance&nbsp;processInstance</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProcessInstance(processDefinition);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processInstance.getContextInstance().setVariable(</span><span style="color: #000000">"</span><span style="color: #000000">param</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">200</span><span style="color: #000000">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">processInstance.signal();</span><span style="color: #008000"><br /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</span><span style="color: #000000">"</span><span style="color: #000000">当前节点是:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">processInstance.getRootToken().getNode().getName());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;processInstance.signal();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println(</span><span style="color: #000000">"</span><span style="color: #000000">当前节点是:</span><span style="color: #000000">"</span><span style="color: #000000">+</span><span style="color: #000000">processInstance.getRootToken().getNode().getName());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div>运行结果<br />当前节点是:开始<br />11:44:07,703 [main] DEBUG GraphElement : event 'before-signal' on 'StartState(开始)' for 'Token(/)'<br />11:44:07,703 [main] DEBUG GraphElement : event 'node-leave' on 'StartState(开始)' for 'Token(/)'<br />11:44:07,718 [main] DEBUG GraphElement : event 'transition' on 'Transition(to join)' for 'Token(/)'<br />11:44:07,718 [main] DEBUG GraphElement : event 'node-enter' on 'Fork(fork)' for 'Token(/)'<br />11:44:07,719 [main] DEBUG Script : script input: {node=Fork(fork), param=200, token=Token(/), task=null, executionContext=ExecutionContext[Token(/)], taskInstance=null}<br />11:44:07,814 [main] DEBUG Script : script output: {transitionNames=[to node1, to node2]}<br />11:44:07,830 [main] DEBUG GraphElement : event 'node-leave' on 'Fork(fork)' for 'Token(/to node1)'<br />11:44:07,830 [main] DEBUG GraphElement : event 'transition' on 'Transition(to node1)' for 'Token(/to node1)'<br />11:44:07,830 [main] DEBUG GraphElement : event 'node-enter' on 'Node(node1)' for 'Token(/to node1)'<br />11:44:07,830 [main] DEBUG GraphElement : executing action 'Script(10f6d3)'<br />11:44:07,830 [main] DEBUG Token : token[0] is locked by token[0]<br />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}<br />经过node1<br />11:44:07,861 [main] DEBUG Script : script output: {}<br />11:44:07,861 [main] DEBUG Token : token[0] is unlocked by token[0]<br />11:44:07,861 [main] DEBUG GraphElement : event 'node-leave' on 'Node(node1)' for 'Token(/to node1)'<br />11:44:07,861 [main] DEBUG GraphElement : event 'transition' on 'Transition(to join)' for 'Token(/to node1)'<br />11:44:07,861 [main] DEBUG GraphElement : event 'node-enter' on 'Join(join)' for 'Token(/to node1)'<br />11:44:07,861 [main] DEBUG Join : join will not yet reactivate parent: found concurrent token 'Token(/to node2)'<br />11:44:07,861 [main] DEBUG GraphElement : event 'node-leave' on 'Fork(fork)' for 'Token(/to node2)'<br />11:44:07,861 [main] DEBUG GraphElement : event 'transition' on 'Transition(to node2)' for 'Token(/to node2)'<br />11:44:07,861 [main] DEBUG GraphElement : event 'node-enter' on 'Node(node2)' for 'Token(/to node2)'<br />11:44:07,861 [main] DEBUG GraphElement : executing action 'Script(cfec48)'<br />11:44:07,861 [main] DEBUG Token : token[0] is locked by token[0]<br />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}<br />经过node2</div> <img src ="http://www.blogjava.net/sxyx2008/aggbug/352412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2011-06-16 11:45 <a href="http://www.blogjava.net/sxyx2008/archive/2011/06/16/352412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟我学JBPM4之State、Decision 、Task活动</title><link>http://www.blogjava.net/sxyx2008/archive/2010/09/29/333385.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Wed, 29 Sep 2010 05:52:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/09/29/333385.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/333385.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/09/29/333385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/333385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/333385.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文电子版文档下载 State、Decision 、Task活动详解:State表示一个等待状态。当流程实例执行到state节点时会暂停下来(处于等待状态),流程的执行会在外部触发器被调用之前一直等待(会暂停)Decision条件判断节点,表示在多条路径中选择一条。一个 decision 活动拥有很多个传出的转移。流程的执行到达一个 decision 活动时，会自动进行计算来决定采用哪...&nbsp;&nbsp;<a href='http://www.blogjava.net/sxyx2008/archive/2010/09/29/333385.html'>阅读全文</a><img src ="http://www.blogjava.net/sxyx2008/aggbug/333385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-09-29 13:52 <a href="http://www.blogjava.net/sxyx2008/archive/2010/09/29/333385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>跟我一起学JBPM4之基础概念</title><link>http://www.blogjava.net/sxyx2008/archive/2010/09/28/333256.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Tue, 28 Sep 2010 08:44:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/09/28/333256.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/333256.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/09/28/333256.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/333256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/333256.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近开始接触JBPM4，网上关于JBPM4的资料少之又少。大多是关于JBPM3的。而4跟3的API差异也较大。在学习过程中做了一点关于JBPM4的笔记。强烈期望JBPM4达人能贡献一些JBPM4方面的学习资料或视频教程或出版发行JBPM4的书籍之类的。本文电子版下载流程定义引擎:ProcessEngine processEngine;获取:            ...&nbsp;&nbsp;<a href='http://www.blogjava.net/sxyx2008/archive/2010/09/28/333256.html'>阅读全文</a><img src ="http://www.blogjava.net/sxyx2008/aggbug/333256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-09-28 16:44 <a href="http://www.blogjava.net/sxyx2008/archive/2010/09/28/333256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat6下使用jBPM-4出现 java.lang.LinkageError。javax/el/ExpressionFactory</title><link>http://www.blogjava.net/sxyx2008/archive/2010/09/27/333058.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Mon, 27 Sep 2010 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/09/27/333058.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/333058.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/09/27/333058.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/333058.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/333058.html</trackback:ping><description><![CDATA[<p>因为tomcat6下的el-api.jar与jBPM-4使用的juel.jar产生冲突。</p>
<p>解决方法一：改用tomcat-5.5。</p>
<p>解决方法二：将juel.jar, juel-engine.jar, juel-impl.jar三个文件复制到tomcat的lib目录下，并删除tomcat6下的el-api.jar即可解决。</p>
  <img src ="http://www.blogjava.net/sxyx2008/aggbug/333058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-09-27 14:56 <a href="http://www.blogjava.net/sxyx2008/archive/2010/09/27/333058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm4.3中数据库选择mysql注意事项</title><link>http://www.blogjava.net/sxyx2008/archive/2010/09/26/332954.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Sun, 26 Sep 2010 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/09/26/332954.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/332954.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/09/26/332954.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/332954.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/332954.html</trackback:ping><description><![CDATA[在运行jbpm4.3中例子时,若数据库选择为mysql，应注意修改jbpm.hibernate.cfg.xml中mysql的方言为org.hibernate.dialect.MySQL5InnoDBDialect
 <img src ="http://www.blogjava.net/sxyx2008/aggbug/332954.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-09-26 14:53 <a href="http://www.blogjava.net/sxyx2008/archive/2010/09/26/332954.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm4.3整合web工程时异常解决方案</title><link>http://www.blogjava.net/sxyx2008/archive/2010/08/16/329021.html</link><dc:creator>雪山飞鹄</dc:creator><author>雪山飞鹄</author><pubDate>Mon, 16 Aug 2010 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/sxyx2008/archive/2010/08/16/329021.html</guid><wfw:comment>http://www.blogjava.net/sxyx2008/comments/329021.html</wfw:comment><comments>http://www.blogjava.net/sxyx2008/archive/2010/08/16/329021.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/sxyx2008/comments/commentRss/329021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sxyx2008/services/trackbacks/329021.html</trackback:ping><description><![CDATA[近期刚开始接触jbpm，在整合web工程时遇到一异常，特有意思。记录下来，以免更多人少走弯路。<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">java.lang.LinkageError:&nbsp;loader&nbsp;constraint&nbsp;violation:&nbsp;when&nbsp;resolving&nbsp;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;">&nbsp;method&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;the&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;loader&nbsp;(instance&nbsp;of&nbsp;org</span><span style="color: #000000;">/</span><span style="color: #000000;">apache</span><span style="color: #000000;">/</span><span style="color: #000000;">jasper</span><span style="color: #000000;">/</span><span style="color: #000000;">servlet</span><span style="color: #000000;">/</span><span style="color: #000000;">JasperLoader)&nbsp;of&nbsp;the&nbsp;current&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">,&nbsp;org</span><span style="color: #000000;">/</span><span style="color: #000000;">apache</span><span style="color: #000000;">/</span><span style="color: #000000;">jsp</span><span style="color: #000000;">/</span><span style="color: #000000;">index_jsp,&nbsp;and&nbsp;the&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;loader&nbsp;(instance&nbsp;of&nbsp;org</span><span style="color: #000000;">/</span><span style="color: #000000;">apache</span><span style="color: #000000;">/</span><span style="color: #000000;">catalina</span><span style="color: #000000;">/</span><span style="color: #000000;">loader</span><span style="color: #000000;">/</span><span style="color: #000000;">StandardClassLoader)&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;resolved&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">,&nbsp;javax</span><span style="color: #000000;">/</span><span style="color: #000000;">servlet</span><span style="color: #000000;">/</span><span style="color: #000000;">jsp</span><span style="color: #000000;">/</span><span style="color: #000000;">JspApplicationContext,&nbsp;have&nbsp;different&nbsp;Class&nbsp;objects&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;the&nbsp;type&nbsp;javax</span><span style="color: #000000;">/</span><span style="color: #000000;">el</span><span style="color: #000000;">/</span><span style="color: #000000;">ExpressionFactory&nbsp;used&nbsp;in&nbsp;the&nbsp;signature<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.jsp.index_jsp._jspInit(index_jsp.java:</span><span style="color: #000000;">30</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:</span><span style="color: #000000;">52</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:</span><span style="color: #000000;">159</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:</span><span style="color: #000000;">329</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:</span><span style="color: #000000;">342</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.jasper.servlet.JspServlet.service(JspServlet.java:</span><span style="color: #000000;">267</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;javax.servlet.http.HttpServlet.service(HttpServlet.java:</span><span style="color: #000000;">717</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:</span><span style="color: #000000;">290</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:</span><span style="color: #000000;">206</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:</span><span style="color: #000000;">233</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:</span><span style="color: #000000;">191</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:</span><span style="color: #000000;">128</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:</span><span style="color: #000000;">102</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:</span><span style="color: #000000;">109</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:</span><span style="color: #000000;">286</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:</span><span style="color: #000000;">845</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:</span><span style="color: #000000;">583</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:</span><span style="color: #000000;">447</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.Thread.run(Thread.java:</span><span style="color: #000000;">619</span><span style="color: #000000;">)<br />
</span></div>
从异常信息不难看出，是web容器 tomcat解析jsp页面时jar包冲突。<br />
仔细查看jbpm4.3 lib目录下的jar包我们不难发现，罪魁祸首为juel.jar和juel-impl.jar<br />
很显然原因就出在这两个jar包身上，从名字上不难发现juel-impl是前者的实现，因此这里采取的措施是保留juel-impl.jar删除juel.jar<br />
重启tomcat,刷新web页面。问题迎刃而解。<br />
刚开始接触jbpm，前阵子看了一下jbpm3的api，后来看了看jbpm4的API发现之间相差很大。小弟刚开始接触jbpm，希望达人指点。<br />
<br />
 <img src ="http://www.blogjava.net/sxyx2008/aggbug/329021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sxyx2008/" target="_blank">雪山飞鹄</a> 2010-08-16 17:46 <a href="http://www.blogjava.net/sxyx2008/archive/2010/08/16/329021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>