流口水的LHS中的异常捕获
我有一个问题,其中流口水规则的当子句抛出一个MethodNotFoundException。我正在寻找一种方法来弄清楚它在运行时是哪个规则,以便能够将其从要使用的规则列表中删除。
规则示例
Rule "FooBar"
when
$V1 : Foo ( ) AND
$V2 : FooBar( ) from $V1.getGoodMethod() AND
$V3 : FooBarBar( status == "FooBar" ) from $V2.getBadMethod()
reply : FooFooBar()
then
reply.getList().add("FooBar");
end
因此,FooBar上的getBadMethod不存在。我想要一种方法来判断它是什么规则,并将其从要使用的规则列表中删除。
尝试和失败的解决方案:
我尝试扩展DefaultAgendaEventListener并覆盖exitrearactionFired方法,以将要触发的规则添加到列表中。我希望列表中的最后一个会是抛出错误的那个,但遗憾的是它没有以这种方式工作。
我现在尝试在所有规则之前添加“始终正确”的规则。它们记录其后出现的规则的名称。问题是当“WHEN”子句中存在异常时,不会记录任何内容。就好像在发生上述异常时不会触发任何规则一样。
问题都在于动态流口水生成代码。我想采取双管齐下的方法来修复生成代码,并捕获本文中列出的异常。
附注:我确实检查了构建器中的错误。我没有从下面的代码收到任何错误。
KnowledgeBuilderErrors errors = builder.getErrors();
if (!errors.isEmpty()) {
for (KnowledgeBuilderError error : errors) {
...
}
}