我如何绑定变量的不同类型在规则LHS的or
组匹配的事实?绑定变量中的情况下,不同的数据类型“或”在规则LHS
举例来说,如果我有以下规则文件:
package com.sample
rule "Rule1"
when
object1: ObjectType1(id == 1) or
object2: ObjectType2(id == 2)
then
System.out.println(object1.getId());
System.out.println(object2.getId());
end
,我用这个驱动程序代码:
package com.sample;
import org.kie.api.runtime.KieSession;
public class DroolsTest {
public static final void main(String[] args) {
try {
String ruleFilePath = "src/main/resources/rules/ruleFile.drl";
KieSession kSession = KSessionUtil.buildKSession(ruleFilePath);
ObjectType1 o1 = new ObjectType1(1);
ObjectType2 o2 = new ObjectType2(2);
kSession.insert(o1);
kSession.insert(o2);
kSession.fireAllRules();
System.out.println("Bye");
} catch (Throwable t) {
t.printStackTrace();
}
}
}
ObjectType1.java
:
package com.sample;
public class ObjectType1 {
public ObjectType1(int i) {
super();
this.id = i;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int id;
}
ObjectType2.java
:
package com.sample;
public class ObjectType12 {
public ObjectType2(int i) {
super();
this.id = i;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int id;
}
我得到一个语法错误从Drools的Eclipse插件:
object1 cannot be resolved.
object2 cannot be resolved.
如果我更改了规则LHS的or
到and
,错误消失。
我正在使用Drools 6.2.0。
那么,这是否意味着没有办法检查哪些事实触发规则 ?另外,在旁注中,关于“如果两个对象都存在于你的会话中,该规则将被执行两次。”,有什么办法可以防止这种情况发生? –
不幸的是,防止它的最简单方法是创建2条显式规则:'(A和!B)'和'(!A和B)'。 –
如果你想成为纯粹主义者,如果你在你的模式之间有一个'或',这应该意味着你想要执行的逻辑不取决于哪个条件是真实的;) –