阿文Blog

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 5 Stories :: 0 Comments :: 0 Trackbacks

Document类:

1public class Document {
2    private int id;
3    private String title;
4    private String content;
5    private String creator;
6    private Long processIntanceId;
7        get/set
8}

Hibernate map文件:

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 3
 4<hibernate-mapping>
 5    <class table="T_Document" name="com.bjsxt.jbpm.Document">
 6        <id name="id">
 7            <generator class="native" />
 8        </id>
 9        <property name="title" />
10        <property name="content" />
11        <property name="creator" />
12        <property name="processIntanceId" />
13    </class>
14</hibernate-mapping>


流程文件process.xml

 1<?xml version="1.0" encoding="UTF-8"?>
 2<process-definition name="文档测试流程">
 3   <start-state name="开始">
 4      <transition name="提交张三审批" to="张三审批"></transition>
 5   </start-state>
 6   <task-node name="张三审批">
 7      <task name="审批1">
 8          <assignment actor-id="张三"/>
 9      </task>
10      <transition name="提交李四审批" to="李四审批"></transition>
11   </task-node>
12   <task-node name="李四审批">
13      <task name="审批2">
14          <assignment actor-id="李四"/>
15      </task>
16      <transition name="提交王五审批" to="王五审批"></transition>
17   </task-node>
18   <task-node name="王五审批">
19      <task name="审批3">
20          <assignment actor-id="王五"/>
21      </task>
22      <transition name="结束流程" to="结束"></transition>
23   </task-node>
24   <end-state name="结束"></end-state>
25</process-definition>


 

1public class Jbpm_01_CreateTable extends TestCase {
2    
3    //创建表格
4    public void testCreateTable(){
5        JbpmConfiguration.getInstance().createSchema();
6    }

7}

 1public class Jbpm_02_DeployProcessDefinition extends TestCase {
 2    static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); 
 3    public void testDeployProcessDefinition(){
 4        ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("process.xml");
 5        //context对象类似于hibernate session对象的功能
 6        JbpmContext context = jbpmConfiguration.createJbpmContext();
 7        try{
 8            context.deployProcessDefinition(processDefinition);
 9        }
finally{
10            //context对象需要关闭
11            context.close();
12        }

13    }

14}

 1public class Jbpm_03_CreateDocument extends TestCase {
 2    public void testCreateDocument(){
 3        Session session = HibernateUtils.getSession();
 4        try{
 5            session.beginTransaction();
 6            Document doc = new Document();
 7            doc.setTitle("测试公文");
 8            doc.setContent("测试公文的内容");
 9            doc.setCreator("赵一");
10            session.save(doc);
11            session.getTransaction().commit();
12        }
catch(Exception e){
13            session.getTransaction().rollback();
14        }
finally{
15            HibernateUtils.closeSession(session);
16        }

17    }

18}

 1//创建流程实例,并将流程实例与公文互相绑定
 2public class Jbpm_04_CreateProcessInstance extends TestCase {
 3    static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); 
 4    public void testCreateProcessInstance(){
 5        JbpmContext context = jbpmConfiguration.createJbpmContext();
 6        context.setSessionFactory(HibernateUtils.getSessionFactory());
 7        //从数据库中加载ProcessDefinition对象
 8        ProcessDefinition definition = context.getGraphSession().findLatestProcessDefinition("文档测试流程");
 9        //从流程中创建一个流程实例
10        ProcessInstance processInstance = new ProcessInstance(definition);
11        //存储流程实例
12        context.save(processInstance);
13        //加载公文
14        Document doc = (Document)context.getSession().load(Document.class1);
15        //绑定流程实例到公文
16        doc.setProcessIntanceId(processInstance.getId());
17        //绑定公文到流程实例(ContextInstance相当于一个变量的容器)
18        processInstance.getContextInstance().createVariable("document", doc.getId());
19        context.close();
20    }

21}

 1public class Jbpm_05_SubmitDocument extends TestCase{
 2    static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); 
 3    public void testSubmitDocument(){
 4        JbpmContext context = jbpmConfiguration.createJbpmContext();
 5        context.setSessionFactory(HibernateUtils.getSessionFactory());
 6        Document doc = (Document)context.getSession().load(Document.class1);
 7        ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());
 8        //触发流程实例走向下一步
 9        processInstance.getRootToken().signal();
10        context.close();
11    }

12}

 1//查看文档的当前位置
 2public class Jbpm_06_CurrentNode extends TestCase{
 3static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); 
 4    public void testCurrentNode(){
 5        JbpmContext context = jbpmConfiguration.createJbpmContext();
 6        context.setSessionFactory(HibernateUtils.getSessionFactory());
 7        Document doc = (Document)context.getSession().load(Document.class1);
 8        ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());
 9        //当前节点?
10        System.err.println(processInstance.getRootToken().getNode().getName());
11        context.close();
12    }

