Drools规则分类

Drools rules categorization

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

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

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

谢谢

对规则进行分类的最佳方式是通过元数据进行分类。元数据条目添加到规则:

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