模板功能这里不多说了。在
章节有说明。这里重点介绍一下 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 属性了。也属于间接性的做父子级类关联。
<?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实战陆续发布中………
扫描下方二维码关注公众号 ↓↓↓↓↓↓↓↓↓↓