小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

jbpm的入門1

 昵稱15242507 2014-11-19
這里使用的是mysql數(shù)據(jù)庫
開發(fā)工具是eclipse
首先我們需要初始化話數(shù)據(jù)庫
Java代碼  收藏代碼
  1. package test.config;  
  2.   
  3. import org.jbpm.JbpmConfiguration;  
  4.   
  5. public class InitDB {  
  6.   
  7.     public static void main(String[] args) {  
  8.         InitDB initDB = new InitDB();  
  9.         initDB.createJbpmDB();  
  10.     }  
  11.     //初始化JBPM的數(shù)據(jù)庫表  
  12.     public  void createJbpmDB(){  
  13.         JbpmConfiguration.getInstance().createSchema();  
  14.     }  
  15.     //刪除JBPM的數(shù)據(jù)庫表  
  16.     public void dropJbpmDB(){  
  17.         JbpmConfiguration.getInstance().dropSchema();  
  18.     }  
  19.   
  20. }  


相關(guān)的配置文件 可以在jbpm的程序包中找到
hibernate.cfg.xml要與你的數(shù)據(jù)庫配置相匹配。

接下來我們繪制一個(gè)工作流,這里基本上用到j(luò)bpm的一個(gè)工作流繪制的插件。
我們繪制了一個(gè)簡單的流程:
大體過程如下
起始狀態(tài)--》任務(wù)1--》任務(wù)2--》結(jié)束
Java代碼  收藏代碼
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <process-definition  xmlns=""  name="qj">  
  4.   
  5.   
  6.     <start-state name="start-state1">  
  7.         <transition to="apply"></transition>  
  8.     </start-state>  
  9.   
  10.   
  11.     <task-node name="apply">  
  12.         <task name="apply">  
  13.             <assignment actor-id="1"></assignment>  
  14.         </task>  
  15.         <transition to="approve"></transition>  
  16.     </task-node>  
  17.   
  18.     <task-node name="approve">  
  19.         <task name="approve">  
  20.             <assignment actor-id="2"></assignment>  
  21.         </task>  
  22.         <transition to="end-state1"></transition>  
  23.     </task-node>  
  24.   
  25.   
  26.     <end-state name="end-state1"></end-state>  
  27.   
  28.   
  29. </process-definition>  




這里的actor-id 是一個(gè)查看權(quán)限

現(xiàn)在我們將流程定義發(fā)布上去
Java代碼  收藏代碼
  1. package test.config;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.FileNotFoundException;  
  5. import java.io.InputStream;  
  6.   
  7. import org.jbpm.JbpmConfiguration;  
  8. import org.jbpm.JbpmContext;  
  9. import org.jbpm.graph.def.ProcessDefinition;  
  10.   
  11. /** 
  12.  * 部署流程 
  13.  * 
  14.  */  
  15. public class Deploy {  
  16.     public static void main(String[] args) throws FileNotFoundException {  
  17.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  18.         //取得流程定義  
  19.         InputStream is = new FileInputStream("D:\\workspace\\fwk\\jbpm\\src\\test\\qj\\processdefinition.xml");  
  20.         ProcessDefinition pd = ProcessDefinition.parseXmlInputStream(is);   
  21.         //部署流程  
  22.         jbpmContext.deployProcessDefinition(pd);  
  23.           
  24.         jbpmContext.close();  
  25.     }  
  26. }  


發(fā)布之后我們?cè)跀?shù)據(jù)庫中已經(jīng)可以看到相關(guān)的配置了。






下面我們創(chuàng)建一個(gè)流程實(shí)例。
Java代碼  收藏代碼
  1. package test;  
  2.   
  3. import org.jbpm.JbpmConfiguration;  
  4. import org.jbpm.JbpmContext;  
  5. import org.jbpm.db.GraphSession;  
  6. import org.jbpm.graph.def.ProcessDefinition;  
  7. import org.jbpm.graph.exe.ProcessInstance;  
  8.   
  9. public class CreatePDInstance {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  16.         GraphSession graphSession = jbpmContext.getGraphSession();  
  17.         //取得流程定義  
  18.         ProcessDefinition pd = graphSession.findLatestProcessDefinition("qj");  
  19.         //創(chuàng)造實(shí)例  
  20.         ProcessInstance pi = pd.createProcessInstance();  
  21.         //token下移 剛創(chuàng)建的實(shí)例token是指向start-state1,我們需要讓token完整這里流程 去指向真正的任務(wù)節(jié)點(diǎn)  
  22.         pi.signal();  
  23.         //當(dāng)前token指向apply節(jié)點(diǎn)的第一個(gè)任務(wù)  
  24.         jbpmContext.close();  
  25.     }  
  26.   
  27. }  






