﻿<?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--随笔分类-工作流(JBPM)</title><link>http://www.blogjava.net/leekiang/category/29423.html</link><description>MDA/MDD/TDD/DDD/DDDDDDD</description><language>zh-cn</language><lastBuildDate>Tue, 18 May 2010 15:17:26 GMT</lastBuildDate><pubDate>Tue, 18 May 2010 15:17:26 GMT</pubDate><ttl>60</ttl><item><title>jbpm4</title><link>http://www.blogjava.net/leekiang/archive/2010/05/17/321199.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 17 May 2010 10:02:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2010/05/17/321199.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/321199.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2010/05/17/321199.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/321199.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/321199.html</trackback:ping><description><![CDATA[1.使用AbstractTransactionalSpringJbpmTestCase做测试时出错<br />org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'processEngine' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [protected org.jbpm.api.ProcessEngine org.jbpm.pvm.internal.processengine.SpringHelper.createProcessEngine()] threw exception; nested exception is org.jbpm.api.JbpmException: no org.jbpm.pvm.internal.tx.SpringTransaction in current environment<br />解决办法: <br />在jbpm.cfg.xml的&lt;transaction-context&gt;里加上一行<br />&lt;transaction type="spring" /&gt;<br /><br />2.<br /> 如果使用了<br />&lt;bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" /&gt;<br />&lt;bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" /&gt;<br />就不需要通过Configuration构造了，可以通过spring里的依赖注入获得processEngine<br />包括什么repositoryService，taskService都不要进行bean配置了<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />https://jira.jboss.org/browse/JBPM-2710<br />http://jbpm.group.javaeye.com/group/topic/18352<br />http://ronghao.javaeye.com/blog/412956<br />http://xiaokaiye.javaeye.com/blog/413136<br />http://jbpm.group.javaeye.com/group/blog/375061<br />http://www.slideshare.net/ainze/spring-integration-with-jbpm4#<br />http://www.blogjava.net/vanlin/archive/2009/10/12/297903.html<br />http://n.tomek.bujok.info/index.php/Spring_integration_in_jBPM_4<br /><img src ="http://www.blogjava.net/leekiang/aggbug/321199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2010-05-17 18:02 <a href="http://www.blogjava.net/leekiang/archive/2010/05/17/321199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>osworkflow笔记</title><link>http://www.blogjava.net/leekiang/archive/2009/11/17/302732.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Tue, 17 Nov 2009 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/11/17/302732.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/302732.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/11/17/302732.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/302732.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/302732.html</trackback:ping><description><![CDATA[1,OS_WFENTRY表其实放的是流程实例.就三个字段，ID是实例ID，主键；name是流程名；state表示流程的内置状态。CREATED = 0;ACTIVATED = 1;SUSPENDED = 2;KILLED = 3;COMPLETED = 4;UNKNOWN = -1<br /><br />2，OS_PROPERTYENTRY（GLOBAL_KEY, ITEM_KEY联合主键）存储propertyset的值。<br />GLOBAL_KEY这个值是在JDBCWorkflowStore类的public PropertySet getPropertySet(long entryId) {<br />　　       HashMap args = new HashMap(1);<br />　　       args.put("globalKey", "osff_" + entryId);<br />　　       return PropertySetManager.getInstance("jdbc", args);<br />　　}赋值的。<br />　　规则如上面代码。Osff+entryid。<br />　　ITEM_KEY即在每一个entry的Key值，propertyset（“即为key”,……<br />详见<a target="_blank" href="http://www.wangchao.net.cn/bbsdetail_149357.html">osworkflow 自带表结构分析</a><br /><img src ="http://www.blogjava.net/leekiang/aggbug/302732.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-11-17 18:48 <a href="http://www.blogjava.net/leekiang/archive/2009/11/17/302732.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm零碎笔记</title><link>http://www.blogjava.net/leekiang/archive/2008/07/03/212444.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Thu, 03 Jul 2008 13:59:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/07/03/212444.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/212444.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/07/03/212444.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/212444.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/212444.html</trackback:ping><description><![CDATA[1，JBPM的版本机制允许在数据库中多个同名流程定义共存，流程实例以当时的最新版本来启动，并且在它的整个生命周期中将保持以相同的流程定义执行。当一个新的版本被部署，<font color="#0000ff">新的流程实例以新版本启动，而老的流程实例则以老的流程定义继续执行</font>。<br /><br />2，swimlane(泳道)<br />实际应用中，一个人是一个流程中多个Task的参与者(actor)的情况是很常见的。在jbpm中通过创建一个swimlane并且把swimlane赋给一个task的方式来设置当前task的参与者（actor）。一个业务流程中的swimlane可以被看做为一个参与者的参与者对象的名称，当然它不一定是固定的某个人，它可以是一个用户组，一个特定用户的角色等。首次执行到达一个Task，赋给该Task的一个swimlane就会算出参与者(actor)。<br />自己的理解:<font color="#ff0000">swimlane是一个描述任务接收者的特殊的对象，可以是一个用户，也可以是一个角色，可以是任何东西，只要能根据这个swimlane算出有哪些actor<br /><br /><font color="#000000">3,JBPM中任务的分配方式有两种：一种是为task指定一个assignment-handler，既一个实现了AssignmentHandler接口的类；另外一种是为task指定一个swimlane(泳道)，swimlane可以在流程中定义好，一个流程中可以定义若干个swimlane，在定义一个swimlane时同样也是指定了个实现了AssignmentHandler接口的类，当我们的task指定了一个swimlane后，其效果同我们指定一个assignment-handler效果是一样的，只不过可以简化我们任务的分配工作.<br />自己的理解:这两种方式实际上是同一种，</font></font><font color="#ff0000"><font color="#000000">可以把swimlane理解为</font></font><font color="#ff0000"><font color="#000000">assignment-handler的命名，或者快捷方式，方便重用(</font></font><font color="#ff0000"><font color="#000000">assignment-handler是一次性的</font></font><font color="#ff0000"><font color="#000000">)。看来</font></font><font color="#ff0000"><font color="#000000">swimlane这个名字是个噱头啊。<br /><br />4，<a target="_blank" href="/huanzhugege/archive/2007/11/19/161678.html">以图形化的方式显示JBPM当前流程的方法及原理分析</a><br /><br />http://blog.csdn.net/tuwen/archive/2007/09/12/1782623.aspx<br /><br />5，jbpmside是一个基于jbpm进行扩展和封装的开源工作流项目<br /><br />6, getting started with  jbpm and spring<br />http://www.theserverside.com/tt/articles/article.tss?l=jBPMandSpring<br /><br />7，jbpm3.2需要jdk1.5<br />8，每一个jbpm_processinstance的roottoken有且只有一个。<br />如果当前token在folk节点上，则其多个子token在各个分支的节点上。<br />可以查到每一个token所属的流程实例。<br /></font></font><img src ="http://www.blogjava.net/leekiang/aggbug/212444.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-07-03 21:59 <a href="http://www.blogjava.net/leekiang/archive/2008/07/03/212444.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jbpm的一些笔记</title><link>http://www.blogjava.net/leekiang/archive/2008/06/25/210645.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 25 Jun 2008 10:38:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/06/25/210645.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/210645.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/06/25/210645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/210645.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/210645.html</trackback:ping><description><![CDATA[1,<span class="content">jBPM没有角色的概念,</span><span class="content">jBPM只有参与者的概念，也就是ActorID，它可以是用户ID，也可以是角色ID，也可以什么都不是<br />  <a target="_blank" href="http://www.uml.org.cn/workclass/200709306.asp">http://www.uml.org.cn/workclass/200709306.asp</a><br />2,如何获得某actor的任务<br />  <a target="_blank" href="http://jbpm.group.javaeye.com/group/topic/2707">http://jbpm.group.javaeye.com/group/topic/2707</a><br />  <a target="_blank" href="http://alarnan.spaces.live.com/Blog/cns%21819CBC613DE169EF%21177.entry">任务的管理</a><br /></span><img src ="http://www.blogjava.net/leekiang/aggbug/210645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-06-25 18:38 <a href="http://www.blogjava.net/leekiang/archive/2008/06/25/210645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBPM工作流中的任务分配(转)</title><link>http://www.blogjava.net/leekiang/archive/2008/06/23/210108.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 23 Jun 2008 10:04:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/06/23/210108.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/210108.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/06/23/210108.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/210108.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/210108.html</trackback:ping><description><![CDATA[
		<span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">
				<p>在jBPM中，任务的分配有两种模式： </p>
				<ol>
						<li>
								<strong>推（Push）模式</strong>    在这种模式下，系统计算出应该由哪个参与者(actor)完成当前任务(task)，然后直接将此task送到该actor的任务列表中(tasklist)；  </li>
						<li>
								<strong>拉（Pull）模式</strong>    在这种模式下，系统首先计算出应该由哪个参与者池(pool of actors)完成当任务，并将该任务送入相应的任务池中；然后，再由参与者池中的任一人将任务拉到自己的任务列表中。</li>
				</ol>
				<h1>
						<font size="3">参与者池与角色、用户组的差异</font>
				</h1>
				<p>一般的应用中，角色与用户组的概念比较常见，而参与者池则不常见。 </p>
				<p>针对一个Task一般会有多个可能的操作，而不同的角色有可能有权限进行其中的一部分或全部操作。所以，不同角色有可能属于相同的参与者池，一个角色也有可能被加入到多个参与者池中。 </p>
				<p>一
