我正在使用Drools 6,当我在我的drl中混合无循环和显着性时,我有一种奇怪的行为。
rule "creation OfferTranslation 1"
salience 1
no-loop
dialect "mvel"
when
not OfferTranslation( source =="Offer1" )
then
insert(new OfferTranslation("Offer1","Offer1_31415"));
end
rule "creation OfferTranslation 2"
salience 2
no-loop
dialect "mvel"
when
not OfferTranslation( source =="Offer2" )
then
insert(new OfferTranslation("Offer2","Offer2_00dsdf"));
end
rule "creation OfferTranslation 3"
salience 3
dialect "mvel"
when
not OfferTranslation( source =="Offer3" )
then
insert(new OfferTranslation("Offer3","Offer3_00dsf"));
end
rule "creation OfferTranslation 4"
salience 4
dialect "mvel"
when
not OfferTranslation( source =="Offer4" )
then
insert(new OfferTranslation("Offer4","Offer4_0032"));
end
我预计将按以下顺序触发规则: - 规则“创建OfferTranslation 4” - 规则“创建OfferTranslation 3” - 规则“创建OfferTranslation 2” - 规则“创建OfferTranslation 1”
然而,当我解雇它们时,我得到了这个命令: - 规则“创建OfferTranslation 1” - 规则“创建OfferTranslation 2” - 规则“创建OfferTranslation 4” - 规则“创建OfferTranslation 3”
看起来no-loop属性禁用了显着性,并且无循环规则具有优先级。 当我尝试没有无循环时,我得到了良好的秩序。 我如何一起使用无循环和突出,或者我的错误是什么?
PS:我知道在我的例子中没有循环是没用的,我把它写成比我的实际规则更简单的例子。
答案 0 :(得分:0)
没有错误。我们认为使用错误顺序触发的规则是因为我们在drools侦听器中使用了一个记录器来捕获matchCreated事件。一条简单的登录规则显示规则已按正确的顺序触发。
Seb&约瑟夫