`
wangmengbk
  • 浏览: 293489 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Drools 规则流的使用介绍

 
阅读更多
由于工作中长时间使用drools进行开发规则引擎,没有及时的将该规则引擎进行分享出来,以下是drools流的介绍:
Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

Drools Flow为Drools平台提供了工作流或者(业务)流程能力。一个业务流程或者工作流使用一个流程图表描述了一系列需要执行的步骤的顺序。这使得它更容 易来描述一个各种不同任务的复杂组合。流程在描述基于状态的,长时间运行的过程时特别有用。Drools Flow允许最终用户使用这些流程来指定,执行和监控(一部分)他们的业务逻辑。Drools Flow流程框架可以很容易地嵌入到任何的Java应用中(作为一个简单的Java组件)或者能够以一个服务器环境的模式独立运行。
Drools 流是一个工作流或流程的引擎,允许流程和规则的高级集成。流程或工作流使用流程图描述了需要执行的一系列步骤的顺序。如下图所示: 执行 tested 或 test 后在执行 test2,rule 完成结束。



第一步:首先创建一个drools project 项目工作;

第二步:创建一个 *.drl 文件,和一个 *.rf 文件;对于drl 文件时存放规则库的,rf文件定义的规则流的流程;
*.drl 文件内容:

package com.wm

import com.sample.RuleFlow;

#list any import classes here.



#declare any global variables here
#说明:如果在规则流中使用组建Gateway为split ,
#在规则中更新workingmemory中不会被其他规则使用更新后的值



rule "First"
lock-on-active true
ruleflow-group 'tested'
    when
        $rf:RuleFlow(userName=="wangm");
       # eval($rf.getUserName()=="wangm");
    then
        $rf.setAge(10);
        $rf.setUserName("wangmm");
        update($rf);
        System.out.println($rf.getUserName());

end

rule "Second"
  no-loop true
#lock-on-active true
    ruleflow-group 'test'
    when
       $rf:RuleFlow(userName=="wangm" && age < 18);
    then
       $rf.setSource(58);
        update($rf);
        System.out.println("未成年");

end

rule "Third"
   no-loop true
  #lock-on-active true
    ruleflow-group 'test'
    when
       $rf:RuleFlow(userName=="wangmm" && age >= 18);
    then
        $rf.setSource(100);
        update($rf);
        System.out.println("已成年");
       
end


rule "Third2"
    no-loop true
    ruleflow-group 'test2'
    when
       $rf:RuleFlow(userName=="wangmm" && source < 60);
    then
        System.out.println($rf.getUserName()+"的年龄为"+$rf.getAge()+" 成绩为"+$rf.getSource()+" 规则 (Third2)");
        $rf.setSource($rf.getSource()+10);
        update($rf);
end


rule "Third3"
no-loop true
   # lock-on-active true
    ruleflow-group 'test2'
    when
       $rf:RuleFlow(userName=="wangmm" && source >= 60);
    then
        System.out.println($rf.getUserName()+"的年龄为"+$rf.getAge()+" 成绩为"+$rf.getSource()+" 规则 (Third3)");
         $rf.setSource($rf.getSource()+1);
        update($rf);
end

rule "Third4"
no-loop true
   # lock-on-active true
    ruleflow-group 'test3'
    when
    $rf:RuleFlow();
       eval(true);
    then
        System.out.println($rf.getUserName()+"的年龄为"+$rf.getAge()+" 成绩为"+$rf.getSource()+" 规则(Third4)");
end

*.rf 文件源码:

<?xml version="1.0" encoding="UTF-8"?>
<process xmlns="http://drools.org/drools-5.0/process"
         xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
         xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
         type="RuleFlow" name="flow2" id="1" package-name="com.wm" version="" >

  <header>
  </header>

  <nodes>
    <start id="1" name="Start" x="7" y="71" width="48" height="48" />
    <ruleSet id="2" name="tested" x="177" y="16" width="80" height="48" ruleFlowGroup="tested" />
    <end id="7" name="End" x="482" y="96" width="48" height="48" />
    <ruleSet id="9" name="test" x="177" y="96" width="80" height="48" ruleFlowGroup="test" />
    <ruleSet id="10" name="test2" x="328" y="178" width="80" height="48" ruleFlowGroup="test2" />
    <split id="11" name="Gateway" x="88" y="95" width="49" height="49" type="3" >
      <constraints>
        <constraint toNodeId="9" toType="DROOLS_DEFAULT" name="toTest" priority="1" type="rule" dialect="java" >eval(true)</constraint>
        <constraint toNodeId="2" toType="DROOLS_DEFAULT" name="toTested" priority="1" type="rule" dialect="java" >eval(true)</constraint>
      </constraints>
    </split>
    <join id="12" name="dd" x="289" y="96" width="49" height="49" type="1" />
    <ruleSet id="13" name="Rule" x="370" y="96" width="80" height="48" ruleFlowGroup="test3" />
  </nodes>

  <connections>
    <connection from="11" to="2" />
    <connection from="13" to="7" />
    <connection from="11" to="9" />
    <connection from="12" to="10" />
    <connection from="1" to="11" />
    <connection from="2" to="12" />
    <connection from="9" to="12" />
    <connection from="10" to="13" />
  </connections>

</process>

第三步:创建一个测试类:代码如下

package com.sample;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;

/**
*
* Created on 2014-7-30
    规则流测试类
*/
public class RuleFlowTest
{
   
    public static void main(String[] args)
    {
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
//      kbuilder.add(ResourceFactory.newClassPathResource("test3.drl"), ResourceType.DRL);
     kbuilder.add(ResourceFactory.newClassPathResource("ruleFlow.drl"), ResourceType.DRL);
    kbuilder.add(ResourceFactory.newClassPathResource("ruleflowed.rf"), ResourceType.DRF);
    // kbuilder.add(ResourceFactory.newClassPathResource("dd.bpmn"), ResourceType.BPMN2);
     KnowledgeBuilderErrors errors = kbuilder.getErrors();
     if (errors.size() > 0) {
         for (KnowledgeBuilderError error: errors) {
             System.err.println(error);
         }
         throw new IllegalArgumentException("Could not parse knowledge.");
     }
        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
       
        KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newFileLogger(ksession, "ruleflow");
        RuleFlow rf = new RuleFlow();
        rf.setUserName("wangm");
        rf.setSex("男");
        rf.setAge(18);
        rf.setSource(88);
        ksession.insert(rf);
        ksession.startProcess("1");
        ksession.fireAllRules();
        ksession.dispose();
       
       
       
    }
   
  
}


通过以上也就是一个简单入门的规则流实例,对于源代码可以从附件中下载。


其他可以参考:
http://www.cnblogs.com/skyme/archive/2011/11/14/2245558.html
  • 大小: 39.4 KB
分享到:
评论
1 楼 菜鸟学生会 2018-01-17  
Drools规则工作流引擎开发教程
网盘地址:http://pan.baidu.com/s/1boavEAN 密码:q4e0
备用地址(腾讯微云):http://url.cn/5NZUh5b 密码:rhO85Y

相关推荐

    Drools规则引擎使用demo

    在这个"Drools规则引擎使用demo"中,我们将深入探讨Drools的核心概念、工作原理以及如何通过实际操作来运用它。 1. **Drools核心概念**: - **规则(Rule)**:是Drools中的基本单位,包含条件(LHS,左侧)和行动...

    jboss drools5.5 规则流完整代码

    **JBoss Drools 5.5 规则流完整代码详解** JBoss Drools 是一个开源的业务规则管理系统(BRMS),它允许开发者通过规则语言(如DRL)来定义和执行业务规则。在5.5版本中,Drools 提供了强大的规则流(Rule Flow)...

    Drools 规则引擎的介绍及应用

    ### Drools规则引擎的介绍及应用 #### 一、规则引擎概述 规则引擎是一种软件系统,用于执行基于预定义规则的决策逻辑。这些规则通常表示为业务规则,旨在模拟人类专家在解决特定问题时所遵循的逻辑过程。规则引擎...

    Drools规则流

    ### Drools规则流详解 #### 一、引言 Drools是一款开源的业务规则管理系统(BRMS),它提供了一套完整的解决方案,包括业务规则引擎、工作流引擎、以及业务资产管理和模拟工具等。其中,规则流是Drools的重要组成...

    Drools规则执行顺序

    Drools 提供了规则流(Drools Flow)组件,允许开发者定义规则的执行流程。规则可以组织成工作流图,每个节点代表一个规则,通过控制流连接来决定执行顺序。 4. **并行执行与约束**:Drools 还支持并行执行规则,这...

    drools5.1 规则流示例

    2. **Xml** 文件:可能是Drools规则的XML表示,可以使用Drools的DSL(Domain Specific Language)来编写规则,并以.xml格式存储。这种格式便于自动化处理和版本控制。 3. **自动生成顺序规则流的方法**:这可能是一...

    规则引擎Drools使用手册(中文)

    - **规则流支持**:引入了规则流的概念,便于管理规则执行流程。 - **有状态与无状态的WorkingMemory支持**:支持两种不同类型的规则引擎会话。 - **异步WorkingMemory操作**:允许异步执行规则,提高系统响应速度。...

    Drools7 + Springboot2 动态更新规则

    然后,创建一个Drools规则仓库,将规则以DRL(Drools Rule Language)文件的形式存储在MySQL的BLOB字段中。DRL是一种文本格式,用于编写Drools规则。当需要更新规则时,可以直接在数据库中编辑DRL内容,无需重新部署...

    Drools规则引擎手册.zip

    总之,Drools规则引擎是一个强大的工具,能够帮助开发者和业务人员高效地管理和执行业务规则。通过深入阅读并实践本手册,你将能够熟练掌握Drools的使用,从而提升你的应用程序的灵活性和智能化程度。

    Drools规则引擎介绍

    总结来说,Drools规则引擎是一个强大的工具,它能够帮助企业和开发者将复杂的业务逻辑转化为易于管理的规则,通过灵活的规则执行和流程控制,提升业务系统的智能化水平。通过深入学习和实践,我们可以充分利用Drools...

    drools7.25中文文档+drools技术指南.zip

    3. **规则生命周期**:从创建到执行,Drools规则经历了加载、激活、执行和完成的过程。文档会详细解释这些阶段,以及如何控制规则的触发和执行。 4. **工作内存(Working Memory)**:Drools的工作内存是规则执行的...

    Drools5规则引擎开发教程

    5. **规则流与流程控制**:详细说明如何设计和使用规则流,实现复杂的业务流程。 6. **事件处理与复杂事件处理(CEP)**:如果涉及Drools Fusion,会讲解如何处理实时事件,实现复杂事件识别和响应。 7. **实战...

    drools规则引擎4.0中文使用手册

    ### Drools规则引擎4.0中文使用手册知识点详解 #### 一、Drools 4.0概述 **Drools 4.0**作为从Drools 3.0.x系列以来的重大更新版本,引入了一系列重要的改进和新特性。这些更新不仅包括语言表达式的增强、核心引擎...

    用Spring boot与Drools规则引擎写的Demo

    总的来说,这个Demo是一个很好的学习资源,可以帮助开发者了解如何在Spring Boot环境中集成和使用Drools规则引擎。通过实践这个Demo,你可以掌握如何定义、加载和执行业务规则,以及如何在实际项目中利用Drools来...

    从Drools规则引擎到风控反洗钱系统V0.2.3

    本文档详细介绍了从Drools规则引擎到风控反洗钱系统的相关知识点,覆盖了从规则引擎的基本概念到Drools的具体使用,再到与Spring Boot的集成等多个方面。希望这些内容能够帮助读者更好地理解和掌握Drools规则引擎的...

    规则引擎Drools.NET移植版

    "Drools NET-3.0 guide.doc"很可能是一份Drools.NET的用户指南,详细介绍了如何在.NET环境中集成和使用Drools。它可能涵盖了规则定义、规则引擎的配置、规则的加载和执行,以及如何使用提供的示例进行实践。 **应用...

    Drools4.0使用手册中文

    4. **规则流支持**:引入了规则流的概念,使得规则可以按照特定的流程执行。 5. **有状态与无状态 WorkingMemory**:支持有状态和无状态 WorkingMemory(规则引擎 Session),满足不同场景的需求。 6. **异步 ...

    Drools5规则引擎学习研究

    `KnowledgeBase`则是一个知识库,可以存储各种类型的知识,如规则、规则流、函数定义和自定义对象。`StatefulKnowledgeSession`是常用的一种交互方式,它支持与规则引擎的持续交互,但需要注意在使用完毕后需要调用`...

Global site tag (gtag.js) - Google Analytics