南京网站制作西安,个人网站设计成品下载,建网站怎么选择服务器,张家港市住房城乡建设局网站甩锅声明#xff1a;本人英语一般#xff0c;翻译只是为了做个笔记#xff0c;所以有翻译错误的地方#xff0c;错就错了#xff0c;如果你想给我纠正#xff0c;就给我留言#xff0c;我会改过来#xff0c;如果懒得理我#xff0c;就直接划过即可。 事实类型的属性…甩锅声明本人英语一般翻译只是为了做个笔记所以有翻译错误的地方错就错了如果你想给我纠正就给我留言我会改过来如果懒得理我就直接划过即可。 事实类型的属性更改设置和监听器
默认的Drools不会为了事实类型在每一次的规则触发时重新评估所有的事实模式而是对会对受限制或者内部给定模式绑定的属性修改做出反应。例如如果规则调用modify()作为规则操作的一部分但是操作没有在KIE库中产生新的数据Drools不会自动的重新评估所有事实模式因为没有数据被修改。这种属性反应行为可以防止KIE库中的没必要的递归并且可以让规则评估更有效率。这种行为也意味着你不需要总是使用no-loop属性去防止无限递归。
你可以修改或者禁用这种属性反应行为使用下面KnowledgeBuilderConfiguration 选项然后在你的Java类或者DRL文件使用属性更改设置对属性反应按照需要进行调整 ALWAYS默认所有类型都是属性反应但是你可以取消某些指定类型的属性反应使用classReactivbe属性更改设置。 ALLOWED没有类型是属性反映的但是你可以使用propertyReactive属性设置为指定的类型开启属性反应。 DISABLED没有类型是属性反映的所有的属性更改监听器都被忽略。
在 KnowledgeBuilderConfiguration设置属性反应的例子
KnowledgeBuilderConfiguration config KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
config.setOption(PropertySpecificOption.ALLOWED);
KnowledgeBuilder kbuilder KnowledgeBuilderFactory.newKnowledgeBuilder(config);
或者你可以更新在standalone.xml中的drools.propertySpecific系统属性
如下所示
system-properties...property namedrools.propertySpecific valueALLOWED/...
/system-properties
Drools支持下面的属性更改设置和监听器
classReactive
如果属性反应设置时ALWAYS这个标签可以禁用指定类或者声明的DRL事实类型的默认的属性反应行为。如果您希望Drools规则引擎在每次触发规则时重新评估指定事实类型的所有事实模式而不是仅对在给定模式内约束或绑定的修改属性作出反应则可以使用此标记。
DRL类型声明时禁用默认属性反应
declare PersonclassReactivefirstName : StringlastName : String
end
在Java类中禁用默认属性反应
classReactivepublic static class Person {private String firstName;private String lastName;
}
propertyReactive
如果属性反应卑职成ALLOWED你可以使用这个标签指定设置属性反应的类型
DRL类型声明启动属性反应当反应被全局禁用
declare PersonpropertyReactivefirstName : StringlastName : String
end
在Java类里面启用属性反应
propertyReactivepublic static class Person {private String firstName;private String lastName;
}
watch
这个标签对额外属性启用属性反应额外属性是在事实模式中指定的内联属性。这个标签只在设置为ALWAYS时有效或者属性反应式ALLOWED时相关事实类型使用了propertyReactive标签。你可以在DRL规则中使用这个标签去添加或者移除指定属性。
默认参数没有
支持的参数属性名*代表所有表示取反*没有属性有属性反应
factPattern watch ( property )
在实施模式中启用或者禁用属性反应
// Listens for changes in both firstName (inferred) and lastName:
Person(firstName $expectedFirstName) watch( lastName )// Listens for changes in all properties of the Person fact:
Person(firstName $expectedFirstName) watch( * )// Listens for changes in lastName and explicitly excludes changes in firstName:
Person(firstName $expectedFirstName) watch( lastName, !firstName )// Listens for changes in all properties of the Person fact except age:
Person(firstName $expectedFirstName) watch( , !age )// Excludes changes in all properties of the Person fact (equivalent to using classReactivity tag):
Person(firstName $expectedFirstName) watch( ! )
如果你在使用了classReactive的事实类型上使用了watch标签或者在属性反应设置成ALLOWED时没有使用propertyReactive标签Drools会产生一个编译错误。如果你在监听器注解中重复属性例如watchfirstNamefirstName也会产生编译错误。
propertyChangeSupport
对于在JavaBeans规范中定义的支持属性更改的事实这个标签启动对事实属性更改的监测。
在JavaBeans对象中声明属性更改支持
declare PersonpropertyChangeSupport
end