3.4. 可执行规则模型
Red Hat Process Automation Manager 中的规则资产默认使用标准 kie-maven-plugin 插件从可执行规则模型构建。可执行规则模型是嵌入式模型,它为构建时执行的规则集提供基于 Java 的表示。在以前的 Red Hat Process Automation Manager 版本中,可执行模型是更有效的标准资产打包的替代方案,并允许 KIE 容器和 KIE 基础更快地创建,特别是在您有大量 DRL (Drools 规则语言)文件和其他 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 中打包实施项目规则基础的可执行模型的 Java 类,并以更快的方式重新创建 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);
...
then
$input.setNo25Count(functions.sumOf(new Object[]{$no1Count_1, $no2Count_1, $no3Count_1, ..., $no25Count_1}).intValue());
$input.getFirings().add("fired");
update($input);
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>
mvn clean install -DgenerateModel=<VALUE>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<VALUE> 替换为三个值之一:-
YES_WITHDRL:(默认)生成与原始项目中的 DRL 文件对应的可执行文件模型,并将 DRL 文件添加到生成的 KJAR 中。(KIE 基础是从可执行模型构建的。 -
YES:生成与原始项目中的 DRL 文件对应的可执行模型,并从生成的 KJAR 中排除 DRL 文件。 -
NO:不要生成可执行模型。
禁用默认可执行模型行为的 build 命令示例:
mvn clean install -DgenerateModel=NO
mvn clean install -DgenerateModel=NOCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
对于以编程方式配置的 Java 应用程序,默认禁用可执行模型。在 KIE 虚拟文件系统
KieFileSystem中添加规则资产,并使用带有以下buildAll ()方法之一的KieBuilder:-
buildAll ()(默认)或buildAll (DrlProject.class): 不生成可执行模型。 -
BuildAll (ExecutableModelProject.class):生成与原始项目中的 DRL 文件对应的可执行文件模型。
启用可执行模型行为的代码示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -