activiti入门系列文章14 - 集成规则引擎drools

activiti如何集成规则引擎drools呢

三个步骤:

1、pom加入依赖,activiti引擎集成部署器

1、首先进行drools规则编写、然后挂到流程图节点上

2、进行规则文件和bpmn流程文件的部署

例以下:

规则引擎部署器集成activiti

pom加入依赖:

<dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-core</artifactId>
            <version>7.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <version>7.0.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>knowledge-api</artifactId>
            <version>6.5.0.Final</version>
        </dependency>

2、activiti引擎配置集成

List<> list=new ArrayList();
list.add(org.activiti.engine.impl.rules.RulesDeployer);
processEngineConfiguration.setCustomPostDeployers(list);

3、bpmn文件配置规则节点

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
    xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
    typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath"
    targetNamespace="http://www.activiti.org/test">
    <process id="leave" name="请假审批" isExecutable="true">
        <startEvent id="startevent1" name="Start"></startEvent>
        <endEvent id="endevent1" name="End"></endEvent>
        <userTask id="usertask1" name="部门经理审批"></userTask>
        <businessRuleTask id="businessruletask1" name="天数判断" activiti:ruleVariablesInput="${leave}" activiti:rules="leave1,leave2" activiti:resultVariable="reason"></businessRuleTask>
        <serviceTask id="servicetask1" name="获取变量" activiti:class="com.1json.service.DroolsService"></serviceTask>
        <userTask id="usertask2" name="HR审批"></userTask>
        <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
        <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="businessruletask1"></sequenceFlow>
        <sequenceFlow id="flow3" sourceRef="businessruletask1" targetRef="servicetask1"></sequenceFlow>
        <userTask id="usertask3" name="总经理审批"></userTask>
        <sequenceFlow id="flow4" sourceRef="servicetask1" targetRef="usertask3">
            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reason[0].total >= 10}]]></conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow5" sourceRef="servicetask1" targetRef="usertask2">
            <conditionExpression xsi:type="tFormalExpression"><![CDATA[${reason[0].total < 10}]]></conditionExpression>
        </sequenceFlow>
        <sequenceFlow id="flow6" sourceRef="usertask3" targetRef="usertask2"></sequenceFlow>
        <sequenceFlow id="flow7" sourceRef="usertask2" targetRef="endevent1"></sequenceFlow>
    </process>
</definitions>

其中

<businessRuleTask id="businessruletask1" name="天数判断" activiti:ruleVariablesInput="${leave}" activiti:rules="leave1,leave2" activiti:resultVariable="reason"></businessRuleTask>

配置了规则引擎节点的参数:输入参数变量${leave},规则集合activiti:rules="leave1,leave2". 规则计算结果值保存到reason变量里

4、drl规则文件代码

package com.1json;
import com.1json.model.Leave;
rule "leave1"
    when
        u : Leave(day < 3);
    then
        u.setTotal(u.getDay() + 2);
end
rule "leave2"
    when
        u : Leave(day >= 3);
    then
        u.setTotal(u.getDay() + 5);
end

5.部署并访问

@RequestMapping("/drl")
    public void drl() {
        /**
         * 注意这里:必须要把drl文件一起deploy
         */
        DeploymentBuilder deploy = repositoryService.createDeployment();
        deploy.addClasspathResource("leave.bpmn").addClasspathResource("leave.drl");
        deploy.deploy();
        ProcessInstance pi = runtimeService.startProcessInstanceByKey("leave");
        Map<String, Object> vars = new HashMap<String, Object>();  
        vars.put("leave", new Leave("1json", 12));
        /**
         * 当前任务
         */
        List<Task> tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();
        for(Task task : tasks)
        {
            System.out.println(task.getId() + " , " + task.getName());
            taskService.complete(task.getId(), vars);
        }
        /**
         * 下一步任务
         */
        tasks = taskService.createTaskQuery().processInstanceId(pi.getId()).list();
        for(Task task : tasks)
        {
            System.out.println(task.getId() + " , " + task.getName());
        }
    }

Activiti社区交流群:839915498

更多activiti系列教程:activiti教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "Activiti 实战 pdf" 是一本介绍Activiti流程引擎实战的电子书。该书主要介绍了Activiti的架构、流程设计、流程部署、活动和事件处理、任务管理、用户管理、历史记录、定时任务等内容。通过该书的学习,读者可以了解Activiti的基本原理,掌握Activiti的基本使用方法,在实际项目中使用Activiti开发高效、可靠的业务流程应用。 Activiti是一个开源的BPM流程引擎,它实现了BPMN 2.0规范,并提供了基于Java和Spring的API和服务。Activiti可以方便地与各种应用和平台集成,例如Spring、Spring Boot、Camunda、Drools、MuleSoft等。Activiti被广泛应用于企业级业务流程管理、工作流、电子商务、人力资源、金融等领域。 该书的作者是Tijs Rademakers、Ronald van Luttikhuizen、Jos Dirksen等人,他们是Activiti架构师和专家。该书除了提供详尽的文档和指导外,还包含了一些实践案例和示例代码,可以帮助读者更好地理解和运用Activiti。无论是初学者还是有经验的开发者,都可以从该书中获得收益,它是一本不可多得的Activiti学习资源。 ### 回答2: Activiti 实战 PDF 是一本关于 Activiti 工作流引擎的实践指南书籍,该书适合对工作流引擎有一定了解并希望使用 Activiti 实现工作流的开发人员和架构师阅读。 该书主要涵盖了 Activiti 的基本概念和使用方法,包括工作流引擎的基础知识、流程定义和流程实例的创建、流程图的绘制、任务分配和处理、流程监控和报表等。 这本书通过丰富的实例代码和图示,展示了 Activiti 在实际项目中的应用场景,并详细介绍了如何配置和使用 Activiti,如如何在 Java 代码中使用 Activiti API,如何使用 Spring 集成 Activiti 等。 此外,该书还包含了一些高级的话题,如如何自定义 Activiti 服务、如何在 Activiti 中使用规则引擎和消息中间件等,这些内容对于需要深入了解 Activiti 的开发人员来说具有很大的价值。 总之,Activiti 实战 PDF 对于掌握 Activiti 工作流引擎的开发人员和架构师来说是一本非常实用的实践指南,它不仅能够帮助读者掌握 Activiti 的基本概念和使用方法,还能够帮助他们实现更加复杂的工作流场景。 ### 回答3: Activiti 实战 PDF 是一本关于 Activiti 工作流引擎的实战指南,主要面向开发者和系统管理员,并以实际案例为基础,介绍了 Activiti 的核心概念、基本流程的构建以及高级特性等内容。 本书由熟悉 Activiti 的领域专家撰写,详细介绍了 Activiti 的工作原理、配置和使用方式。其中涵盖了多种流程设计方法,包括界面设计、BPMN 规范和 XML 定义等,并结合实际案例演示了如何使用 Activiti 构建自定义流程应用。 此外,本书还阐述了 Activiti 中的用户、任务、表单、数据和事件等概念,以及如何使用 Activiti Explorer 管理和监控流程的运行与执行情况。最后,本书还介绍了使用 Activiti 进行流程自动化部署、管理与维护的技巧和方法。 总的来说,Activiti 实战 PDF 为初学者和高级用户提供了深入学习 Activiti 工作流引擎的最佳实践方法,帮助用户将其应用于实际开发项目中,提高工作效率和流程管理的可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值