Drools规则分类

时间:2015-04-22 16:24:41

标签: jboss categories drools

我正在寻找一种方法来对我的drl文件中的规则进行分类,并确定触发哪些类别的规则。

我看到Drools Guvnor文档中有关于分类http://docs.jboss.org/drools/release/5.2.0.Final/drools-guvnor-docs/html/ch03.html#d0e228的内容。但是,我不清楚这是由Guvnor维护的元数据,还是它是drl文件/规则执行的一部分。我无法找到其中提到类别的示例DRL文件。并且,一种确定被解雇的规则的类别/类别的方法。

我知道激活组,但这不太符合我的需要,因为一旦激活组中的规则触发,组中的其他规则就不会被评估。

由于

1 个答案:

答案 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中没有用,我再也没有尝试过。