??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲综合精品,国产亚洲一区二区三区四区,欧美精品wwwhttp://www.aygfsteel.com/killme2008/archive/2008/05/21/201911.htmldennisdennisWed, 21 May 2008 07:09:00 GMThttp://www.aygfsteel.com/killme2008/archive/2008/05/21/201911.htmlhttp://www.aygfsteel.com/killme2008/comments/201911.htmlhttp://www.aygfsteel.com/killme2008/archive/2008/05/21/201911.html#Feedback0http://www.aygfsteel.com/killme2008/comments/commentRss/201911.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/201911.html     今天整理代码Q发C个去q写的简单的工作引擎,Zpetri|(参考这里的W记)Q实C序、ƈ行、@环和选择四种路由Q资源也实现了h工驱动和定时、gq时间驱动;目前只实C工作流数据保存在内存的版本Q然后就换工作,折腾着忘了这个事儿,本来是计划加入数据库存储的。尽只是个toyQ可能对工作感兴趣Q或者想自己实现一个玩玩的朋友有参考h|攑ֈ了google code上,svn地址Q?br />  http://insectworkflow.googlecode.com/svn/trunk/

    源码中有在example包下l了个请假的例子Q流E定义文件就是processes包下的leave.xmlQ实现大概是q么个流E:
填写假单-》提交假?and-split节点-》项目经理审?》and-join节点-》结?br />                                                      -》部门经理审??br />
其中目l理审批和部门经理审Ҏq行路由。xml配置大概q样Q?br />
<node type="and-split" name="and-split" id="2">
        
<inputs>
            
<place id="3" />
        
</inputs>
        
<outputs>
            
<place id="4" />
            
<place id="5" />
        
</outputs>
    
</node>
    
<node name="dept_manager_confirm" id="3">
        
<resource class="com.google.code.insect.workflow.impl.Group" id="2"
            name
="dept_manager">
        
</resource>
        
<conditions type="and">
            
<condition
                
class="com.google.code.insect.workflow.impl.NullHandler" value="false"
                variable-name
="LeaveInfo" />
        
</conditions>
        
<handler
            
class="com.google.code.insect.workflow.example.leave.SendRemindHandler" />
        
<inputs>
            
<place id="4" />
        
</inputs>
        
<outputs>
            
<place id="6" />
        
</outputs>
    
</node>
    
<node name="project_manager_confirm" id="4">
        
<resource class="com.google.code.insect.workflow.impl.Group" id="3"
            name
="project_manager">
        
</resource>
        
<conditions type="and">
            
<condition
                
class="com.google.code.insect.workflow.impl.NullHandler" value="false"
                variable-name
="LeaveInfo" />
        
</conditions>
        
<handler
            
class="com.google.code.insect.workflow.example.leave.SendRemindHandler" />
        
<inputs>
            
<place id="5" />
        
</inputs>
        
<outputs>
            
<place id="7" />
        
</outputs>
    
</node>
    
<node type="and-join" name="and-join" id="5">
        
<handler
            
class="com.google.code.insect.workflow.example.leave.ResultHandler" />
        
<inputs>
            
<place id="6" />
            
<place id="7"></place>
        
</inputs>
        
<outputs>
            
<place id="8" />
        
</outputs>
    
</node>

    其中的place是各个Transition的输入或者输出库所Q所谓node其实是变迁Qtransition)Q每个变q对应一个handlerQ执行具体的业务操作Q比如这里的com.google.code.insect.workflow.example.leave.SendRemindHandler 用于发送提醒消息给l理们?br />
    具体调用和工作项的h工触发:

//初始化工作流理?/span>
WorkFlowManager wm = new BasicWorkflowManager();
wm.setConfiguration(
new DefaultConfiguration());

//启动一个案?/span>
Token token = wm.startWorkFlow("leave");
token.setAttribute(
"LeaveInfo", leaveInfo);

//提交假单
wm.doAction(token.getId(), this.dennis, "l领导发送消息:"
                
+ leaveInfo.getStaff_name() + "甌请假Q请批准!");
//token的id传递给后箋节点做处理。。token的id是案例id
    processes包下面的程定义文g和test包下的TestUnitQ分别测试了四种路由和定时、g时触发,有兴的可以看一下?br />


