17、Drools——KieHelper的用法,通过模板的例子说明

本文介绍如何在Drools 6.4中不使用kmodule.xml配置文件即可实现规则引擎的功能。通过具体示例代码展示了如何创建规则、编译模板并运行规则。此外还涉及了如何利用模板属性进行数据赋值,以及通过不同方式调用模板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板功能这里不多说了。在 章节有说明。这里重点介绍一下 Drools6.4不通过 kmodule.xml就可以实现规则的方法

ObjectDataCompiler converter = new ObjectDataCompiler();
//赋值 给模板属性
Collection<TestPersonSet> cfl = new ArrayList<TestPersonSet>();
cfl.add(new TestPersonSet(10, "张三"));
cfl.add(new TestPersonSet(20, "李四"));

InputStream dis = ResourceFactory.newClassPathResource("rules/testdrltem/Item2.drl", TestTemplate01.class).getInputStream();
String drl = converter.compile(cfl, dis);

KieHelper helper = new KieHelper();
helper.addContent(drl, ResourceType.DRL);
KieSession ksession = helper.build().newKieSession();

Person p = new Person();
p.setAge(20);
ksession.insert(p);

int i = ksession.fireAllRules();
System.out.println(p.getName() + "    " + i + "次");
ksession.dispose();
首先分析上面的代码
ObjectDataCompiler converter = new ObjectDataCompiler(); 另一种模板调用的方式
TestPersonSet   这里指的是一个javabean  bean中的属性与模板对应,用于赋值。
InputStream dis = ResourceFactory.newClassPathResource("rules/testdrltem/Item2.drl", TestTemplate01.class).getInputStream();将drl文件放到一个输入流中,
TestTemplate01.class 表示当前类
String drl = converter.compile(cfl, dis);这表示生成后的drl文件内容
 
 
 
 
首先分析上面的代码
ObjectDataCompiler converter = new ObjectDataCompiler () ; 另一种模板调用的方式TestPersonSet 这里指的是一个javabean bean中的属性与模板对应,用于赋值。 InputStream dis = ResourceFactory . newClassPathResource ( "rules/testdrltem/Item2.drl" , TestTemplate01 .class ) . getInputStream () ;将drl文件放到一个输入流中,
TestTemplate01.class 表示当前类
 
 
String drl = converter.compile(cfl, dis);这表示生成后的drl文件内容
KieHelper helper = new KieHelper(); KieHelper 是 Drools 提供的工具类,可用于编译 DRL 规则文件,新建会话等
helper . addContent ( drl , ResourceType . DRL ) ;渲染模板的流程,先将数据封装为 DataProvider,然后通过 DataProviderCompiler 使用 DataProvider 将模板编译为 DRL。
 
 


在模板中要注意:template 的属性,比较图上所说age name,是有get方法的,通过实验得到,只要是实现了get方法的属性,例如,Person 类中有属性school(注:也是一个javabean)  但没有count(注:此值在school中) 属性,我们就可以通过写一个getCount()的一个方法,就可以在模板中直接用count 属性了。也属于间接性的做父子级类关联。

kmodule.xml文件中也没有具体的指定package

 
  
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.drools.org/xsd/kmodule">
   <kbase name="Rulebasedrl" packages="rules.testdrl">
      <ksession name="Rulebasedrl-session" />
   </kbase>
    <kbase name="TemplatesKB" packages="rules.testdrt">
        <ruleTemplate dtable="rules/testdrt/ExampleCheese.xls" template="rules/testdrt/Cheese.drt" row="2" col="2"/>
        <ksession name="TemplatesKS"/>
    </kbase>
</kmodule>  


关于在drools中 只指定单个 drl 决策表xls 之类的说明
具体的java代码
public  void ruleDaseTestxls() throws IOException {
Resource dis = ResourceFactory.newClassPathResource("rules/testxls/RuleTest.xlsx", TestTemplate01.class); 
KieHelper helper = new KieHelper();
helper.addResource(dis,ResourceType.DTABLE);
KieSession ksession = helper.build().newKieSession();
    int i = ksession.fireAllRules();
System.out.println( "     " + i + "次");
ksession.dispose();
}
Resource 等同
 
 

下面是小编的微信转帐二维码,小编再次谢谢读者的支持,小编会更努力的

----请看下方↓↓↓↓↓↓↓

百度搜索 Drools从入门到精通:可下载开源全套Drools教程

深度Drools教程不段更新中:


更多Drools实战陆续发布中………

扫描下方二维码关注公众号 ↓↓↓↓↓↓↓↓↓↓



DroolsKieHelper是一个用于创建和管理规则引擎的实用类。通过使用KieHelper,我们可以动态地创建KieSession并添加规则内容。在Drools中,KieSession是与规则引擎进行交互的主要接口。通过将规则内容添加到KieHelper,我们可以将规则动态加载到KieSession中,然后使用该KieSession执行规则引擎的操作。 具体的步骤如下: 1. 首先,我们需要创建一个KieHelper对象,并使用addContent方法将规则内容添加到KieHelper中。规则内容可以采用Drools标准格式,并使用.drl文件类型。 2. 接下来,我们可以通过调用kieHelper.build().newKieSession()方法来构建和创建一个新的KieSession对象。这个新的KieSession将包含之前添加的规则内容。 3. 一旦我们创建了KieSession,我们可以使用它来执行规则引擎的操作。根据规则名称或名称前缀进行过滤执行是其中的一种常见操作。 3.1. 如果我们想要根据规则名称完全匹配的方式执行规则,我们可以使用new RuleNameEqualsAgendaFilter(ruleName)方法来创建一个规则名称过滤器。然后,我们可以使用kieSession.fireAllRules()方法来触发与该过滤器匹配的规则。 3.2. 如果我们想要根据规则名称前缀匹配的方式执行规则,我们可以使用new RuleNameStartsWithAgendaFilter(rulePrefix)方法来创建一个规则名称前缀过滤器。然后,我们可以使用kieSession.fireAllRules()方法来触发与该过滤器匹配的规则。 综上所述,使用DroolsKieHelper类可以方便地动态创建KieSession,并根据规则名称或名称前缀进行过滤执行规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值