自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用JBPM工作流引擎測(cè)試的一個(gè)例子

開發(fā) 后端
本文舉出了了一個(gè)使用jBPM工作流引擎進(jìn)行測(cè)試的例子。例子中使用一個(gè)Persistence用于存儲(chǔ)全局變量值。從使用流程設(shè)計(jì)器創(chuàng)建流程規(guī)則,直到最后參與者參與者執(zhí)行審批操作,觸發(fā)流程流轉(zhuǎn)到下一個(gè)環(huán)節(jié),本例中都提供了完整的代碼以供參考。

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

提供一個(gè)Persistence,用于存儲(chǔ)全局的變量值,方便存儲(chǔ)和獲取

  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. //設(shè)置一個(gè)變量的值  
  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. //獲取一個(gè)變量的值  
  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.首先使用流程設(shè)計(jì)器,創(chuàng)建一個(gè)簡單的流程規(guī)則

流程規(guī)則 

2.創(chuàng)建數(shù)據(jù)庫表,創(chuàng)建流程定義對(duì)象,并部署流程定義

  1. //創(chuàng)建數(shù)據(jù)庫表  
  2. public class Jbpm_01_CreateTable extends TestCase {  
  3. public void testCreateTable(){  
  4. JbpmConfiguration.getInstance().createSchema();  
  5. }  
  6. }  
  7. //定義流程定義對(duì)象,并部署流程  
  8. public class Jbpm_02_DeployProcessDefinition extends TestCase {  
  9. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  10. public void testDeployProcessDefinition(){  
  11. //讀取流程定義文件,得到流程定義對(duì)象  
  12. ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("test01/processdefinition.xml");  
  13. //可以得到流程定義的名稱  
  14. Persistence.setVariable("processName", processDefinition.getName());  
  15. //JbpmContext對(duì)象封裝了hibernate session 對(duì)象的功能,可以執(zhí)行與數(shù)據(jù)庫持久化相關(guān)的操作  
  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.創(chuàng)建公文并與流程實(shí)例綁定

  1. public class Jbpm_03_CreateDocument extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. public void testCreateDocument(){  
  6.  
  7. //JbpmContext對(duì)象封裝了hibernate session 對(duì)象的功能,可以執(zhí)行與數(shù)據(jù)庫持久化相關(guān)的操作  
  8.  
  9. JbpmContext context = jbpmConfiguration.createJbpmContext();  
  10.  
  11. try{  
  12.  
  13. Document doc = new Document();  
  14.  
  15. doc.setTitle("測(cè)試公文"+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.提交公文到流程,觸發(fā)流程流轉(zhuǎn)

  1. public class Jbpm_05_SubmitDocument extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. //提交公文到第一個(gè)環(huán)節(jié)  
  6.  
  7. public void testSubmitDocument(){  
  8.  
  9. //JbpmContext對(duì)象封裝了hibernate session 對(duì)象的功能,可以執(zhí)行與數(shù)據(jù)庫持久化相關(guān)的操作  
  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. //觸發(fā)流程實(shí)例流轉(zhuǎn)到下一個(gè)環(huán)節(jié)  
  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.查看公文所處的當(dāng)前任務(wù)節(jié)點(diǎn)

  1. public class Jbpm_06_CurrentNode extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. //公文當(dāng)前所處的環(huán)節(jié)  
  6.  
  7. public void testCurrentNode(){  
  8.  
  9. //JbpmContext對(duì)象封裝了hibernate session 對(duì)象的功能,可以執(zhí)行與數(shù)據(jù)庫持久化相關(guān)的操作  
  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()+"】當(dāng)前所處的環(huán)節(jié)" +  
  28.  
  29. "是:"+currentNode+",流程實(shí)例是否已結(jié)束?"+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.獲取流轉(zhuǎn)個(gè)某個(gè)參與者處待處理的任務(wù)列表

  1. public class Jbpm_07_SearchMyTaskList extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. //搜索流轉(zhuǎn)到某個(gè)參與者手上的公文列表  
  6.  
  7. public void testSearchMyTaskList(){  
  8.  
  9. //JbpmContext對(duì)象封裝了hibernate session 對(duì)象的功能,可以執(zhí)行與數(shù)據(jù)庫持久化相關(guān)的操作  
  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.參與者執(zhí)行審批操作,觸發(fā)流程流轉(zhuǎn)到下一個(gè)環(huán)節(jié)

  1. public class Jbpm_08_NextNode extends TestCase {  
  2.  
  3. static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();  
  4.  
  5. //從一個(gè)TaskNode的中間節(jié)點(diǎn)出發(fā),觸發(fā)流程流轉(zhuǎn)到下一個(gè)環(huán)節(jié)  
  6.  
  7. public void testNextNode(){  
  8.  
  9. //JbpmContext對(duì)象封裝了hibernate session 對(duì)象的功能,可以執(zhí)行與數(shù)據(jù)庫持久化相關(guān)的操作  
  10.  
  11. JbpmContext context = jbpmConfiguration.createJbpmContext();  
  12.  
  13. try{  
  14.  
  15. //*******************************************  
  16.  
  17. //某某用戶要將其手上的某某公文提交到下一個(gè)環(huán)節(jié)  
  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. //找到對(duì)應(yīng)的任務(wù)實(shí)例  
  60.  
  61. if(docId.equals(_docId)){  
  62.  
  63. Document doc = (Document)context.getSession().load(Document.class, docId);  
  64.  
  65. //參與者的任務(wù)已經(jīng)處理完成,需要結(jié)束這個(gè)任務(wù)實(shí)例  
  66.  
  67. //這個(gè)動(dòng)作,在缺省的情況下,會(huì)觸發(fā)對(duì)應(yīng)的Token的signal()方法,即流向下一個(gè)環(huán)節(jié)  
  68.  
  69. ti.end();  
  70.  
  71. System.err.println("公文【"+doc.getTitle()+"】已被【"+actorId+"】審批完成,已提交到下一個(gè)環(huán)節(jié)");  
  72.  
  73. }  
  74.  
  75. }  
  76.  
  77. }  
  78.  
  79. }  
  80.  

【編輯推薦】

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

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

技術(shù)工作流引擎

2021-03-05 07:47:07

工作流引擎節(jié)點(diǎn)

2015-07-14 09:26:28

微型工作流引擎設(shè)計(jì)

2023-01-04 08:02:16

工作流架構(gòu)設(shè)計(jì)

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開源項(xiàng)目

2009-06-18 15:53:37

Hibernate B

2023-03-14 08:02:14

靜態(tài)路由動(dòng)態(tài)路由設(shè)備

2024-01-08 13:40:00

并發(fā)安全? 數(shù)量

2021-12-17 08:39:39

SpringbootActiviti網(wǎng)關(guān)路由

2024-01-25 11:41:00

Python開發(fā)前端

2014-07-31 17:03:12

2022-02-25 17:02:38

自動(dòng)化工作轉(zhuǎn)型

2013-09-29 17:13:59

PowerShell工作流
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)