13}

 1public class Jbpm_07_SearchMyTaskList extends TestCase {
 2static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); 
 3    public void testSearchMyTaskList(){
 4        JbpmContext context = jbpmConfiguration.createJbpmContext();
 5        context.setSessionFactory(HibernateUtils.getSessionFactory());
 6        List tasks = context.getTaskMgmtSession().findTaskInstances("张三");
 7        System.err.println("张三的文档有:");
 8        for (Iterator iter = tasks.iterator(); iter.hasNext();) {
 9            TaskInstance taskInstance = (TaskInstance) iter.next();
10            Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
11            System.err.println(docId);
12        }

13        
14        List tasks1 = context.getTaskMgmtSession().findTaskInstances("李四");
15        System.err.println("李四的文档有:");
16        for (Iterator iter = tasks1.iterator(); iter.hasNext();) {
17            TaskInstance taskInstance = (TaskInstance) iter.next();
18            Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
19            System.err.println(docId);
20        }

21        
22        List tasks2 = context.getTaskMgmtSession().findTaskInstances("王五");
23        System.err.println("王五的文档有:");
24        for (Iterator iter = tasks2.iterator(); iter.hasNext();) {
25            TaskInstance taskInstance = (TaskInstance) iter.next();
26            Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
27            System.err.println(docId);
28        }

29        context.close();
30    }

31}

 1public class Jbpm_08_NextNode extends TestCase {
 2    static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); 
 3    //张三审批
 4    public void testFlowNextNode(){
 5        JbpmContext context = jbpmConfiguration.createJbpmContext();
 6        context.setSessionFactory(HibernateUtils.getSessionFactory());
 7
 8        List tasks = context.getTaskMgmtSession().findTaskInstances("张三");
 9        System.err.println("张三的文档有:");
10        for (Iterator iter = tasks.iterator(); iter.hasNext();) {
11            TaskInstance taskInstance = (TaskInstance) iter.next();
12            Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
13            System.err.println(docId);
14        }

15        //依次对张三的公文进行提交
16        for (Iterator iter = tasks.iterator(); iter.hasNext();) {
17            TaskInstance taskInstance = (TaskInstance) iter.next();
18            
19            //张三已经审批结束,继续提交,这将触发流程继续向下流动!
20            taskInstance.end();
21            
22            Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
23            System.err.println(docId+"已被审批完成");
24        }

25        
26        context.close();
27    }

28    
29    //李四审批
30    public void testFlowNextNode2(){
31        
32        JbpmContext context = jbpmConfiguration.createJbpmContext();
33        context.setSessionFactory(HibernateUtils.getSessionFactory());
34
35        List tasks = context.getTaskMgmtSession().findTaskInstances("李四");
36        System.err.println("李四的文档有:");
37        for (Iterator iter = tasks.iterator(); iter.hasNext();) {
38            TaskInstance taskInstance = (TaskInstance) iter.next();
39            Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
40            System.err.println(docId);
41        }

42        
43        //依次对李四的公文进行提交
44        for (Iterator iter = tasks.iterator(); iter.hasNext();) {
45            TaskInstance taskInstance = (TaskInstance) iter.next();
46            
47            //李四已经审批结束,继续提交,这将触发流程继续向下流动!
48            taskInstance.end();
49            
50            Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
51            System.err.println(docId+"已被审批完成");
52        }

53        
54        context.close();
55    }

56    
57    //王五审批
58    public void testFlowNextNode3(){
59        
60        JbpmContext context = jbpmConfiguration.createJbpmContext();
61        context.setSessionFactory(HibernateUtils.getSessionFactory());
62
63        List tasks = context.getTaskMgmtSession().findTaskInstances("王五");
64        System.err.println("王五的文档有:");
65        for (Iterator iter = tasks.iterator(); iter.hasNext();) {
66            TaskInstance taskInstance = (TaskInstance) iter.next();
67            Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
68            System.err.println(docId);
69        }

70        
71        //依次对王五的公文进行提交
72        for (Iterator iter = tasks.iterator(); iter.hasNext();) {
73            TaskInstance taskInstance = (TaskInstance) iter.next();
74            
75            //王五已经审批结束,继续提交,这将触发流程继续向下流动!
76            taskInstance.end();
77            
78            Integer docId = (Integer)taskInstance.getProcessInstance().getContextInstance().getVariable("document");
79            System.err.println(docId+"已被审批完成");
80        }

81        
82        context.close();
83    }

84}

 1public class Jbpm_09_ProcessInstanceIsEnded extends TestCase {
 2static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); 
 3    
 4    //测试某个流程实例是否已经结束
 5    public void testHasEnded(){
 6        
 7        JbpmContext context = jbpmConfiguration.createJbpmContext();
 8        context.setSessionFactory(HibernateUtils.getSessionFactory());
 9        
10        Document doc = (Document)context.getSession().load(Document.class1);
11        
12        ProcessInstance processInstance = context.getProcessInstance(doc.getProcessIntanceId());
13        
14        System.err.println("流程已结束? - "+processInstance.hasEnded());
15        
16        context.close();
17    }

18}
posted on 2008-10-14 12:42 阿文 阅读(329) 评论(0)  编辑  收藏 所属分类: 工作流JBPM