Drools 6规则项比较
假设我有一个对象类型Drools 6规则项比较,drools,rule-engine,Drools,Rule Engine,假设我有一个对象类型MyObject,其中包含成员数据someValue和otherValue,我插入两个逻辑规则如下: Rule "Checks Some Value" when $myO : MyObject( someValue == Constants.someValueChecker ) then insertLogical(new SomeValueChecked($myO)); end Rule "Checks Other Value" when
MyObject
,其中包含成员数据someValue
和otherValue
,我插入两个逻辑规则如下:
Rule "Checks Some Value"
when
$myO : MyObject( someValue == Constants.someValueChecker )
then
insertLogical(new SomeValueChecked($myO));
end
Rule "Checks Other Value"
when
$myO : MyObject( otherValue == Constants.otherValueChecker )
then
insertLogical(new OtherValueChecked($myO));
end
我的问题是,有没有办法验证这些规则是否针对同一个MyObject实例触发?另外,对于MyObject的特定实例,是否有办法知道这些规则是否已为其触发?验证是否已为同一对象检查了“some”和“other”值(并假设对MyObject
的引用保留在成员MyObject
中):
以及检查两者是否都针对MyObject
的特定实例触发:
rule "some and other value"
when
SomeValueChecked( $obj: myObject )
OtherValueChecked( myObject == $obj )
then
...
end
rule "some and other checked for green"
when
$obj: MyObject( color == Colour.GREEN ) // or some other property
SomeValueChecked( myObject == $obj )
OtherValueChecked( myObject == $obj )
then
...
end
单独检查“some”或“other”所需的内容应该是显而易见的。可能值得指出的是,DRL/MVEL
=
操作符使用hashCode
和equals
方法检查对象相等性,而Java操作符检查相同的实例。要检查是否为同一实例触发了规则,最好使用eval(myObject==$obj)
强制执行Java引用检查。还是有更好的方法?