signal();方法是將狀態(tài)進(jìn)行轉(zhuǎn)換,由于轉(zhuǎn)至第二個(gè)狀態(tài),所以apply任務(wù)在結(jié)束完起始狀態(tài)的時(shí)候會(huì)被同步創(chuàng)建創(chuàng)建。

由于apply任務(wù)是分配給actorId=1進(jìn)行處理的,下面我們看看autorId=1的任務(wù)列表
Java代碼  收藏代碼
  1. package test;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.jbpm.JbpmConfiguration;  
  6. import org.jbpm.JbpmContext;  
  7. import org.jbpm.taskmgmt.exe.TaskInstance;  
  8.   
  9. public class TaskActor1 {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         TaskActor1 ta1 = new TaskActor1();  
  16.         ta1.showList();  
  17.   
  18.     }  
  19.     public void showList(){  
  20.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  21.         String autorId="1";  
  22.         List<TaskInstance> list = jbpmContext.getTaskList(autorId);  
  23.         for(int i = 0 ;i<list.size();i++){  
  24.             TaskInstance ti = list.get(i);  
  25.             System.out.println("ID :" + ti.getId());  
  26.             System.out.println("ActorId :" + ti.getActorId());  
  27.             System.out.println("任務(wù)名稱 :" + ti.getName());  
  28.             System.out.println("開始時(shí)間 :" + ti.getCreate());  
  29.             System.out.println("開始時(shí)間 :" + ti.getStart());  
  30.             System.out.println("結(jié)束時(shí)間 :" + ti.getEnd());  
  31.         }  
  32.     }  
  33. }  

我們可以看到該用戶權(quán)限下的任務(wù)列表
ID :1
ActorId :1
任務(wù)名稱 :apply
開始時(shí)間 :2009-06-25 16:59:05.0
開始時(shí)間 :null
結(jié)束時(shí)間 :null
下面我們開始任務(wù)該任務(wù)
我的id已經(jīng)在之前獲取到,這里就直接用了,實(shí)際應(yīng)用中則應(yīng)通過傳參獲取
Java代碼  收藏代碼
  1. package test;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.jbpm.JbpmConfiguration;  
  6. import org.jbpm.JbpmContext;  
  7. import org.jbpm.taskmgmt.exe.TaskInstance;  
  8.   
  9. public class TaskActor1 {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         TaskActor1 ta1 = new TaskActor1();  
  16.         //ta1.showList();  
  17.         ta1.startTask(new Long(1));  
  18.     }  
  19.     public void showList(){  
  20.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  21.         String autorId="1";  
  22.         List<TaskInstance> list = jbpmContext.getTaskList(autorId);  
  23.         for(int i = 0 ;i<list.size();i++){  
  24.             TaskInstance ti = list.get(i);  
  25.             System.out.println("ID :" + ti.getId());  
  26.             System.out.println("ActorId :" + ti.getActorId());  
  27.             System.out.println("任務(wù)名稱 :" + ti.getName());  
  28.             System.out.println("開始時(shí)間 :" + ti.getCreate());  
  29.             System.out.println("開始時(shí)間 :" + ti.getStart());  
  30.             System.out.println("結(jié)束時(shí)間 :" + ti.getEnd());  
  31.         }  
  32.         jbpmContext.close();  
  33.     }  
  34.     public void startTask(Long i){  
  35.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  36.         TaskInstance ti = jbpmContext.loadTaskInstance(i);  
  37.         //如果該任務(wù)沒有啟動(dòng)就將他啟動(dòng)  
  38.         if(ti.getStart() == null)  
  39.             ti.start();  
  40.         jbpmContext.close();  
  41.         showList();  
  42.     }  
  43. }  

