﻿<?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-gyl868</title><link>http://www.blogjava.net/gyl868/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 06 May 2026 07:11:55 GMT</lastBuildDate><pubDate>Wed, 06 May 2026 07:11:55 GMT</pubDate><ttl>60</ttl><item><title>jbpm涉及到的几个重要概念及常用API </title><link>http://www.blogjava.net/gyl868/archive/2009/08/08/290391.html</link><dc:creator>gyl868</dc:creator><author>gyl868</author><pubDate>Sat, 08 Aug 2009 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/gyl868/archive/2009/08/08/290391.html</guid><wfw:comment>http://www.blogjava.net/gyl868/comments/290391.html</wfw:comment><comments>http://www.blogjava.net/gyl868/archive/2009/08/08/290391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/gyl868/comments/commentRss/290391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/gyl868/services/trackbacks/290391.html</trackback:ping><description><![CDATA[<p><span style="font-size: 24pt" twffan="done"><strong>一 ： 重要概念</strong></span><br />
<br />
1 ： process definition（流程定义）：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工作流的流程的完整定义，包括节点和节点之间的走向等关键信息。通常以xml格式提供。一个具体的系统往往是由许多个流程组成的。 </p>
<p>2 ： process instance（流程实例）：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个process defination生成的业务层的实例。当process instance创建以后，代表流程的执行路径，并被定义到开始节点。 <br />
</p>
<p><br />
3&nbsp;&nbsp;： token（令牌）：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表示了一个执行的路径，它是运行时产生的。当实例建立以后，令牌也就产生了。 </p>
<p>4&nbsp;： node：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表示流程中的一个节点。 </p>
<p>5&nbsp;： transition：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关联两个节点，用于表示节点的走向 </p>
<p>6&nbsp;： signal：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让一个token执行下一步。<u><strong>process instance也有signal，当用process instance的signal时，其实就是运行process instance根令牌（root token）的signal.</strong></u>&nbsp;&nbsp; 当token进入到一个node时，node会被执行，并产生一些事件，比如进入、离开节点等，这也是执行业务逻辑的地方。<strong><u>事件由action来表示。</u></strong><br />
&nbsp;<br />
</p>
<p><span style="font-size: 10pt" twffan="done"><strong>7</strong>&nbsp;： 事件Event&nbsp;</span></p>
<p>Event反映的是流程执行中的各个时刻。在流程执行中JBPM引擎会在计算下一个状态的时候触发各种事件。一个事件通常和流程定义中的一个元素相关联，比如流程定义本身，节点或者转移。大部分的元素能够触发不同类型的事件，比如一个节点可以触发节点进入事件，节点离开事件。事件其实是和动作连接在一起的。每个事件维护一个动作列表。当JBPM引擎触发一个事件的时候，该事件维护的动作列表中的动作将被执行。 </p>
<p>事件类型 </p>
<p>在JBPM中事件类型是写死在事件类中的，共有16种： </p>
<p>EVENTTYPE_TRANSITION = "transition"; // 转移 <br />
EVENTTYPE_BEFORE_SIGNAL = "before-signal"; // 发信号前 <br />
EVENTTYPE_AFTER_SIGNAL = "after-signal"; // 发信号后 <br />
EVENTTYPE_PROCESS_START = "process-start"; // 处理开始状态 <br />
EVENTTYPE_PROCESS_END = "process-end"; // 处理结束状态 <br />
EVENTTYPE_NODE_ENTER = "node-enter"; // 进入节点 <br />
EVENTTYPE_NODE_LEAVE = "node-leave"; // 离开节点 <br />
EVENTTYPE_SUPERSTATE_ENTER = "superstate-enter"; // 进入超级状态 <br />
EVENTTYPE_SUPERSTATE_LEAVE = "superstate-leave"; // 离开超级状态 <br />
EVENTTYPE_SUBPROCESS_CREATED = "subprocess-created"; // 子流程创建 <br />
EVENTTYPE_SUBPROCESS_END = "subprocess-end"; // 子流程结束 <br />
EVENTTYPE_TASK_CREATE = "task-create"; // 任务创建 <br />
EVENTTYPE_TASK_ASSIGN = "task-assign"; // 任务分派 <br />
EVENTTYPE_TASK_START = "task-start"; // 任务启动 <br />
EVENTTYPE_TASK_END = "task-end"; // 任务结束 <br />
EVENTTYPE_TIMER = "timer"; // 定时器<br />
</p>
<p><br />
<br />
<span style="font-size: 24pt" twffan="done"><strong>二 ： 常用 API</strong></span><br />
<br />
<br />
</p>
ProcessInstance是ProcessDefinition的一个执行实例，想象一下对于订票流程，每个客户的订票动作都会根据订票流程定义而创建一个流程实例，也就是执行实例ProcessInstance.当一个ProcessInstance被创建后，负责执行主路径的token也被创建，这个token就是根token(root token)，根token此时位于流程定义的开始状态start state.<br />
<br />
创建执行实例很简单有2种方式 ： <br />
<br />
1 ： 通过 ProcessDefinition 类的 createProcessInstance() 方法<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee" twffan="done"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">得到&nbsp;processDefinition&nbsp;</span><span style="color: #008000" twffan="done"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /></span><span style="color: #000000" twffan="done">ProcessDefinition&nbsp;processDefinition&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;ProcessDefinition.parseXmlResource(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">processdefinition.xml</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /></span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">通过&nbsp;processDefinition&nbsp;创建&nbsp;出&nbsp;processInstance</span><span style="color: #008000" twffan="done"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /></span><span style="color: #000000" twffan="done">ProcessInstance&nbsp;&nbsp;processInstance&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;<u><strong>processDefinition.createProcessInstance();</strong></u></span></div>
<br />
2 ：通过 ProcessInstance 类的&nbsp; 构造函数 <br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee" twffan="done"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">得到&nbsp;jbpmContext</span><span style="color: #008000" twffan="done"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /></span><span style="color: #000000" twffan="done">JbpmContext&nbsp;jbpmContext&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;JbpmConfiguration.getInstance().createJbpmContext();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /></span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">得到&nbsp;processDefinition</span><span style="color: #008000" twffan="done"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /></span><span style="color: #000000" twffan="done">ProcessDefinition&nbsp;processDefinition&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;jbpmContext.getGraphSession().findLatestProcessDefinition(</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">baoxiao</span><span style="color: #000000" twffan="done">"</span><span style="color: #000000" twffan="done">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /></span><span style="color: #008000" twffan="done">//</span><span style="color: #008000" twffan="done">得到&nbsp;processInstance</span><span style="color: #008000" twffan="done"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" twffan="done" /></span><span style="color: #000000" twffan="done">&nbsp;ProcessInstance&nbsp;processInstance&nbsp;</span><span style="color: #000000" twffan="done">=</span><span style="color: #000000" twffan="done">&nbsp;</span><span style="color: #0000ff" twffan="done">new</span><span style="color: #000000" twffan="done">&nbsp;ProcessInstance(processDefinition);</span></div>
<img src ="http://www.blogjava.net/gyl868/aggbug/290391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/gyl868/" target="_blank">gyl868</a> 2009-08-08 22:52 <a href="http://www.blogjava.net/gyl868/archive/2009/08/08/290391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>