般用户组是按组织架构进行划分的，在同一个用户组可能会有多个不同的角色，或者具有不级别的权限。即使将同一角色、具有同一级别权限的用户划分为一组，也
不能回避具有更高级别权限的用户操作低级别工作任务项的情形。另一方面，在Multi-Entity架构下，也存在跨Entity操作的情形。 </p>
				<p>总而言之，参与者池是区别于按角色、按组织进行划分的、一种特别的用户分组方法。换言之，参与者池其实也是可以预先定义的。 </p>
				<h1>
						<font size="3">何时进行任务分配计算</font>
				</h1>
				<p>既然参与者池是可以预见的，那么在“拉模式”下，何时进行任务分配计算呢？ </p>
				<p>毫无疑问，在工作流系统中，计算是在任务状态转换时自动完成的。（当然，相对于应用的事务提交，工作流的这些操作都可以是异步完成的。） </p>
				<p>因些，“拉”的含义，不是在用户刷新任务列表时才去计算他/她的所有工作项；恰恰相反，无论是“拉”或是“推”，工作流系统其实都预先计算好了参与者的任务列表或可以从中挑选任务的“任务池”。 </p>
				<h1>
						<font size="3">jBPM参与者池的数据库设计</font>
				</h1>
				<img src="http://www.blogjava.net/images/blogjava_net/leekiang/jbpmtask.jpeg" alt="jbpmtask.jpeg" border="0" width="537" height="437" />
				<br />
		</span>
		<span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">jbpm_taskinstance与jbpm_pooledactor是典型的“多对多”的关系，中间通过jbpm_taskactorpool拆分成两个“一对多”。</span>
		<br />
		<span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry">原文:<a target="_blank" href="http://dayubian.spaces.live.com/blog/cns%219E5A349DF844201E%21365.entry">http://dayubian.spaces.live.com/blog/cns!9E5A349DF844201E!365.entry</a><br /><br /></span>
