第 13 章 部署描述符
进程和规则存储在基于 Apache Maven 的打包中,称为 知识存档或 KJAR。规则、流程、资产和其他项目工件是 Maven 创建和管理的 JAR 文件的一部分。保存在名为 kmodule.xml
的 KJAR 的 META-INF
目录中的文件可用于定义 KIE 基础和会话。默认情况下,这个 kmodule.xml
文件为空。
每当 KIE 服务器等运行时组件负责处理 KJAR 时,它会查找 kmodule.xml
来构建运行时表示。
部署描述符是对 kmodule.xml
文件进行补充的补充,并对部署提供精细的控制。存在这些描述符是可选的,您的部署可以成功进行。您可以使用这些描述符设置纯技术属性,包括持久性、审计和运行时策略等元值。
这些描述符允许您在多个级别上配置 KIE 服务器,包括服务器级别默认、每个 KJAR 的不同部署描述符和其他服务器配置。您可以使用描述符对默认 KIE 服务器配置进行简单的自定义,可能每个 KJAR。
您可以在名为 kie-deployment-descriptor.xml
的文件中定义这些描述符,并将该文件放在 META-INF
文件夹中的 kmodule.xml
文件。您可以通过将它指定为系统参数来更改此默认位置和文件名:
-Dorg.kie.deployment.desc.location=file:/path/to/file/company-deployment-descriptor.xml
13.1. 部署描述符配置
部署描述符允许用户在多个级别上配置执行服务器:
- 服务器级别 :主级别,以及应用于服务器上部署的所有 KJAR 的主级别。
- KJAR 级别 :这可让您基于 KJAR 配置描述符。
- 部署时间级别 :部署 KJAR 时应用的描述符。
部署描述符指定的粒度配置项优先于服务器级别,但基于集合的配置项目被合并,这些项目会被合并。层次结构的工作方式如下: 部署时间配置 > KJAR configuration > server configuration。
部署时间配置适用于通过 REST API 进行的部署。
例如,如果在服务器级别定义的持久性模式(您可以配置的一个项目)是 NONE
,但相同的模式指定为 KJAR 级别的 JPA
,则实际模式将是 KJAR 的 JPA
。如果在 KJAR 的部署描述符中为持久性模式指定任何内容(或者没有部署描述符),它将回退到服务器级配置,本例中为 NONE
(如果没有服务器级别部署描述符)。
您可以配置什么?
可通过部署描述符配置高级别技术配置详情。下表列出了它们以及每个表的适用值和默认值。
配置 | XML 条目 | 允许的值 | 默认值 |
---|---|---|---|
运行时数据的持久性单元名称 | persistence-unit | 任何有效的持久性软件包名称 | org.jbpm.domain |
审计数据的持久性单元名称 | audit-persistence-unit | 任何有效的持久性软件包名称 | org.jbpm.domain |
持久性模式 | persistence-mode | JPA, NONE | JPA |
审计模式 | audit-mode | JPA、JMS 或 NONE | JPA |
运行时策略 | runtime-strategy | SINGLETON、PER_REQUEST 或 PER_PROCESS_INSTANCE | 单例 |
要注册的事件 Listeners 列表 | event-listeners |
有效的监听程序类名称作为 | 没有默认值 |
要注册的任务事件 Listeners 列表 | task-event-listeners |
有效的监听程序类名称作为 | 没有默认值 |
要注册的工作流处理程序列表 | work-item-handlers |
有效的 Work Handler 类指定为 | 没有默认值 |
要注册的全局列表 | Globals |
指定为 | 没有默认值 |
要注册的 Marshalling 策略(用于可插拔变量持久性) | marshalling-strategies |
有效的 | 没有默认值 |
授予 KJAR 资源访问权限所需的角色 | required-roles | 字符串角色名称 | 没有默认值 |
KIE 会话的其他环境条目 | environment-entries |
valid | 没有默认值 |
KIE 会话的额外配置选项 | 配置 |
valid | 没有默认值 |
用于在远程服务中序列化的类 | remoteable-class |
有效的 | 没有默认值 |
不要在生产环境中使用 EJB Timer 调度程序( KIE Server 中的默认调度程序)使用 Singleton 运行时策略。这个组合可能会导致负载出现 Hibernate 问题。如果没有特定原因来使用其他策略,则建议每个进程实例运行时策略。有关此限制的更多信息,请参阅 Singleton 策略和 EJBTimerScheduler 的 Hibernate 问题。