成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用JBPM工作流引擎測試的一個例子

開發 后端
本文舉出了了一個使用jBPM工作流引擎進行測試的例子。例子中使用一個Persistence用于存儲全局變量值。從使用流程設計器創建流程規則,直到最后參與者參與者執行審批操作,觸發流程流轉到下一個環節,本例中都提供了完整的代碼以供參考。

本文提供使用jBPM工作流引擎測試的一個例子。

提供一個Persistence,用于存儲全局的變量值,方便存儲和獲取

  1. public class Persistence {  
  2. private static Map variables = null;  
  3. private static String tmpfile = System.getProperty("java.io.tmpdir") + "/temp.object";  
  4. static{  
  5. //加載文件  
  6. try{  
  7. if(new File(tmpfile).exists()){  
  8. FileInputStream in = new FileInputStream(tmpfile);  
  9. ObjectInputStream s = new ObjectInputStream(in);   
  10.     variables = (Map)s.readObject();  
  11. }  
  12. if(variables == null){  
  13. variables = new HashMap();  
  14. }  
  15. }catch(Exception e){  
  16. e.printStackTrace();  
  17. }  
  18. }  
  19. //設置一個變量的值  
  20. public static void setVariable(String name,Serializable object){  
  21. if(variables != null){  
  22. variables.put(name, object);  
  23. }  
  24. try {  
  25. FileOutputStream fos = new FileOutputStream(tmpfile);  
  26. ObjectOutputStream oos = new ObjectOutputStream(fos);  
  27. oos.writeObject(variables);  
  28. oos.flush();  
  29. oos.close();  
  30. fos.flush();  
  31. fos.close();  
  32. catch (Exception e) {  
  33. e.printStackTrace();  
  34. }  
  35. }  
  36. //獲取一個變量的值  
  37. public static Serializable getVariable(String name){  
  38. if(variables != null){  
  39. return (Serializable)variables.get(name);  
  40. }  
  41. return null;  
  42. }  
  43. }  
  44.  

1.首先使用流程設計器,創建一個簡單的流程規則

流程規則 

2.創建數據庫表,創建流程定義對象,并部署流程定義

  1. //創建數據庫表  
  2. public class Jbpm_01_CreateTable extends TestCase {  
  3. public void testCreateTable(){  
  4. JbpmConfiguration.getInstance().createSchema();  
  5. }  
  6. }  
  7. //定義流程定義對象,并部署流程  
  8. public class Jbpm_02_DeployProcessDefinition extends TestCase {  
  9. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  10. public void testDeployProcessDefinition(){  
  11. //讀取流程定義文件,得到流程定義對象  
  12. ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("test01/processdefinition.xml");  
  13. //可以得到流程定義的名稱  
  14. Persistence.setVariable("processName", processDefinition.getName());  
  15. //JbpmContext對象封裝了hibernate session 對象的功能,可以執行與數據庫持久化相關的操作  
  16. JbpmContext context = jbpmConfiguration.createJbpmContext();  
  17. try{  
  18. context.deployProcessDefinition(processDefinition);  
  19. }catch(Exception e){  
  20. e.printStackTrace();  
  21. context.setRollbackOnly();  
  22. }finally{  
  23. context.close();  
  24. }  
  25. }  
  26. }  
  27.  

3.定義公文Doucment 及其映射文件Doucment.hbm.xml

  1. public class Document {  
  2. private int id;  
  3. private String title;  
  4. private String content;  
  5. private Long processInstanceId;  
  6. public String getContent() {  
  7. return content;  
  8. }  
  9. public void setContent(String content) {  
  10. this.content = content;  
  11. }  
  12. public int getId() {  
  13. return id;  
  14. }  
  15. public void setId(int id) {  
  16. this.id = id;  
  17. }  
  18. public Long getProcessInstanceId() {  
  19. return processInstanceId;  
  20. }  
  21. public void setProcessInstanceId(Long processInstanceId) {  
  22. this.processInstanceId = processInstanceId;  
  23. }  
  24. public String getTitle() {  
  25. return title;  
  26. }  
  27. public void setTitle(String title) {  
  28. this.title = title;  
  29. }  
  30. }  
  31. //Document映射文件Document.hbm.xml  
  32. <hibernate-mapping>  
  33.   <class table="tbl_document" name="Document">  
  34.     <id name="id">  
  35.       <generator class="native"/>  
  36.     </id>  
  37.     <property name="title"/>  
  38.     <property name="content"/>  
  39.     <property name="processInstanceId"/>  
  40.   </class>  
  41. </hibernate-mapping>  
  42.  

4.創建公文并與流程實例綁定

  1. public class Jbpm_03_CreateDocument extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. public void testCreateDocument(){  
  6.  
  7. //JbpmContext對象封裝了hibernate session 對象的功能,可以執行與數據庫持久化相關的操作  
  8.  
  9. JbpmContext context = jbpmConfiguration.createJbpmContext();  
  10.  
  11. try{  
  12.  
  13. Document doc = new Document();  
  14.  
  15. doc.setTitle("測試公文"+new Random().nextInt(9999));  
  16.  
  17. context.getSession().save(doc);  
  18.  
  19. Persistence.setVariable("docId", doc.getId());  
  20.  
  21. }catch(Exception e){  
  22.  
  23. e.printStackTrace();  
  24.  
  25. context.setRollbackOnly();  
  26.  
  27. }finally{  
  28.  
  29. context.close();  
  30.  
  31. }  
  32.  
  33. }  
  34.  
  35. }  
  36.  

