﻿<?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-seasun-随笔分类-1.05 jbpm</title><link>http://www.blogjava.net/shiwenfeng/category/42362.html</link><description>在不断模仿、思考、总结中一步一步进步！</description><language>zh-cn</language><lastBuildDate>Sun, 13 Dec 2009 09:19:57 GMT</lastBuildDate><pubDate>Sun, 13 Dec 2009 09:19:57 GMT</pubDate><ttl>60</ttl><item><title>揭秘jbpm流程引擎内核设计思想及构架</title><link>http://www.blogjava.net/shiwenfeng/archive/2009/12/04/304761.html</link><dc:creator>shiwf</dc:creator><author>shiwf</author><pubDate>Fri, 04 Dec 2009 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/shiwenfeng/archive/2009/12/04/304761.html</guid><wfw:comment>http://www.blogjava.net/shiwenfeng/comments/304761.html</wfw:comment><comments>http://www.blogjava.net/shiwenfeng/archive/2009/12/04/304761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shiwenfeng/comments/commentRss/304761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shiwenfeng/services/trackbacks/304761.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp; &nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp; 前言 12&nbsp;&nbsp;&nbsp;&nbsp; 阅读本篇的基础准备 22.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 概念的基础2.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 环境的基础3&nbsp;&nbsp;&nbsp;&nbsp; 什么是...&nbsp;&nbsp;<a href='http://www.blogjava.net/shiwenfeng/archive/2009/12/04/304761.html'>阅读全文</a><img src ="http://www.blogjava.net/shiwenfeng/aggbug/304761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shiwenfeng/" target="_blank">shiwf</a> 2009-12-04 12:47 <a href="http://www.blogjava.net/shiwenfeng/archive/2009/12/04/304761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm涉及到的几个重要概念及常用API</title><link>http://www.blogjava.net/shiwenfeng/archive/2009/12/04/304760.html</link><dc:creator>shiwf</dc:creator><author>shiwf</author><pubDate>Fri, 04 Dec 2009 04:42:00 GMT</pubDate><guid>http://www.blogjava.net/shiwenfeng/archive/2009/12/04/304760.html</guid><wfw:comment>http://www.blogjava.net/shiwenfeng/comments/304760.html</wfw:comment><comments>http://www.blogjava.net/shiwenfeng/archive/2009/12/04/304760.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/shiwenfeng/comments/commentRss/304760.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/shiwenfeng/services/trackbacks/304760.html</trackback:ping><description><![CDATA[<p><span style="font-size: 12pt"><span style="color: #993300"><strong><span style="font-size: 12pt">jbpm概念<br />
</span></strong></span></span>1 ： process definition（流程定义）：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工作流的流程的完整定义，包括节点和节点之间的走向等关键信息。通常以xml格式提供。一个具体的系统往往是由许多个流程组成的。 <br />
2 ： process instance（流程实例）：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个process defination生成的业务层的实例。当process instance创建以后，代表流程的执行路径，并被定义到开始节点。 <br />
3&nbsp;&nbsp;： token（令牌）：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;表示了一个执行的路径，它是运行时产生的。当实例建立以后，令牌也就产生了。 <br />
4&nbsp;： node：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表示流程中的一个节点。 <br />
5&nbsp;： transition：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关联两个节点，用于表示节点的走向 <br />
6&nbsp;： signal：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让一个token执行下一步。process instance也有signal，当用process instance的signal时，其实就是运行process instance根令牌（root token）的signal.&nbsp;&nbsp; 当token进入到一个node时，node会被执行，并产生一些事件，比如进入、离开节点等，这也是执行业务逻辑的地方。事件由action来表示。<br />
<span style="font-size: 12pt">7&nbsp;：<span style="font-size: 12pt">&nbsp;事件Event</span>&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Event反映的是流程执行中的各个时刻。在流程执行中JBPM引擎会在计算下一个状态的时候触发各种事件。一个事件通常和流程定义中的一个元素相关联，比如流程定义本身，节点或者转移。大部分的元素能够触发不同类型的事件，比如一个节点可以触发节点进入事件，节点离开事件。事件其实是和动作连接在一起的。每个事件维护一个动作列表。当JBPM引擎触发一个事件的时候，该事件维护的动作列表中的动作将被执行。<br />
&nbsp;</p>
<p><span style="color: #993300"><strong>事件类型</strong> <br />
</span>在JBPM中事件类型是写死在事件类中的，共有16种： <br />
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 />
<br />
<span style="font-size: 24pt"><strong style="font-size: 12pt; color: #993300">常用API<br />
</strong></span>ProcessInstance是ProcessDefinition的一个执行实例，想象一下对于订票流程，每个客户的订票动作都会根据订票流程定义而创建一个流程实例，也就是执行实例ProcessInstance.当一个ProcessInstance被创建后，负责执行主路径的token也被创建，这个token就是根token(root token)，根token此时位于流程定义的开始状态start state.<br />
<br />
创建执行实例很简单有2种方式 ：<br />
1 ： 通过 ProcessDefinition 类的 createProcessInstance() 方法<br />
</p>
<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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">得到&nbsp;processDefinition&nbsp;</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">ProcessDefinition&nbsp;processDefinition&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ProcessDefinition.parseXmlResource(</span><span style="color: #000000">"</span><span style="color: #000000">processdefinition.xml</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">通过&nbsp;processDefinition&nbsp;创建&nbsp;出&nbsp;processInstance</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">ProcessInstance&nbsp;&nbsp;processInstance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;<u><strong>processDefinition.createProcessInstance();</strong></u></span></div>
<br />
2 ：通过 ProcessInstance 类的&nbsp; 构造函数 <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"><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><span style="color: #008000">//</span><span style="color: #008000">得到&nbsp;jbpmContext</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">JbpmContext&nbsp;jbpmContext&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;JbpmConfiguration.getInstance().createJbpmContext();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">得到&nbsp;processDefinition</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">ProcessDefinition&nbsp;processDefinition&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;jbpmContext.getGraphSession().findLatestProcessDefinition(</span><span style="color: #000000">"</span><span style="color: #000000">baoxiao</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #008000">//</span><span style="color: #008000">得到&nbsp;processInstance</span><span style="color: #008000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;ProcessInstance&nbsp;processInstance&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProcessInstance(processDefinition);</span></div>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/shiwenfeng/aggbug/304760.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/shiwenfeng/" target="_blank">shiwf</a> 2009-12-04 12:42 <a href="http://www.blogjava.net/shiwenfeng/archive/2009/12/04/304760.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>