【工作流】jbpm(三)——开发流程

本文通过一个实战案例介绍JBPM流程引擎的使用方法,包括流程定义、部署、启动流程实例及任务处理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

      在上一篇博客中,小编向大家介绍了jbpm的环境搭建以及一些服务,的确这些服务我们确实经常使用。所以在这篇博客小编就正式带大家走进jbpm,通过一个实战Demo来领略一下。

二、开发步骤

  • 业务分析,画流程图

  • 开发人员,根据活动图建立jpdl流程定义

  • 开发人员,编写代码

  • 用户,发起流程实例

  • 用户,审批流程

三、开发Demo

3.1 流程定义文件和配置文件

这里写图片描述

      在src目录下面建立Jbpm,new –> JBPM4 Process Definition,建立如下的流程图:

这里写图片描述

<?xml version="1.0" encoding="UTF-8"?>

<process name="qingjia" key="test" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="263,53,48,48">
      <transition name="to 申请请假" to="申请请假" g="-46,-20"/>
   </start>
   <end name="end1" g="272,351,48,48"/>
   <task assignee="张三" name="申请请假" g="205,143,92,52">
      <transition name="to 部门经理审批" to="部门经理审批" g="-46,-20"/>
   </task>
   <task assignee="李四" name="部门经理审批" g="333,251,92,52">
      <transition name="to 总经理审批" to="总经理审批" g="-45,-20"/>
   </task>
   <task assignee="王五" name="总经理审批" g="491,308,92,52">
      <transition name="to end1" to="end1" g="-45,-20"/>
   </task>
</process>

      jbpm.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>

<jbpm-configuration>

  <import resource="jbpm.default.cfg.xml" />
  <import resource="jbpm.businesscalendar.cfg.xml" />
  <import resource="jbpm.tx.hibernate.cfg.xml" />
  <import resource="jbpm.jpdl.cfg.xml" />
  <import resource="jbpm.bpmn.cfg.xml" />
  <import resource="jbpm.identity.cfg.xml" />

  <!-- Job executor is excluded for running the example test cases. -->
  <!-- To enable timers and messages in production use, this should be included. -->
  <!--
  <import resource="jbpm.jobexecutor.cfg.xml" />
  -->

</jbpm-configuration>

      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.connection.driver_class">
        com.mysql.jdbc.Driver
    </property>
    <property name="hibernate.connection.url">
        jdbc:mysql://localhost:3306/jbpmnew
    </property>
    <property name="connectio.useUnicode">true</property>
    <property name="connection.characterEncoding">utf-8</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">123456</property>
    <property name="hibernate.dialect">
        org.hibernate.dialect.MySQLDialect
    </property>
    <property name="hibernate.show_sql">true</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>

      logging.properties:

handlers= java.util.logging.ConsoleHandler
redirect.commons.logging = enabled

java.util.logging.ConsoleHandler.level = FINEST
java.util.logging.ConsoleHandler.formatter = org.jbpm.internal.log.LogFormatter

org.jbpm.level=FINE
# org.jbpm.pvm.internal.tx.level=FINE
# org.jbpm.pvm.internal.wire.level=FINE
# org.jbpm.pvm.internal.util.level=FINE

org.hibernate.level=INFO
org.hibernate.cfg.SettingsFactory.level=SEVERE
org.hibernate.cfg.HbmBinder.level=SEVERE
org.hibernate.SQL.level=FINEST
org.hibernate.type.level=FINEST
# org.hibernate.tool.hbm2ddl.SchemaExport.level=FINEST
# org.hibernate.transaction.level=FINEST

建立服务类JbpmService:专门提供服务。

package com.dmsd.jbpm;

import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.IdentityService;
import org.jbpm.api.ManagementService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;

public class JbpmService {
    protected RepositoryService repositoryService; // 部署流程服务

    protected ExecutionService executionService; //流程执行服务

    protected TaskService taskService; //任务服务

    protected HistoryService historyService; //历史服务

    protected ManagementService managementService; //流程管理服务

    protected IdentityService identityService; //身份认证


    protected void setup() {
        ProcessEngine processEngine = Configuration.getProcessEngine();
        this.repositoryService=processEngine.getRepositoryService();
        this.executionService = processEngine.getExecutionService();
        this.taskService =processEngine.getTaskService();
        this.historyService=processEngine.getHistoryService();
        this.managementService =processEngine.getManagementService();
        this.identityService =processEngine.getIdentityService();
    }
}

3.2 部署

/**
     * 部署
     */
    @Override
    @Test
    public void deploy() {
        //获取服务
        super.setup();
        //根据文件路径进行部署
        repositoryService.createDeployment().addResourceFromClasspath("qingjia.jpdl.xml").deploy();
    }

3.3 创建流程实例

/**
     * 创建流程实例
     */
    @Override
    @Test
    public void createInstance() {
        //获取服务
        super.setup();
        Map<String, Object> testMap = new HashMap<String, Object>();
        testMap.put("userId", "001");
        testMap.put("userName", "tom");
        //创建流程实例
        ProcessInstance processInstance =executionService.startProcessInstanceByKey("test",testMap );
        System.out.println("流程实例ID============"+processInstance.getId() );

    }

3.4 查看所在节点

      根据流程实例ID,获取流程实例(唯一值),再得到活动节点名称(当前节点)。

