`

摘录:jBPM 整合 Drools(JBoss Rule) - 整合角色分配

阅读更多
 jBPM 是一个非常优秀的开源工作流引擎,虽然他不是一个一站式的工作流平台,不过它已经为我们提供了比较丰富的底层操作,为了满足特定的项目需求,我们一般需要对其进行二次开发,才能适用于具体的业务需求。

  其中一个主要的扩展点是针对 TaskNode 进行的用户的分配。TaskNode 是 jBPM 中一个非常重要的概念,一个任务节点可以包含若干个任务,不同的任务可以由不同的人来完成,任务实例被分配给 actorId 来完成,其中指定到人的分配工作就是 Assignment 要处理的,这也是我们需要定制的功能,为了实现用户的分配,我们需要实现 AssignmentHandler 接口,接口原型如下。

public interface AssignmentHandler extends Serializable {   
    void assign(Assignable assignable, ExecutionContext executionContext) throws Exception;
}

  通常用代码实现的话,我们可以让一个类实现这个接口,并在 swimlane 或者 tasknode 中的 assignment 指定该类。但是,这样的灵活性是显然不够的,在系统的使用过程中,分配策略会不断的进行调整,因此我们需要更为灵活的解决方案,jBPM 本身可以使用基于 Bean Shell 的脚本来写分配策略,但是 Bean Shell 不是那么强大,我们需要更为强大的解决方案,因此,我们选用了已经被 JBoss 收为旗下的 JBoss Drools 4.0 规则引擎 (在 3.0 的时候曾经改名为 JBoss Rules,4.0 又改回来了)

  jBPM 和 Drools 虽然同在 JBoss 旗下,不过他们目前并没有很好的进行整合,所以我们还是要利用它们系统系统的一些功能来做整合,同样也是实现 AssignmentHandler 接口,不过另外我们利用了 jBPM 里面的一个小小的技巧。看一下这段配置:

    <swimlane name="agent">
        <assignment class="org.agilejava.workflow.drools.RulesAssignmentHandler">
           <ruleName>AgentAssignmentRule</ruleName>
        </assignment>
    </swimlane>

  红色标注的这段配置,我们可以理解为,在 RulesAssignmentHandler 这个类里有一个 ruleName 这样的属性,在初始化这个类的时候,jBPM 会把配置中 ruleName 的值 set 给 RulesAssignmentHandler 中 ruleName 的属性。

public class RulesAssignmentHandler implements AssignmentHandler {
    protected String ruleName;

    public String getRuleName() {
        return ruleName;
    }

    public void setRuleName(String ruleName) {
        this.ruleName = ruleName;
    }

    protected RuleBase readRule(String ruleName) throws Exception {
     // 到 classes 下的 /rules 下加载相应的文件
        String rulePath = "/rules/" + ruleName + ".drl";
        Resource resource = new ClassPathResource(rulePath);
        Reader reader = new InputStreamReader(resource.getInputStream());
        PackageBuilder builder = new PackageBuilder();
        builder.addPackageFromDrl(reader);
        Package pkg = builder.getPackage();
        RuleBase ruleBase = RuleBaseFactory.newRuleBase();
        ruleBase.addPackage(pkg);
        return ruleBase;
    }

    protected void initRuleContextData(ExecutionContext executionContext, WorkingMemory workingMemory) {
        ContextInstance ci = executionContext.getContextInstance();
        Map vars = ci.getVariables();
        workingMemory.insert(ci);
        workingMemory.insert(vars);
    }

    public void assign(Assignable assignable, ExecutionContext executionContext) throws Exception {
        RuleBase ruleBase = readRule(ruleName);
        WorkingMemory workingMemory = ruleBase.newStatefulSession();
        // 为了简便操作,我只是拿了放入 ExecuteContext 中的 variable 进行逻辑处理
        initRuleContextData(executionContext, workingMemory);
        workingMemory.insert(assignable);
        workingMemory.fireAllRules();
    }
}

  对应的 AgentAssignmentRule.drl 文件内容如下,假定 ExecutionContext 中有 price 这个 variable,我们判定当这个值 > 5000 的时候,我们将此任务分配给 senior_agent 来处理。

package org.agilejava.workflow

import java.util.Map
import org.jbpm.taskmgmt.exe.Assignable

rule "Assign Agent"
    when
        a : Assignable()
        Map(this['price'] >= 5000)
    then
        a.setActorId("senior_agent");
end

  就这样,我们就完成了最为简单的 jBPM 和 Drools 的整合,当然这种方式只是简单的利用了 jBPM 的一些特性来做的,我们每次都得指定这个 RulesAssignmentHandler,还是很麻烦的,更好的方式就是我们改写 ProcessDefinition.xml 的 parser,让 Drools 的规则定义成为和 swimlane, actor-id, expression 这样的分配方式同样级别的,让 Drools 成为 jBPM 的一等公民,这个以后研究好了再来和大家分享
分享到:
评论

相关推荐

    jbpm-7.3.0.Final-bin 工作流

    6. **kie服务**:jbpm-kie-services-7.3.0.Final.jar包含了kie(Knowledge-Base Integration Environment)服务,它是jBPM中的规则和决策管理组件,支持与Drools规则引擎和OptaPlanner优化引擎的集成。 7. **流程...

    drools-wb-7.10 tomcat 安装包

    1. **规则编辑器**:提供了直观的编辑工具,如Guvnor,用于编写DRL(Drools Rule Language)规则。 2. **测试套件**:允许用户创建测试用例,确保规则正确无误。 3. **决策表**:通过Excel或CSV格式导入,便于非技术...

    jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)

    jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载

    jbpm-jpdl-suite-3.2.3的安装配置

    2. **jbpm-jpdl-designer-3.1.2.zip**:这是一个基于Eclipse的图形化流程设计工具,支持流程的可视化定制,避免直接编辑XML文件。同时,它还具有流程定义上传功能,方便将新定义的流程发布到jPDL系统。 3. **jbpm-...

    jbpm-jpdl-suite-3.2.3安装配置.doc

    - 从官方网址http://www.jboss.org/jbossjbpm/获取jbpm-jpdl-suite-3.2.3.zip,解压后得到jbpm-jpdl-3.2.3目录。 3. **MySQL数据库配置**: - 启动MySQL服务器,并以root用户登录。 - 创建一个名为jbpm的数据库...

    jbpm-starters-kit-3.1.4 lib

    【jbpm-starters-kit-3.1.4 lib】是一个针对JBoss Business Automation Platform中jbpm(Java Business Process Management)的入门套件的库文件集合。这个版本3.1.4是jbpm的一个早期版本,它包含了运行和开发基于...

    jbpm-5.4.0.Final-docs

    jbpm-5.4.0.Final-docs是该版本的官方文档,它包含了丰富的信息,旨在为用户提供详尽的指导和帮助。以下是jbpm 5.4版本中的关键知识点: 1. **工作流引擎**:jbpm的核心是一个工作流引擎,它负责执行流程实例,管理...

    drools-distribution-6.3.0

    1. **规则语言**:Drools 使用DRL(Drools Rule Language)来编写规则,这是一种类似SQL的语法,可以清晰地表达条件和动作。 2. **知识库**(Knowledge Base):它是规则的容器,包含了所有的规则和事实,是执行...

    drools-core-5.2.0.Final-sources.jar

    drools-core-5.2.0.Final-sources.jar

    jbpm-6.1.0.Final-installer

    jbpm-6.1.0.Final-installer是JBoss Business Process Management (jBPM)的一个发行版本,它是一个开源的工作流和业务流程管理(BPM)框架,由Red Hat公司开发并维护。jBPM旨在帮助企业和组织设计、执行、管理和监控...

    jbpm-starters-kit-3.1.2.part2.rar

    jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,jbpm-starters-kit-3.1.2插件,共两卷

    jbpm-jpdl-suite-3.2.3.zip

    jbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3.zipjbpm-jpdl-suite-3.2.3....

    jbpm-4.3-src.rar_bdf-jbpm4 src _jboss 4.3_jboss jbpm4.3_jbpm-4.3

    jbpm-4.3-src.rar_bdf-jbpm4 src _jboss 4.3_jboss jbpm4.3_jbpm-4.3 这个压缩包文件包含的是JBOSS jBPM4.3的源代码,这是一个用于业务流程管理(BPM)的开源框架。jBPM是一个强大的工具,它提供了流程定义、执行和...

    JBPM 工作流接口 全文档

    根据提供的文件信息,我们可以深入解析并提取出与JBPM工作流接口相关的多个核心知识点。以下是对这些知识点的详细阐述: ### 1. JBPM简介 JBPM(Java Business Process Model)是一个灵活的工作流引擎,用于定义...

    JBPM-----PPT

    - **jbpm-console-ng**:新一代的Web管理界面,提供更丰富的功能和更好的用户体验。 - **API与服务**:讲解如何通过RESTful API和JMS消息服务与JBPM交互。 - **集成工具**:包括Maven插件、Eclipse插件等,便于...

    jbpm-jpdl-suite-3.2.GA.zip-6

    jbpm-jpdl-suite-3.2.GA.zip

    jbpm-jpdl-designer-nodeps-3.1.4

    "jbpm-jpdl-designer-nodeps-3.1.4" 是一个针对Jbpm工作流管理系统中的JPDL设计工具的无依赖版本,主要用于创建和编辑JPDL(Jbpm Process Definition Language)文件。该资源包含了该工具的详细文档、许可证协议以及...

    jbpm-jpdl-suite-3.2.GA.zip-3

    jbpm-jpdl-suite-3.2.GA.zip

    jbpm-starters-kit-3.1.2.zip官方下载地址

    jbpm-starters-kit-3.1.2.zip官方下载地址 版本里包括一个JBPM流程设计器的Eclipse插件,和一个用JBOSS作为服务器的示例流程等相关文件。解压jbpm-starters-kit-3.1.2.rar到某个特定目录,这里我们首先用到的是包里...

Global site tag (gtag.js) - Google Analytics