如何获取 KieSession 构建的结果(即规则编译器错误)?



我正在使用以下代码使用简单的测试规则集测试 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 实例,但本手册前几页中关于如何构建这样一个 KieFile System 的示例要复杂得多,恕我直言,有点混乱。 有没有办法在使用我在本文开头显示的简单两行代码创建 KieSession 时获得会话构建结果(即访问KieBuilder(?

我正在回答我的问题,因为我刚刚找到了一个解决方案:

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
}

我想知道通过此验证,实际的规则编译是否执行两次......但无论如何,这种方法似乎有效。

最新更新