Как связать переменные с различными типами фактов, согласованными в группе or
в правиле LHS?Связывание переменных с разными типами данных в случае «или» в правиле 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.
Если изменить or
в правиле LHS для and
, ошибка уходит.
Я использую Drools 6.2.0.
Так, значит, что нет никакого способа, чтобы проверить, какие факты вызвали правило ? Кроме того, в примечании, касающемся утверждения ', если оба объекта присутствуют в вашем сеансе, правило будет выполняться дважды.', Есть ли способ предотвратить это? –
К сожалению, самый простой способ предотвратить это - создать 2 явных правила: '(A и! B)' и '(! A и B)'. –
И если вы хотите быть пуристом, если у вас есть 'или' между вашими шаблонами, это должно означать, что логика, которую вы хотите выполнить, не зависит от того, какое условие было истинным;) –