我正在寻找一种方法来对我的drl文件中的规则进行分类,并确定触发哪些类别的规则。
我看到Drools Guvnor文档中有关于分类http://docs.jboss.org/drools/release/5.2.0.Final/drools-guvnor-docs/html/ch03.html#d0e228的内容。但是,我不清楚这是由Guvnor维护的元数据,还是它是drl文件/规则执行的一部分。我无法找到其中提到类别的示例DRL文件。并且,一种确定被解雇的规则的类别/类别的方法。
我知道激活组,但这不太符合我的需要,因为一旦激活组中的规则触发,组中的其他规则就不会被评估。
由于
答案 0 :(得分:1)
对规则进行分类的最佳方法是通过元数据进行分类。元数据条目将添加到规则中:
rule metademo
@meta2( 123 )
@meta3( foo )
@meta4( "foo" )
when...then...end
您可以通过规则访问元数据,从包或某个事件中获取:
for( Rule rule: kPackage.getRules() ){
Map<String,Object> key2meta = rule.getMetaData();
for( Map.Entry<String,Object> entry: key2meta.entrySet() ){
System.out.print( " @" + entry.getKey() + "( " );
Object value = entry.getValue();
System.out.print( "[" + value.getClass().getSimpleName() + "] "
+ value.toString() );
System.out.println( " ) " );
}
}
输出:
@meta2( [Integer] 123 )
@meta4( [String] foo )
@meta3( [String] foo )
有计划允许将地图作为值,因此您可以使用
@meta7( foo = "foo", bar = "bar" )
这在5.5中没有用,我再也没有尝试过。