第 11 章 PMML 模型执行
您可以使用 Business Central (Menu ApplyPmmlModelCommand
命令来执行基于 PMML 的决策服务。
有关使用项目打包和部署方法包括 PMML 资产的更多信息,请参阅 打包和部署 Red Hat Process Automation Manager 项目。
您还可以在 Business Central 中包含 PMML 模型作为 Decision Model 和 Notation (DMN)服务的一部分。当您在 DMN 文件中包含 PMML 模型时,您可以调用 PMML 模型作为 DMN 决策节点或业务知识模型节点的方框函数表达式。有关在 DMN 服务中包含 PMML 模型的更多信息,请参阅使用 DMN 模型设计决策服务。
11.1. 直接嵌入 Java 应用程序中的 PMML 调用 复制链接链接已复制到粘贴板!
当知识资产直接嵌入到调用程序中或物理拉取时,KIE 容器是本地的,或使用 KJAR 的 Maven 依赖项进行物理拉取。通常,如果代码版本和 PMML 定义版本之间有紧密关系,您通常直接将知识资产嵌入到项目中。在有意更新并重新部署应用程序后,对决定所做的任何更改都会生效。这种方法的一个优点是,正确的操作不依赖于任何外部依赖项到运行时,这可能是锁定环境的限制。
使用 Maven 依赖项可以进一步的灵活性,因为决策的特定版本可以动态更改(例如,使用系统属性),它可以定期扫描更新和自动更新。这引入了对服务的部署时间的外部依赖项,但在本地执行决策,从而减少在运行时对外部服务的依赖。
先决�件
- 已创建一个包含要执行的 PMML 模型的 KJAR。有关项目打包的更多信息,请参阅 打包和部署 Red Hat Process Automation Manager 项目。
�程
在客户端应用程序中,将以下依赖项添加到 Java 项目的相关类路径中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;version
> 是项目中当前使用的 Red Hat Process Automation Manager 的 Maven 工件版本(如 7.44.0.Final-redhat-00006)。注意考虑将 Red Hat Business Automation Manager (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 库版本之间的映射是什么?
从
classpath
或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 创建
PMMLRequestData
类实例,它将 PMML 模型应用到一组数据:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
PMML4Result
类的实例,其中包含将基于 PMML 的规则应用到输入数据的输出信息:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 除了正常的 getter 方法外,
pmML4Result
类还支持以下方法直接检索结果变量的值:public <T> Optional<T> getResultValue(String objName, String objField, Class<T> clazz, Object...params) public Object getResultValue(String objName, String objField, Object...params)
public <T> Optional<T> getResultValue(String objName, String objField, Class<T> clazz, Object...params) public Object getResultValue(String objName, String objField, Object...params)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
ParameterInfo
类的实例,用作作为PMMLRequestData
类一部分的基本数据类型对象的打包程序:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您创建的所需的 PMML 类实例执行 PMML 模型:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 规则由
RuleUnitExecutor
类执行。RuleUnitExecutor
类创建 KIE 会话,并将所需的DataSource
对象添加到这些会话中,然后根据作为参数传递给run ()
方法的RuleUnit
执行规则。calculatePossiblePackageNames
和getStartingRuleUnit
方法决定传递给run ()
方法的RuleUnit
类的完全限定名称。
为便于您的 PMML 模型执行,您还可以使用 Red Hat Process Automation Manager 支持的 PMML4ExecutionHelper
类。有关 PMML 帮助程序类的详情,请参考 第 11.1.1 节 “pmML 执行帮助程序类”。
11.1.1. pmML 执行帮助程序类 复制链接链接已复制到粘贴板!
Red Hat Process Automation Manager 提供了一个 PMML4ExecutionHelper
类,它可帮助创建 PMML 模型执行所需的 PMMLRequestData
类,这有助于使用 RuleUnitExecutor
类执行规则。
以下是没有和 PMML4ExecutionHelper
类的 PMML 模型执行示例,作为比较:
不使用 PMML4ExecutionHelper
的 PMML 模型执行示例
使用 PMML4ExecutionHelper
执行 PMML 模型示例
当您使用 PMML4ExecutionHelper
时,您不需要指定可能的软件包名称或 RuleUnit
类,如您在典型的 PMML 模型执行中一样。
要构建 PMML4ExecutionHelper
类,您可以使用 PMML4ExecutionHelperFactory
类来确定如何检索 PMML4ExecutionHelper
的实例。
以下是用于构建 PMML4ExecutionHelper
类的可用的 PMML4ExecutionHelperFactory
类方法:
- pmML4ExecutionHelperFactory 方法 KIE 基础中的 PMML 资产
当 PMML 资产已编译并从现有 KIE 基础中使用时,使用这些方法:
public static PMML4ExecutionHelper getExecutionHelper(String modelName, KieBase kbase) public static PMML4ExecutionHelper getExecutionHelper(String modelName, KieBase kbase, boolean includeMiningDataSources)
public static PMML4ExecutionHelper getExecutionHelper(String modelName, KieBase kbase) public static PMML4ExecutionHelper getExecutionHelper(String modelName, KieBase kbase, boolean includeMiningDataSources)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - PMML4ExecutionHelperFactory 方法在项目 classpath 上 PMML 资产
当 PMML 资产位于项目 classpath 时使用这些方法。
classPath
参数是 PMML 文件的项目类路径位置:public static PMML4ExecutionHelper getExecutionHelper(String modelName, String classPath, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName,String classPath, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)
public static PMML4ExecutionHelper getExecutionHelper(String modelName, String classPath, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName,String classPath, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - PMML4ExecutionHelperFactory 方法在字节数组中 PMML 资产
当 PMML 资产采用字节阵列的形式时使用这些方法:
public static PMML4ExecutionHelper getExecutionHelper(String modelName, byte[] content, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName, byte[] content, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)
public static PMML4ExecutionHelper getExecutionHelper(String modelName, byte[] content, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName, byte[] content, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - PMML4ExecutionHelperFactory 方法在资源中 PMML 资产
当 PMML 资产采用
org.kie.api.io.Resource
对象的形式时使用这些方法:public static PMML4ExecutionHelper getExecutionHelper(String modelName, Resource resource, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName, Resource resource, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)
public static PMML4ExecutionHelper getExecutionHelper(String modelName, Resource resource, KieBaseConfiguration kieBaseConf) public static PMML4ExecutionHelper getExecutionHelper(String modelName, Resource resource, KieBaseConfiguration kieBaseConf, boolean includeMiningDataSources)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
classpath、bytes 数组和资源 PMML4ExecutionHelperFactory
方法为生成的规则和 Java 类创建一个 KIE 容器。容器用作 RuleUnitExecutor
使用的 KIE 基础的来源。容器不是持久性的。已在 KIE 基础中的 PMML 资产的 PMML4ExecutionHelperFactory
方法不会以这种方式创建 KIE 容器。