Apache Tomcat 整合
JNDI 绑定
要在 Apache Tomcat 上使用 Camunda 平台服务的 JNDI 绑定,你必须将文件“META-INF/context.xml”添加到流程应用程序并添加以下 ResourceLinks:
<Context>
<ResourceLink name="ProcessEngineService"
global="global/camunda-bpm-platform/process-engine/ProcessEngineService!org.camunda.bpm.ProcessEngineService"
type="org.camunda.bpm.ProcessEngineService" />
<ResourceLink name="ProcessApplicationService"
global="global/camunda-bpm-platform/process-engine/ProcessApplicationService!org.camunda.bpm.ProcessApplicationService"
type="org.camunda.bpm.ProcessApplicationService" />
</Context>
这些元素用于创建到在$TOMCAT_HOME/conf/server.xml
中定义的全局 JNDI 资源的链接。
此外,在WEB-INF/web.xml
部署描述符中声明对JNDI 绑定的依赖。
<web-app>
<resource-ref>
<description>Process Engine Service</description>
<res-ref-name>ProcessEngineService</res-ref-name>
<res-type>org.camunda.bpm.ProcessEngineService</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>Process Application Service</description>
<res-ref-name>ProcessApplicationService</res-ref-name>
<res-type>org.camunda.bpm.ProcessApplicationService</res-type>
<res-auth>Container</res-auth>
</resource-ref>
...
</web-app>
注意: 你可以为流程引擎服务和流程应用服务选择不同的资源链接名。资源链接名必须与“WEB-INF/web.xml”中相应“
要查找 Camunda 平台服务,你必须使用资源链接名称来获取链接的全局资源。 例如:
- Process Engine Service:
java:comp/env/ProcessEngineService
- Process Application Service:
java:comp/env/ProcessApplicationService
如果你声明了我们建议的其他资源链接名称,则必须使用java:comp/env/$YOUR_RESOURCE_LINK_NAME
进行查找以获取相应的 Camunda 平台服务。
Job执行器配置
Tomcat 默认 Job执行器
Apache Tomcat 9.x 上的 Camunda 平台使用默认Job执行程序。 默认的 job执行器 使用 ThreadPoolExecutor 来管理线程池和Job队列。
核心池大小、队列大小、最大池大小和保持活动时间可以在 bpm-platform.xml
中配置。
配置job获取后,可以在<properties>
标签下设置值。语法可以参考文档 。
除了队列大小之外,前面提到的所有属性都可以在运行时通过 JMX 客户端进行修改。
核心池大小
ThreadPoolExecutor 会自动调整线程池的大小。 线程池中的线程数将趋向于与设置为核心池大小的线程数达到平衡。 如果一个新的Job提交给Job执行器并且池中的线程总数小于核心,那么将创建一个新线程。 因此,在初次使用时,线程池中的线程数将增加到核心线程数。
- 默认核心池大小为 3 。
队列大小
ThreadPoolExecutor 包括一个用于缓冲Job的Job队列。 一旦达到(并正在使用)线程的核心数量,提交给Job执行器的新Job将导致该Job被添加到 ThreadPoolExecutor Job队列。
- Job队列的默认最大长度为 3 。
最大池大小
如果队列的长度超过最大队列大小,并且线程池中的线程数小于最大池大小,则将额外的线程添加到线程池中。 这将一直持续到池中的线程数等于最大池大小:
- 默认的最大池大小为 10 。
keepalive
如果线程在线程池中空闲的时间长于 keepalive 时间,并且线程数超过核心池大小,则该线程将被终止。 因此,池倾向于围绕核心线程数来解决。
- 默认 keepalive 时间为 0。
集群部署
在集群部署中,多个Job执行程序将相互协作(注意:请参阅 Job 在异构集群中执行). 在启动时,每个Job执行器分配一个 UUID,用于标识Job表中锁定的Job所有权。 因此,在一个双节点集群中,Job执行程序总共可能有多达 20 个并发执行线程。