第 3 章 没有 Business Central 的项目部署
作为在 Business Central 界面中开发和部署项目的替代选择,您可以使用独立的 Maven 项目或您自己的 Java 应用程序来开发红帽流程自动化管理器项目,并在 KIE 容器(部署单元)中部署它们到配置的 KIE 服务器。然后,您可以使用 KIE Server REST API 启动、停止或删除包含您构建和部署的服务及其项目的版本的 KIE 容器。通过这一灵活性,您可以继续使用现有应用程序工作流使用红帽流程自动化管理器功能开发业务资产。
在构建和部署项目时,Business Central 中的项目会自动打包。对于 Business Central 之外的项目,如 Java 应用程序内的独立 Maven 项目或项目,您必须在附加的 kmodule.xml 文件中配置 KIE 模块描述符设置,或直接在 Java 应用程序中构建和部署项目。
3.1. 配置 KIE 模块描述符文件 复制链接链接已复制到粘贴板!
KIE 模块是一个 Maven 项目或模块,它带有额外的元数据文件 META-INF/kmodule.xml。所有 Red Hat Process Automation Manager 项目都需要一个 kmodule.xml 文件才能正确打包和部署。这个 kmodule.xml 文件是一个 KIE 模块描述符,用来定义项目中资产的 KIE 基础和 KIE 会话配置。KIE 基础是一个存储库,其中包含 Red Hat Process Automation Manager 中的所有规则、流程和其他业务资产,但不包含任何运行时数据。KIE 会话存储并执行运行时数据,如果您已在 kmodule.xml 文件中定义 KIE 会话,则从 KIE 容器创建并直接从 KIE 容器创建。
如果您在 Business Central (如独立的 Maven 项目或 Java 应用程序内创建项目)创建项目,您必须在附加的 kmodule.xml 文件中配置 KIE 模块描述符设置,或直接在 Java 应用程序中构建和部署项目。
流程
在项目的
~/resources/META-INF目录中,创建一个至少包含以下内容的kmodule.xml元数据文件:<?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns="http://www.drools.org/xsd/kmodule"> </kmodule>这个空
kmodule.xml文件足以生成一个默认 KIE 基础,其中包含项目资源路径下找到的所有文件。默认 KIE 基础也包含一个默认的 KIE 会话,该会话会在构建时在应用程序中创建 KIE 容器时触发。以下示例是更高级的
kmodule.xml文件:<?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.drools.org/xsd/kmodule"> <configuration> <property key="drools.evaluator.supersetOf" value="org.mycompany.SupersetOfEvaluatorDefinition"/> </configuration> <kbase name="KBase1" default="true" eventProcessingMode="cloud" equalsBehavior="equality" declarativeAgenda="enabled" packages="org.domain.pkg1"> <ksession name="KSession1_1" type="stateful" default="true" /> <ksession name="KSession1_2" type="stateful" default="true" beliefSystem="jtms" /> </kbase> <kbase name="KBase2" default="false" eventProcessingMode="stream" equalsBehavior="equality" declarativeAgenda="enabled" packages="org.domain.pkg2, org.domain.pkg3" includes="KBase1"> <ksession name="KSession2_1" type="stateless" default="true" clockType="realtime"> <fileLogger file="debugInfo" threaded="true" interval="10" /> <workItemHandlers> <workItemHandler name="name" type="new org.domain.WorkItemHandler()" /> </workItemHandlers> <listeners> <ruleRuntimeEventListener type="org.domain.RuleRuntimeListener" /> <agendaEventListener type="org.domain.FirstAgendaListener" /> <agendaEventListener type="org.domain.SecondAgendaListener" /> <processEventListener type="org.domain.ProcessListener" /> </listeners> </ksession> </kbase> </kmodule>这个示例定义了两个 KIE 基础。两个 KIE 基础中包含规则资产的
特定软件包。当您以这种方式指定软件包时,您必须将规则文件组织到反映指定软件包的文件夹结构中。两个 KIE 会话从KBase1KIE 基础实例化,以及一个来自KBase2的 KIE 会话。KBase2的 KIE 会话是一个无状态KIE 会话,这意味着之前调用 KIE 会话(上一会话状态)中的数据会在会话调用之间丢弃。该 KIE 会话还指定了一个文件(或控制台)日志记录器、WorkItemHandler和显示三种支持的类型的监听程序:ruleRuntimeEventListener、agendaEventListener和processEventListener。<configuration> 元素定义可用于进一步自定义kmodule.xml文件的可选属性。作为手动将
kmodule.xml文件附加到项目的替代选择,您可以使用 Java 应用程序中的KieModuleModel实例来以编程方式创建用于定义 KIE 基础和 KIE 会话的kmodule.xml文件,然后将项目中的所有资源添加到 KIE 虚拟文件系统KieFileSystem中。以编程方式创建
kmodule.xml并将其添加到KieFileSystemimport org.kie.api.KieServices; import org.kie.api.builder.model.KieModuleModel; import org.kie.api.builder.model.KieBaseModel; import org.kie.api.builder.model.KieSessionModel; import org.kie.api.builder.KieFileSystem; KieServices kieServices = KieServices.Factory.get(); KieModuleModel kieModuleModel = kieServices.newKieModuleModel(); KieBaseModel kieBaseModel1 = kieModuleModel.newKieBaseModel("KBase1") .setDefault(true) .setEqualsBehavior(EqualityBehaviorOption.EQUALITY) .setEventProcessingMode(EventProcessingOption.STREAM); KieSessionModel ksessionModel1 = kieBaseModel1.newKieSessionModel("KSession1_1") .setDefault(true) .setType(KieSessionModel.KieSessionType.STATEFUL) .setClockType(ClockTypeOption.get("realtime")); KieFileSystem kfs = kieServices.newKieFileSystem(); kfs.writeKModuleXML(kieModuleModel.toXML());在手动配置
kmodule.xml文件后,手动或以编程方式在项目中检索 KIE 基础和 KIE 会话,以验证配置:KieServices kieServices = KieServices.Factory.get(); KieContainer kContainer = kieServices.getKieClasspathContainer(); KieBase kBase1 = kContainer.getKieBase("KBase1"); KieSession kieSession1 = kContainer.newKieSession("KSession1_1"), kieSession2 = kContainer.newKieSession("KSession1_2"); KieBase kBase2 = kContainer.getKieBase("KBase2"); StatelessKieSession kieSession3 = kContainer.newStatelessKieSession("KSession2_1");如果
KieBase或KieSession已在kmodule.xml文件中配置为default="true",如前面的kmodule.xml示例中所示,您可以在不传递任何名称的情况下从 KIE 容器检索它们:KieContainer kContainer = ... KieBase kBase1 = kContainer.getKieBase(); KieSession kieSession1 = kContainer.newKieSession(), kieSession2 = kContainer.newKieSession(); KieBase kBase2 = kContainer.getKieBase(); StatelessKieSession kieSession3 = kContainer.newStatelessKieSession();要增加或减少在决策引擎中缓存的 KIE 模块或工件版本的最大数量,您可以在 Red Hat Process Automation Manager 发行版本中修改以下系统属性的值:
-
kie.repository.project.cache.size:在决策引擎中缓存的最大 KIE 模块数。默认值:100 -
kie.repository.project.versions.cache.size: 在决策引擎中缓存的相同工件的最大版本数。默认值:10
对于 KIE 存储库配置的完整列表,请 从红帽客户门户网站下载 Red Hat Process Automation Manager 7.12.0 Source Distribution ZIP 文件,再导航到
~/rhpam-7.12.0-sources/src/drools-$VERSION/drools-compiler/src/main/java/org/drools/compiler/compiler/kie/builder/impl/KieRepositorympl.java.java.-
有关 kmodule.xml 文件的更多信息,请从 红帽客户门户网站中下载 Red Hat Process Automation Manager 7.12.0 Source Distribution ZIP 文件((如果还没有下载)),并查看 $FILE_HOME/rhpam-$VERSION-sources/kie-api-parent-$VERSION/kie-api/src/main/resources/org/kie/api/ 中的 kmodule.xsd XML schema。
3.1.1. KIE 模块配置属性 复制链接链接已复制到粘贴板!
您的项目的 KIE 模块描述符文件 (kmodule.xml) 中提供了可选的 <configuration> 项用于定义属性 key 和 value 对,可以进一步自定义您的 kmodule.xml 文件。
kmodule.xml 文件中的配置属性示例
<kmodule>
...
<configuration>
<property key="drools.dialect.default" value="java"/>
...
</configuration>
...
</kmodule>
以下是项目的 KIE 模块描述符文件(kmodule.xml)中支持的 < configuration > 属性键和值:
- drools.dialect.default
设置默认 Drools dialect。
支持的值:
java,mvel<property key="drools.dialect.default" value="java"/>- Drools.accumulate.function.$FUNCTION
将实施积累功能的类链接到指定功能名称,该名称允许您将自定义积累功能添加到决策引擎中。
<property key="drools.accumulate.function.hyperMax" value="org.drools.custom.HyperMaxAccumulate"/>- Drools.evaluator.$EVALUATION
将实施评估器定义的类链接到指定的评估器名称,以便您可以将自定义评估器添加到决策引擎中。评估器与自定义操作器类似。
<property key="drools.evaluator.soundslike" value="org.drools.core.base.evaluators.SoundslikeEvaluatorsDefinition"/>- drools.dump.dir
设置 Red Hat Process Automation Manager
dump/log目录的路径。<property key="drools.dump.dir" value="$DIR_PATH/dump/log"/>- drools.defaultPackageName
为项目中的业务资产设置默认软件包。
<property key="drools.defaultPackageName" value="org.domain.pkg1"/>- drools.parser.processStringEscapes
设置字符串转义函数。如果此属性设为
false,则\n字符将不会解释为换行符。支持的值:
true(默认)、false<property key="drools.parser.processStringEscapes" value="true"/>- drools.kbuilder.severity.$DUPLICATE
为构建 KIE 基础时报告的重复规则、进程或功能的实例设置严重性。例如,如果您将
duplicateRule设置为ERROR,则在构建 KIE 基础时为检测到的任何重复规则生成一个错误。支持的密钥后缀:
duplicateRule,duplicateProcess,duplicateFunction支持的值:
INFO、WARNING、ERROR<property key="drools.kbuilder.severity.duplicateRule" value="ERROR"/>- drools.propertySpecific
设置决策引擎的属性重新活动。
支持的值:
DISABLED,ALLOWED,ALWAYS<property key="drools.propertySpecific" value="ALLOWED"/>- Drools.lang.level
设置 DRL 语言级别。
支持的值:
DRL5、DRL6、DRL6_STRICT(默认)<property key="drools.lang.level" value="DRL_STRICT"/>
3.1.2. KIE 模块支持的 KIE 基础属性 复制链接链接已复制到粘贴板!
KIE 基础是一个存储库,您可以在项目的 KIE 模块描述符文件(kmodule.xml)中定义,其中包含 Red Hat Process Automation Manager 中的所有规则、流程和其他业务资产。当您在 kmodule.xml 文件中定义 KIE 基础时,您可以指定特定的属性和值来进一步自定义 KIE 基本配置。
kmodule.xml 文件中的 KIE 基本配置示例
<kmodule>
...
<kbase name="KBase2" default="false" eventProcessingMode="stream" equalsBehavior="equality" declarativeAgenda="enabled" packages="org.domain.pkg2, org.domain.pkg3" includes="KBase1" sequential="false">
...
</kbase>
...
</kmodule>
以下是项目的 KIE 模块描述符文件(kmodule.xml)中支持的 kbase 属性和值:
| 属性 | 支持的值 | 描述 |
|---|---|---|
|
| 任何名称 |
定义从 |
|
| KIE 模块中其他 KIE 基本对象的逗号分隔列表 |
定义此 KIE 基础镜像中包含的其他 KIE 基础对象和工件。如果您将其声明为模块的 |
|
| KIE 库中要包含的、以逗号分隔的软件包列表
Default: |
定义此 KIE 基础中包含的工件软件包(如规则和流程)。默认情况下, |
|
|
默认: | 确定 KIE 基础是否为模块的默认 KIE 基础,以便可以从 KIE 容器创建而无需传递任何名称。每个模块只能有一个默认 KIE 基础。 |
|
|
默认: |
定义当将新事实插入到工作内存时,Red Hat Process Automation Manager 的行为。如果设置为 |
|
|
默认: |
决定如何在 KIE 库中处理事件。如果此属性设置为 |
|
|
Default: | 决定是否启用声明性议程。 |
|
|
默认: | 确定是否启用顺序模式。在后续模式中,决策引擎会按照在决策引擎单中列出的顺序评估规则,而不考虑工作内存的变化。如果您使用无状态 KIE 会话,且您不希望执行规则来影响 agenda 中的后续规则,请启用此属性。 |
3.1.3. KIE 模块支持的 KIE 会话属性 复制链接链接已复制到粘贴板!
KIE 会话存储并执行运行时数据,如果您已在项目的 KIE 模块描述符文件(kmodule.xml)中定义 KIE 会话,则直接从 KIE 容器创建。当您在 kmodule.xml 文件中定义 KIE bases 和 KIE 会话时,您可以指定某些属性和值来进一步自定义 KIE 会话配置。
kmodule.xml 文件中的 KIE 会话配置示例
<kmodule>
...
<kbase>
...
<ksession name="KSession2_1" type="stateless" default="true" clockType="realtime">
...
</kbase>
...
</kmodule>
以下是项目的 KIE 模块描述符文件(kmodule.xml)中支持的 ksession 属性和值:
| 属性 | 支持的值 | 描述 |
|---|---|---|
|
| 任何名称 |
定义从 |
|
|
默认: |
决定在 KIE 会话调用之间是否保留( |
|
|
默认: | 确定 KIE 会话是否为模块的默认会话,以便可以从 KIE 容器创建,而无需传递任何名称。每个模块只能有一个默认 KIE 会话。 |
|
|
默认: | 决定是否由系统时钟分配事件时间戳,还是由应用程序控制的伪时钟。这个时钟对于在时间规则中的单元测试特别有用。 |
|
|
默认: | 定义 KIE 会话使用的 belief 系统类型。信道系统从知识(facts)中推断出事实。例如,如果根据稍后从决策引擎中删除的另一个事实插入新事实,则系统也可以确定还应删除新插入的事实。 |