第 3 章 没有 Business Central 的项目部署
作为在 Business Central 界面中开发和部署项目的替代选择,您可以使用独立的 Maven 项目或您自己的 Java 应用程序来开发 Red Hat Process Automation Manager 项目,并将它们部署在 KIE 容器(部署单元)中。然后,您可以使用 KIE Server REST API 启动、停止或删除包含您构建和部署的服务及其项目版本的 KIE 容器。通过这种灵活性,您可以继续使用现有的应用程序工作流来使用 Red Hat Process Automation Manager 功能开发业务资产。
当您构建和部署项目时,Business Central 中的项目会自动打包。对于 Business Central 之外的项目,如 Java 应用程序中的独立的 Maven 项目或项目,您必须在附加的 kmodule.xml
文件中配置 KIE 模块描述符设置,或直接在 Java 应用程序中配置部署项目。
3.1. 配置 KIE 模块描述符文件
KIE 模块是带有额外元数据文件 META-INF/kmodule.xml
的 Maven 项目或模块。所有 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 外部创建项目,如 Java 应用程序中的独立 Maven 项目或项目,您必须在附加的 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 会话是从KBase1
KIE 基础实例化的,来自KBase2
的 KIE 会话。KBase2
中的 KIE 会话是一个无状态
KIE 会话,这意味着之前调用 KIE 会话(之前会话状态)的数据在会话调用之间被丢弃。KIE 会话还指定文件(或控制台)日志记录器、WorkItemHandler
以及显示的三种类型的监听程序:ruleRuntimeEventListener
、MuterEventListener
和processEventListener
。<configuration
> 元素定义了可用于进一步自定义kmodule.xml
文件的可选属性。作为手动将
kmodule.xml
文件手动附加到项目的替代选择,您可以使用 Java 应用程序中的KieModuleModel
实例以编程方式创建一个kmodule.xml
文件来定义 KIE 基础和 KIE 会话,然后将项目中的所有资源添加到 KIE 虚拟文件系统KieFileSystem
。以编程方式创建
kmodule.xml
,并将其添加到KieFileSystem
import 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 基础和 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");
如果
kmodule.xml
文件中的KieBase
或KieSession
配置为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.11.0 Source Distribution ZIP 文件,并进入
~/rhpam-7.11.0-sources/src/drools-$VERSION/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieRepositoryImpl.java
。https://access.redhat.com/jbossnetwork/restricted/listSoftware.html-
有关 kmodule.xml
文件的更多信息,请从 红帽客户门户网站 (如果还没有下载)下载 Red Hat Process Automation Manager 7.11.0 Source Distribution ZIP 文件(如果还没有下载)并查看 $FILE_HOME/rhpam-$VERSION-sources/kie-api-parent-$VERSION/kie-api/src/main/resources/org/kie/api/
.
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
将实施 evaluator 定义的类链接到指定的 evaluator 名称,以便您可以将自定义评估器添加到决策引擎中。evaluator 与自定义操作器类似。
<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
设置 String 转义功能。如果此属性设为
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 基础中包含的软件包列表以逗号分隔的软件包列表
默认: |
定义包括在此 KIE 基础中的工件(如规则和流程)的软件包。默认情况下, |
|
默认: | 确定 KIE 基础是否为模块的默认 KIE 基础,以便它可以从 KIE 容器创建,而无需传递任何名称。每个模块只能有一个默认 KIE 基础。 |
|
默认 : |
定义在新事实插入工作内存中时 Red Hat Process Automation Manager 的行为。如果设置为 |
|
默认: |
决定如何在 KIE 基础中处理事件。如果此属性设置为 |
|
Default: | 决定是否启用声明性议程。 |
|
默认: | 决定是否启用后续模式。在后续模式中,决策引擎会按照决策引擎人员中列出的顺序来一次评估规则,而无需考虑工作内存中的更改。如果您使用无状态 KIE 会话,并且您不希望执行规则来影响办公室中的后续规则,请启用此属性。 |
3.1.3. KIE 模块支持的 KIE 会话属性
KIE 会话存储并执行运行时数据,如果您为项目定义了 KIE 模块描述符文件(kmodule.xml
)中的 KIE 会话,则从 KIE 容器创建或直接从 KIE 容器创建。当您在 kmodule.xml
文件中定义 KIE 基础和 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 会话使用的适合系统的类型。因此,系统会降低知识(facts)的真实信息。例如,如果基于另一个事实(以后从决策引擎中删除)插入了新的事实,系统也可以确定新插入的事实也应该被删除。 |