目录

jBPM5 - 快速指南

jBPM5 - Overview

JBPM代表“Java业务流程管理”。 它是一个JBoss产品,是一个开源框架。 在进一步讨论之前,让我们先定义一个业务流程。

什么是业务流程?

根据定义,业务流程是以可重复的顺序发生的一系列任务,由人和/或系统执行以实现业务目标。 它描述了需要执行一系列步骤的顺序(使用流程图)。 业务流程可以显着提高业务逻辑的可见性和敏捷性。

让我们举个例子。 以下屏幕截图描述了大多数IT专业人员可以关联的工作流程/流程图。 这是大多数组织根据其绩效评估员工的一个常见流程。

业务流程

该过程按以下顺序进行 -

  • 员工自我评估并将报告提交给他们的项目经理。

  • 然后由项目经理和人力资源经理评估您的绩效。 根据评估结果,他们会给员工一个评级。

  • 然后将最终评级或绩效反馈转发给员工。

此过程适用于几乎所有员工,因此,它是了解业务流程的一个很好的示例。 它是一系列任务,它按特定顺序发生。

什么是jBPM?

业务流程是理解任何组织框架的关键概念。 像jBPM这样的技术有助于以有效的方式管理复杂的业务流程。 JBPM是一种可以有效协调业务流程的工具。 通常,每个企业级应用程序都有一系列以特定顺序执行的任务,这些过程可以在jBPM的帮助下进行编排。

jBPM的美妙之处在于它类似于流程图。 业务分析师也可以很容易地理解它。 jBPM可以嵌入Java应用程序中并作为服务运行。

JBPM的特点

jBPM是一个用Java编写的轻量级,开源,完全可嵌入的流程引擎。 其最显着的功能如下 -

  • jBPM执行使用BPMN 2.0规范设计的业务流程。

  • jBPM可以与Eclipse和类似的IDE完全集成,以提供拖放支持来创建工作流。

  • jBPM具有UI工具,可以在设计阶段让业务分析师和用户参与进来。

  • jBPM在JPA和JTA的帮助下支持持久性和事务管理。

  • 可以定义自定义工作项处理程序以创建用户定义的任务,该任务稍后可以用作其他工作流的组件。

jBPM5 - Eclipse Plugin

以下是安装jBPM插件的先决条件 -

  • Java 1.5(或更高版本)SE JDK
  • Eclipse 4.2或任何版本和jBPM插件

由于jBPM是用Java编写的,因此我们将介绍如何在本节中添加所需的插件。 考虑到最大的Java用户使用Eclipse,让我们看看如何在Eclipse中添加jBPM插件。

从以下链接下载二进制文件 - http://download.jboss.org/drools/release/5.3.0.Final/

不要在这里看到Drools时感到困惑。 相同的插件用于jBPM。 如果您已经安装了Drools插件,则可以跳过安装步骤。

下载二进制文件

将其解压缩到您的硬盘上。 然后,启动Eclipse并转到帮助→安装新软件。

安装新软件

单击Add Repository -

添加存储库

单击“ Local按钮,然后选择“.../binaries/org.drools.updatesite”(您在计算机上下载的位置)

可用软件

选择Drools and jBPM ,然后单击Next按钮。

安装细节

再次单击“ Next并选择“我接受许可协议的条款”,然后单击“ Finish 。 软件安装开始 -

软件安装开始

安装成功后,您将看到以下对话框 -

安装成功

单击Yes 。 Eclipse重新启动。 现在,转到Windows → Preferences → Drools → Drools Flow Nodes

Drools流程节点

如果您能够看到上面屏幕截图中显示的节点,则证明插件已成功安装。 现在我们准备编写我们的第一个jBPM程序。

jBPM5 - Hello World!

在本章中,我们将使用jBPM编写第一个程序“Hello World”。 按照下面给出的步骤 -

转到文件→新建→Drools项目 -

新项目

单击Next 。 为第一个项目命名一个合适的名称:在我们的案例中为“HelloWorld”。

