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实战陆续发布中………

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值