`
xiaoye4188
  • 浏览: 30968 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Drools记录执行的规则

 
阅读更多

通过debug跟踪Drools的执行源码,实现执行规则的记录(输出)功能。

 

在ksession.fireAllRules();  进入类StatefulKnowledgeSessionImpl.fireAllRules()中

 

类StatefulKnowledgeSessionImpl主要涉及的成员变量及方法:

 

public ReteooWorkingMemory session;
public int fireAllRules() {
          return this.session.fireAllRules();
}

 

 其中ReteooWorkingMemory 继承自AbstractWorkingMemory

 故上面return 调用的是AbstractWorkingMemory的fireAllRules()方法

 

AbstractWorkingMemory主要涉及的成员变量及方法:

 

protected InternalAgenda agenda;

public synchronized int fireAllRules() throws FactException {
          return fireAllRules( null, -1);
}

public synchronized int fireAllRules(final AgendaFilter agendaFilter,
                                         int fireLimit) throws FactException {
        if ( isSequential() ) {
            for ( Iterator it = this.liaPropagations.iterator(); it.hasNext(); )                
            {
                ((LIANodePropagation) it.next()).doPropagation( this );
            }
        }

        // do we need to call this in advance?
        executeQueuedActions();

        int fireCount = 0;
        if ( this.firing.compareAndSet( false, true ) ) {
            try {
                fireCount = this.agenda.fireAllRules( agendaFilter,fireLimit);
            } finally {
                this.firing.set( false );
            }
        }
        return fireCount;
    }

调用了agenda.fireAllRules()方法,而DefaultAgenda实现了InternalAgenda接口

 

类DefaultAgenda所涉及的方法:

 

public int fireAllRules(AgendaFilter agendaFilter, int fireLimit) {
        this.halt.set( false );
        int fireCount = 0;
        while ( continueFiring( fireLimit ) &&fireNextItem( agendaFilter )) {
            fireCount++;
            fireLimit = updateFireLimit( fireLimit );
            this.workingMemory.executeQueuedActions();
        }
        if ( this.focusStack.size()==1 && getMainAgendaGroup().isEmpty() )    
        {
            getMainAgendaGroup().setActive( false );
        }
        return fireCount;
    }

其中fireNextItem方法如下:
public boolean fireNextItem(final AgendaFilter filter) throws ConsequenceException {
        boolean tryagain, result;
        do {
            tryagain = result = false;
            final InternalAgendaGroup group = (InternalAgendaGroup) getNextFocus();
            // if there is a group with focus
            if ( group != null ) {
                final AgendaItem item = (AgendaItem) group.getNext();
                // if there is an item to fire from that group
                if ( item != null ) {
                    // if that item is allowed to fire
                    if ( filter == null || filter.accept( item ) ) {
                        // fire it
                  System.out.println(item.getRule().getName()); //输出执行的规则名
                  fireActivation( item );
                        result = true;
                    } else {
                        // otherwise cancel it and try the next
                        final EventSupport eventsupport = (EventSupport)  this.workingMemory;             eventsupport.getAgendaEventSupport().fireActivationCancelled( item,                                                                             this.workingMemory,                                                                                    ActivationCancelledCause.FILTER );
                        tryagain = true;
                    }
                }
            }
        } while ( tryagain );
        return result;
    }

   使用ystem.out.println(item.getRule().getName())输出执行到的规则名

 

分享到:
评论

相关推荐

    Drools规则执行顺序

    4. **并行执行与约束**:Drools 还支持并行执行规则,这意味着多个规则可以同时触发并执行。然而,如果存在规则之间的约束(如互斥条件),Drools 会确保这些规则不会同时执行。 5. ** Agenda 组**:Agenda 是 ...

    jboss drools5.5 规则流完整代码

    - **规则引擎**: 主要负责处理和执行规则,Drools 的核心就是规则引擎。 - **工作流引擎**: 处理业务流程控制,如任务分配、流程跳转等,Drools 5.5中结合了规则引擎,实现了规则与流程的集成。 3. **规则流创建*...

    drools规则引擎开发实例

    在信用卡申请实例中,可能还包含了错误处理和日志记录机制,确保在规则执行过程中出现问题时能够得到适当的反馈。此外,drools提供了丰富的API和工具,如Guvnor(现称为KieWorkbench),用于规则的管理、测试和版本...

    Drools-规则引擎

    - ** Agenda**:议程是Drools 决策过程的管理者,它负责根据规则的优先级和冲突解决策略来安排和执行规则。 - **KieSession**:KieSession 是与Drools 交互的主要接口,用于加载规则、插入事实、触发规则执行等...

    Drools规则引擎介绍

    3. 规则推理:Drools的推理引擎(Reasoner)会根据加载的规则和当前的事实进行匹配,找出符合条件的规则并执行其动作。 4. 结果反馈:执行结果会被返回给应用程序,以便进一步处理。 在实际应用中,Drools可以广泛...

    drools6.5规则引擎封装实例

    6. **执行规则**: 调用KieSession的`fireAllRules()`方法,这会触发所有符合条件的规则。 7. **处理结果**: 规则执行后,可以监听到规则的触发情况,对结果进行处理。 在实际项目中,封装Drools可能还需要考虑以下...

    springboot-drools

    2. **创建KieSession**:在Spring Boot的配置类或服务类中,初始化Drools的KieContainer,用于加载规则,并创建KieSession,这是执行规则的地方。 3. **定义规则**:编写DRL(Drools Rule Language)文件,这些文件...

    Drools4 insurance例子

    开发者可以通过Drools的工作台(Drools Workbench)或直接在代码中加载规则文件,然后创建并实例化业务对象,调用Drools API来执行规则。通过日志和测试用例,可以观察和调试规则执行的过程。 7. **最佳实践** - ...

    java规则引擎 -- Drools

    2. **规则引擎**:解析、编译并执行规则,它负责根据事实(应用程序中的数据)来触发规则的执行。 3. **工作内存**:工作内存是规则引擎运行时的数据结构,其中包含事实(输入数据)、规则和结果(输出数据)。 4. *...

    drools入门指南(基于drools6.2).pdf

    接着,执行规则引擎的`fireAllRules()`方法来触发匹配的规则。 通过以上步骤,我们完成了Drools的简单入门示例。这不仅展示了如何定义规则和Fact对象,而且还演示了如何集成Drools到现有的Java项目中。 #### 三、...

    Drools入门手册.ppt

    规则引擎API还考虑了异常处理和日志记录,尽管它们本身并不直接提供这些功能,但可以与其他Java安全框架(如JAAS)集成以实现安全控制和日志记录。 在实际应用中,Drools可用于各种场景,如个人理财决策、风险评估...

    rule-engine:在drools基础上实现业务规则可配置化

    开发者可以通过API接口加载规则文件(.drl),创建KieSession,然后执行规则。 ** 实现业务规则可配置化的关键步骤 ** 1. **规则定义**:使用DRL语言编写业务规则,这种语言类似于SQL,但用于表达条件和行动。规则...

    drools 7.1中文文档pdf完整版本

    Drools提供了用户指南,引导用户如何从基础开始使用该规则引擎,包括执行控制、推理、使用逻辑对象进行真相维护、电子表格中的决策表以及记录功能。其中,决策表是一种将复杂逻辑规则简化表示的方法,它允许用户以...

    card_apply_drools.rar_applycreditcardde_drools_drools rule table

    规则库存储所有定义好的规则,工作内存用于存放运行时的数据,议程则负责管理何时以及如何执行规则。在信用卡审批场景中,申请人信息会被加载到工作内存,Drools会根据这些信息触发相应的规则并执行,最后得出审批...

    drools 部署后tomcat配置打包

    2. **kie-server**:这是实际执行规则的组件,它接收来自kie-drools-wb或其他客户端的请求,执行规则并返回结果。kie-server 可以作为一个独立的服务运行,也可以嵌入到其他应用中。 接下来,我们将讨论如何将...

    drools的PPT介绍与工程实例

    4. **触发规则**:调用 KieSession 的 fireAllRules() 方法,让规则引擎开始匹配并执行规则。 5. **响应结果**:根据议程中的规则执行情况,系统会生成审批决策,并更新申请人对象的状态。 6. **日志记录**:为了...

    Drools资料

    Drools是一个开源的业务规则管理系统(BRMS),它支持业务逻辑的编写、执行和管理。该系统基于专家系统和产生式规则引擎原理,允许用户通过声明式的语言来定义业务规则。Drools提供了多种功能模块,包括规则引擎、...

    Java端集成drools6.4.0.Final

    - 创建KieServices:这是Drools的核心服务接口,用于创建和管理KieContainer,它是执行规则的容器。 - 加载KieModule:KieModule是Drools中的模块概念,包含了规则文件。可以通过KieServices读取规则资源并构建...

    drools123s

    5. 规则执行监控:通过Audit Trail和Event Log,Drools可以记录规则执行的过程,便于后期分析和优化。 三、Drools 的应用场景 1. 金融风险评估:银行和金融机构可以使用Drools进行贷款审批、信用评分等风险控制。 ...

    drools-7.10中文(浏览器翻译文档)

    5. **用户指南**:这部分是Drools的实际使用手册,包括了如何使用Drools进行基础规则定义、执行控制、推理操作、维护逻辑对象的真相、决策表的电子表格处理、以及记录日志等。 6. **运行时和语言**:此章节涉及...

Global site tag (gtag.js) - Google Analytics