<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

    生活、程序、未來
       :: 首頁 ::  ::  :: 聚合  :: 管理

    Insect Workflow

    Posted on 2008-05-21 15:09 dennis 閱讀(2145) 評論(0)  編輯  收藏 所屬分類: java 、工作流 、my open-source
        今天整理代碼,發(fā)現(xiàn)一個去年寫的簡單的工作流引擎,基于petri網(參考這里的筆記),實現(xiàn)了順序、并行、循環(huán)和選擇四種路由,資源也實現(xiàn)了人工驅動和定時、延遲時間驅動;目前只實現(xiàn)了將工作流數(shù)據(jù)保存在內存的版本,然后就換工作,折騰著就忘了這個事兒,本來是計劃加入數(shù)據(jù)庫存儲的。盡管只是個toy,可能對工作流感興趣,或者想自己實現(xiàn)一個玩玩的朋友有參考價值,放到了google code上,svn地址:
     http://insectworkflow.googlecode.com/svn/trunk/

        源碼中有在example包下給了個請假的例子,流程定義文件就是processes包下的leave.xml,實現(xiàn)大概是這么個流程:
    填寫假單-》提交假單-and-split節(jié)點-》項目經理審批-》and-join節(jié)點-》結束
                                                         -》部門經理審批-》

    其中項目經理審批和部門經理審批是并行路由。xml配置大概這樣:
    <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的輸入或者輸出庫所,所謂node其實就是變遷(transition),每個變遷對應一個handler,執(zhí)行具體的業(yè)務操作,比如這里的com.google.code.insect.workflow.example.leave.SendRemindHandler 用于發(fā)送提醒消息給經理們。

        具體調用和工作項的人工觸發(fā):

    //初始化工作流管理器
    WorkFlowManager wm = new BasicWorkflowManager();
    wm.setConfiguration(
    new DefaultConfiguration());

    //啟動一個案例
    Token token = wm.startWorkFlow("leave");
    token.setAttribute(
    "LeaveInfo", leaveInfo);

    //提交假單
    wm.doAction(token.getId(), this.dennis, "給領導發(fā)送消息:"
                    
    + leaveInfo.getStaff_name() + "申請請假,請批準!");
    //將token的id傳遞給后續(xù)節(jié)點做處理。。token的id就是案例id
        processes包下面的流程定義文件和test包下的TestUnit,分別測試了四種路由和定時、延時觸發(fā),有興趣的可以看一下。

    主站蜘蛛池模板: 成年免费大片黄在线观看com| 亚洲综合无码一区二区痴汉| 韩国亚洲伊人久久综合影院| 1a级毛片免费观看| 亚洲一级大黄大色毛片| 四虎永久在线精品免费网址| 精品久久久久久亚洲综合网| 国产亚洲精品福利在线无卡一| 4虎1515hh永久免费| 免费精品国产自产拍在线观看| 久久99国产亚洲精品观看| 日本免费一二区在线电影| 久久精品视频免费播放| 亚洲日本中文字幕天天更新| 亚洲精品无码高潮喷水在线| 麻豆国产人免费人成免费视频| 精品免费视在线观看| 亚洲大尺度无码无码专线一区| 亚洲AV综合色区无码一区爱AV | 91久久成人免费| 日本中文字幕免费看| 亚洲一区中文字幕在线电影网 | 国产成人涩涩涩视频在线观看免费 | 永久免费看mv网站入口| 99热在线免费播放| 国产免费播放一区二区| 亚洲色偷精品一区二区三区| 麻豆亚洲AV永久无码精品久久| 亚洲欧洲日产国码高潮αv| 最近中文字幕免费mv视频7| 99热这里只有精品免费播放| eeuss影院免费直达入口| 亚洲a无码综合a国产av中文| 亚洲av成人一区二区三区| 香蕉视频在线观看亚洲| 国产亚洲精午夜久久久久久| 国产又大又长又粗又硬的免费视频 | 两个人看的www高清免费视频| 美女被免费视频网站| 亚洲午夜精品一区二区麻豆| 亚洲人成电影在线观看青青|