小编Mas*_* T.的帖子

Drools的LHS中的异常捕获

我有一个问题,其中一个drools规则的when子句抛出一个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
Run Code Online (Sandbox Code Playgroud)

因此,FooBar上的getBadMethod不存在.我想要一种方法来告诉它是什么规则,并将其从要使用的规则列表中删除.

尝试和失败的解决方案:

我已经尝试扩展DefaultAgendaEventListener并覆盖beforeActivationFired方法,将要触发的规则添加到列表中.我希望列表中的最后一个是抛出错误的那个,但遗憾的是它并没有那么成功.

我现在尝试在我的所有规则之前添加"始终为真"的规则.它们记录了它之后的规则的名称.问题是当"WHEN"子句中存在异常时,不会记录任何内容.这就好像在发生上述异常时不会触发规则.

问题都在于动态drools生成代码.我想采取双管齐下的方法来修复生成代码,并捕获像本文中列出的异常.

旁注:我确实检查了构建器中的错误.我从下面的代码中没有收到任何错误.

KnowledgeBuilderErrors errors = builder.getErrors();

if (!errors.isEmpty()) {
    for (KnowledgeBuilderError error : errors) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

java drools

16
推荐指数
1
解决办法
1116
查看次数

Windows和Linux的文件路径名

下面是我的Windows目录的路径.通常路径应该是\而不是//但两者似乎都有效.

__CODE__

对于Linux路径也是如此.法线应该有/而不是//.下面和上面的代码片段工作正常,将获取指定文件的内容.

__CODE__

所以,两者都使用奇怪的文件路径声明,但两者似乎都运行正常.请详细说明.

例如,

__CODE__ __CODE__

java

9
推荐指数
1
解决办法
3万
查看次数

标签 统计

java ×2

drools ×1