dennis 2008-05-21 15:09 发表评论
]]>
PIPE2——Petri|编辑工?/title><link>http://www.aygfsteel.com/killme2008/archive/2007/09/05/142936.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Wed, 05 Sep 2007 08:51:00 GMT</pubDate><guid>http://www.aygfsteel.com/killme2008/archive/2007/09/05/142936.html</guid><wfw:comment>http://www.aygfsteel.com/killme2008/comments/142936.html</wfw:comment><comments>http://www.aygfsteel.com/killme2008/archive/2007/09/05/142936.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/killme2008/comments/commentRss/142936.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/killme2008/services/trackbacks/142936.html</trackback:ping><description><![CDATA[    最q重新拿赗工作流理-模型、方法和pȝ》,需要一个Petri|画图、分析的工具Qgoogle一把,在sourceforge上找到PIPE2目。按它的描述是:Platform Independent Petri Net Editor 2。看了下源码是用swing写的。已l基本满x的要求了?br /> 目地址Qhttp://pipe2.sourceforge.net/<br /> <br /> 下图是对书中习题七的q程定义<br /> <img src="http://www.aygfsteel.com/images/blogjava_net/killme2008/ex7.PNG" alt="" border="0" /><br /> <br /> <br /> <br /><img src ="http://www.aygfsteel.com/killme2008/aggbug/142936.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/killme2008/" target="_blank">dennis</a> 2007-09-05 16:51 <a href="http://www.aygfsteel.com/killme2008/archive/2007/09/05/142936.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《工作流理——模型、方法和pȝ》笔?:Petri|对工作徏?/title><link>http://www.aygfsteel.com/killme2008/archive/2007/09/01/141929.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Sat, 01 Sep 2007 06:55:00 GMT</pubDate><guid>http://www.aygfsteel.com/killme2008/archive/2007/09/01/141929.html</guid><wfw:comment>http://www.aygfsteel.com/killme2008/comments/141929.html</wfw:comment><comments>http://www.aygfsteel.com/killme2008/archive/2007/09/01/141929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/killme2008/comments/commentRss/141929.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/killme2008/services/trackbacks/141929.html</trackback:ping><description><![CDATA[一、工作流概念<br /> 1.案例(caseQ:工作系l的基本目的是处理案例Q保险烦赔、W效考核、抵押申L{都是案例。每一个案例都有一个唯一的标识,案例在出现和消失之间L处于某个特定状态,q个状态有三个元素l成Q?br /> Q?Q案例相关的属性,指出特定条g下案例是否被执行或者忽?br /> Q?Q已l满的条gQ说明案例的q展?br /> Q?Q案例的内容Q可能是文档、文件、档案或者数据库<br /> 2.dQtaskQ,泛指一般的工作单元Q而非具体案例zd的一ơ具体执行(q一般称为活动)Qؓ了区分这一点,引入了工作项(work itemQ和zd的概?activityQ。工作项是指要被执行的实际工作块,而活动就是指工作的执行?br /> <br /> 3.q程(processQ:q程指出了哪些Q务需要被执行Q以什么顺序执行。可以将q程理解为具体案例的蓝图。过E定义了案例的生命周期,每个生命周期都有start和end?br /> <br /> 4.路由(routeQ:军_了那些Q务被执行和以何种方式执行Q包括顺序、ƈ行、选择和@环四UŞ式的路由<br /> <br /> 5.启动QstartQ:触发Q工作项是有一个resource来启动的Q触发的形式包括Q?br /> Q?Q资源驱动,比如某个员工<br /> Q?Q外部事Ӟ一个JMS消息<br /> Q?Q时间信P比如凌晨2点触发某d{等?br /> 昄Q触发是q境而非工作系l负责的?br /> 二。Petri|?br /> <br />     Petri|是一U过E徏模和分析工具Q是1962q由Carl Adam Petri提出的,它有着坚实的数学基Q完全Ş式化的,可以Petri|应用于工作的建模和分析过E?br /> <br /> 1.传统的Petri|:<br />  Petri|有placeQ库所Q和transitionQ变q)l成<br /> place用于容纳tokenQtoken用以表示具体的案例,通过transition的firingQ实施)来表现过E的状态{变。理解几个概念:<br /> Q?Qtransition enabledQ变q的qAQ:当且q当transition的每一个输入place都至有一个token的时候,变迁qAQ可以实施?br /> Q?Qtransition firingQ变q的实施Q:变迁的从每个输入place取走一个tokenQƈ往它的每个输出place增加一个token?br /> 看一个Petri|进行过E徏模的例子Q?br /> <img src="http://www.aygfsteel.com/images/blogjava_net/killme2008/200671212824330.gif" alt="" border="0" /><br /> <br /> 圆圈表示placeQ矩形表CtransitionQ用黑点表示tokenQ存在于place中,q里没有表示出来Q我在网上随便找的一张图Q不q这里也展示了And-split、And-join、Or-split和Or-join的四UQ务以及四UŞ式\由(从上C依次是:序、ƈ行、选择和@环)的Petri|徏模?br /> <br /> 2.高Petri|?br />     传统Petri|有一些缺点,比如无法Ҏ些活动进行有效的建模Q容易变的庞大而难以理解,因此通过扩展Q就可以对复杂情는l构化、容易理解的方式建模。关注三U扩展:颜色扩展、时间扩展和层次扩展?br /> 1.颜色扩展Qؓtoken引入颜色Q用以区分同一place中的不同tokenQ颜色其实代表了tokenQ具体到某个案例Q的属性,通过颜色扩展Q我们可以ؓ要被消耗的tokenD|了前置条gQ那么变q就l的前提变化为:每个输入place都至有一个tokenQƈ且满_|条件。颜色扩展,也将产生的token与消耗的tokenq行了关联,产生token的值和数目依赖于被消耗的token的倹{?br /> <br /> 2.旉扩展Q当需要对一个过E的预期性能q行判断Ӟ引入了时间扩展,为token加入旉戻I只有当被消耗的token的时间戳早于当前旉Q就l的transition才可以firingQ而生的token的时间戳q于firing的时间加上g时。通过引入旉扩展Q我们将可以对类似十字\口红l灯旉敏感的复杂过E进行徏模?br /> <br /> 3.层次扩展Q过E是׃pd的place、transition、弧U和子过E组成的Qؓ了反映这L层次l构Q适应复杂q程的徏模,引入了层ơ扩展?br /> <br /> 三、工作流概念到Petri|的映射<br /> <br /> 1.q程Q过E是由条件和dl成Q映到Petri|,place是条gQ而transition是d。条件和place都是被动元素Q而Q务和变迁都是d元素。案例就是tokenQ案例的属性通过颜色扩展来映,token的值包含了案例的属性倹{比如保险烦赔案例的属性:赔额、烦赔h、时间等{?br /> <br /> 2.路由Q四U\qPetri|徏模,上面的图片已l给出。简单分析下Q?br /> Q?Q顺序\由,对应?QQ务A和B是顺序执行的QQ务B的输入是dA的结果。通过在两个Q务之间引入一个place来解冻I中间的圆圈对应的place是Q务B执行前的必须满的条Ӟ同时是Q务A执行的结果?br /> <br /> Q?Qƈ行\由:对应?Qؓ了ƈ行地执行dB和CQ引入了dAQ称为And-splitQ在A和B、C之间引入两个placeQ当Ad实施后,Z个输出place产生tokenQQ务B和C处于就l状态可以实施。当B和C都实施之后,cM的实行And-joindQQ务DQ合q两个Q务?br /> <br /> Q?Q选择路由Q图3寚w择路由的徏模ƈ不正,选择执行B或者CQ那么在B和C之前引入两个CQ务t11、t12和两个place(合ƈUCؓOr-splitQ,在前一个place的tokenQ要么实施t11Q要么实施t12,假设实施t11,那么dB就l,反之则Q务CqA。同L可以建模Or-join。选择路由q根据选择的时d分ؓ两类Q具体不再展开?br /> <br /> Q?Q@环\由,囑֛的徏模也不是很精,循环也跟~程语言中的循环分ؓQrepeate ...until...和while ...do...两种Q前者至执行一ơ,而后者可能不执行Q?br /> <br /> 3.启动的映:我们知道工作Ҏ案例和准备执行的d的组合,而活动是指一个工作项的实际执行,一旦工作项被实际执行,它就转换成活动。映到Petri|,工作就是就l的变迁Qenabled transitionQ,而活动对应一个transition的firing。Petri|中的transition?#8220;饥饿”的,一旦它们就l,׃立刻执行Q这L变迁成ؓ自动的。而工作流中的触发q是自动的Q它可能是资源驱动、外部信号驱动以及时间驱动的。ؓ了徏模触发,我们在变q的上面dW号来区分:向下的箭头表C源驱动,信封表示外部信号驱动Q而时钟表C时间驱动?br /> <br />     初步了解了Petri|,实是对工作甚至业务过E徏模的良好工具Q对于利用Petri|进行过E分析,q待q一步学习?br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /> <br /><img src ="http://www.aygfsteel.com/killme2008/aggbug/141929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/killme2008/" target="_blank">dennis</a> 2007-09-01 14:55 <a href="http://www.aygfsteel.com/killme2008/archive/2007/09/01/141929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用osworkflow写一个请假例?/title><link>http://www.aygfsteel.com/killme2008/archive/2007/03/02/101488.html</link><dc:creator>dennis</dc:creator><author>dennis</author><pubDate>Fri, 02 Mar 2007 08:07:00 GMT</pubDate><guid>http://www.aygfsteel.com/killme2008/archive/2007/03/02/101488.html</guid><description><![CDATA[     摘要:     osworkflow扩展非常ҎQ跟我们的应用结合v来用也很容易。假设一个请假流E:员工请假Q需要经q部门经理和人力资源部经理两人共同审批,只有当两人都许可时才通过QQ一人驳回就失效Q也是一个and split和and Join程Qƈ且我们附加一个要求,当发送请假请求、许可和驛_q几个操作时都将发送一条消息给相应的用戗?nbsp;  ...  <a href='http://www.aygfsteel.com/killme2008/archive/2007/03/02/101488.html'>阅读全文</a><img src ="http://www.aygfsteel.com/killme2008/aggbug/101488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/killme2008/" target="_blank">dennis</a> 2007-03-02 16:07 <a href="http://www.aygfsteel.com/killme2008/archive/2007/03/02/101488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《工作流理——模型、方法和pȝ》笔?http://www.aygfsteel.com/killme2008/archive/2007/02/08/98849.htmldennisdennisThu, 08 Feb 2007 11:13:00 GMThttp://www.aygfsteel.com/killme2008/archive/2007/02/08/98849.htmlhttp://www.aygfsteel.com/killme2008/comments/98849.htmlhttp://www.aygfsteel.com/killme2008/archive/2007/02/08/98849.html#Feedback1http://www.aygfsteel.com/killme2008/comments/commentRss/98849.htmlhttp://www.aygfsteel.com/killme2008/services/trackbacks/98849.html1.我们把一件“事”称为案例(caseQ,有时又叫做工作(work)Q职?job)Q?Product)Q服?service),目(itemQ。案例d于某个特定状态,该状态由三个元素l成Q?br />Q?Q案例相关的属?br />Q?Q已l满的条g
Q?Q案例的内容
2.本质上case都是L的,它们有自q立的开始和l束Q都能彼此区分,每一个case都在一个过E中被执行。(其实q里的case是我们一般工作流中的所谓工作流实例Q?br />
3.q程Q由许多要被执行的task(d)和一pd军_d执行ơ序的条件构成。过E定义了案例的生命周?br />
4.d(task)Q是一个工作的逻辑单元Q它能够作ؓ一个整体被资源(resource)执行。Q务可以被定义Z能再l分的过E,卛_子过E,q里存在主观因素。在定义或者分zQ务的人看来,d是原子性的Q但是对于执行它的h来说l常是非原子性?br />5.资源(resource)Q是指能够执行特定Q务的一个h、一台机器或一h?br />6.q程l构的四U基本机Ӟ或者说案例的生命周期(UCؓ路由Q:序(sequence),选择(selectionQ,q行Q@环?br />7.zdQActivity)QQ务的具体执行Q由资源所执行Q称为活动?br />8.q程的分c:
基本q程Q企业中那些生产品或者服务的q程Q也UC生q程?br />二q程Q支持基本过E的q程Q因此也被称为支持过E,比如财务理、h力管理等?br />三q程Q指g协调基本和二U过E的理q程?br />
9.工作的启动Q触发)?c:
Q?Q资源驱动(人工Q自动,半自动)
Q?Q外部事Ӟ一个JMS消息Q?br />Q?Q时间信P定时事gQ?br />
?l织l构
1.l织l构立了如何把l织所需要完成的工作分配l员工,最重要的三U组lŞ式:
Q?Q层ơ结构,常见的、通过树结构来描述的组l图
Q?Q矩늻构,在以目Z心的公司中较为常见,比如软g公司Q一个员工同时属于电信事业部和XXX现场目l?br />Q?Q网状结?br />2.有关工作权限系l的设计Q更多请见银?99的文档?a >工作系l组l模型应用和解决Ҏ?br />
?q程理
1.区分理pȝ与被理pȝQ管理系l将目标、前提和决策传达l被理pȝQ被理pȝ可以向管理系l回报,Ҏ汇报Q管理系l可以修正这些目标?br />2.q程理分ؓ四个层次Q?br />Q?QReal-timeQ实时管?br />Q?QOperational 操作理
Q?Q战术管?br />Q?Q战略管?br />从上往下媄响的范围广Q持l时间越ѝ?br />3.业务q程信息pȝ的发展,历史表明Q越来越多的通用d已被从程序中分离出来q且攑օ分解的管理系l中Q?br />Q?Q?965-1975q_分解应用。信息系l由分解的应用组成,每个应用都有自己的数据库和定义?br />Q?Q?975-1985q_数据库管理——将数据理从应用程序中抽离出来Q不同的E序׃n一个数据库Q面向数据的开发方法?br />Q?Q?985-1995q_用户界面理——将用户界面从应用程序中抽取出来?br />Q?Q?995-2005Q工作流理——将业务q程从应用程序中抽取出来。工作流pȝ负责理工作ƈl织案例数据在不同的人员以及应用E序间进行流转?br />



dennis 2007-02-08 19:13 发表评论
]]>
վ֩ģ壺 | ½| ɽ| ƽ| ǭ| | | β| | | | | ɳ| ߴ| | | | | ɽ| | Т| ʡ| ˳| | μ| | | ҵ| | Դ| | ͬ| ƽ| ɽ| ĩ| | | ݶ| | | ʳ|