<img src ="http://www.blogjava.net/leekiang/aggbug/210108.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-06-23 18:04 <a href="http://www.blogjava.net/leekiang/archive/2008/06/23/210108.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流设计器</title><link>http://www.blogjava.net/leekiang/archive/2008/03/18/186894.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 17 Mar 2008 16:12:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/03/18/186894.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/186894.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/03/18/186894.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/186894.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/186894.html</trackback:ping><description><![CDATA[http://www.openjacob.org/draw2d/single/YahooUI_integration/index.html<br />http://www.javaeye.com/post/364175?page=1<br />http://www.huachuangpower.com/product/product1.htm<br /><br />开源的<br />bonita  http://wiki.bonita.objectweb.org/xwiki/bin/view/Main/WebHome<br />swamp   http://swamp.sourceforge.net<br />obpm    http://sourceforge.net/projects/obpm/<br /><br />http://www.mxgraph.com/demo.html.   nb<br /><img src ="http://www.blogjava.net/leekiang/aggbug/186894.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-03-18 00:12 <a href="http://www.blogjava.net/leekiang/archive/2008/03/18/186894.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流笔记</title><link>http://www.blogjava.net/leekiang/archive/2008/02/14/179866.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Wed, 13 Feb 2008 17:31:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2008/02/14/179866.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/179866.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2008/02/14/179866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/179866.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/179866.html</trackback:ping><description><![CDATA[1，BPM与workflow的区别<br />一句话:<strong>BPM是建立在EAI基础上的工作流</strong>。<br />和工作流不同，BPM关注的是一个很完整概念上的业务流程，这个业务流程可能需要横跨多个IT系统，这些系统通过某种方式暴露出流程中所需要的服务（webservice是一种选择），BPM推动这个流程的流转。同时，相对于以往的工作流单纯的流程流转，BPM提供了更多，包括流程仿真，过程分析、过程优化等等。意思就是，在某个流程运行一段时间以后，BPM会基于数据提供对该流程的分析（数据挖掘？），从而能够基于这些分析提供对上层管理决策的支持。<br />那么，一个工作流厂商是否可以很容易的研发出BPM的产品？答案是不行。看看哪些BPM的厂商，无一不是在EAI方面有很多经验的大公司。所以，BPM实施的关键还是要建立在EAI实施的基础上。至于BPM和SOA，如果以前的系统是基于SOA架构的，那自然EAI起来是会更加容易，BPM理所当然是拥抱SOA的。（BEA的产品没用adapter）<br /> 来源:<a href="/RongHao/archive/2007/03/26/106395.html" target="_blank">http://www.blogjava.net/RongHao/archive/2007/03/26/106395.html</a><br /><br />2，基本的工作流模式实现，串行、并发、分支、汇聚、循环等等。这个是最基本的。其实打开流程设计器拖拖拽拽很快就能知道这个产品到底实现了哪些流转模
型。实际这个的实现也是引擎的核心。有多种模型可以选择。petri
模型应该是最灵活的了，也有很大的实现难度。但是流程模型做这么灵活，到底实际能用上多少……就我个人的经验来说，大部分的复杂性都是由流程的分支并发
（m/n）引起的，最坏的办法是强制要求客户将这些并发的任务改成 step by step 的执行。这样牺牲一点效率，还是可以把项目做成的。<br />来源:<a target="_blank" href="/RongHao/archive/2008/02/23/181412.html#181609">http://www.blogjava.net/RongHao/archive/2008/02/23/181412.html#181609</a><br /><br />3，Osworkflow的如来神掌又是什么呢？我们知道，它有个重要概念是State……呵呵，我们知道了，它的如来神掌是FSM。不知道FSM是什
么东西？？那你读大学时肯定不是好学生；当然了，不知道也不打紧，你把他类似理解为状态图就可以了。Osworkflow中的State是由step和
status联合表达的，一个State就是一个step中的某个status；而state的转换由action来驱动，类似状态图中的event，因
为一个event对应一个action嘛。
<p>　　Jbpm的如来神掌就没有上面的简单了，它结合应用了状态图+活动图+PetriNet的知识，而且，这里的活动图还是UML2.0版的。
UML2.0的活动图中，节点不叫活动（Activity）而叫动作（action），活动成了一个高层次的概念，它包含一个动作序列。一个活动图展现一
系列的动作，这些动作组成了活动。Jbpm把action也改名了，称为state。Jbpm使用的状态图的概念有transition/event等，
这个自己去看吧。Jbpm来内部实现中还采用了PetriNet的概念，如token，signal等。什么？又不知道PetriNet什么东东？那你大
学是学计算机的吗？不是？那你可能是学文科的，学机械/电气/土木工程/交通运输等专业都有接触PetriNet的课程，如果没有学过，还是看看jbpm
吧，反正我们也不搞理论，知道大致概念就行。</p><p>http://finance.jrj.com.cn/news/2007-06-20/000002347063.html</p><p>4，OpenWFE</p><p>5，EOS: ftp://211.152.33.58<br /></p><img src ="http://www.blogjava.net/leekiang/aggbug/179866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2008-02-14 01:31 <a href="http://www.blogjava.net/leekiang/archive/2008/02/14/179866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>