3.4. 可执行规则模型
Red Hat Process Automation Manager 中的规则资产默认使用标准 kie-maven-plugin
插件从可执行规则模型构建。可执行规则模型是嵌入式模型,为构建时执行的规则提供基于 Java 的表示。可执行模型是之前版本的 Red Hat Process Automation Manager 中打包的标准资产,并允许更快速地创建 KIE 容器和 KIE 基础,特别是在具有大量 DRL (Drools Rule Language)文件和其他 Red Hat Process Automation Manager 资产列表时。
如果不使用 kie-maven-plugin
插件,或者项目中缺少所需的 drools-model-compiler
依赖项,则在没有可执行模型的情况下构建规则资产。因此,要在构建期间生成可执行模型,请确保在 pom.xml
文件中添加 kie-maven-plugin
插件和 drools-model-compiler
依赖项。
可执行规则模型为您的项目提供以下特定优点:
-
编译时间: 通常,打包的 Red Hat Process Automation Manager 项目(KJAR)包含 DRL 文件和其他 Red Hat Process Automation Manager 工件列表,用于定义规则基础以及一些预生成的类实现约束和结果。当 KJAR 从 Maven 存储库下载并安装到 KIE 容器中时,必须解析并编译这些 DRL 文件。这个过程可能很慢,特别是对于大型规则集。使用可执行模型,您可以在项目 KJAR 中打包,该类实现了项目规则基础的可执行模型,并以更快速的方式重新创建 KIE 容器及其 KIE 基础。在 Maven 项目中,您可以使用
kie-maven-plugin
插件在编译过程中从 DRL 文件中自动生成可执行模型源。 -
运行时间 : 在可执行模型中,所有约束都定义为 Java lambda 表达式。同样的 lambda 表达式也用于限制评估,因此您不再需要使用
mvel
表达式来解释评估,或即时(JIT)进程将基于mvel
的限制转换为字节码。这会创建更快、效率更高的运行时间。 - 开发时间: 可执行模型允许您开发和测试决策引擎的新功能,而无需以 DRL 格式直接编码元素或修改 DRL 解析器来支持它们。
对于可执行规则模型中的查询定义,您只能使用最多 10 个参数。
对于可执行规则模型中的规则导致的变量,您只能使用 24 个绑定变量(包括内置 drools
变量)。例如,以下规则结果使用超过 24 个绑定的变量并创建编译错误:
... then $input.setNo25Count(functions.sumOf(new Object[]{$no1Count_1, $no2Count_1, $no3Count_1, ..., $no25Count_1}).intValue()); $input.getFirings().add("fired"); update($input);
3.4.1. 在 Red Hat Process Automation Manager 项目中修改或禁用可执行规则模型
Red Hat Process Automation Manager 中的规则资产默认使用标准 kie-maven-plugin
插件从可执行规则模型构建。可执行模型是之前 Red Hat Process Automation Manager 版本中标准资产打包的有效替代方案。但是,如果需要,您可以修改或禁用可执行规则模型,将 Red Hat Process Automation Manager 项目构建为基于 DRL 的 KJAR,而不是默认的基于模型的 KJAR。
流程
以通常的方式构建 Red Hat Process Automation Manager 项目,但根据项目的类型提供一个替代的构建选项:
对于 Maven 项目,在命令终端中导航到 Maven 项目目录,并运行以下命令:
mvn clean install -DgenerateModel=<VALUE>
将
<VALUE
> 替换为三个值之一:-
YES_WITHDRL
: (默认)生成与原始项目中 DRL 文件对应的可执行模型,同时还将 DRL 文件添加到生成的 KJAR 中目的( KIE 基础自可执行模型构建)。 -
YES
:生成与原始项目中的 DRL 文件对应的可执行模型,并从生成的 KJAR 中排除 DRL 文件。 -
no
: 不生成可执行模型。
禁用默认可执行模型行为的 build 命令示例:
mvn clean install -DgenerateModel=NO
-
对于以编程方式配置的 Java 应用程序,默认禁用可执行模型。在 KIE 虚拟文件系统
KieFileSystem
中添加规则资产,并使用KieBuilder
和以下buildAll ()
方法之一:-
buildAll ()
(默认)或buildAll (DrlProject.class)
:不生成可执行模型。 -
buildAll (ExecutableModelProject.class)
:生成与原始项目中 DRL 文件对应的可执行模型。
启用可执行模型行为的代码示例:
import org.kie.api.KieServices; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieBuilder; KieServices ks = KieServices.Factory.get(); KieFileSystem kfs = ks.newKieFileSystem() kfs.write("src/main/resources/KBase1/ruleSet1.drl", stringContainingAValidDRL) .write("src/main/resources/dtable.xls", kieServices.getResources().newInputStreamResource(dtableFileStream)); KieBuilder kieBuilder = ks.newKieBuilder( kfs ); // Enable executable model kieBuilder.buildAll(ExecutableModelProject.class) assertEquals(0, kieBuilder.getResults().getMessages(Message.Level.ERROR).size());
-