ID :1
ActorId :1
任務(wù)名稱 :apply
開始時(shí)間 :2009-06-25 16:59:05.0
開始時(shí)間 :2009-06-25 19:25:52.0
結(jié)束時(shí)間 :null
此時(shí)已經(jīng)開始
下面我們進(jìn)行任務(wù)的完成
Java代碼  收藏代碼
  1. package test;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.jbpm.JbpmConfiguration;  
  6. import org.jbpm.JbpmContext;  
  7. import org.jbpm.taskmgmt.exe.TaskInstance;  
  8.   
  9. public class TaskActor1 {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         TaskActor1 ta1 = new TaskActor1();  
  16.         //ta1.showList();  
  17.         //ta1.startTask(new Long(1));  
  18.         ta1.endTask(new Long(1));  
  19.     }  
  20.     public void showList(){  
  21.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  22.         String autorId="1";  
  23.         List<TaskInstance> list = jbpmContext.getTaskList(autorId);  
  24.         for(int i = 0 ;i<list.size();i++){  
  25.             TaskInstance ti = list.get(i);  
  26.             System.out.println("ID :" + ti.getId());  
  27.             System.out.println("ActorId :" + ti.getActorId());  
  28.             System.out.println("任務(wù)名稱 :" + ti.getName());  
  29.             System.out.println("開始時(shí)間 :" + ti.getCreate());  
  30.             System.out.println("開始時(shí)間 :" + ti.getStart());  
  31.             System.out.println("結(jié)束時(shí)間 :" + ti.getEnd());  
  32.         }  
  33.         jbpmContext.close();  
  34.     }  
  35.     public void startTask(Long i){  
  36.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  37.         TaskInstance ti = jbpmContext.loadTaskInstance(i);  
  38.         //如果該任務(wù)沒有啟動(dòng)就將他啟動(dòng)  
  39.         if(ti.getStart() == null)  
  40.             ti.start();  
  41.         jbpmContext.close();  
  42.         showList();  
  43.     }  
  44.     public void endTask(Long i){  
  45.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  46.         TaskInstance ti = jbpmContext.loadTaskInstance(i);  
  47.         //如果該任務(wù)沒有完成啟動(dòng)就將他完成  
  48.         if(ti.getEnd() == null)  
  49.             ti.end();  
  50.         jbpmContext.close();  
  51.         showList();  
  52.     }  
  53. }  

完成之后在任務(wù)列表中已經(jīng)沒有任務(wù)了。
下面我們看一下數(shù)據(jù)庫,第一個(gè)任務(wù)已經(jīng)完成,第二個(gè)任務(wù)已經(jīng)創(chuàng)建



接下來我們對(duì)ActorId=2的任務(wù)進(jìn)行執(zhí)行,等同上面的,這里不進(jìn)行重復(fù)
Java代碼  收藏代碼
  1. package test;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.jbpm.JbpmConfiguration;  
  6. import org.jbpm.JbpmContext;  
  7. import org.jbpm.taskmgmt.exe.TaskInstance;  
  8.   
  9. public class TaskActor2 {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         TaskActor2 ta2 = new TaskActor2();  
  16.         ta2.showList();  
  17.         ta2.startTask(new Long(2));  
  18.         ta2.endTask(new Long(2));  
  19.     }  
  20.     public void showList(){  
  21.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  22.         String autorId="2";  
  23.         List<TaskInstance> list = jbpmContext.getTaskList(autorId);  
  24.         for(int i = 0 ;i<list.size();i++){  
  25.             TaskInstance ti = list.get(i);  
  26.             System.out.println("ID :" + ti.getId());  
  27.             System.out.println("ActorId :" + ti.getActorId());  
  28.             System.out.println("任務(wù)名稱 :" + ti.getName());  
  29.             System.out.println("開始時(shí)間 :" + ti.getCreate());  
  30.             System.out.println("開始時(shí)間 :" + ti.getStart());  
  31.             System.out.println("結(jié)束時(shí)間 :" + ti.getEnd());  
  32.         }  
  33.         jbpmContext.close();  
  34.     }  
  35.     public void startTask(Long i){  
  36.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  37.         TaskInstance ti = jbpmContext.loadTaskInstance(i);  
  38.         //如果該任務(wù)沒有啟動(dòng)就將他啟動(dòng)  
  39.         if(ti.getStart() == null)  
  40.             ti.start();  
  41.         jbpmContext.close();  
  42.         showList();  
  43.     }  
  44.     public void endTask(Long i){  
  45.         JbpmContext jbpmContext = JbpmConfiguration.getInstance().createJbpmContext();  
  46.         TaskInstance ti = jbpmContext.loadTaskInstance(i);  
  47.         //如果該任務(wù)沒有完成啟動(dòng)就將他完成  
  48.         if(ti.getEnd() == null)  
  49.             ti.end();  
  50.         jbpmContext.close();  
  51.         showList();  
  52.     }  
  53. }  

當(dāng)?shù)诙€(gè)任務(wù)執(zhí)行完成之后,你會(huì)看到任務(wù)已經(jīng)整個(gè)流程已經(jīng)完成,db中流程的end字段已經(jīng)賦值





之所以這樣分步來說,就是希望可以深入了解jbpm的執(zhí)行流程
在實(shí)際的項(xiàng)目中往往開始和結(jié)束都是同時(shí)進(jìn)行的
比如已經(jīng)請(qǐng)假(star--填單--審批--end):往往是請(qǐng)假表單的填寫的提交的瞬間(創(chuàng)建實(shí)例,填寫請(qǐng)假單),審批的成功與否也是瞬間而且同時(shí)結(jié)束流程
即只有兩步操作。 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多