5.提交公文到流程,觸發流程流轉

  1. public class Jbpm_05_SubmitDocument extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. //提交公文到第一個環節  
  6.  
  7. public void testSubmitDocument(){  
  8.  
  9. //JbpmContext對象封裝了hibernate session 對象的功能,可以執行與數據庫持久化相關的操作  
  10.  
  11. JbpmContext context = jbpmConfiguration.createJbpmContext();  
  12.  
  13. try{  
  14.  
  15. //已知公文的信息  
  16.  
  17. int docId = (Integer)Persistence.getVariable("docId");  
  18.  
  19. Document doc = (Document)context.getSession().load(Document.class, docId);  
  20.  
  21. long processInstanceId = doc.getProcessInstanceId();  
  22.  
  23. ProcessInstance processInstance = context.getProcessInstance(processInstanceId);  
  24.  
  25. //觸發流程實例流轉到下一個環節  
  26.  
  27. processInstance.signal();  
  28.  
  29. }catch(Exception e){  
  30.  
  31. e.printStackTrace();  
  32.  
  33. context.setRollbackOnly();  
  34.  
  35. }finally{  
  36.  
  37. context.close();  
  38.  
  39. }  
  40.  
  41. }  
  42.  
  43. }  
  44.  

6.查看公文所處的當前任務節點

  1. public class Jbpm_06_CurrentNode extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. //公文當前所處的環節  
  6.  
  7. public void testCurrentNode(){  
  8.  
  9. //JbpmContext對象封裝了hibernate session 對象的功能,可以執行與數據庫持久化相關的操作  
  10.  
  11. JbpmContext context = jbpmConfiguration.createJbpmContext();  
  12.  
  13. try{  
  14.  
  15. //已知公文的信息  
  16.  
  17. int docId = (Integer)Persistence.getVariable("docId");  
  18.  
  19. Document doc = (Document)context.getSession().load(Document.class, docId);  
  20.  
  21. long processInstanceId = doc.getProcessInstanceId();  
  22.  
  23. ProcessInstance processInstance = context.getProcessInstance(processInstanceId);  
  24.  
  25. String currentNode = processInstance.getRootToken().getNode().getName();  
  26.  
  27. System.err.println("公文【"+doc.getTitle()+"】當前所處的環節" +  
  28.  
  29. "是:"+currentNode+",流程實例是否已結束?"+processInstance.hasEnded());  
  30.  
  31. }catch(Exception e){  
  32.  
  33. e.printStackTrace();  
  34.  
  35. context.setRollbackOnly();  
  36.  
  37. }finally{  
  38.  
  39. context.close();  
  40.  
  41. }  
  42.  
  43. }  
  44.  
  45. }  
  46.  

7.獲取流轉個某個參與者處待處理的任務列表

  1. public class Jbpm_07_SearchMyTaskList extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. //搜索流轉到某個參與者手上的公文列表  
  6.  
  7. public void testSearchMyTaskList(){  
  8.  
  9. //JbpmContext對象封裝了hibernate session 對象的功能,可以執行與數據庫持久化相關的操作  
  10.  
  11. JbpmContext context = jbpmConfiguration.createJbpmContext();  
  12.  
  13. try{  
  14.  
  15. printTask(context,"張三");  
  16.  
  17. printTask(context,"李四");  
  18.  
  19. printTask(context,"王五");  
  20.  
  21. }catch(Exception e){  
  22.  
  23. e.printStackTrace();  
  24.  
  25. context.setRollbackOnly();  
  26.  
  27. }finally{  
  28.  
  29. context.close();  
  30.  
  31. }  
  32.  
  33. }  
  34.  
  35. private void printTask(JbpmContext context,String actorId){  
  36.  
  37. List taskInstances = context.getTaskMgmtSession().findTaskInstances(actorId);  
  38.  
  39. for (Iterator iter = taskInstances.iterator(); iter.hasNext();) {  
  40.  
  41. TaskInstance ti = (TaskInstance) iter.next();  
  42.  
  43. Integer docId = (Integer)ti.getProcessInstance().getContextInstance().getVariable("documnt");  
  44.  
  45. Document doc = (Document)context.getSession().load(Document.class, docId);  
  46.  
  47. System.err.println("正在等待【"+actorId+"】審批的公文是:"+doc.getTitle());  
  48.  
  49. }  
  50.  
  51. }  
  52.  
  53. }  
  54.  

