【发布时间】:2015-10-21 23:31:59
【问题描述】:
我有一个包含多个相同类型导入的决策表: be.example.Person 。一个人是罪犯,另一个人是法定监护人。
决策表的编译是成功的,但是在运行时,它并没有返回预期的结果。我为决策表插入事实的方式如下:
StatefulKnowledgeSession ksession = null;
try {
ksession = ruleEngine.createStatelessKnowledgeSession();
ksession.setGlobal("result", result);
ksession.insert(offender);
ksession.insert(legalGuardian);
ksession.fireAllRules(1);
} finally {
if(Controles.isRenseignee(ksession)) {
ksession.dispose();
}
}
似乎当我触发规则时,drools 似乎将对象插入 2 次为 p:Person 而不是:第一个是 p:Person,第二个是 q:Person。
或者换个说法,执行好像是这样的:
- 以 p:Person 身份执行 rule1
- 以 legalGuardian 为 p:Person 执行 rule1
- 以 p:Person 身份执行 rule2
- 以 legalGuardian 为 p:Person 执行 rule2
然而,我本来希望它表现得像:
- 以 p:Person 和 legalGuardian 为 q:Person 执行 rule1。
- 使用 legalGuardian 作为 p:Person 和 legalGuardian 作为 q:Person 执行 rule2。
drools 不支持这种功能吗?过去,我们使用类似的决策表,其中对象的类型不同并且似乎工作正常。但在这种情况下,如果对象的类型相同,则不会。
任何人都知道这是不可能的,或者我是否以不正确的方式注入对象?
使用的drools版本是5.5.0.Final。
【问题讨论】:
-
如果你在你的程序中调用了一个变量
offender或者legalGuardian,Drools并不知道这些名字的含义。此外,除了您不会为潜在监护人测试alreadyConvicted的语义结论之外,规则中没有任何内容可以让 Drools 区分好与坏。