Drools项目

单击Next 。 选择底部的两个复选框,即 -

  • 将示例HelloWorld流程文件添加到此项目
  • 添加一个用于加载和执行HelloWorld进程的示例类
新Drools项目

单击Next 。 单击“配置工作区设置”(在以下屏幕截图中标记为红色) -

Drools运行时

单击“ Add按钮 -

加

单击“ Add按钮后,将显示以下屏幕。 点击“创建新的Drools5运行时”

Drools5运行时

将路径提供到已下载droolsjbpm-tools-distribution-5.3.0.Final.zip的二进制文件夹

然后,选择Installed Drools Runtimes并单击OK

已安装Drools运行时

出现以下屏幕。 单击“ Finish按钮。

完成按钮

现在,在Eclipse中打开Package Explorer视图。 您将看到以下屏幕 -

Package Explorer

ProcessTest.java类是加载规则流(rf)文件和规则流的类ruleflow.rf是为HelloWorld项目创建的基本规则流。

双击ruleflow.rf文件,您将看到以下规则流 -

规则流

GREEN圈描绘了工作流的开始,而RED圈则是工作流的结束。

左侧描绘的面板具有列出的不同组件,这些组件在工作流程中使用。 除了START和END之外,还有很多组件可以在工作流程中使用,我们将在下一节中介绍它们。

START和END事件之间的Hello是一个脚本任务,脚本任务的名称是Hello 。 要查看脚本任务“Hello”中写入的代码,请转到Windows→显示视图→其他→属性。

显示视图

Note - 在处理jBPM时,请始终打开“属性”视图,因为所有配置仅在属性视图中可见。

单击“ OK按钮。 现在,选择Hello ,您可以看到“Hello”事件的属性 -

你好的属性

要查看在“Hello”事件中编写的整个代码,请选择Action属性。

动作属性

标记为红色的圆圈是动作属性的编辑。 点击编辑后 -

动作编辑

您可以编辑它并编写要在“Hello”脚本任务中执行的代码。 让我们编辑它 -

动作编辑

单击OK 。 现在打开ProcessTest.java类并将其作为Java应用程序运行。 以下是它的输出 -

Java应用程序

ProcessTest.java类中使用的术语与Drools使用的术语相同。 ProcessTest.java类中要注意的要点是 -

ksession.startProcess("com.sample.ruleflow");

当您编写用于启动进程的代码时,传递给startProcess方法的字符串是我们打开工作流时的id属性。

开始流程

jBPM5 - Components

BPMS核心是BPM的核心。 下图描绘了BPMS核心及其组件。

BPM核心

语义模块

语义模块定义了语言语义(每个单词的含义)以及如何为流程引擎准备好执行的内部结构进行翻译。 该模块基本上包含了解BPMN2语言的基本知识。

流程引擎

流程引擎负责实际执行我们的业务流程。 流程引擎负责创建新流程实例并保持每个流程实例的状态。 在流程引擎代码中,内部结构被定义为表示流程定义中的每个活动。 用于实例化这些流程定义的所有机制将按流程引擎中的定义执行它们。

持久性和交易

在大多数企业应用程序中,所有交互必须在事务边界内运行,并且我们必须处理不同的系统,API和设计。 此外,我们必须有一个灵活的机制来定义 -

  • 如何处理长时间运行的进程

  • 我们如何以及何时可以存储有关流程状态和流程处理信息的信息

  • 我们如何以及何时需要创建,提交或回滚流程引擎事务

  • 哪些业务异常可以回滚或补偿已执行的业务操作

所有上述要点均由jBPM内的持久性和交易组成部分涵盖。

Audit/History Logs

该模块负责向用户提供查询我们的进程如何执行的方法。 此信息包括有关已结束的进程的历史信息以及有关正在执行的进程的最新信息。

Business Activity Monitoring (BAM)工具和信息仪表板是此模块生成的信息的最常见客户端。 The Audit/History Logs模块通常用于提取有用信息和指标,这些信息和指标将与旨在相应显示此信息的不同工具协作。

