规则引擎 Drools(十三):规则模板

依赖

编辑 pom.xml 文件,添加依赖:

<dependency>  
    <groupId>org.drools</groupId>
    <artifactId>drools-templates</artifactId>
</dependency>  

模板

新建规则模板文件 test.drt

template header  
test

package template

template "this is a test"

    rule "test_@{row.rowNumber}"
        when
        then
            System.out.println("Hello @{test}");
    end

end template  

规则模板主要由两部分构成:

  • template header 定义了在模板中使用的变量。
  • template 以 template "template name" 开头,以 end template 结尾,中间定义了模板的内容。变量占位符使用 @{var_name}。

@{row.rowNumber} 是一个特殊的变量,每次会按顺序生成一个行号,可用于区分规则名。

编译规则

KieHelper 是 Drools 提供的工具类,可用于编译 DRL 规则文件,新建会话等。

KieHelper helper = new KieHelper();  
helper.addContent(drl, ResourceType.DRL);  
KieSession kieSession = helper.build().newKieSession();  

编译

渲染模板的流程,先将数据封装为 DataProvider,然后通过 DataProviderCompiler 使用 DataProvider 将模板编译为 DRL。

数组

Drools 支持数组类型的 DataProvider,示例:

DataProvider data = new ArrayDataProvider(new String[][]{  
        new String[]{"Anthony"}
});
DataProviderCompiler converter = new DataProviderCompiler();  
String drl = converter.compile(data, template);  

对象

Drools 支持对象类型的 DataProvider,示例:

Test test = new Test();  
test.setTest("Anthony");  
ObjectDataCompiler converter = new ObjectDataCompiler();  
String drl = converter.compile(Arrays.asList(test), template);