jBPM
Deniro Lee
这个作者很懒,什么都没留下…
展开
-
说说在 jBPM 中,如何利用流程变量设置候选人、候选组或办理人
1 定义首先要在流程定义文件中,设置好候选人、候选组或办理人变量表达式。参数名说明candidate-users候选人,多个以逗号分隔。一般设置为账号 ID。candidate-groups候选组,多个以逗号分隔。一般设置为部门 ID 或角色 ID。assignee办理人,一般设置为账号 ID。在 *.jpdl.xml 中,形如:... <...原创 2020-05-01 06:52:22 · 442 阅读 · 0 评论 -
说说在 jBPM 中,如何获取某个流程节点的 Task 对象
可以利用 taskService 的 createTaskQuery() 方法,来获取某个流程节点的 Task 对象。/** * 查找任务 * * @param executionId Execution 实例 ID * @param activityName 活动名称 * @return 任务 */public Task findTask(String executionId,...原创 2020-05-01 06:50:18 · 749 阅读 · 0 评论 -
说说如何在项目中引入 jBPM4 工作流框架以及遇到的坑儿
由于各种原因,我们需要在项目中引入 jBPM4 工作流框架,遇到了不少问题,今记录如下O(∩_∩)O1 引入步骤1.1 加入依赖包非 Maven 项目,在 lib 包中加入 jbpm.jar。Maven 项目,加入以下配置:<dependency> <groupId>org.jbpm</groupId> <...原创 2018-08-15 11:47:09 · 2262 阅读 · 1 评论 -
说说在 jBPM 工作流中如何实现【委派】功能
委派,又称为代理,是一种很常见的任务再分配模式。委派的业务场景是这样的:任务已经分配给小李,但由于某种原因现在不方便办理,这时就需要委派给小王,代为办理。实现委派功能两种思路:不创建新的任务,而是直接修改原始任务的分配人(assignee 属性)。这样做会彻底断绝任务与原始分配人之间的关联关系,所以我们需要调用 TaskService 的 addTaskParticipatingUs...原创 2018-06-16 15:38:49 · 719 阅读 · 2 评论 -
说说在 jBPM 工作流中如何实现【会签】功能
会签(会审),指的是在流程中某个业务需要经过多人表决,并且根据表决意见的汇总结果以及设定的规则,来决定流程的走向,它是审批流程中常见的需求。会签可以分为两种:单步 - 只使用一个活动来处理。多步 - 由多个活动所组成的。单步会签比较常见,也容易实现,主要的解决方案是在会签活动的主任务基础上,动态创建若干个子任务来实现,它的具体解决方案是:编写专门用于会签活动的任务分配处理器...原创 2018-06-09 16:50:57 · 1717 阅读 · 0 评论 -
说说在 jBPM 工作流中如何实现【撤销】功能
撤销(Withdraw):针对当前用户已办理的任务(历史任务),重置回待办状态。撤销一般发生在以下场景中:当用户办理完任务后,发现办理的任务存在业务错误或者觉得下一节点办理人需要重新选择,那么这时就需要撤销任务啦 O(∩_∩)O哈哈~注意:如果下一节点办理人已完成任务或者流程可能已经流转了若干节点(甚至走了分支),那么这时执行【撤销】操作,就需要对业务进行很大的补偿。是否必要这么做,需要权...原创 2018-05-29 19:07:10 · 1016 阅读 · 0 评论 -
说说在 jBPM 工作流中如何实现【回退】功能
回退,指的是用户主动回退到当前任务的上一流程节点(上一步骤)。想象这样一种场景,当前用户接收任务后,发现这个任务不该由他办理或者这个任务存在严重的业务问题,这时就需要回退给上一步的办理者重新办理。解决方案如下:识别 “需要具有回退能力” 的任务。为上述任务设计处理回退逻辑的监听器。回退监听器接收一个参数,用于指定回退目的地的活动 ID。之所以这样设计是因为,回退的出发地与目的地可...原创 2018-05-23 18:26:25 · 826 阅读 · 1 评论 -
说说 jBPM 工作流的定时器
jBPM 定时器(Timer)实现了以下功能:timer 定义在 transition 元素中,当流程处于 state、task、sub-process 类型活动的等待状态时,会开始计算 timer 的时间,当时间耗尽时,就会触发转移。timer 也可以定义在用户代码活动中,负责事件监听的 on 元素支持 timeout 事件。当事件监听器 on 在监听 timeout 事件时,timer...原创 2018-05-16 17:22:47 · 810 阅读 · 0 评论 -
说说如何定制 jBPM
在官方发布的 jbpm.jar 的根路径中包含了一些默认提供的配置文件 。 我们可以选择包含或排除某些功能,通过在 jbpm.cfg.xml 配置文件中导入需要的配置文件。 配置文件 说明 jbpm.default.cfg.xml 主配置。 jbpm.identity.cfg.xml 身份认证。 jbpm.jbossremote.cfg.xml ...原创 2018-05-05 17:14:50 · 356 阅读 · 0 评论 -
说说如何扩展 jBPM 实现“变态”需求
如果需求很“变态”,那我们可以试着扩展 jBPM,它很容易被扩展,比如事件监听器、自定义活动和 Java 代码活动等等。假设我们这里需要定制任务的查询,基于多个属性来作为查询条件。目前的任务服务(TaskService)要实现这个功能比较麻烦,我们可以扩展 jBPM4 的命令服务,来实现自定义查询任务的命令:public class CustomTaskQueryCommand i...原创 2018-05-04 17:37:09 · 700 阅读 · 0 评论 -
说说 jBPM 的表设计结构
jBPM4 的数据持久化基于 Hibernate 框架。1 流程定义与实例运行时数据表这些表用于保存所有与流程定义相关的资源以及运行中的流程实例数据: 表名 涉及的类 说明 jbpm4_deployment org.jbpm.pvm.internal.repository.DeploymentImpl 流程定义的部署信息。 jbpm4_...原创 2018-05-04 16:41:35 · 535 阅读 · 0 评论 -
说说 jBPM 工作流引擎的设计原理
1服务 API 设计jBPM4 工作流引擎的核心 PVM 主要依靠 4 组服务 API :流程定义服务 - Process Service。流程执行服务- Execution Service。流程管理服务 - Managerment Service。指令服务 - Command Service。应用通过这些服务与 PVM 进行数据交互,这些都是在支持事务的持久化模式下运...原创 2018-04-30 20:56:44 · 6723 阅读 · 0 评论 -
说说 jBPM 流程虚拟机的原理
jBPM4 PVM ( Process Virtual Machine ,流程虚拟机)的设计初衷是通过实现接口和定制插件等方式兼容多种流程定义语言和流程活动场景,为 “ 世界上 ” 所有的业务流程定义提供一套通用 API 平台 。 那么,无论是需要对 jBPM 原有流程定义语言进行扩展,或者重新实现一套专用的流程定义语言,都可以通过实现 PVM 指定的接口规范完成咯。 PVM 是...原创 2018-04-28 17:41:20 · 787 阅读 · 0 评论 -
说说 jBPM 流程定义语言(13)—— 可扩展接口(User Code)
我们可以根据实际的业务逻辑去实现这些可扩展的接口,然后在 jPDL 中引用这些实现。目前支持这些扩展点:custom:自定义活动(实现 ExternalActivityBehavior 接口)event-listener:事件监听器(实现 EventListener 接口)task 中的 assignment-handler:自定义任务分配处理器,实现 AssignmentHandl...原创 2018-04-12 18:15:54 · 481 阅读 · 1 评论 -
说说 jBPM 流程定义语言(12)—— 异步执行
jBPM 对于所有的流程执行操作默认都是同步的。所以我们调用 ExecutionService.startProcessInstanceById 或 ExecutionService.singalProcessInstanceById 之类的方法时,会让流程实例一直处于执行状态,直到流程实例到达一个 “等待” 状态后才会被中断。同步执行之所以是默认的,是因为它有这些优点: * 用户业务系统的...原创 2018-03-17 21:18:11 · 568 阅读 · 0 评论 -
说说 jBPM 流程定义语言(11)—— 事件
事件(event)用来流程执行的过程中特定的“点”,例如“流程实例开始”、“状态活动结束”等,可以在这些“点”中注册相应的监听器(listener)。当流程实例执行到这些被监听的点时,就会执行监听器中代码逻辑。事件与监听器没有显示在流程定义的图中,因为它们更注重内部逻辑。通过实现 EventListener 接口,来编写一个事件监听器:public interface EventL...原创 2018-03-17 20:18:47 · 427 阅读 · 0 评论 -
说说 jBPM 流程定义语言(10)—— 自动活动
jBPM4 能够很好地支持多种自动活动,所谓自动活动指的是在执行过程中完全无须人工干预。 jBPM4 默认支持的自动活动类型有: * java - Java 程序活动 * script - 脚本活动 * hql - Hibernate 查询语言活动 * SQL - SQL 查询语言活动 * mail - 邮件活动1 Java 程序活动...原创 2018-03-11 15:49:04 · 478 阅读 · 0 评论 -
说说 jBPM 流程定义语言(9)—— 自定义活动
其实,在流程的执行过程中,我们只要拿到流程实例及其上下文对象,再通过某种机制获得流程定义的输入数据并发布输出数据,就可以实现自定义的活动啦O(∩_∩)O哈哈~我们可以通过 custom 活动完全自定义一套活动行为,调用自己的代码,实现定制的活动逻辑 。 jPDL:<?xml version="1.0" encoding="UTF-8"?><process ...原创 2018-03-07 11:52:18 · 418 阅读 · 0 评论 -
说说 jBPM 流程定义语言(8)—— sub-process(子流程活动)
当我们的流程复杂到一定程度时,就需要按照一定规则把业务拆分成若干子流程,这样业务模块之间才能明晰易于划分。 jBPM4 提供了 sub-process – 子流程活动,这可以在 “ 主干流程 ” 定义中调用其他的流程定义,从而 “ 组装 ” 我们的流程定义 。在运行到子流程活动时,工作流引擎将创建一个子流程实例,然后等待直到完成,当子流程实例完成后,流程就会流向下一个节点。 sub-pr...原创 2018-03-06 11:12:19 · 1934 阅读 · 0 评论 -
说说 jBPM 流程定义语言(7)—— task(人工任务活动)
task 活动用来处理涉及人机交互的活动。它的功能在 jBPM 乃至整个工作流的应用中都具有极其重要的意义,因为处理人工任务、电子表单是工作流应用中最繁琐与细致的工作。1 任务的分配者利用 task 活动的 assignee 属性(分配者属性)可以把一个任务分配给指定的用户。 属性 类型 默认值 是否必需 描述 assignee 表达式 无...原创 2018-02-12 16:32:23 · 839 阅读 · 0 评论 -
说说 jBPM 流程定义语言(6)—— end (结束活动)
end 活动用于终结流程。一般情况下,当流程实例运行到 end 活动后就会结束。但是在到达 end 活动的流程实例中仍然活跃的流程活动(fork - join 并发流转)可以继续执行。这是一个最简单的包含 end 活动的流程定义: jPDL:<?xml version="1.0" encoding="UTF-8"?><process name="EndP...原创 2018-02-09 10:15:27 · 783 阅读 · 0 评论 -
说说 jBPM 流程定义语言(5)—— fork - join (分支、聚合活动)
当我们需要流程并发(concurrency)执行时,就需要使用到 fork-join 活动组合,fork活动可以使流程在一条主干上出现并行的分支,join 活动则可以使流程的并行分支聚合成一条主干。 Fork 活动具有1个 name 属性和 n 个流出转移元素。 join 活动的独特属性: 属性 类型 默认值 是否必需 描述 multiplicity原创 2018-02-07 10:52:03 · 789 阅读 · 0 评论 -
说说 jBPM 流程定义语言(4)—— decision 活动 (判断活动)
根据条件在多个流转路径中选择其中一条路径通过,也就是做一个决定性的判断,这时候就可以使用 decision 活动。 decision 活动可以拥有多个流出转移,当流程实例到达 decision 活动时,会根据最先匹配成功的一个条件自动地通过相应的路径。在 decision 活动中可以使用以下三种方法来判断需要流向哪一个流出路径。1 使用 decision 活动的 condition原创 2018-02-07 10:06:25 · 595 阅读 · 0 评论 -
jBPM4 中文乱码问题的解决方法
使用中文字符定义的流程,执行时会碰到找不到活动或者转移路径的问题。1 分析因为这些中文命名的活动或者转移路径参数,传递到 jBPM 包中会变为 ???。所以自然就找不到这些活动或者转移路径啦。2 解决2.1 统一代码的编码方式有的 IDE,默认会以 GBK 作为项目的编码方式,而这在 jBPM 库中无法正确解析。方法是把整个项目改为 UTF-8 的编码方式。原创 2018-02-02 18:08:37 · 447 阅读 · 0 评论 -
说说 jBPM 流程定义语言(3)—— state 活动 (状态活动)
当需要使业务流程受到某些特定的外部干预处理后再继续进行,而在外部干预之前,流程会处于一个中断等待的状态,这时就使用到 state 活动。当流程运行到 state 活动时,就会自动陷入等待状态(waitting state),也就是说流程引擎在收到外部触发信号之前,会让流程实例在这个 state 活动持续等待。state 活动除了最基本的 name 属性和 transition 等元素之外,没有原创 2018-02-02 10:54:16 · 419 阅读 · 0 评论 -
说说 jBPM 流程定义语言(2)—— start 活动 (启动活动)
1 基本活动后面我们将介绍流程定义中最基本、最常用的活动。使用这些活动,就可以定义出一条完整的业务流程,实现各种基本的业务流程流转控制场景。jBPM 定义了以下这些基本活动: * start - 开始活动 * state - 状态活动 * decision - 判断活动 * fork、join - 分支/聚合活动 * task - 人工任务活动 * sub-process -原创 2018-01-25 15:53:04 · 457 阅读 · 0 评论 -
说说 jBPM 流程定义语言(1)—— process
1 概述jPDL(jBPM Process Define Language,jBPM 流程定义语言)是 jBPM4 独有的、最重要的资产。它的设计目标是尽量精简和尽可能地对开发者友好,即可以很简洁地描述业务流程的定义和图形结构,最终使得业务分析人员和流程开发者能够使用 “同一种语言说话”,极大地减少了他们之间的交流障碍。而且 jPDL 还具有明晰的语义和良好的可扩展性。一个典型的 jPDL原创 2018-01-25 15:12:54 · 621 阅读 · 0 评论 -
说说如何使用 jBPM4 的 Service API 来控制流程
1 什么是流程定义、流程实例与流程执行?流程定义是对业务过程步骤的描述。在 jbpm4 中,它表现为若干 “活动” 节点通过 “转移” 路径串联起来。比如下面定义的这个信贷流程:流程实例表示的是流程定义在运行时特有的执行例程。比如,上周你提出了贷款买房申请,那么这个信贷流程定义就被实例化咯。一个流程实例在其生命周期中最典型的特征就是:具有指向当前执行活动的指针,在 jbpm4 中叫原创 2018-01-18 16:13:59 · 790 阅读 · 0 评论 -
说说在 jBPM 中如何部署流程
当业务流程被设计好之后,会有许多相关的文件散落在工程中,这些文件包括: * 定义流程的 JPDL 文件。 * 根据图形化流程定义同步生成的流程图片文件(PNG 格式)。 * 业务流程中用于人机交互的表单页面文件。 * 事件监听器等用户自定义代码的Java类文件。 * 其他流程资源文件,例如小图标、css样式表、脚本文件、属性文件等。jbpm4 支持将流程定义及其相关资源打包一个 JA原创 2018-01-16 15:39:00 · 1124 阅读 · 0 评论 -
教你使用 jBPM 的图形化设计器来定义流程
在安装好流程设计器(GPD)后, 所有的 jPDL 流程文件都有一个对应的特殊图标, 双击该文件,就会在流程设计器中打开一个 jPDL 流程定义文件。1 创建一个新流程在 Eclipse 中,使用 Ctrl+N 打开新建向导(也可以通过 File -> New -> Other 打开),选择 jBPM 4 Process Definition -> Next。 选择流程原创 2018-01-15 15:55:58 · 4411 阅读 · 0 评论 -
说说如何安装与配置 jBPM4 开发环境
1. 下载现在中央仓库上只有 jBPM5.1 之后的版本咯,所以我们只能到 sourceforge下载 jBPM4(下载地址)。把 jbpm-4.x.zip(不区分操作系统) 下载下来以后,解压到硬盘上的任何一个目录中即可。下面以 ${jbpm.home} 来表示 jbpm 解压后的路径。这个目录中包含这些子目录及文件 —— * doc:包括用户指南、Javadoc 以及开发指原创 2018-01-15 14:49:56 · 1065 阅读 · 0 评论 -
带你进入 jBPM 工作流的世界
1 什么是工作流工作流管理联盟(WFMC)把工作流定义为:全部或部分由计算机支持或自动处理的业务过程。工作流管理系统(Workflow Management System,WFMS)用来支持流程定义、管理和执行一批设定好的工作流程。这套系统的目标是:管理工作流程以确保工作能够在正确的时间内被所期望的人执行。在自动化进行的业务过程中“插入”人工的干预,是工作流系统开发者的主要工作内容。原创 2018-01-12 15:06:07 · 653 阅读 · 0 评论