java - 定义@Asynchronous方法时指定一个WorkManager

标签 java jakarta-ee asynchronous ejb-3.1 weblogic12c

是否可以指定应使用哪个 commonj.work.WorkManager 来处理标记为 @Asynchronous 的方法?

在我正在增强的 WebLogic 12.1.3 应用程序中,我们之前定义了工作管理器并使用以下方式注入(inject)它们:

@Resource(mappedName = "vm/myWorkManager")
private WorkManager myWorkManager;

...并像这样安排异步工作:

rjscWorkManager.schedule(new DetailWork(businessId));

我想定义 @Asynchronous 方法,以便异步代码可以从 CDI 注入(inject)中受益,但我也想控制分配给工作的线程数量。这只能通过定义应用程序范围的工作管理器来实现吗?我在 EJB 规范或 WebLogic 文档中没有看到任何与 @Asynchronous 和工作管理器相关的内容。

最佳答案

您可以通过将 EJB 分配给 weblogic-ejb-jar.xml 中的工作管理器来限制分配给 @Asynchronous 方法的线程数:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar
  xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.2/weblogic-ejb-jar.xsd">

  <!-- Define which work manager the EJB(s) should use -->
  <weblogic-enterprise-bean>
    <ejb-name>MyService</ejb-name>
    <dispatch-policy>myWorkManager</dispatch-policy>
  </weblogic-enterprise-bean>

  <!-- Other EJBs could use the same work manager... -->

  <!-- Define the work manager -->
  <work-manager>
    <!-- Name -->
    <name>myWorkManager</name>
    <!-- Min Threads - Guarantees the minimum number of threads the server will allocate to requests -->
    <min-threads-constraint>
      <name>myWorkManager-MinThreads-Constraint</name>
      <count>5</count>
    </min-threads-constraint>
    <!-- Max Threads - Guarantees the maximum number of threads the server will allocate to requests -->
    <max-threads-constraint>
      <name>myWorkManager-MaxThreads-Constraint</name>
      <count>100</count>
    </max-threads-constraint>
    <!-- Capacity - Causes the server to reject requests only when it has reached its capacity -->
    <capacity>
      <name>myWorkManager-Capacity-Constraint</name>
      <count>-1</count>
    </capacity>
  </work-manager>
</weblogic-ejb-jar>

更多详细信息可以在这里找到:

https://roundwheeltech.wordpress.com/2016/06/07/assigning-ejbs-to-work-managers/

关于java - 定义@Asynchronous方法时指定一个WorkManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37549744/

相关文章:

java - 上传图像时输入未存储在数据库中

java - 使用 JPA 2.0 的 Self ManyToMany 和附加列

java - 如何检查@Async调用在Spring中完成?

java - 使用java根据时间戳计算每秒事务数

java - 在java中使用ReadFully

java.lang.ClassNotFoundException : net. sourceforge.jtds.jdbc.Driver 问题

c# - 是否应该等待嵌套的可等待操作?

c# - 异步/等待任务和 WaitHandle

java - ComponentListener 不工作

java - findViewById 中根据名称动态访问