/**
     * 查询流程当前所在节点
     */
    @Override
    public void getCurrectActivity() {
        //获取服务
        super.setup();
        String activityName = executionService.createProcessInstanceQuery().processInstanceId("test.10001").uniqueResult().findActiveActivityNames().toString();
        System.out.println("当前任务所在节点===" + activityName);

    }

3.5 获取任务

/**
     * 获取任务
     */
    @Override
    public void getTask() {
        //获取服务
        super.setup();
        List<Task> tasks = taskService.findPersonalTasks("张三");
        Task task = tasks.get(0);
        System.out.println("任务数量============="+tasks.size());
        System.out.println("任务名称==============="+ task.getActivityName());
        System.out.println("任务人员==============="+task.getAssignee()+"任务id=========="+task.getId());
    }

3.6 完成任务

/**
     * 完成任务
     */
    @Override
    public void completeTask() {
        //获取服务
        super.setup();
        //根据任务id完成任务
        taskService.completeTask("10004");
    }

四、小结

      通过对jbpm的学习,熟悉了整个的流程,发现其中的API真是不少,所以以后还是要多多的练习的, 套路很固定,就看自己如何发挥了。

      下一篇博客将向大家一一解释jbpm中的各个节点。

.1、安装JDK 1.2、安装Ant Ant 是使用 jBPM 必须的一个工具。 jBPM 中的很多操作都要用到 Ant 。 安装方法: ( 1 )先下载: 为了执行ant脚本,你需要1.7.0或更高版本的apache ant: http://ant.apache.org/bindownload.cgi ( 2 )解压到 D:\ant (当然其他目录也可以)。 ( 3 )设置如下系统变量: ANT_HOME=d:\ant 。 ( 4 )把 %ANT_HOME%\bin 加入到系统变量 PATH 中。 安装 jBPM jBPM 的下载地址: http://sourceforge.net/project/showfiles.php?group_id=70542&package_id=268068 2 、建库 MySQL 中创建一个库,库名: jbpmdb 3 、生成建表的 SQL 语句并建表 这个构建文件${jbpm.home}/db/build.xml包含了脚本 用来创建和删除数据库结构的操作。 进入到这个目录下,运行ant -p 可以获得更多细节。 你的数据库中创建表结构: 首先,更新${jbpm.home}/db/jdbc中的数据库配置文件。 然后,在D:\jbpm-4.0\db\build.xml 更改为 mysql 然后在db目录下执行ant create.jbpm.schema 可以看到 MySQL 客户端中执行“ mysql.create.sql ”脚本,这样 将在 jbpmdb 库中创建一个个的数据表。 --------------------------------------------------------------------- 安装 jBPM 4的 Eclipse 开发插件 jBPM 4的 Eclipse 开发插件 只有GPD 流程设计器(GPD) 图形化流程设计器(GPD)使用Eclipse作为其平台, 并把GPD插件安装到eclipse上。 使用Eclipse软件升级(Software Update)机制安装设计器是非常简单的。 在gpd目录下有一个gpd/jbpm-gpd-site.zip文件, 这就是更新站点(archived update site)的 压缩包。 在Eclipse里添加更新站点的方法: 帮助 --> 安装新软件... 点击 添加... 在 添加站点 对话框中,单击 压缩包... 找到 gpd/jbpm-gpd-site.zip 并点击 '打开' 点击 确定 在 添加站点 对话框中,会返回到 '安装'对话框 选择出现的 jPDL 4 GPD 更新站点 点击 下一步.. 然后点击 完成 接受协议 当它询问的时候重启eclipse 5 配置jBPM运行时 点击 Window --> Preferences 选择 JBoss jBPM --> jBPM 4 --> Runtime Locations 点击 Add... 在 Add Location 对话框中,输入一个名字,比如 jbpm-4.0 然后点击 Search... 在 Browse For Folder 对话框中,选择你的jbpm根目录,然后点击 OK 点击 OK 在 Add Location 对话框中 6 定义jBPM用户库 如何在你的工作空间定义一个用户库, 用来放置jBPM的库文件。 如果你创建一个新工程, 只需要将用户库全部添加到build path下 点击窗口 --> 属性(Windows --> Preferences) 选择Java --> 创建路径 --> 用户类库(Java --> Build Path --> User Libraries) 点击新建(New) 类型名字jBPM Libraries 点击添加JARs(Add JARs...) 找到jBPM安装程序下的lib目录 选择lib下的所有jar文件并点击打开(Open) 选择jBPM Libraries作为入口 重新点击添加JARs(Add JARs) 在jBPM的安装程序的根目录下选择jbpm.jar文件 点击打开(Open) 在jbpm.jar下选择源码附件(Source attachment)作为入口 点击编辑(Edit) 在源码附件的配置(Source Attachment Configuration)对话框中,点击目录(External Folder...) 找到jBPM安装程序下的src目录 点击选择(Choose) 点击两次'确定'(Ok)会关闭所有对话框 7  jBPM 的 demo 新建jBPM项目 主菜单“文件->新建->项目”,在弹出的对话框里,有“ java Project ”项 选上好,单击“下一步”,起个名“ myjbpm ”,然后就可以单击“完成”了。然后手动 创建src/test/config copy D:\jbpm-4.0\examples\src 2009-07-07 15:40               546 jbpm.cfg.xml 2009-07-07 15:40             1,085 jbpm.hibernate.cfg.xml ...... .....
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你个佬六

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值