8.參與者執行審批操作,觸發流程流轉到下一個環節

  1. public class Jbpm_08_NextNode extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. //從一個TaskNode的中間節點出發,觸發流程流轉到下一個環節  
  6.  
  7. public void testNextNode(){  
  8.  
  9. //JbpmContext對象封裝了hibernate session 對象的功能,可以執行與數據庫持久化相關的操作  
  10.  
  11. JbpmContext context = jbpmConfiguration.createJbpmContext();  
  12.  
  13. try{  
  14.  
  15. //*******************************************  
  16.  
  17. //某某用戶要將其手上的某某公文提交到下一個環節  
  18.  
  19. //*******************************************  
  20.  
  21. //已知要提交的公文  
  22.  
  23. Integer docId = (Integer)Persistence.getVariable("docId");  
  24.  
  25.    
  26.  
  27.                     nextStep(context,"張三",docId);  
  28.  
  29.                     nextStep(context,"李四",docId);  
  30.  
  31. nextStep(context,"王五",docId);  
  32.  
  33.    
  34.  
  35. }catch(Exception e){  
  36.  
  37. e.printStackTrace();  
  38.  
  39. context.setRollbackOnly();  
  40.  
  41. }finally{  
  42.  
  43. context.close();  
  44.  
  45. }  
  46.  
  47. }  
  48.  
  49. private void nextStep(JbpmContext context,String actorId,Integer docId){  
  50.  
  51. List taskInstances = context.getTaskMgmtSession().findTaskInstances(actorId);  
  52.  
  53. for (Iterator iter = taskInstances.iterator(); iter.hasNext();) {  
  54.  
  55. TaskInstance ti = (TaskInstance) iter.next();  
  56.  
  57. Integer _docId = (Integer)ti.getProcessInstance().getContextInstance().getVariable("documnt");  
  58.  
  59. //找到對應的任務實例  
  60.  
  61. if(docId.equals(_docId)){  
  62.  
  63. Document doc = (Document)context.getSession().load(Document.class, docId);  
  64.  
  65. //參與者的任務已經處理完成,需要結束這個任務實例  
  66.  
  67. //這個動作,在缺省的情況下,會觸發對應的Token的signal()方法,即流向下一個環節  
  68.  
  69. ti.end();  
  70.  
  71. System.err.println("公文【"+doc.getTitle()+"】已被【"+actorId+"】審批完成,已提交到下一個環節");  
  72.  
  73. }  
  74.  
  75. }  
  76.  
  77. }  
  78.  
  79. }  
  80.  

【編輯推薦】

  1. jBPM 3.2用戶指南 概覽
  2. jBPM 4.0.0用戶指南 安裝配置
  3. jBPM數據庫表說明:流程節點表
  4. J2EE工作流管理系統jBPM詳解(一)
  5. J2EE工作流管理系統jBPM詳解(二) 
責任編輯:yangsai 來源: 163博客
相關推薦

2009-06-11 14:43:34

jbpm工作流引擎jBPM搭建

2011-12-14 09:58:58

JavajBPM

2009-06-11 14:33:11

jbpm工作流引擎什么是jbpm

2021-10-14 11:34:05

技術工作流引擎

2021-03-05 07:47:07

工作流引擎節點

2015-07-14 09:26:28

微型工作流引擎設計

2023-01-04 08:02:16

工作流架構設計

2023-07-05 09:48:44

Activiti部署

2023-08-02 18:48:23

Flowable工作流引擎

2009-09-01 18:26:23

C#工作流引擎

2024-10-17 08:39:32

2021-03-12 06:44:09

Argo Workfl開源項目

2009-06-18 15:53:37

Hibernate B

2021-12-17 08:39:39

SpringbootActiviti網關路由

2014-07-31 17:03:12

2024-01-25 11:41:00

Python開發前端

2023-03-14 08:02:14

靜態路由動態路由設備

2024-01-08 13:40:00

并發安全? 數量

2013-09-29 17:13:59

PowerShell工作流

2009-09-03 17:13:53

jBPM4.1
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区三区四区 | 精品亚洲永久免费精品 | 国产免费观看久久黄av片涩av | 欧美一区二区在线观看 | 有码一区| 欧美黄色片 | 欧美黑人一级爽快片淫片高清 | 91精品一区二区三区久久久久 | 2018天天干天天操 | 亚洲综合天堂网 | 这里只有精品99re | 国产精品久久久av | 国产成人久久av免费高清密臂 | 福利片一区二区 | 日韩精品在线看 | 久久久精| 精品久久香蕉国产线看观看亚洲 | 国产精品视频一区二区三区不卡 | 天天操天天干天天透 | 亚洲一区精品视频 | 欧美一区二区三区在线看 | 精品一区二区三区中文字幕 | 亚洲欧美日韩一区二区 | 伊人网一区 | 色爱综合网 | 欧美专区在线观看 | 欧美精品中文字幕久久二区 | 91精品国产综合久久精品图片 | 欧美日韩专区 | h视频免费观看 | 亚洲福利一区二区 | 欧美久久一区 | 午夜精品一区二区三区在线视频 | 日韩福利片 | 欧美久久久电影 | 成人精品一区二区三区中文字幕 | 草久久| 91精品一区 | 极品粉嫩国产48尤物在线播放 | 亚洲日本一区二区 | 日韩欧美视频在线 |