我正在使用以下代码通过简单的测试规则集来测试DROOLS 7.0:
KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
KieSession ksession = kc.newKieSession("DroolsTestKS");
...
即使规则.drl文件中存在错误,也将返回KieSession实例,并且不会引发任何异常。我想检查规则编译的结果。 Drools参考资料(请参阅4.2.2.4)说,可以通过以下方式获得构建结果:
KieServices kieServices = KieServices.Factory.get();
KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();
assertEquals( 0, kieBuilder.getResults().getMessages( Message.Level.ERROR ).size() );
其中 kfs 是一个KieFileSystem实例,但是手册前几页中有关如何构建这样的KieFileSystem的示例更加复杂,恕我直言。 用我在本文开头显示的简单两行代码创建KieSession时,是否有办法获得Session buid结果(即访问 KieBuilder )?
答案 0 :(得分:1)
我正在回答我的问题,因为我刚刚找到了解决方法:
KieContainer kc = KieServices.Factory.get().getKieClasspathContainer();
Results rs = kc.verify("KBase");
if (rs.hasMessages(Level.ERROR)) {
System.out.println("ERRORI DROOLS: " + rs.getMessages());
... // handle this
}
我想知道通过这种验证,实际规则编译是否执行了两次……但是无论如何,这种方法似乎可行。