日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JBPM入门

發布時間:2025/3/19 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JBPM入门 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

理解JBPM(java Business Process Management)的基本概念:

jPDL - JBPM Process Definition Language

JBPM簡要過程:
1、定義流程(利用JPDL)
2、部署流程(部署到數據庫)
3、創建公文并與流程實例綁定
4、可通過JBPM的接口,觸發流程向下流動
5、可通過JBPM的接口,獲得流動到某個用戶那里的文檔(即待處理任務列表)
6、可通過JBPM的接口,結束某個用戶的任務(這將觸發流程繼續向下流動)
7、如此,直到結束

----------------------------------------------
測試:

1、安裝JBPM
- 引入Hibernate依賴包
- 引入JBPM依賴包
* bsh.jar
* jcr-1.0.jar
* jbpm-identity.jar
* jbpm-jpdl.jar
- 引入數據庫驅動
* mysql-connector-java-3.1.13-bin.jar
2、定義相關配置文件
- Hibernate配置文件
* 提供hibernate配置文件(可以從config/目錄下拷貝,并修改其中的數據庫連接設置即可)
3、假設現在有一個公文,需要經過:張三、李四、王五的審批之后才能結束
4、我們定義一個Document對象,及其hibernate映射,并將修改hibernate配置文件,將映射添加到其配置中(以便創建相應的數據庫表)
Document對象定義如下:
public class Document {private int id;private String title;private String content;private String creator;private Long processIntanceId;/*** @return the id*/public int getId() {return id;}/*** @param id* the id to set*/public void setId(int id) {this.id = id;}/*** @return the title*/public String getTitle() {return title;}/*** @param title* the title to set*/public void setTitle(String title) {this.title = title;}/*** @return the content*/public String getContent() {return content;}/*** @param content* the content to set*/public void setContent(String content) {this.content = content;}/*** @return the creator*/public String getCreator() {return creator;}/*** @param creator* the creator to set*/public void setCreator(String creator) {this.creator = creator;}/*** @return the processIntanceId*/public Long getProcessIntanceId() {return processIntanceId;}/*** @param processIntanceId* the processIntanceId to set*/public void setProcessIntanceId(Long processIntanceId) {this.processIntanceId = processIntanceId;} }
對應的hibernate配置文件如下:
<hibernate-mapping><class table="T_Document" name="org.darkness.jbpmtest.Document"><id name="id"><generator class="native"/></id><property name="title"/><property name="content"/><property name="creator"/><property name="processIntanceId"/></class> </hibernate-mapping>
5、現在讓我們來測試一下:
- 創建數據庫表: JbpmConfiguration.getInstance().createSchema();
- 定義流程: process.xml
<?xml version="1.0" encoding="UTF-8"?> <process-definition name="文檔測試流程"><start-state name="開始"><transition name="提交張三審批" to="張三審批" /></start-state><task-node name="張三審批"><task name="審批1"><assignment actor-id="張三" /></task><transition name="提交李四審批" to="李四審批" /></task-node><task-node name="李四審批"><task name="審批2"><assignment actor-id="李四" /></task><transition name="提交王五審批" to="王五審批" /></task-node><task-node name="王五審批"><task name="審批3"><assignment actor-id="王五" /></task><transition name="結束流程" to="結束" /></task-node><end-state name="結束" /> </process-definition>
- 部署流程:
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();// 創建jbpmConfiguration對象 ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("process.xml");// 讀取流程定義文件,創建processdefinition對象// context對象類似于hibernate session對象的功能JbpmContext context = jbpmConfiguration.createJbpmContext();// 創建jbpmContext對象try {context.deployProcessDefinition(processDefinition);// 部署流程到數據庫} finally {// context對象需要關閉context.close();// 關閉context對象}

????????? - 創建公文
Session session = HibernateUtils.getSession();try {session.beginTransaction();Document doc = new Document();doc.setTitle("測試公文");doc.setContent("測試公文的內容");doc.setCreator("趙一");session.save(doc);session.getTransaction().commit();} catch (Exception e) {session.getTransaction().rollback();} finally {HibernateUtils.closeSession(session);}
- 將公文與流程綁定(即需要創建流程實例)
JbpmContext context = jbpmConfiguration.createJbpmContext();context.setSessionFactory(HibernateUtils.getSessionFactory());// 將JBPM與程序中的session綁定// 從數據庫中加載ProcessDefinition對象ProcessDefinition definition = context.getGraphSession().findLatestProcessDefinition("文檔測試流程");// 從流程中創建一個流程實例ProcessInstance processInstance = new ProcessInstance(definition);// 存儲流程實例context.save(processInstance);// 加載公文Document doc = (Document) context.getSession().load(Document.class, 1);// 綁定流程實例到公文doc.setProcessIntanceId(processInstance.getId());// 綁定公文到流程實例(ContextInstance相當于一個變量的容器)processInstance.getContextInstance().createVariable("document",doc.getId());context.close();
* context.getGraphSession().findLatestProcessDefinition("流程名稱");
- 公文創建者提交公文
JbpmContext context = jbpmConfiguration.createJbpmContext();context.setSessionFactory(HibernateUtils.getSessionFactory());Document doc = (Document) context.getSession().load(Document.class, 1);// 加載公文信息ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());// 即根據流程實例ID加載流程實例// 觸發流程往下走(即到達第一個節點)processInstance.getRootToken().signal();context.close();


- 這時候,我們可以測試一下,看看流程當前所處的節點
JbpmContext context = jbpmConfiguration.createJbpmContext();context.setSessionFactory(HibernateUtils.getSessionFactory());Document doc = (Document) context.getSession().load(Document.class, 1);ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());// 當前節點?第一個節點對應的用戶登錄,應該能夠查詢到其當前的任務(有公文等待其審批)System.err.println(processInstance.getRootToken().getNode().getName());context.close();
查找某個人的任務列表:
List tasks = context.getTaskMgmtSession().findTaskInstances("張三");// 查找張三的任務列表,列表元素是TaskInstance實例 taskInstance.getProcessInstance().getContextInstance().getVariable("document");
通過:可以找到其綁定的公文ID
- 查找到當前的任務對應的公文之后,即可對其審批,并繼續往下走
taskInstance.end();
- 如此,直到結束
processInstance.hasEnded()- 如果流程已經到達終點,本調用將返回true

轉載于:https://my.oschina.net/darkness/blog/510204

總結

以上是生活随笔為你收集整理的JBPM入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。