jBPM5 - Workflow Components

以下屏幕截图显示了jBPM 5中可用的各种工作流组件。使用这些组件,您可以创建一个工作流来协调您的流程。

jBPM5工作流程

您也可以创建自定义任务,但稍后会介绍。 此外,还有一些可用于协调流程的服务任务。

  • Start Event - 这是每个进程中执行的第一个节点。 您的流程中只能有一个启动节点。

  • End Event - 此节点表示进程结束。 在进程中可能存在多个此类节点的出现。

  • Rule Task - 它是一个评估Ru​​leFlow组的节点,该组是同一命名范围内的一组Drools规则。

  • Gateway (diverge) aka Split - 此特定节点在此过程中创建新的路径/方式。 它有两个或多个传出连接。 您可以选择三种不同类型的Splits/Gates。

    • AND GATE - 进程流同时继续到所有传出连接的位置。

    • XOR GATE - 根据工作流中定义的某些预定义约束,它只转到一个传出路径。

    • OR GATE - 流程在评估所有传出约束的情况下继续进行,并且在约束评估为true的情况下启用该路径。

  • Gateway (converge) aka Join - 此连接与拆分相反。 它将多个路径合并为一个路径。 可以有四种不同类型的连接/门 -

    • AND - 当所有分支完成时,流程继续。

    • XOR - 当至少一个分支完成时,流程继续。

    • Discriminator - 与XOR一样,如果其中一个分支已经完成,它将继续。 但与XOR不同,它会注册其他分支的完成,直到所有连接都完成。 当它发生时,节点重置,当一个传入的分支激活并且循环重新开始时,它可以再次进入。

    • N-of-M - 当nm分支完成时,流程继续。 在配置门时,您需要指定n (数字),以确定在流退出之前应完成多少个分支。

  • Reusable Sub-Process - 调用另一个流程。 这对于将几个较小的过程组合成较大的过程非常有用。 这个较大的可以是一个协调过程。 您可以将调用进程配置为等待被调用者完成,并且还具有其父级的独立生命周期。

    • Script Task - 可以执行简单代码的节点。

    • Timer Event - 此类节点启动定时器并在定时器到期时触发。 启用与时间相关的流程和重复性任务。

    • Error Event - 此类节点在进程中发出错误信号。 它没有传出连接。 它指定FaultName和FaultVariable。 引擎将搜索与FaultName匹配的异常处理程序,并将Fault信息存储在FaultVariable定义的变量中。

  • Message Event - 在发出预定义类型的事件时触发。 它可以是内部事件(在进程内发出信号)或外部事件(由进程引擎以外的外部实体发出信号)。

  • User Task - 创建人工任务的节点。 此人工任务是必须由人类演员完成的活动。

  • Embedded Sub-Process - 帮助在父流程中创建子流程。 它可以有自己的范围。 这对于希望保持一些复杂分支隔离的大型进程非常有用。 它可以有自己的变量和异常处理程序

  • Multiple Instances aka for Each - 它允许将元素集合输入到子流程中。 与可重用子流程结合使用以组合和协调较小的流程非常有用。

jBPM5 - Draw & Validate a Workflow

要绘制工作流程,您可以使用调色板中可用的任何组件,如上文所述。 所有工作流程都有一个开始,但它可以有多个结束。

借助屏幕截图,我将描述如何创建工作流程。

在这里,我打开了空白的rfbpmn文件

创建工作流程

要添加任何事件,请从“组件面板”中选择特定事件,然后拖放到右侧。 例如,我选择了开始事件并将其拖到右侧,也是一个发散网关。

Diverge Gateway

现在,需要连接这两个组件。 选择Sequence流程并连接这两个组件。

顺序流程顺序流程1

这样,您可以将组件拖动到编辑器并使用序列流来连接不同的组件。 只需要注意一些组件只有一个传入和一个传出连接,并且需要相应地设置顺序流以创建有意义的流。

