在 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 文件是 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