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

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

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

    小菜毛毛技術(shù)分享

    與大家共同成長(zhǎng)

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      164 Posts :: 141 Stories :: 94 Comments :: 0 Trackbacks

    jBPM開發(fā)入門指南(4)

    7   jBPM 的客戶端開發(fā)

    有了前面的 HelloWorld 后臺(tái)流程,我們就要開始客戶端程序了。正如前面提到的,本文不寫 JSP ,而改采用 JUnit 的形式,輸出則用 System.out.println 。舉一反三,知道在方法中輸入及用 println 輸出,在 JSP SWING GUI 界面還不是一樣嘛。

     

    這個(gè) JUnit 客戶端,我們就借用創(chuàng)建項(xiàng)目時(shí)自動(dòng)生成的 SimpleProcessTest.java 了,改寫后如下:

    package com.sample;

     

    import junit.framework.TestCase;

     

    import org.jbpm.JbpmConfiguration;

    import org.jbpm.JbpmContext;

    import org.jbpm.context.exe.ContextInstance;

    import org.jbpm.graph.def.ProcessDefinition;

    import org.jbpm.graph.exe.ProcessInstance;

     

    public class SimpleProcessTest extends TestCase {

     

        private JbpmConfiguration config = JbpmConfiguration.getInstance();

        private JbpmContext ctx = config.createJbpmContext();

        // helloworld 對(duì)應(yīng)于 jbpm_processdefinition 表的 name 字段值,也即 processdefinition.xml name

        // 這個(gè)值得取比較耗時(shí),實(shí)際項(xiàng)目里最好和“數(shù)據(jù)庫的 JDBC 連接”一樣,讓它共享,不要頻繁打開關(guān)閉。

        private ProcessDefinition processDefinition = ctx.getGraphSession().findLatestProcessDefinition("helloworld");

     

        public void testNewRequest() {

            long id = newRequest();

            System.out.println("id=" + id);

            checkNewRequest(id);

            confirmRequest(id);

            checkconfirmRequest(id);

            ctx.close();// 關(guān)閉 jbpm 容器

        }

     

        /**

          * 創(chuàng)建一個(gè)請(qǐng)假單

          *

          * @return

          */

        private long newRequest() {

            // 創(chuàng)建一個(gè)新流程

            ProcessInstance pi = processDefinition.createProcessInstance();

            // 取得流程的數(shù)據(jù)環(huán)境

            ContextInstance ci = pi.getContextInstance();

            // 創(chuàng)建一張請(qǐng)假單

            ci.setVariable("name", " 陳剛 www.chengang.com.cn" );

            ci.setVariable("day", 2);

            assertEquals(null, ci.getVariable("note"));

            // 請(qǐng)假申請(qǐng)結(jié)束,轉(zhuǎn)到下一個(gè)流程結(jié)點(diǎn)

            pi.signal();

            return pi.getId();

        }

     

        /**

          * 檢查請(qǐng)假單的數(shù)據(jù)

          *

          * @param id

          */

        private void checkNewRequest(long id) {

            // 從數(shù)據(jù)庫提取原流程

            ProcessInstance pi = ctx.loadProcessInstance(id);

            // 取得流程的數(shù)據(jù)環(huán)境

            ContextInstance ci = pi.getContextInstance();

            // 創(chuàng)建一張請(qǐng)假單

            assertEquals(" 陳剛 www.chengang.com.cn" , ci.getVariable("name"));

            assertEquals(Integer.valueOf(2), ci.getVariable("day"));

            assertEquals(" 我要請(qǐng)假 " , ci.getVariable("note"));

     

            // 當(dāng)前是結(jié)點(diǎn)為 confirm

            assertEquals(pi.getRootToken().getNode().getName(), "confirm");

            // 流程還沒結(jié)束

            assertFalse(pi.hasEnded());

        }

     

        /**

          * 審批陳剛的請(qǐng)假申請(qǐng)

          *

          * @param id

          */

        private void confirmRequest(long id) {

            ProcessInstance pi = ctx.loadProcessInstance(id);

            ContextInstance ci = pi.getContextInstance();

            // 不通過

            ci.setVariable("note", " 不準(zhǔn)請(qǐng)假,繼續(xù)加班 " );

            // 審批結(jié)束,到下一個(gè)流程結(jié)點(diǎn)

            pi.signal();

        }

     

        private void checkConfirmRequest(long id) {

            ProcessInstance pi = ctx.loadProcessInstance(id);

            ContextInstance ci = pi.getContextInstance();

            // ConfirmAction 類在 signal 后執(zhí)行,所以覆蓋了經(jīng)理的審批意見

            assertEquals(" 準(zhǔn)假 " , ci.getVariable("note"));

     

            // 當(dāng)前是結(jié)點(diǎn)為 end

            assertEquals(pi.getRootToken().getNode().getName(), "end");

            // 流程結(jié)束了

            assertTrue(pi.hasEnded());

        }

     

    }

     

    這個(gè)例子還是很簡(jiǎn)單,而且關(guān)鍵是缺少用戶、組、權(quán)限等工作流系統(tǒng)必須的東西,不過沒關(guān)系。下面的內(nèi)容我將完成一個(gè)更完整的實(shí)例

    http://97wen.com/

    http://77.haowyt.com/

    posted on 2009-05-05 15:14 小菜毛毛 閱讀(500) 評(píng)論(0)  編輯  收藏 所屬分類: JBPM
    主站蜘蛛池模板: 亚洲VA中文字幕无码一二三区 | 国产亚洲精品高清在线| 永久免费看mv网站入口| 久久久久国色AV免费观看性色| 四虎成年永久免费网站| 97视频免费在线| 日本高清在线免费| 国产一卡2卡3卡4卡2021免费观看| 18级成人毛片免费观看| 久草视频免费在线| 一个人看www在线高清免费看| 九九精品免费视频| 成人免费午间影院在线观看| 99精品全国免费观看视频| 免费观看的a级毛片的网站| 日韩中文无码有码免费视频 | 亚洲精品国产va在线观看蜜芽| 亚洲精品国产自在久久| 亚洲日产韩国一二三四区| 亚洲成A∨人片在线观看不卡| 亚洲欧洲第一a在线观看| 亚洲狠狠ady亚洲精品大秀| 亚洲 日韩经典 中文字幕| 韩国亚洲伊人久久综合影院| 免费看又黄又爽又猛的视频软件| 国产黄色片免费看| 国产成人精品免费久久久久| 在线观看H网址免费入口| 午夜两性色视频免费网站| 亚洲国产电影av在线网址| 国产亚洲人成无码网在线观看| 亚洲综合无码一区二区| 国产精品亚洲专区在线观看| 日韩色日韩视频亚洲网站| 丰满人妻一区二区三区免费视频 | 亚洲熟女综合色一区二区三区| 在线观看无码AV网站永久免费| 无码免费午夜福利片在线| 国产aa免费视频| 亚洲人色婷婷成人网站在线观看| 亚洲欧洲日产国码在线观看|