在绘制工作流程时,还需要设置一些属性。 将在此处设置所有属性。 我刚刚创建了一个流程,但是在第一个瞬间查看它并没有什么意义,因为我没有在创建的工作流程中设置任何属性。

创建工作流程

正如您在上面所看到的,它是一个空白的工作流程,没有任何描述,因此无法从创建的工作流程中找到任何内容。

但是,为了进一步解释,我有一个启动组件,然后是一个发散网关,根据发散网关的条件,我将选择一种方式并在脚本任务中执行一些代码,然后结束工作流程。 所以我需要为diverge网关设置属性,然后设置脚本任务和融合网关。

在这个阶段,我还会告诉你我的工作流程有一些错误,稍后我会告诉你,一旦我设置属性,我的工作流程就没有错误,因此向你展示了如何验证创建的工作流程。

提示 - 请记住,验证程序在Windows→首选项→验证下打开

下面的屏幕截图显示了eclipse中的设置。

喜好验证

根据屏幕截图,您可以看到有4个错误。 第一个错误说脚本没有动作,然后另一个错误是网关的定义没有定义类型。 因此,我们需要删除这些错误才能运行工作流程。

我们现在将逐个设置属性,并看到错误逐渐消失。

选择第一个网关(diverge)并单击属性,然后单击类型并根据您的要求选择门。

没有行动

选择网关后,您需要选择一个约束。

网关

点击标记为红色的圆圈,您将在下面看到截图

错误消退

点击编辑并按截图填写详细信息 -

错误消退错误消退

单击Import并导入我们将执行任何操作的类。 在屏幕截图中,我们已经导入了我们将在我们的示例中使用的乘客POJO。

导入编辑器

同样,填写另一个约束的细节 -

约束编辑器

现在,单击“ OK按钮。

编辑约束

再次单击OK 。 现在,选择脚本任务并执行与发散网关相同的过程。

我们刚刚添加了一个SOP(打印声明)来显示流程。 任何java或mvel代码都可以在脚本任务中编写。

文字编辑器

同样添加第二个约束的代码 -

第二个约束

最后,您需要为diverge网关添加网关类型。

Diverge Gateway

现在,保存工作流文件并转到问题视图。 所有问题都将得到解决。

工作流文件

问题视图中没有错误表明,创建的工作流程中没有错误。 这是在jBPM中创建和验证工作流的方式。

jBPM5 - Example

我们将在本章中举例说明如何将jBPM付诸实践。 手头的任务是使用jBPM来决定乘客是否登上航班或火车,这取决于他的收入。

创建项目的步骤与“Hello World”项目的步骤相同。 在编辑器中打开.rf文件,并看到标记为红色的更改 -

Hello,World!项目

在这里,我们更改了规则流ID(唯一)并添加了可变收入,因为我们将根据乘客的收入来决定路线。

How to set variable - 选择标记为红色的编辑按钮。

设置变量

单击“ Add按钮 -

变量列表

弹出以下屏幕 -

屏幕弹出

将名称作为收入并输入为Integer。

编辑变量

单击OK 。 您将看到现在定义的收入变量。

变量定义

要在ProcessTest.java类中完成的更改(要加载和运行进程的类) -

过程测试
Map<String, Object> params = <b class="notranslate">new</b> HashMap<String, Object>();
params.put("income", 1200);
// start a new process instance
ksession.startProcess("vivek.ruleflow", params);

您需要创建MAP并在MAP中设置值,并将此值传递给startProcess重载方法。 如图所示,我们更改了规则流ID,因此在startProcess方法中使用了相同的id(vivek.ruleflow)。

在运行ProcessTest.java类之前,在与ProcessTest.java相同的包中创建POJO Passenger.java

public class Passenger {
   private String name;
   private int income;
   Getters and setters here
}

现在将ProcessTest.java类作为Java应用程序运行并查看输出 -

ProcessTest

Change the value - params.put(“income”,900); 并重新运行该类,并查看输出的变化。

改变价值
↑回到顶部↑
WIKI教程 @2018