胡长城(银狐999)BLOG

专注SOA,MDA,EAI,BPM,工作流,J2EE;个人主页http://www.javafox.org

用户操作
[即时聊天] [发私信] [加为好友]
胡长城ID:james999
566285次访问,排名69好友0人,关注者69
J2EE,Workflow,BPM,EAI,SOA,工作流
james999的文章
原创 187 篇
翻译 0 篇
转载 2 篇
评论 635 篇
银狐999的公告
个人主要工作流文档可从 javafox live网络硬盘下载

最近评论
d_yang:反射, 是因为没用好.
downdoc2:把思路和一些方法多讲讲把
kwlong2008:来看看朋友,最近过的怎么样?俺的空间是介绍网站制作网站建设的,有时间也常去一下我的空间谢谢,来看看朋友,最近过的怎么样?俺的空间是介绍网站制作网站建设的,有时间也常去一下我的空间谢谢,来看看朋友,最近过的怎么样?俺的空间是介绍网站制作网站建设的,有时间也常去一下我的空间谢谢,
收藏
    相册
    50 Relational Blogs
    Hongsoft博客
    J2EE与ERP禅话
    Peter's Blog
    俠盜躶奔漢
    切尔斯基(RSS)
    动物园的猪
    胡奇
    赵斌BLog
    阿飞外传
    55 Workflow Preacher
    Ekkart Kindler
    Michael zur Muehlen
    Wil van der Aalst
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 OSWorkflow深层讲解系列(二)流程实例的结束之二收藏

    新一篇: OSWorkflow讲解系列(三)Function与workitem | 旧一篇: OSWorkflow深层讲解系列(二)流程实例的结束之一

    接上一篇:OSWorkflow深层讲解系列(二)流程实例的结束之一

           再说说OSWorkflowImplicit Termination的支持Osworkflow对隐性终止是很容易的,虽然现实中,我们不会去故意去创造“隐性终止”这种情况,也更不希望这种情况的发生。

           OSWorkflow任意一次的action的执行后,如果这个action没有造成流程实例的终结,那么就会去检测是否存在隐性终止的情况存在。

     

    public void doAction(long id, int actionId, Map inputs){

      ······

      if (!transitionWorkflow(entry, currentSteps, store, wf, action, transientVars, inputs, ps)) {

        checkImplicitFinish(id); //这个id是流程实例id

    }}

          

           transitionWorkflow方法我们在第(一)篇中已经有所介绍了,再次就不再叙述。transitionWorkflow返回的结果是这个流程实例是否已经结束。

          

           checkImplicitFinish方法中,主要是遍历当前所有的current step节点(这些current step节点就表示当前处于运行中的活动节点)。如果这些current step都没有被定义action,那么整个流程实例就存在隐性的结束。

     

           说道这里就结束了吗?当然不了,因为上面这百来字的短文太简单了,即使我不说,大家一看代码就会一清二楚。要说就说点让人值得思考的:

     

           OSWorkflow中,几乎所有的status都是外界定义的,就是说你可以定义自己的status,然后再workflow.xml中指明某个action的结果造成另一个step的某种status。只有一处地方状态是osworkflow自己所约束的,就是action中的finish状态。

           osworkflow本身并不知道这些status本身所代表的具体含义。虽然osworkflow提供了几个status的定义参考,比如finish,queue等等。但是这些对osworkflow引擎来说,并没有实际的意义。

           所以在OSWorkflow的隐性终止判断中,就存在一个值得回味的地方

           这个时候,我们在回过头来看看OSWorkflowcheckImplicitFinish方法:其回遍历所有的current step,并且依据每一个step的定义来判断(注意采用的是定义,而非step实例)。依据每一个current step是否存在action来判断。

           乍一看,可能很多人会认为这种判断是存在漏洞的:如某个step还在运行怎么办(这个step没有定义action)。—— 这就是值得回味的地方。

           osworkflow中,你即使在同一个step中,想从一个status到另一种status,也必须定义action。如果这个step不存在action,那说明什么呢?就说明这个step的状态根本就不允许更改,既然不允许更改,那么这个step的实例也就没有任何运行的意义。—— OSWorkflow的隐性终止的判断原则也就这么出来了。

     

           我一直都说OSWorkflow是遵循FSM的,那么是在什么地方遵循呢?就是在这些判断规则和原则上一点一滴的遵循。对于OSWorkflow来说那些,function,conditon只是一个外设。

    发表于 @ 2004年12月29日 15:06:00|评论(loading...)|编辑

    新一篇: OSWorkflow讲解系列(三)Function与workitem | 旧一篇: OSWorkflow深层讲解系列(二)流程实例的结束之一

    评论

    #dev 发表于2005-01-07 17:10:00  IP: 218.246.63.*
    “只有一处地方状态是osworkflow自己所约束的,就是action中的finish状态”这句话说错了,ation没有finish状态,osworkflow自己可以约束的状态是entry(流程实例)的状态。
    #银狐999 发表于2005-01-07 22:40:00  IP: 61.51.101.*
    不好意思,是我没有表达清楚。我的原本意思是在定义action的时候,有个属性finish,如果设置为true,则表示这个一个结束action。
    #moodersen 发表于2005-01-18 17:35:00  IP: 61.52.202.*
    最近做了一个并行工作流操作的例子,下面的代码是我对工作流程的定义。可以顺利跑通。但是有几个路径不能走,否则流程会在中途finished,这是不可原谅的。细究流程定义找不出问题在哪里,如何解决。久闻银狐999的大名,可否给指点一下。谢谢。
    <?xml version="1.0" encoding="GB2312"?>
    <!DOCTYPE workflow PUBLIC "-//OpenSymphony Group//DTD OSWorkflow 2.6//EN" "http://www.opensymphony.com/osworkflow/workflow_2_6.dtd">
    <workflow>
    <initial-actions>
    <action id="1" name="Start Workflow">
    <restrict-to>
    <conditions type="AND">
    <condition type="beanshell">
    <arg name="script">true</arg>
    </condition>
    </conditions>
    </restrict-to>
    <pre-functions>
    <function type="class">
    <arg name="class.name">com.opensymphony.workflow.util.Caller</arg>
    </function>
    <function type="beanshell">
    <arg name="script">
    String caller = context.getCaller();
    propertySet.setString("caller", caller);
    </arg>
    </function>
    </pre-functions>
    <results>
    <unconditional-result old-status="Finished" status="Underway" step="1" owner="${caller}"/>
    </results>
    </action>
    </initial-actions>
    <steps>
    #herrysun 发表于2005-01-20 10:48:00  IP: 61.185.11.*
    在用OSWorkflow的desinger时,有个“视图”属性可以进行设置,但是不知道他的作用是什么,怎样使用?
    #kevinc 发表于2005-01-26 16:37:00  IP: 219.239.237.*
    我正在学osworkflow,看了moodersen 的文件,如果处理1转发后,处理2又退回,是不是就没有可执行的Action了,也就finished了吧。
    #guoke 发表于2006-04-19 11:07:00  IP: 211.90.80.*
    看了文件,不错
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 银狐999