`
duyangsss
  • 浏览: 124077 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Drools规则引擎API概述

 
阅读更多

转载自 http://thinkinside.tk/2013/12/20/drools_API.html

规则引擎中,将知识表达为规则(rules),要分析的情况定义为事实(facts)。二者在内存中的存储分别称为Production Memory和Working Memory。在外围,还会有一个执行引擎(Execution Engine)。

与此对应,规则引擎API也分成三个部分。在Drools中,分别叫做:

Knowledge API: 相关API一般都在org.drools.builder下

Fact API:相关的API一般都在org.drools.command下

Execution API:相关的API都在org.drools.runtime下

Knowledge API

Drools将知识库(KnowledgeBase)作为JSR94中的规则执行集(RuleExecutionSet)。知识库中的知识以包(KnowledgePackage)为单位组合而成。每个包中聚合多个规则(Rule)。

通常,一个包中的内容会在一个或多个资源(Resource)中保存。资源的类型可以有很多种,如.drl 文件、.dslr 文件或 xls 文件等。

规则包还可以从规则流(rule flow) 文件中获取。

KnowledgeBase

与此对应,Drools定义了一组Knowledge API来操作知识库。

KnowledgeBase

构建知识库的一般过程为:

  1. 通过ResourceFactory获取资源。可以从Classpath、URL、File、ByteArray、Reader等输入源中获取
  2. 构建KnowledgeBuilder,将资源添加到KnowledgeBuilder中。KnowledgeBuilder通常由KnowledgeBuilderFactory创建
  3. 从KnowledgeBuilder中获取规则包
  4. 创建KnowledgeBase,可以通过KnowledgeBaseConfiguration定义KnowledgeBase的一些属性,默认的配置位于drools-core-VERSION.jar 包下 META-INF/drools.default.rulebase.conf 文件中
  5. 将规则包添加到KnowledgeBase
  6. 为KnowledgeBase添加KnowledgeBaseEventListener,可以监控KnowledgeBase中的事件

代码示例:

 KnowledgeBase buildKBase(){
        
        Resource res = ResourceFactory.newClassPathResource("hello.drl", Demo.class);
        
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
                .newKnowledgeBuilder();

        kbuilder.add(res,ResourceType.DRL);
        
        //validate
        if (kbuilder.hasErrors()) {
            System.out.println("规则中存在错误,错误消息如下:");
            KnowledgeBuilderErrors kbuidlerErrors = kbuilder.getErrors();
            for (Iterator iter = kbuidlerErrors.iterator(); iter.hasNext();) {
                System.out.println(iter.next());
            }
        }
        
        Collection<KnowledgePackage> kpackages = kbuilder.getKnowledgePackages();
        
        KnowledgeBaseConfiguration kbConf =
                KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); 
        kbConf.setProperty( "org.drools.sequential", "true"); 
        
        //KnowledgeBase kbase=KnowledgeBaseFactory.newKnowledgeBase();
        KnowledgeBase kbase =
                KnowledgeBaseFactory.newKnowledgeBase(kbConf);
        
        kbase.addKnowledgePackages(kpackages);
        
        return kbase;
    }

Fact API

要操作Working Memory,首先要建立规则引擎的一个会话。Drools中的有状态会话和无状态会话分别为StatefulKnowledgeSession和StatelessKnowledgeSession,都可以由KnowledgeBase建立。

通过会话可以进行操作Fact对象,执行规则等交互,例如:

KnowledgeBase kbase = buildKBase();
        
StatefulKnowledgeSession statefulKSession=kbase.newStatefulKnowledgeSession();
statefulKSession.setGlobal("globalTest", new Object());

statefulKSession.insert(new Object()); 
statefulKSession.fireAllRules(); 
statefulKSession.dispose();

StatefulKnowledgeSession中,insert()方法、fireAllRules()方法和 dispose()方法是分开执行的,这个过程中可以进行一定的控制, 而StatelessKnowledgeSession不同,在无状态会话中,上述三个方法被合并为execute()方法,不能分开调用。如果要插入多个Fact对象,只能使用集合,比如:

StatelessKnowledgeSession statelessKSession=kbase.newStatelessKnowledgeSession();
ArrayList list=new ArrayList(); 
list.add(new Object()); 
list.add(new Object()); 
statelessKSession.execute(list);

这样的特点决定了,无状态会话适合推演和分析,需要事先知道所有的事实(Fact);而有状态会话可以随时增加事实并进行批评,适合实际应用。

无状态会话中还可以使用execute(Command cmd)方法。比如,如果要在无状态会话中插入一个List,可以用CommandFactory生成一个关于List的Command:

statelessKSession.execute(CommandFactory.newInsert(list));

同样,无状态会话中如果要设置global,也需要使用Command:

ArrayList<Command> list=new ArrayList<Command>(); 

list.add(CommandFactory.newInsert(new Object())); 
list.add(CommandFactory.newInsert(new Object())); 

list.add(CommandFactory.newSetGlobal("key1", new Object())); 
list.add(CommandFactory.newSetGlobal("key2", new Object()));

statelessKSession.execute(CommandFactory.newBatchExecution(list)) ;

Execution API

插入到WorkingMemory中的对象,并不是克隆,而是对原对象的引用。这就意味着引擎中可以改变外部的对象,这是引擎与外部数据交互的一个通道。

此外,insert()方法还会返回一个FactHandler,作为引擎中该Fact对象的一个句柄。

最后,session上可以注册AgendaEventListener、ProcessEventListener和WorkingMemoryEventListener,这也是常用的交互方式。 比如WorkingMemoryEventListener可以监听Fact对象变化的事件:

public interface WorkingMemoryEventListener
    extends
    EventListener {
    void objectInserted(ObjectInsertedEvent event);

    void objectUpdated(ObjectUpdatedEvent event);

    void objectRetracted(ObjectRetractedEvent event);
}
分享到:
评论

相关推荐

    Drools规则引擎从入门到精通

    1 Drools简介1.1 Drools的作用1.2 使用规则引擎的优势1.3 规则引擎应用场景2 Drools初体验2.1 构建项目2.2 案例描述 2.3 代码实现3 Drools语法介绍3.1 规则文件的组成3.2 规则体语法结构3.3 Pattern模式匹配 ...

    Drools规则引擎从入门到精通源码

    从基础讲起,结合应用场景,由浅到深细化讲解drools规则引擎的的相关知识,并结合具体实例,演示功能的使用和注意事项。后面通过搭建具体的项目并结合springboot框架联合使用Drools的相关知识包括决策表的使用,囊括...

    Drools规则引擎Drools规则引擎

    Drools是Jboss公司旗下一款开源的规则引擎,它完整的实现了Rete 算法;提供了强大的Eclipse Plugin开发支持; 通过使用其中的DSL(Domain Specific Language),可以实现用自然语言方式来描述业务规则,使得业务分析...

    Drools 规则引擎的介绍及应用

    Drools 规则引擎的介绍及应用,全面介绍了Drools的规则集文件语法

    Drools规则引擎实现原理及示例

    Drools规则引擎是一种嵌套在应用程序中的组件, 是用Java语言编写的开放源码规则引擎,使用Rete算法对所编写的规则求值。 它实现了将业务规则从程序代码忠分离出来,规则引擎使用特定的语法编写业务规则,规则引擎...

    Drools规则引擎及教程

    Drools规则引擎及教程,需在jdk1.6下运行,不缺jar包

    drools规则引擎系统概要设计.pdf

    drools规则引擎系统概要设计.pdf

    Drools规则引擎介绍.ppt

    drools规则引擎,了解规则匹配,专家系统的可以学习一下,java的同学也可以学习一下,各大厂也在用哦

    Drools规则引擎手册.zip

    一个关于drools规则引擎的说明文档,说明的很详细,包括对drools的简介,运行方式介绍,语言编写教程,集成和测试教程,同时包括一些案例,应该是由外文文档进行的翻译

    Drools规则引擎

    描述Drools规则引擎的相关内容,并讲述java环境下如何集成drools工具实现规则的推理

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

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

    Drools规则引擎介绍

    Drools规则引擎介绍,Drools规则引擎介绍,Drools规则引擎介绍

    Drools规则引擎样例系统

    基于Drools规则引擎开发的一个规则验证样例系统,包含java代码源码、规则源码及所依赖的jar包。

    Drools规则引擎技术分享

    -  规则引擎概述 - 什么是规则引擎 - 规则引擎方案对比 - 使用规则引擎的优势 - 规则引擎应用场景 - Drools介绍 - 开发实现 - 规则引擎构成 - 相关概念说明 - 规则引擎执行过程 - Drools基础语法 - **...

    论文研究-Drools规则引擎的开发应用 .pdf

    Drools规则引擎的开发应用,艾建锋,,规则引擎技术是一项很有吸引力的技术。本文首先介绍了规则引擎的相关概念及其基本组成。然后重点介绍了Java规则引擎技术的规范和��

    drools规则引擎实例

    drools工作台6.5.0 该技术指南为开源的,内容少一些, 但做入门是没有什么问题的,如果有需要可以联系我 特此声明: 小编出新版本的Drools技术指南的文档啦,相比之前的免费版添加了如下特点: 1. 内容更加全面,更...

    Drools 规则引擎开发教程

    Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需...

    从Drools规则引擎到风控反洗钱系统v0.3.2.pdf

    从Drools规则引擎到风控反洗钱系统v0.3.2.pdf ,此版本文档在不断刚更新升级中。

    Drools规则引擎.ppt

    Drools规则引擎

Global site tag (gtag.js) - Google Analytics