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

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

    其中項目經理審批和部門經理審批是并行路由。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,執行具體的業務操作,比如這里的com.google.code.insect.workflow.example.leave.SendRemindHandler 用于發送提醒消息給經理們。

        具體調用和工作項的人工觸發:

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

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

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

    主站蜘蛛池模板: 人妻无码中文字幕免费视频蜜桃| 精品国产日韩久久亚洲| 成年大片免费高清在线看黄| 成人免费a级毛片无码网站入口 | 老司机福利在线免费观看| 一个人看的www在线观看免费| 99久久亚洲综合精品成人网| 99久热只有精品视频免费观看17| 亚洲精品国偷自产在线| av永久免费网站在线观看| 亚洲av无码国产精品夜色午夜| 99re6在线视频精品免费| 亚洲精品字幕在线观看| 日韩精品无码专区免费播放| 久久亚洲sm情趣捆绑调教| 亚洲黄色免费电影| 狠狠色伊人亚洲综合网站色| 国产成人涩涩涩视频在线观看免费| 男性gay黄免费网站| 国产亚洲成人久久| 日韩视频免费在线观看| 亚洲一区免费视频| 久久久久无码精品亚洲日韩| 久久国产乱子免费精品| 亚洲天堂2016| 亚洲精品tv久久久久| 在线观看免费无码视频| 亚洲精品福利网泷泽萝拉| 在线成人a毛片免费播放| 特级aa**毛片免费观看| 精品久久久久久亚洲| 我的小后妈韩剧在线看免费高清版 | 99精品免费观看| 亚洲日本一线产区和二线产区对比 | 一级特黄录像免费播放肥| 亚洲av无码专区国产乱码在线观看 | 亚洲一级视频在线观看| 国产一区二区三区在线免费观看| 中文字幕一区二区三区免费视频| 亚洲一区二区成人| 免费一区二区三区四区五区|