第 9 章 Jakarta Concurrency

Jakarta Concurrency 是一种 API,可满足 Jakarta EE 应用环境规格中的 Java SE 并发实用程序。它在 Jakarta Concurrency 规范中定义。JBoss EAP 允许您创建、编辑和删除 Jakarta Concurrency 实例,从而使这些实例随时可供应用使用。

Jakarta Concurrency 通过拉取现有上下文的应用线程并在自己的线程中使用这些线程,帮助扩展调用上下文。默认情况下,这种调用上下文的扩展包括类加载、JNDI 和安全上下文。

Jakarta Concurrency 的类型包括:

  • 上下文服务
  • 管理的线程事实
  • 受管执行器服务
  • 管理的调度执行器服务

示例: standalone.xml中的 Jakarta Concurrency

<subsystem xmlns="urn:jboss:domain:ee:4.0">
            <spec-descriptor-property-replacement>false</spec-descriptor-property-replacement>
            <concurrent>
                <context-services>
                    <context-service name="default" jndi-name="java:jboss/ee/concurrency/context/default" use-transaction-setup-provider="true"/>
                </context-services>
                <managed-thread-factories>
                    <managed-thread-factory name="default" jndi-name="java:jboss/ee/concurrency/factory/default" context-service="default"/>
                </managed-thread-factories>
                <managed-executor-services>
                    <managed-executor-service name="default" jndi-name="java:jboss/ee/concurrency/executor/default" context-service="default" hung-task-threshold="60000" keepalive-time="5000"/>
                </managed-executor-services>
                <managed-scheduled-executor-services>
                    <managed-scheduled-executor-service name="default" jndi-name="java:jboss/ee/concurrency/scheduler/default" context-service="default" hung-task-threshold="60000" keepalive-time="3000"/>
                </managed-scheduled-executor-services>
            </concurrent>
            <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
</subsystem>

9.1. 上下文服务

上下文服务(javax.enterprise.concurrent.ContextService)允许您从现有对象构建上下文代理。在将调用传输到原始对象之前,上下文代理会准备调用上下文,供其他 Jakarta Concurrency 实用程序在创建或调用上下文时使用。

上下文服务并发程序的属性包括:

  • Name :所有上下文服务中的唯一名称。
  • jnDI-name :定义应将上下文服务放置在 JNDI 中。
  • use-transaction-setup-provider: Optional.指明在调用代理对象时,上下文服务构建的上下文代理是否应该在上下文中暂停事务。其值默认为 false,但默认上下文服务的值为 true

有关使用上下文服务并发实用程序的示例,请参见上面的示例。

示例:添加新上下文服务

/subsystem=ee/context-service=newContextService:add(jndi-name=java:jboss/ee/concurrency/contextservice/newContextService)

示例:更改上下文服务

/subsystem=ee/context-service=newContextService:write-attribute(name=jndi-name, value=java:jboss/ee/concurrency/contextservice/changedContextService)

此操作需要重新加载。

示例:删除上下文服务

/subsystem=ee/context-service=newContextService:remove()

此操作需要重新加载。