zoukankan      html  css  js  c++  java
  • jBPM4.4之开发环境搭建

      虽然基于jBPM4延续的Activiti5已经推出很长时间了,但是jBPM4在项目中还是有很广泛的使用。  

    1、使用的相关开发工具软件。

      1)Eclipse IDE for Java EE Developers(Eclipse 4.2)

      2)jBPM4.4

      3)MySQL5.5

    2、配置在Eclipse中设计流程的gpd插件。

      1)gpd插件所在目录:jbpm-4.4\install\src\gpd\jbpm-gpd-site.zip

      2)安装插件:Eclipse菜单 Help-->Install New Softwore...打开Install窗口;在Install窗口点击 Add...打开Add Repository窗口;在Add Repository窗口点击Archive...在插件所在目录选择jbpm-gpd-site.zip

      3)安装完成会提示是否重启Eclipse,选择重启。

    3、配置jBPM的Runtime Locations。

      1)Eclipse菜单 Window-->Preferences-->JBoss jBPM-->Runtime Locations

      2)在Runtime Locations窗口点击Add...打开Add Location窗口,Name:起个名字,如jBPM4.4;Location:选择jBPM4.4的解压安装目录。

    4、使用单元测试实现First jBPM4。

      1)新建一个Java Project,取名FirstJBPM4。

      2)把jbpm-4.4\jbpm.jar和jbpm-4.4\lib下的所有jar文件添加到项目的classpath路径下。(或者把jBPM4.4的所有jar配置成一个User Library,然后在项目中直接引用)

      3)把jbpm-4.4\examples\src目录下的jbpm.cfg.xml、jbpm.hibernate.cfg.xml和logging.properties加入到项目的src目录下。

      4)FirstJBPM4项目结构如下。

                                             

      5)修改jbpm.hibernate.cfg.xml文件,配置数据库相关信息。

    <?xml version="1.0" encoding="utf-8"?>
    
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
      <session-factory>
      
        <!-- 数据库信息 -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm4</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">root</property>
    
            <!-- 其他配置 -->
            <property name="hibernate.show_sql">false</property>
            <property name="hibernate.hbm2ddl.auto">update</property>
    
            <!-- 映射文件 -->
            <mapping resource="jbpm.repository.hbm.xml" />
            <mapping resource="jbpm.execution.hbm.xml" />
            <mapping resource="jbpm.history.hbm.xml" />
            <mapping resource="jbpm.task.hbm.xml" />
            <mapping resource="jbpm.identity.hbm.xml" />
         
      </session-factory>
    </hibernate-configuration>

      6)在MySQL中建立一个数据库叫jbpm4。

    create database jbpm4 default character set utf8;

      7)在项目名称上点击右键New-->Source Folder,取名process。process和src是同级的,在process下存放流程定义文件。

      8)设计请假流程定义文件。在process下建立一个Package叫leave,然后leave上点击右键New-->jBPM Process Definition,取名Leave。

                                                  

      9)画流程图,用assignee分配相应的任务处理人员

                                                      

      Leave.jpdl.xml文件如下

    <?xml version="1.0" encoding="UTF-8"?>
    
    <process name="Leave" xmlns="http://jbpm.org/4.4/jpdl">
       <start name="start1" g="303,8,48,48">
          <transition name="to 提出申请" to="提出申请" g="-67,-20"/>
       </start>
       <end name="end1" g="303,340,48,48"/>
       <task name="提出申请" g="281,88,92,52" assignee="[员工]小李">
          <transition name="to 部门经理审批" to="部门经理审批" g="-91,-20"/>
       </task>
       <task name="部门经理审批" g="281,172,92,52" assignee="[部门经理]李总">
          <transition name="to 总经理审批" to="总经理审批" g="-79,-20"/>
       </task>
       <task name="总经理审批" g="281,256,92,52" assignee="[总经理]张总">
          <transition name="to end1" to="end1" g="-45,-20"/>
       </task>
    </process>

      整个流程就是:[员工]小李提出申请--》[部门经理]李总审批--》[总经理]张总审批

      10)单元测试代码。

    package cn.luxh.jbpm4;
    
    import java.util.List;
    
    import org.jbpm.api.Configuration;
    import org.jbpm.api.ProcessEngine;
    import org.jbpm.api.ProcessInstance;
    import org.jbpm.api.task.Task;
    import org.junit.Test;
    
    
    
    public class JBPM4Test {
        
           //建立jBPM4.4的数据库表
            @Test
            public void testCreateSchema() {
                new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();
            }
            
            //流程引擎,通过流程引擎获取各种服务接口
            private ProcessEngine processEngine = Configuration.getProcessEngine();
            
            
            //部署流程定义
            @Test
            public void testDeployProcessDefinition() {
                processEngine.getRepositoryService()
                                    .createDeployment()
                                    .addResourceFromClasspath("leave/Leave.jpdl.xml")
                                    .addResourceFromClasspath("leave/Leave.png").deploy();
            }
            
            //启动流程实例
            @Test
            public void testStartProcessInstance() {
                ProcessInstance processInstance = processEngine.getExecutionService().startProcessInstanceByKey("Leave");
                System.out.println("processInstance id is:"+processInstance.getId());
                System.out.println("processInstance key is:"+processInstance.getKey());
                System.out.println("processInstance name is:"+processInstance.getName());
            }
            
            //查找用户待办任务
            @Test
            public void testFindTasksByUserId() {
                String userId = "[员工]小李";
                //String userId = "[部门经理]李总";
                //String userId = "[总经理]张总";
                List<Task> tasks = processEngine.getTaskService().findPersonalTasks(userId);
                for(Task task : tasks) {
                    System.out.println("当前处理人:"+task.getAssignee()+" 当前任务:"+task.getName());
                }
            }
            
            //处理待办
            @Test
            public void testCompleteTask() {
                String userId = "[员工]小李";
                //String userId = "[部门经理]李总";
                //String userId = "[总经理]张总";
                List<Task> tasks = processEngine.getTaskService().findPersonalTasks(userId);
                for(Task task : tasks) {
                    processEngine.getTaskService().completeTask(task.getId());
                }
            }
            
    }

      

       

      

      

  • 相关阅读:
    排序去重
    $(...)[0].attr is not a function问题
    daterangepicker的汉化和简单使用
    wx.openSetting的调整
    css3中-moz、-ms、-webkit与盒子模型
    动态翻滚的导航条
    CSS3 transition 浏览器兼容性
    jq实现两个input输入同时不为空时,改变确认框背景颜色
    js 监听input 实现数据绑定
    关于html 修改滚动条的问题
  • 原文地址:https://www.cnblogs.com/luxh/p/2606782.html
Copyright © 2011-2022 走看看