Drools 在drl中收回事实时的NullpointerException
我在运行规则时收到一个Drools 在drl中收回事实时的NullpointerException,drools,Drools,我在运行规则时收到一个NullPointerException;我简化了DRL文件以重现问题 以下是我的版本: 基尤版本:7.53.0.1最终版本 jboss/business central workbench showcase:最新版本 当我触发此规则时,Drools抛出一个NullPointerException 我已经在平等模式和身份模式下进行了测试 在相等模式下,除非先前将事实新字符串(“myString”)插入工作内存,否则它将失败 这是虫子吗?我如何避免它 谢谢,萨维里奥我不知
NullPointerException
;我简化了DRL文件以重现问题
以下是我的版本:
- 基尤版本:7.53.0.1最终版本
- jboss/business central workbench showcase:最新版本
NullPointerException
我已经在平等模式和身份模式下进行了测试
在相等模式下,除非先前将事实新字符串(“myString”)
插入工作内存,否则它将失败
这是虫子吗?我如何避免它
谢谢,萨维里奥我不知道你在你的规则里想做什么
retract
操作旨在从工作记忆中删除一个事实。在代码中,您试图删除工作内存中不存在的内容
这里有一个简单的例子来说明这是如何工作的。让我们假设我们有一些规则,这些规则为具有某些属性的名为MyFact
的对象设置关键帧。所以我们有一些规则是这样的:
rule "Example rule 1"
when
MyFact( value == "foo" )
then
// do something for 'foo'
end
rule "Example rule 2"
when
MyFact( value == "bar" )
then
// do something for 'bar'
end
现在,只要我们在工作内存中有一个MyFact
实例,就会对这些规则进行评估。所以为了防止这些规则被触发,我们可以收回事实——但我们必须收回实例
缩回示例:
rule "Retract fact when value is 'abc'"
when
$f: MyFact( value == "abc" ) // $f is the instance
then
retract($f)
end
我们没有收回任意数据——我们收回了我们想要收回的特定事实实例
如果我试图收回工作内存中没有的东西,那么NullPointerException完全有意义。您无法收回不存在的内容,因此当Drools引擎无法找到您请求的内容时,它会抛出异常
rule "Retract fact when value is 'abc'"
when
$f: MyFact( value == "abc" ) // $f is the instance
then
retract($f)
end