Drools - 决策 table 具有多个相同类型的导入对象
Drools - Decision table with multiple imported objects of same type
我决定 table 多次导入同一类型:be.example.Person。一个人是犯罪者,另一个人是法定监护人。
这是决定的开始table:
决定 table 的编译成功,但是在运行时,它没有返回预期的结果。我为决定 table 插入事实的方式如下:
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 似乎将对象插入两次 p:Person 而不是:第一个是 p:Person,第二个是 q:Person.
或者换句话说,执行好像是这样的:
- 执行规则 1,违规者为 p:Person
- 使用 legalGuardian 作为 p:Person
执行规则 1
- 执行规则 2,违规者为 p:Person
- 使用 legalGuardian 作为 p:Person
执行规则 2
然而,我原以为它会表现得像:
- 执行规则 1,罪犯为 p:Person,legalGuardian 为 q:Person。
- 执行规则 2,legalGuardian 为 p:Person,legalGuardian 为 q:Person。
drools不支持这种功能吗?过去我们使用类似的决策 tables,其中对象的类型不同并且看起来工作正常。但在这种情况下,对象是同一类型的,它不。
有人知道这是不可能的还是我以错误的方式注入对象?
正在使用的 drools 版本是 5.5。0.Final。
对两个相当不同的实体使用完全相同的 class 并不是好的设计。好的和坏的确实有几个共同的属性:姓名、年龄等等。但是 alreadyConvicted 标志应该只为违法者保留。
为获得最佳效果,请考虑子class人:
class Offender extends Person {
private boolean alreadyConvicted;
//...
}
class Guardian extends Person {
}
并根据您应有的一些信息创建和插入它们。
决定table应该有p:Offender
和q:Guardian
。
如果你在人海中寻找可能的 Offender 和 Guardian 对,你必须通过使用咒语 this != p
和第二个 Person 模式来确保 p 和 q 不同.
我决定 table 多次导入同一类型:be.example.Person。一个人是犯罪者,另一个人是法定监护人。
这是决定的开始table:
决定 table 的编译成功,但是在运行时,它没有返回预期的结果。我为决定 table 插入事实的方式如下:
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 似乎将对象插入两次 p:Person 而不是:第一个是 p:Person,第二个是 q:Person.
或者换句话说,执行好像是这样的:
- 执行规则 1,违规者为 p:Person
- 使用 legalGuardian 作为 p:Person 执行规则 1
- 执行规则 2,违规者为 p:Person
- 使用 legalGuardian 作为 p:Person 执行规则 2
然而,我原以为它会表现得像:
- 执行规则 1,罪犯为 p:Person,legalGuardian 为 q:Person。
- 执行规则 2,legalGuardian 为 p:Person,legalGuardian 为 q:Person。
drools不支持这种功能吗?过去我们使用类似的决策 tables,其中对象的类型不同并且看起来工作正常。但在这种情况下,对象是同一类型的,它不。
有人知道这是不可能的还是我以错误的方式注入对象?
正在使用的 drools 版本是 5.5。0.Final。
对两个相当不同的实体使用完全相同的 class 并不是好的设计。好的和坏的确实有几个共同的属性:姓名、年龄等等。但是 alreadyConvicted 标志应该只为违法者保留。
为获得最佳效果,请考虑子class人:
class Offender extends Person { private boolean alreadyConvicted; //... } class Guardian extends Person { }
并根据您应有的一些信息创建和插入它们。
决定table应该有p:Offender
和q:Guardian
。
如果你在人海中寻找可能的 Offender 和 Guardian 对,你必须通过使用咒语 this != p
和第二个 Person 模式来确保 p 和 q 不同.