﻿<?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-随笔分类-bpm应用</title><link>http://www.blogjava.net/jbpm/category/25744.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 29 Oct 2007 00:27:07 GMT</lastBuildDate><pubDate>Mon, 29 Oct 2007 00:27:07 GMT</pubDate><ttl>60</ttl><item><title>工作流活动实例状态转换的两种实现模式</title><link>http://www.blogjava.net/jbpm/archive/2007/10/28/156458.html</link><dc:creator>jbpm</dc:creator><author>jbpm</author><pubDate>Sun, 28 Oct 2007 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/jbpm/archive/2007/10/28/156458.html</guid><wfw:comment>http://www.blogjava.net/jbpm/comments/156458.html</wfw:comment><comments>http://www.blogjava.net/jbpm/archive/2007/10/28/156458.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jbpm/comments/commentRss/156458.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jbpm/services/trackbacks/156458.html</trackback:ping><description><![CDATA[&nbsp; 作者:胡长城<br />
今天和同事chelsea 就活动实例状态的实现思路上进行了讨论。我们两个站在了两个不同的角度来看待，这两个不同的角度也正好眼下最为常见到的两种实现思路：<br />
helsea是从状态角度来看待，当然也完全是从state pattern的角度来思考：状态在达到某个状态的时候，会引起或必须引起活动实例执行什么操作。<br />
<br />
而我是从活动实例的角度来考虑，活动实例的状态只是活动实例的一个属性体，是因为什么行为，造成了什么状态的结果。<br />
<br />
<br />
&nbsp;这两种观点，没有谁对谁错，也没有谁优谁劣，两者是站在不同的角度来分析同一个问题。其实这两种模式在应用中都是很普遍的，也都是能够很好的解决问题的。不过在现有的workflow引擎实现中，基于活动实例的角度是占绝大多数的，比如obe，shark等等。所以我受这个的影响也是比较深的。<br />
<br />
<br />
先说说基于活动活动实例的角度的思路吧：<br />
<br />
<br />
<br />
让我下先来看看状态类：<br />
<br />
public final class WMActivityInstanceState extends WMObjectState {<br />
<br />
public static final int OPEN_NOTRUNNING_INT = 0;<br />
<br />
public static final int OPEN_SUSPENDED_INT = 1;<br />
<br />
}<br />
<br />
或者也可以这么表示：<br />
<br />
public enum WMActivityInstanceState{<br />
<br />
NOTRUNNIN(0),<br />
<br />
SUSPENDED(1);<br />
<br />
private int code;<br />
<br />
private WMActivityInstanceState(int code){this.code = code;}<br />
public int getCode(){return this.code}<br />
<br />
}<br />
<br />
<br />
<br />
<br />
对于活动实例来说，状态只是其一个属性而已：<br />
<br />
public class BasicActivityInstance extends BasicAttributedEntity{<br />
<br />
private int _state;<br />
<br />
public void setState(int state) {<br />
<br />
_state = state; }<br />
<br />
}<br />
<br />
或者也可以是<br />
<br />
Public void setState(WMActivityInstanceState state)<br />
<br />
<br />
<br />
<br />
所以，从活动实例的角度来看，状态之间的关系是平行的。你可以在执行完一些初始化的操作之后，将活动实例的状态设置为Initialized：当然这个操作你必须显示的去设置活动实例（当然，你可以用一些Event去处理），比如调用活动实例的setState方法。至于为什么调用这个方法，或者此时设置的状态是对是错，活动实例并不关心。<br />
<br />
<br />
<br />
下面再来说说基于状态角度的思路吧，这个思路大体可以说就是state pattern的应用。<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 说道这儿，您可以看看这篇文档：从工作流状态机实践中总结状态模式使用心得 。当然如果您对state pattern不是很了解，那么建议你先看看这篇文档：设计模式之state 。<br />
<br />
<br />
<br />
&nbsp;&nbsp;&nbsp; State模式的着眼点就是状态，以状态的变迁影响实例的行为和动作。其实这就是两个不同的抽象体：state和stateOwner，我们可以看到，活动实例对象就表现为stateOwner。<br />
<br />
&nbsp;&nbsp; State模式的依据是状态之间是有有向连接关系的，这有向连接关系其实就是状态的转换规则：A-B-C-D-A。<br />
<br />
&nbsp;&nbsp; 激发状态的变迁，是由外界的事件（Event）影响的：这个事件会告知，当前的活动实例状态要从当前状态往下一个状态变迁。而活动实例并不知道下一个状态是什么，这完全是状态对象负责维护和告知的。<br />
<br />
<br />
<br />
至此，我们可以看出来了，两种方式的不同：<br />
<br />
第一种方式（基于活动实例），其外界事件是影响到活动实例，或者说在事件中显示的告知活动实例状态从什么变为什么。<br />
<br />
第二种方式（基于实例状态），其外界事件是影响到活动实例状态对象，至于这个状态的下一个状态是什么，时间并不知道，完全由活动状态之间的关系来维护。<br />
<br />
<br />
<img src ="http://www.blogjava.net/jbpm/aggbug/156458.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jbpm/" target="_blank">jbpm</a> 2007-10-28 12:12 <a href="http://www.blogjava.net/jbpm/archive/2007/10/28/156458.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>定单变更流程</title><link>http://www.blogjava.net/jbpm/archive/2007/09/23/147607.html</link><dc:creator>jbpm</dc:creator><author>jbpm</author><pubDate>Sun, 23 Sep 2007 11:25:00 GMT</pubDate><guid>http://www.blogjava.net/jbpm/archive/2007/09/23/147607.html</guid><wfw:comment>http://www.blogjava.net/jbpm/comments/147607.html</wfw:comment><comments>http://www.blogjava.net/jbpm/archive/2007/09/23/147607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jbpm/comments/commentRss/147607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jbpm/services/trackbacks/147607.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 是一张Ultimus为一个简单变更定单流程开发的地图。一个客户申请变更一个产品或服务将启动本流程。在收到申请以后，工程经理能拒绝申请，需要一个EMAIL提醒发送给客户，或申请同时输入到3个其他团队（软件，电子，机械）。当所有需求团队反馈后，流程使用网络服务申请一个包括变更所有的输入和时间和成本的预算包。这些信息将反馈给工程经理做最终检查和调整。此时，工程经理又一次能够拒绝申请（如果成本或时间预估过高）。否则，信息将提交给销售部门添加任何补充信息。然后流程将自动生成一个报价并且和提醒一起发送给客户。&nbsp;&nbsp;<a href='http://www.blogjava.net/jbpm/archive/2007/09/23/147607.html'>阅读全文</a><img src ="http://www.blogjava.net/jbpm/aggbug/147607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jbpm/" target="_blank">jbpm</a> 2007-09-23 19:25 <a href="http://www.blogjava.net/jbpm/archive/2007/09/23/147607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作流管理与事务服务实例</title><link>http://www.blogjava.net/jbpm/archive/2007/09/23/147576.html</link><dc:creator>jbpm</dc:creator><author>jbpm</author><pubDate>Sun, 23 Sep 2007 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/jbpm/archive/2007/09/23/147576.html</guid><wfw:comment>http://www.blogjava.net/jbpm/comments/147576.html</wfw:comment><comments>http://www.blogjava.net/jbpm/archive/2007/09/23/147576.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jbpm/comments/commentRss/147576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jbpm/services/trackbacks/147576.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 城市政府宽带网络软件平台连接一个城市的市政府、党的机关、人大、政法四大类几十甚至上百个机关。政府部门中有大量的工作是需要部门内、部门之间的多部门、多工作岗位、多工作人员协同工作来完成的。而且其工作呈工作流状态和事务性状态（既工作流程的完整性）。<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/jbpm/archive/2007/09/23/147576.html'>阅读全文</a><img src ="http://www.blogjava.net/jbpm/aggbug/147576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jbpm/" target="_blank">jbpm</a> 2007-09-23 15:56 <a href="http://www.blogjava.net/jbpm/archive/2007/09/23/147576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>