jbpm核心類使用

來源:互聯網
上載者:User

Jbpm的使用步驟
A)編寫流程定義(定義規則);
B)部署流程定義到系統中;
C)執行流程(使用指定的流程定義);
          使用jBPM提供的JPDL(jBPM Process Definition Language)來描述流程,jPDL是一種直觀的流程語言,可以使用任務、等待狀態、定時器、自動化動作等等圖形化地表示流程。jPDL認為一個商務流程可以被看作是一個UML狀態圖。

     流程定義:預先定義的業務流轉邏輯。
     流程執行個體(process instance):業務的一次實際流轉過程。(是流程定義執行期間的體現,包含了流程定義被解釋之後的一些資訊,諸如開始時間、結束時間和其他相關聯的資訊)。
    任務執行個體(task instance): 組成流程執行個體的元素。(Task被解釋執行時的資訊,有開始時間、結束時間、參與者等,有create、start、end 三種狀態)。

     Jbpm的API流程有關的所有資訊都是要儲存到資料庫中的。jBPM的其中一個特色就是它使用Hibernate來管理它的資料庫。這樣,jBPM就將資料的管理職能分離出去,自己則
專註於商務邏輯的處理。

        流程中一個比較重要的概念就是令牌(Token),流程執行個體通過Token的維護當前正在執行的節點 。Jbpm是通過Token知道一個流程執行個體現在走到哪個節點,每個流程執行個體都是一個指標,指向當前正在執行的節點,在當前節點執行完後,到達了下一個節點,就是讓這個指標指向下一個節點。這個指標叫做Token(也叫做令牌)。Token是運行時的概念,用來維護指向圖結點的指標。Token需要一個訊號(signal)來讓流程向前執行。當一個signal來到的時候,Token就會通過transition離開當前的結點走到下一個結點。

 

jbpm中要用的jar包,把它們添加進入項目
 
   jbpm-jpdl.jar(核心);
   jbpm-identity.jar(可選,組織機構);
   bsh.jar(BeanShell指令碼);
   jboss-j2ee.jar;

   hibernate3.jar(Hibernate);
   antlr-2.7.6.jar(Hibernate);
   asm.jar(Hibernate);
   cglib.jar(Hibernate);
   dom4j.jar(Hibernate);
   commons-collections.jar(Hibernate);
   commons-logging.jar(Hibernate);

   hsqldb.jar(可選,純Java寫的資料庫);
   log4j.jar(可選,日誌記錄);

   Junit4(單元測試);

     添加設定檔(在jbpm-jpdl-3.2.2/config目錄中):
   jbpm.cfg.xml;
   hibernate.cfg.xml;
   log4j.properties(可選,log4j設定檔);
修改資料庫庫串連資訊,如果使用的不是HsqlDB資料庫,還應添加相應的jdbc驅動。

  產生資料庫表。

 編寫流程步驟,要實現的功能有:
    a> 部署流程定義。
    b> 啟動流程。
    c> 擷取工作清單。
    d> 開始任務。
    e> 結束任務。
其中編寫流程定義和步驟a是添加流程定義到系統中;步驟b,c,d,e是使用系統中
存在的某個流程定義執行流程;步驟c,d,e是辦理一個任務的過程,流程的執行就
是一次次辦理任務的過程。

         有兩個重要的類:JbpmConfiguration和JbpmContext。

JbpmConfiguration是jBPM的相關配置資訊,並有建立JbpmContext的功能,可以把JbpmConfiguration想像成Hibernate中的Configuration與SessionFactory的結合體。使用
JbpmConfiguration.getInstance()方法建立一個JbpmConfiguration對象,這會使用預設的jbpm設定檔:在classpath根目錄中,並且名字為jbpm.cfg.xml。

         JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();這個是單一實例

或者是使用getInstance(String configFilePath)方法,用指定的設定檔構造。

         Jbpm中幾乎所有的操作都是通過JbpmContext完成的,可以把他想像成Hibernate中的Session。他是通過JbpmConfiguration.createJbpmContext()方法建立的,

        JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();

JbpmContext中封裝有一個Hibernate的Session(通過他做的資料庫操作)。使用完JbpmContext後一定要調用他的close()方法,否則所有資訊都不會持久化到數
據庫當中。

         jbpmContext.close(); // 提交/復原 事務,關閉Session

因為在調用JbpmConfiguration.createJbpmContext()方法時會建立一個Hibernate的Session並開始事務;在調用JbpmContext.close()方法時會提交事務並且關閉所關聯的Session。如果在執行JbpmContext.close()之前調用方法jbpmContext.setRollbackOnly(),則在JbpmContext.close()時會復原事務。

         jbpmContext.setRollbackOnly();

這個是在部署流程定義失敗的時候,進行復原.這句話的功能不是直接進行復原,而是做個復原標記.在關閉的時候做復原.

 

部署流程定義:這個過程就是把流程定義的相關資訊儲存到jBPM的資料庫中。

          解析流程定義有三種方式,所使用的方法都在ProcessDefinition中,並且都是static的:

1)parseXmlResource方法,parseXmlInputStream方法和parseXmlReader方法,是解析一個xml的流程定義檔案;

2)parseXmlString,是解析一個字串;

3)parseParResource與parseParZipInputStream是解析一個par包。

        // pd = ProcessDefinition.parseParResource("helloworld/helloworld.zip");

        jbpmContext.deployProcessDefinition(pd);

部署流程定義時,如果存在同名的流程定義,則版本自動累加(加1);如果不存在,則版本為1。

執行流程
         流程執行個體可以通過ProcessDefinition.createProcessInstance()方法建立,或者是使用new ProcessInstance(ProcessDefinition pd)並傳遞一個流程定義來建立,總之建立的流程執行個體一定是要是屬於(使用)某個流程定義的。啟動流程後不要忘了使用ProcessInstance.signal()方法離開開始狀態。

             ProcessDefinition pd = jbpmContext.getGraphSession().findLatestProcessDefinition("helloworld");
             ProcessInstance pi = pd.createProcessInstance();
這裡是不用手動儲存的,jbpm會自動執行這個操作.
             jbpmContext.save(pi);
建立一個流程執行個體
            pi.getRootToken().signal();
關閉開啟的資源.Java會自動回收沒有引用的對象,但不會回收沒有關閉的資源.
            jbpmContext.close();

注意:流程定義的名字是processdefinition.xml檔案中的根項目的name屬性的值,不是流程定義檔案的名字!每個節點都有多個任務,工作清單:當前需要辦理(未完成)的任務集合。可以通過TaskMgmtSession獲得。開始任務的方法為:TaskInstance.start();結束任務為:TaskInstance.end(),

開始任務
            TaskInstance ti = jbpmContext.getTaskInstance(taskInstanceId);
            ti.start();
結束任務
           TaskInstance ti = jbpmContext.getTaskInstance(taskInstanceId);
           ti.end();

一個任務執行個體只能開始和結束一次(再次開始或結束會拋異常,列印這個任務已經結束了)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.