JBPM入門介紹

Jbpm是一種工作流引擎,常用來做OA系統等。

工作流系統研究切入點(如何去學習工作流的一個思路,這是一個業務流程的思路)

1.編寫流程定義

2.部署流程

3.加載流程

4.啓動流程

5.執行任務

6.完成任務

流程的定義:預定義的業務流轉邏輯

流程實例:業務的一次實際流轉過程

參與者:任務的執行者

活動(任務):組成流程定義的節點

活動實例:組成流程實例的元素

流轉:從一個節點到另一個節點這一行爲

工作列表:當前需要辦理的任務集合

工作流的核心組件,對流程實例進行管理

Token是和指針(運行期的概念)代表着一條執行路徑,指向當前流程中正在執行的節點在實例運行期間,tokens可能是一個樹形結構,同一時刻可能存在多個token但是隻有一個root token

-------------------------------------------------------------

針對Jbpm如何去按上面的思路去做呢?

1.流程的定義:可以用圖形化的工具也可以自己手工寫。

2.部署流程:通過加載xml文件,把xml信息轉換成java信息。發佈流程

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

GraphSession graphSession=jbpmContext.getGraphSession();

ProcessDefinition processDefinition=ProcessDefinition.parseXmlResource("org/test/a.xml");

//部署流程定義,如果已經存在同名的定義,則版本號會自動累加

graphSession.deployProcessDefinition(processDefinition);

jbpmContext.close();

3.加載流程和啓動流程:

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

GraphSession graphSession=jbpmContext.getGraphSession();

//加載流程的定義

ProcessDefinition processDefinition=graphSession.loadProcessDefinition(processDefinitionID);//這個Id是流程的Id

//創建流程實例,啓動流程

ProcessInstance processInstance=new ProcessInstance(processDefinition);

//此時,rootToken指向流程定義的第一個節點

jbpmContext.save(processInstance);

jbpmContext.close();

4.獲取工作列表

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

TaskMgmtSession mgmtSession=jbpmContext.getTaskMgmtSession();

//只能獲取尚未完成的任務列表(代辦任務)

List list=taskMgmtSession.findTaskInstance(userId);//userid爲參與者的id

//如果需要靈活的列表獲取接口,需要直接使用hibernate session對象對數據進行查詢

TaskInstance instance=mgmtSession.getTaskInstance(Long.parseLong(taskId));

//這兩種獲取列表的方式不太一樣,第一個返回List,第二個返回TaskInstance對象

5.執行任務

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

TaskMgmtSession mgmtSession=jbpmCotext.getTaskMgmtSession();

TaskInstance taskInstance=mgmtSession.getTaskInstance(Long.parseLong(taskId));

taskInstance.start(); //start方法的調用標識着一個任務執行的開始,任務的開始時間會被填充

jbpmContext.save(taskInstance);

jbpmContext.close();

6.結束任務

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

TaskMgmtSession mgmtSession=jbpmContext.getTaskMgmtSession();

TaskInstance taskInstance=mgmtSession.getTaskInstance(Long.parseLong(taskId));

taskInstance.end();

jbpmContext.save(taskInstance);

jbpmContext.close();

//end方法的調用1.當前的任務實例結束,任務結束時間會被填充。2.下一個節點的初始化3.當前任務的結束和下一

//個流程的開始是在一個事物內完成,從而保證了數據的完成性

-------------------------

如何給任務設置參與者

1.用變量傳遞參與者Id

值一般的web層確定

2.定義配置

<task-node name="collection">

<task>

<assignment class="com.modern.Test">

<assignment actor-id='#{userid}'>

</task>

</task-node>

3.Handler實現

public class F implements AssignmentHandler{

public void assign(Assignable arg0,ExecutionContext arg1)throws Exception{

String actorId=(String)arg1.getVariable("userId");

arg0.setActorId(actorId);

}

}



---------------------

Context標識着事物

它的的底層序列化是用hibernate實現的,createContext是開啓hibernatesession的過程,close 是關閉hibernatesession的過程

JbpmContext jbpmContext=JbpmConfiguration.getInstance().createJbpmContext();

try{

TaskInstance taskInstance=

.............do your process operations.............

}catch(Exception e){

}finally{

jbpmContext.close();

}

---------------------------------------

兩種session的用法:

GraphSession的典型用法

職責;GraphSession處理相關的數據持久化操作,主要是ProcessDefinition 和ProcessInstance

TaskMgmtSession 的典型用法:

職責:1.TaskInstance相關的數據的查詢操作

2.TaskInstance數據通過ProcessInstance進行保存它沒有save方法,save是通過對processInstance的操作實現的

**********************************

jbpm是工作流的一種

jbpm_processdefinition 是工作流的流程定義

jbpm_processInstance是工作流的實例

jbpm_id_user是一個參與者

jbpm_token是這Token的一個表,其中node記錄正在執行的節點

jbpm_bytearray存所上傳的3個文件,生成圖片是爲了流程跟蹤

jbpm_byteblock存的是上傳文件裏的內容
發佈了38 篇原創文章 · 獲贊 0 · 訪問量 1965
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章