`
995998760
  • 浏览: 35373 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Drools(kie-spring)

阅读更多

       一个星期前,经理要求用drools,能动态的更改佣金规则。

       我上网搜索了一下,drools现在稳定版本到了6.3.0.Final了,我看官网推荐使用kie-spring。我辣么耿直的人果断就使用了。后来就后悔了,国内用kie-spring的真少,英文又不怎么好的我,需要经常看文档(表现为经常加班,熬夜)。好了,废话不多说,进入正题

        第一步:使用maven导入jar包,在maven中央库http://search.maven.org/搜索kie-spring和drools

              <dependency>

           <groupId>org.drools</groupId>

           <artifactId>drools-core</artifactId>

           <version>6.3.0.Final</version>

       </dependency>

       <dependency>

           <groupId>org.kie</groupId>

           <artifactId>kie-spring</artifactId>

           <version>6.3.0. Final</version>

       </dependency>

    

第二步,新建spring-drools.xml

       <kie:kmodule id="kmodule1">

         <kie:kbase name="kbase1" packages="drools.rules" ><!—父级和子级目录用 . -->

           <kie:ksession name="ksession1"><!—这个kie:ksession可以不写 -->

                  <kie:consoleLogger/>

           </kie:ksession>

         </kie:kbase>

       </kie:kmodule>

       <bean id="kiePostProcessor" class="org.kie.spring.KModuleBeanFactoryPostProcessor"/>

   

       注意:其中KModuleBeanFactoryPostProcessor这个bean一定得注解,

详细介绍请看https://docs.jboss.org/drools/release/6.1.0.Final/drools-docs/html/ch.kie.spring.html

 

第三步,写rules文件

          

       package com.sample

 

import com.sample.DroolsTest.Message;

 

rule"Hello World"

    when

        m : Message( status == Message.HELLO, myMessage : message )

    then

        System.out.println( myMessage );

        m.setMessage( "Goodbye cruel world" );

        m.setStatus( Message.GOODBYE );

        update( m );

end

 

rule"GoodBye"

    when

        Message( status == Message.GOODBYE, myMessage : message )

    then

        System.out.println( myMessage );

end

      

因为不能贴项目代码,所以用helloworld,并且假设你们知道rules规则,

       不知道的请看http://docs.jboss.org/drools/release/6.3.0.Final/drools-docs/html/index.html

第四步:

       Junit4测试

               在类名前加上注解

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:drools/spring-drools.xml")

 

注解该属性

@Autowired

private KieBase kbase;

 

       @Test

       publicvoid test(){

       KieSession kSession = kbase.newKieSession();

       //Object obj;一个赋值的java对象

 

       kSession.insert(obj);

       kSession.fireAllRules();

}

 

Main方法

@SuppressWarnings("resource")

publicstaticvoid main(String[] args) {

ClassPathXmlApplicationContext context =

new ClassPathXmlApplicationContext( "drools/spring-drools.xml" ); 

           //Object obj;一个赋值的java对象

StatefulKnowledgeSession kSession = (StatefulKnowledgeSession) context.getBean( "ksession1" );

    kSession.insert(obj);

    kSession.fireAllRules();

       

}

 

 

补充:

       这次开发我遇到一个坑

       rules时,有这样一个需求,

       if(最外面一层){

                 if(里面一层){

                    

   }

   if(里面二层){

 

   }

         ……

  }

  ……

rule"TOKEN A"

    salience 99

    agenda-group"TOKEN A"

    auto-focustrue

    when

       BrokerageBean( typeList.size() == 1 )

    then

       kcontext.getKnowledgeRuntime().getAgenda().getAgendaGroup("TOKEN A1").setFocus();//

       kcontext.getKnowledgeRuntime().getAgenda().getAgendaGroup("TOKEN A2").setFocus();//

end

 

 

rule"TOKEN A1"

    salience 99

    agenda-group"TOKEN A1"

    when

       $BB : BrokerageBean( $typeList : typeList )

       $TIB : TypesOfInsuranceBean( typeId == 1) from $typeList

       InsuranceBean( id == 3 ) from $TIB.insuranceList

       //exists ( $TIB : TypesOfInsuranceBean( typeId == 1) from $typeList

       //and InsuranceBean( id == 3 ) from $TIB.insuranceList )

    then

       DefaultDroolsRules.log.info("执行-----------TOKEN A1");

       //$BB.setInsuranceRate("32","0","0");

       DefaultDroolsRules.setBb($BB,32,0);

end

 

rule"TOKEN A2"

    salience 99

    agenda-group"TOKEN A2"

    when

       $BB : BrokerageBean( $typeList : typeList )

       TypesOfInsuranceBean( typeId == 1) from $typeList

       //exists ( TypesOfInsuranceBean( typeId == 1) from $typeList )

    then

       DefaultDroolsRules.log.info("执行-----------TOKEN A2");

       //$BB.setInsuranceRate("24","0","0");

       DefaultDroolsRules.setBb($BB,24,0);

End

 

我期望是TOKEN A1 TOKEN A2都能触发,但结果是只有TOKEN A2触发了,我调换了下的位置,发现只有TOKEN A1触发了,这有点“堆”的意思。

我搜了一下官网上的解决方案,用exists,发现还不行,网上各种找,都没找到,就这样要放弃。然后项目讨论,不需要这个DefaultDroolsRules这个工具类的静态方法,所以,我换成$BB.setInsuranceRate("24","0","0");,然后一运行,发现运行结果按照我原本预想那样。

 

突然之间对drools的源码很感兴趣,想研究下drools的源码,只是各种原因没能再深入了解了,只能到这里告一段落了。

 

 

 

 

 

               

2
4
分享到:
评论
3 楼 sducxh 2016-03-24  
我们用drools drl可读性不好,而且复杂的表达式逻辑执行效率不行,后来自己做了一套规则引擎
2 楼 995998760 2016-03-17  
我也没完全弄懂kie是什么东西,只是最新的drools和spring结合的jra包叫做kie-spring
1 楼 string2020 2016-03-16  
kie是什么东西?

相关推荐

    fast-drools-spring-boot-starter:简易流口水,版本8.0.7

    快速流口水介绍fast-drools-spring-boot-starter将Drools与Springboot集成在一起,为规则配置和管理提供了更有效,更复杂的模型。 它能够动态更新有关热部署的规则。联系请随时与以下联系人询问我任何问题。 Drools...

    规则引擎Drools入门实战案例

    Spring整合Drools Spring Boot整合Drools WorkBench Drools实战 个人所得税计算器 信用卡申请 保险产品准入规则 规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的...

    springboot集成drools实现重新加载规则

    &lt;artifactId&gt;kie-spring-boot-starter &lt;version&gt;7.52.0.Final ``` 接下来,我们需要配置Drools规则的资源路径,以便Spring Boot能正确加载规则文件(通常为.drl格式)。这可以通过创建一个`KieFileSystem`实例并...

    drools6.4+spring集成

    在`spring-drools-demo`这个项目中,可能包含了一个简单的示例,展示了如何设置和运行Drools规则。通过分析源代码,你可以看到如何将Drools的API与Spring的配置和bean管理结合使用,以及如何在实际业务场景中触发和...

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

    10. **Drools整合**:描述了Drools与其他技术栈的整合,例如通过Drools命令和API、CDI(上下文依赖注入)集成、与Spring框架集成、与白羊座蓝图(ch.kie.blueprint)集成,以及Android和Apache Camel的集成等。...

    workBench +SSM +drools+动态发布

    SSM和kie-workBench的结合使得开发者可以轻松地将kie-workBench中创建的Drools规则导入到SSM应用中,并实现动态部署。 在实际项目中,开发团队首先会在kie-workBench中定义和测试业务规则,然后将这些规则导出并...

    springdrools:带有 JBoss Drools 和 KIE 的 Spring Boot 示例项目

    首先,我们来看标题"springdrools:带有 JBoss Drools 和 KIE 的 Spring Boot 示例项目",这表明该项目是一个基于Spring Boot的实例,它利用了JBoss Drools和KIE(Knowledge-Base and Inference Engine)组件。...

    Drools技术指南-yaml.7z

    结合SpringBoot,Drools可以通过Spring的依赖注入和配置管理实现更灵活的部署和管理。可以使用SpringBoot的Application上下文来初始化Drools的KieContainer和KieSession,同时利用Spring的事件机制,实现规则引擎的...

    规则引擎drools与spring整合

    ** Drools 规则引擎与 Spring 整合详解 ** Drools 是一个开源的、基于Java的业务规则管理系统(BRMS),它提供了一个规则引擎,用于在应用程序中执行业务规则。Spring 框架是Java开发中最常用的应用框架,它简化了...

    drools 开发所需要的程序包集合

    Drools是一款强大的规则引擎,它基于Java平台,用于实现业务规则管理和决策自动化。这个压缩包集合包含了开发Drools应用程序所需的...同时,了解如何与其他Java技术(如Spring框架)集成也是提升Drools应用效率的关键。

    Mastering JBoss Drools 6 for Developers_And_SourceCode.zip

    本文档还包含源代码。 Mastering JBoss Drools 6 will ... Towards the end, this book will take you through the integration of Drools with the Spring and Camel frameworks for more complex applications.

    JBPM开发指南中文版

    2. **规则编写**: 利用Drools规则语言(DRL)编写业务规则,通过kie-workbench导入到项目中。 3. **流程部署**: 将流程定义和相关资源打包成KJAR(Kie Jar),并上传到kie-server。 4. **流程启动**: 通过kie-server...

    Ecplise下用maven建drools web项目

    在Web项目中,Drools可以通过Servlets、Spring等框架集成,以处理HTTP请求并返回响应。 以上就是创建Eclipse中的Maven Drools Web项目的基本步骤和相关知识点。在整个过程中,注意配置正确的Maven依赖、项目类型...

    springboot+drools动态模板引擎

    &lt;artifactId&gt;kie-spring 版本号 ``` 确保选择与SpringBoot兼容的Drools版本。 接下来,我们需要创建Drools的规则文件(`.drl`)。DRL是一种规则定义语言,用于编写业务规则。例如: ```drl rule "ExampleRule" ...

    fuseBrmsExample

    熔断器示例 1.) features:addurl mvn:org.drools/drools-karaf-features/...module drools-templates drools5-spring drools5-camel drools-decisiontable drools-jpa kie kie-spring kie-aries-blueprint kie-camel

    Drools V6.x 开发文档

    - **新 KIE 名称**:随着 Drools 发展,引入了 KIE (Knowledge Integration Environment) 品牌,用以统一系列工具和服务。 - **Maven 项目与模块**:所有项目现在都遵循 Maven 标准结构,方便依赖管理和构建部署。...

    fixer-batch-process:演示Spring 4,Spring Batch 3,Drools 6和KIE Workbench 6的集成

    《整合Spring 4、Spring Batch 3、Drools 6与KIE Workbench 6:批量处理解决方案》 在IT行业中,批处理是处理大量数据的重要方式,尤其是在企业级应用中。本项目"fixer-batch-process"旨在演示如何将四个强大的技术...

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

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

Global site tag (gtag.js) - Google Analytics