第 7 章 DMN 模型执行
您可以使用 Business Central 在 Red Hat Process Automation Manager 项目中创建或导入 DMN 文件,或者在没有 Business Central 的情况下将 DMN 文件打包为项目知识 JAR(KJAR)文件的一部分。在 Red Hat Process Automation Manager 项目中实现 DMN 文件后,您可以通过部署包含它的 KIE 服务器以获取 KIE 服务器来执行 DMN 决策服务,或通过直接操作 KIE 容器作为调用应用程序的依赖项来执行 DMN 决策服务。还提供了创建和部署 DMN 知识软件包的其它选项,大多数选项与所有知识资产(如 DRL 文件或进程定义)类似。
有关使用项目打包和部署方法包含外部 DMN 资产的详情,请参考 打包和部署 Red Hat Process Automation Manager 项目。
7.1. 直接在 Java 应用程序中嵌入 DMN 调用 复制链接链接已复制到粘贴板!
当知识资产直接嵌入到调用程序中,或者被实际拉取为 KJAR 的 Maven 依赖关系时,KIE 容器是本地的。如果代码版本和 DMN 定义版本之间有紧密集成,您通常会直接将知识资产嵌入到项目中。在有意更新并重新部署应用程序后,对决策的任何更改都会生效。这种方法的一个优点是,正确的操作不依赖于任何外部依赖项来运行,这可能受锁定的环境限制。
使用 Maven 依赖项可进行进一步的灵活性,因为决策的特定版本可以动态更改(例如,使用系统属性),它可以定期扫描更新并自动更新。这会对服务的部署时间进行外部依赖,但在本地执行决策,从而减少在运行期间对外部服务的依赖。
先决条件
您已将 DMN 项目构建为 KJAR 工件并将其部署到 Maven 存储库中,或者已将 DMN 资产作为项目 classpath 的一部分:
mvn clean install
mvn clean installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关项目打包和部署以及可执行模型的更多信息,请参阅打包和部署 Red Hat Process Automation Manager 项目。
流程
在客户端应用程序中,将以下依赖项添加到 Java 项目的相关类路径中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;version> 是项目中当前使用的 Red Hat Process Automation Manager 的 Maven 工件版本(例如 7.67.0.Final-redhat-00024)。注意考虑将 Red Hat Business Automation 材料清单(BOM)依赖项添加到项目
pom.xml文件,而不是为每个依赖项指定 Red Hat Process Automation Manager <version>。Red Hat Business Automation BOM 适用于 Red Hat Decision Manager 和 Red Hat Process Automation Manager。添加 BOM 文件时,项目中包含来自提供的 Maven 存储库的正确依赖项版本。BOM 依赖项示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 Red Hat Business Automation BOM 的更多信息,请参阅 RHPAM 产品与 maven 库版本之间的映射是什么?
从
类路径或ReleaseId创建 KIE 容器:KieServices kieServices = KieServices.Factory.get(); ReleaseId releaseId = kieServices.newReleaseId( "org.acme", "my-kjar", "1.0.0" ); KieContainer kieContainer = kieServices.newKieContainer( releaseId );
KieServices kieServices = KieServices.Factory.get(); ReleaseId releaseId = kieServices.newReleaseId( "org.acme", "my-kjar", "1.0.0" ); KieContainer kieContainer = kieServices.newKieContainer( releaseId );Copy to Clipboard Copied! Toggle word wrap Toggle overflow 备选选项:
KieServices kieServices = KieServices.Factory.get(); KieContainer kieContainer = kieServices.getKieClasspathContainer();
KieServices kieServices = KieServices.Factory.get(); KieContainer kieContainer = kieServices.getKieClasspathContainer();Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用模型
命名空间和modelName从 KIE 容器获取DMNRuntime并对 DMN 模型的引用:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为所需模型执行决策服务:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个示例输出如下:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果之前未编译 DMN 模型作为可执行模型以便更有效的执行,您可以在执行 DMN 模型时启用以下属性:
-Dorg.kie.dmn.compiler.execmodel=true
-Dorg.kie.dmn.compiler.execmodel=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow