Drools 规则引擎环境搭建 (2)

在 Main.java 类中编写测试方法,让规则文件跑起来:

package com.sharpcj; import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; public class Main { public static void main(String[] args){ new Main().test(); } private void test(){ // 构建KieServices KieServices ks = KieServices.Factory.get(); KieContainer kc = ks.getKieClasspathContainer(); // 获取kmodule.xml中配置中名称为ksession-rule的session,默认为有状态的。 KieSession kSession = kc.newKieSession("ksession1"); Product fan = new Product("电扇", 280); Product washer = new Product("洗衣机",2200); Product phone = new Product("手机", 998); kSession.insert(fan); kSession.insert(washer); kSession.insert(phone); kSession.fireAllRules(); kSession.dispose(); } }

运行结果:

Drools 规则引擎环境搭建

三、其它说明 1.不使用配置文件形式

上面使用的配置文件形式加载 drools 文件是 drools 7.x 版本才有的,在此之前,我们通常使用代码形式加载规则文件,当然在 drools 7.x 中依然可以使用这种方式,只不过有些 API 已经过时了,或者更新了。下面用代码形式加载规则文件代码如下:

/** * 不使用 drools 7.x 配置文件 */ private void test2(){ KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newClassPathResource("demo/rules/product.drl"), ResourceType.DRL); KnowledgeBuilderErrors errors = kbuilder.getErrors(); if (errors.size() > 0) { for (KnowledgeBuilderError error: errors) { System.err.println(error); } throw new IllegalArgumentException("Could not parse knowledge."); } // 注释掉的是 drools 6.x API /*KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();*/ // drools 7.x API InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); Collection<KiePackage> pkgs = kbuilder.getKnowledgePackages(); kbase.addPackages(pkgs); KieSession kieSession = kbase.newKieSession(); Product fan = new Product("电扇", 280); Product washer = new Product("洗衣机",2200); Product phone = new Product("手机", 998); kieSession.insert(fan); kieSession.insert(washer); kieSession.insert(phone); kieSession.fireAllRules(); kieSession.dispose(); }

运行程序依然能得到相同的结果。

2.规则文件的类型

规则文件除了 drl 文件之类,还有其它类型的文件,如 xls, csv。

四、附录

Drools 官网首页: https://www.drools.org/
Drools 官方文档: https://docs.jboss.org/drools/release/7.12.0.Final/drools-docs/html_single/index.html

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzxpxz.html