drools statefullSession中的异常处理

时间:2015-12-07 21:58:31

标签: drools drools-fusion

我不确定在规则的RHS中处理异常的正确方法是什么。

我有一个statefullSession(drools版本5.5),一直停止射击,直到被调用为止。

Runnable firingTask = new Runnable() {
public void run() {
    ksession.fireUntilHalt();
};

taskExecutor.execute(firingTask);

问题是我的代码的某些部分被调用作为结果部分的一部分可能会引发异常。如果发生这种情况,就不会发生激烈的激活

我的问题是: 有没有正确的方法如何将应用程序异常传播回drools?或者是否必须在try / catch块中运行任何RHS代码,这些异常应该作为一些其他事实传播到会话中?

1 个答案:

答案 0 :(得分:1)

异常处理的一般策略也适用于此:仅将结果视为由于fireUntilHalt而被调用的静态方法。

如果应该或必须在RHS代码的上下文中处理异常,则必须使用try-catch语句。否则,传播异常并且不执行RHS代码的其余部分。 (这可能包括遗漏某些基本陈述,例如修改或插入或撤回,这可能会影响会话的进度。)

如果您尝试org.drools.runtime.rule.ConsequenceException尝试例外fireUntilHalt,则可以再次致电fireUntilHalt。前一段的评论也适用于此。

如何记录异常完全取决于您,但是将Exception对象作为事实插入(并将规则编写为理由而不是它们?)似乎是非常规的。