📅  最后修改于: 2020-11-13 05:44:22             🧑  作者: Mango
JBPM代表“ Java业务流程管理”。这是一个开源框架的JBoss产品。在继续之前,让我们首先定义一个业务流程。
根据定义,业务流程是一系列任务,这些任务以可重复的顺序发生,由人员和/或系统执行以实现业务目标。它描述了需要执行一系列步骤的顺序(使用流程图)。业务流程可以显着提高业务逻辑的可见性和敏捷性。
让我们举个例子。以下屏幕快照描述了大多数IT专业人员可以关联的工作流程/流程图。在大多数组织中,通常会根据员工的表现来评估他们。
该过程按以下顺序进行-
员工进行自我评估,并将报告提交给他们的项目经理。
然后,您的绩效将由项目经理和人力资源经理进行评估。根据评估,他们给员工一个评分。
然后将最终的评分或绩效反馈反馈给员工。
此过程几乎适用于所有员工,因此,这是了解业务流程的一个很好的例子。它是一系列任务,并且以特定顺序发生。
业务流程是了解任何组织框架的关键概念。像jBPM这样的技术有助于有效地管理复杂的业务流程。 JBPM是可以有效地编排业务流程的工具。通常,每个企业级应用程序将具有按特定顺序执行的一系列任务,并且可以在jBPM的帮助下协调这些流程。
jBPM的优点在于它类似于流程图。业务分析师也可以轻松理解它。 jBPM可以嵌入Java应用程序中并作为服务运行。
jBPM是一个轻量级的,开源的,完全可嵌入的用Java编写的流程引擎。其最显着的功能在下面列出-
jBPM执行使用BPMN 2.0规范设计的业务流程。
jBPM可以与Eclipse和类似的IDE完全集成,以提供拖放支持来创建工作流程。
从设计阶段开始,jBPM就有UI工具可供业务分析师和用户使用。
jBPM借助JPA和JTA支持持久性和事务管理。
可以定义自定义工作项处理程序来创建用户定义的任务,该任务以后可以用作其他工作流的组件。
以下是安装jBPM插件的前提条件-
由于jBPM是用Java编写的,因此本节将介绍如何添加所需的插件。考虑到最大的Java用户使用Eclipse,让我们看看如何在Eclipse中添加jBPM插件。
从以下链接下载二进制文件-http: //download.jboss.org/drools/release/5.3.0.Final/
不要在这里看到Drools时感到困惑。相同的插件用于jBPM。如果您已经安装了Drools插件,则可以跳过安装步骤。
将其解压缩到硬盘上。然后,启动Eclipse并转到帮助→安装新软件。
单击添加存储库–
单击本地按钮,然后选择“ … / binaries / org.drools.updatesite”(您在计算机上的下载位置)
选择Drools和jBPM ,然后单击下一步按钮。
再次单击下一步,然后选择“我接受许可协议的条款”,然后单击完成。软件安装开始-
成功安装后,您将获得以下对话框-
单击是。 Eclipse重新启动。现在,转到Windows→首选项→Drools→Drools流节点
如果您能够看到如上面的屏幕截图所示的节点,则表明插件已成功安装。现在,我们准备编写第一个jBPM程序。
在本章的此处,我们将使用jBPM编写第一个程序“ Hello World”。请按照下面给出的步骤-
转到文件→新建→Drools项目-
单击下一步。给第一个项目起一个适当的名称:在本例中为“ HelloWorld”。
单击下一步。选择底部的两个复选框,即-
单击下一步。单击配置工作区设置(在以下屏幕截图中标记为红色)-
单击添加按钮-
单击添加按钮后,将显示以下屏幕。单击“创建新的Drools5运行时”
给出路径,直到下载了droolsjbpm-tools-distribution-5.3.0.Final.zip的Binaries文件夹。
然后,选择Installed Drools Runtimes,然后单击OK 。
出现以下屏幕。单击完成按钮。
现在,在Eclipse中打开Package Explorer视图。您将看到以下屏幕-
ProcessTest.java类是用于加载ruleflow(rf)文件的类,而Ruleflow.rf是为HelloWorld项目创建的基本规则流。
双击ruleflow.rf文件,您将看到以下规则流-
绿色圆圈表示工作流程的开始,而红色圆圈表示工作流程的结束。
左侧的面板列出了工作流程中使用的不同组件。除了START和END外,工作流中还可以使用很多组件,我们将在下一部分中介绍它们。
START和END事件之间的Hello是脚本任务,脚本任务的名称是Hello 。要查看脚本任务“ Hello”中编写的代码,请转至Windows→显示视图→其他→属性。
注–在使用jBPM时,请始终保持“属性”视图处于打开状态,因为所有配置仅在属性视图中可见。
单击确定按钮。现在,选择您好,你可以看到“Hello”事件的性质-
要查看在“ Hello”事件中编写的整个代码,请选择Action属性。
用红色标记的圆圈是对动作属性的编辑。一旦单击编辑-
您可以对其进行编辑,并在“ Hello”脚本任务中编写要执行的代码。让我们编辑它-
单击确定。现在打开ProcessTest.java类,并将其作为Java应用程序运行。下面给出的是它的输出-
ProcessTest.java类中使用的术语与Drools所用的术语相同。在ProcessTest.java类中要注意的一点是-
ksession.startProcess("com.sample.ruleflow");
当您编写用于启动流程的代码时,当我们打开工作流程时,传递给startProcess方法的字符串是id属性。
BPMS核心是BPM的核心。下图描述了BPMS核心及其组件。
语义模块定义语言语义(每个词的含义)以及如何将其翻译为准备执行的流程引擎内部结构。该模块基本上包含理解BPMN2语言的基本知识。
流程引擎是负责实际执行我们的业务流程的引擎。流程引擎负责创建新流程实例并为每个实例保留状态。在流程引擎代码内部,内部结构被定义为表示我们流程定义中的每个活动。用于实例化这些流程定义的所有机制都将按照流程引擎中的定义执行它们。
在大多数企业应用程序中,所有交互都必须在事务边界内运行,并且我们必须处理不同的系统,API和设计。此外,我们必须具有灵活的机制来定义-
如何处理长时间运行的流程
我们如何以及何时可以存储有关流程状态的信息以及流程正在处理的信息
我们如何以及何时需要创建,提交或回退流程引擎事务
哪些业务异常可以回滚或补偿已经执行的业务操作
jBPM中的持久性和事务组件涵盖了以上所有要点。
该模块负责为用户提供查询我们的流程如何执行的方式。该信息包括有关已经结束的进程的历史信息和有关正在执行的进程的最新信息。
业务活动监视(BAM)工具和信息仪表板是此模块生成的信息的一些最常见客户端。审核/历史日志模块通常用于提取有用的信息和指标,这些信息和指标将与旨在相应地显示此信息的不同工具协作。
以下屏幕快照显示了jBPM 5中可用的各种工作流程组件。使用这些组件,您可以创建工作流程来编排流程。
您也可以创建自定义任务,但稍后会介绍。此外,还有一些可用的服务任务可用于编排流程。
起始事件-这是每个进程中执行的第一个节点。您的流程中只能有一个起始节点。
结束事件-此节点表示过程结束。在一个过程中,可能出现不止一种此类节点。
规则任务-它是一个评估RuleFlow组的节点,该组是同一命名作用域下的一组Drools规则。
网关(分支)又称拆分-该特定节点在过程中创建新的路径/方式。它具有两个或多个传出连接。您可以在三种不同类型的拆分/门之间进行选择。
AND GATE-流程同时继续流向所有传出连接的地方。
XOR GATE-根据工作流程中定义的一些预定义约束,该路径仅到达一个传出路径。
OR GATE-基于对所有传出约束的评估来进行流程,并在约束评估为true的情况下启用该路径。
网关(聚合)又称联接-此联接与拆分相反。它将多个路径合并为一个。可以有四种不同类型的联接/门-
AND-当所有分支都完成时,流程继续。
XOR-当至少一个分支完成时,流程继续。
鉴别器-与XOR一样,如果其分支之一已完成,则继续。但是与XOR不同,它注册其他分支的完成,直到所有连接都完成。发生这种情况时,该节点将重置,并且当传入分支被激活并且循环重新开始时,可以再次输入该节点。
M的N个-当n个m个分支完成时,流程继续。您需要在配置门时指定n (数字),以确定流退出之前应完成的分支数量。
可重用子流程-调用另一个流程。将几个较小的过程组合成一个较大的过程非常有用。这个更大的过程可能是一个协调过程。您可以将调用过程配置为等待被调用者完成并且还拥有其父对象的独立生命周期。
脚本任务-可以执行简单代码段的节点。
计时器事件-这种类型的节点启动计时器,并在计时器到期时触发。启用与时间有关的流程和重复性任务。
错误事件-这种节点表示过程中出现错误情况。它没有传出连接。它指定一个FaultName和一个FaultVariable。引擎将搜索与FaultName相匹配的异常处理程序,并将Fault信息存储在FaultVariable定义的变量中。
消息事件-当发出预定义类型的事件时触发。它可以是内部事件(在流程内部发出信号)或外部事件(由流程引擎以外的外部实体发出信号)。
用户任务-创建人工任务的节点。此人类任务是必须由人类演员完成的活动。
嵌入式子流程-帮助在父流程中创建子流程。它可以有自己的范围。这对于希望将某些复杂分支保持隔离的较大过程很有用。它可以有自己的变量和异常处理程序
每个都有多个实例-它允许将元素集合馈送到子流程中。与可重用子流程组合以组成和协调较小的流程时非常有用。
要绘制工作流程,可以使用上述文章中所述的调色板中可用的任何组件。所有工作流程都有一个起点,但可以有多个终点。
在屏幕截图的帮助下,我将向您介绍如何创建工作流程。
在这里,我打开了空白的rf或bpmn文件
要添加任何事件,请从“组件面板”中选择特定事件,然后将其拖放到右侧。例如,我选择了开始事件,并将其拖到右侧以及分支网关。
现在,需要连接两个组件。选择顺序流并连接两个组件。
这样,您可以将组件拖到编辑器中,并使用顺序流来连接不同的组件。只需注意某些组件将只有一个传入连接和一个传出连接,并且需要相应地设置顺序流以创建有意义的流。
在绘制工作流程时,还需要设置一些属性。将发布所有要在此处设置的属性。我刚刚创建了一个流程,但是由于我没有在创建的工作流中设置任何属性,因此乍一看它并没有什么意义。
如上所示,这是一个空白的工作流,没有任何描述,因此无法从创建的工作流中识别出任何内容。
但是,为了进一步说明,我有一个启动组件,然后是一个分支网关,并且根据分支网关的条件,我将选择一种方式并在脚本任务中执行一些代码,然后结束工作流程。因此,我需要为发散网关,脚本任务和收敛网关设置属性。
在此阶段,我还将向您显示我的工作流程中有一些错误,稍后将向您显示一旦我设置了属性,我的工作流程中就不会出现错误,因此向您展示如何验证创建的工作流程。
提示-请记住,验证器在Windows→首选项→验证下处于启用状态
下面的屏幕截图显示了eclipse中的设置。
根据屏幕截图,您可以看到有4个错误。第一个错误是脚本没有任何作用,然后另一个错误是网关的定义没有定义类型。因此,我们需要消除这些错误才能运行工作流。
现在,我们将逐一设置属性,并查看错误逐渐消失。
选择第一个网关(分支)并单击属性,然后单击类型并根据需要选择门。
选择网关后,您需要选择一个约束。
单击标记为红色的圆圈,您将看到以下屏幕截图
单击编辑并按照屏幕截图填写详细信息-
单击导入,然后导入将在其上执行任何操作的类。在屏幕截图中,我们导入了将在示例中使用的旅客POJO。
类似地,填写其他约束的详细信息-
现在,单击确定按钮。
再次单击确定。现在,选择脚本任务并执行与分支网关相同的过程。
我们刚刚添加了一个SOP(打印语句)来显示流程。可以在脚本任务中编写任何Java或mvel代码。
类似地添加第二个约束的代码-
最后,您需要添加分支网关的网关类型。
现在,保存工作流程文件并转到问题视图。所有问题都将得到解决。
问题视图中没有错误表明在创建的工作流程中没有错误。这就是在jBPM中创建和验证工作流的方式。
我们将在本章中以一个例子来说明如何将jBPM付诸实践。当前的任务是使用jBPM根据其收入来决定乘客是搭乘飞机还是搭乘火车。
创建项目的步骤与“ Hello World”项目的步骤相同。在编辑器中打开.rf文件,并查看以红色标记的更改-
在这里,我们更改了规则流ID(唯一)并添加了可变收入,因为我们将根据乘客的收入确定路线。
如何设置变量-选择标记为红色的编辑按钮。
单击添加按钮-
弹出以下屏幕-
输入名称作为收入,并输入整数。
单击确定。您将看到现在定义的收入变量。
要在ProcessTest.java类中完成的更改(加载和运行您的流程的类)-
Map params = new HashMap();
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应用程序运行,并查看输出-
更改值-params.put(“ income”,900);并重新运行该类并查看输出中的更改。