定义@Asynchronous方法时指定一个WorkManager
Specify a WorkManager when defining @Asynchronous method
是否可以指定哪个 commonj.work.WorkManager 应该用于处理标记为 @Asynchronous 的方法?
在我正在增强的 WebLogic 12.1.3 应用程序中,我们之前定义了工作管理器并使用以下方法注入它们:
@Resource(mappedName = "vm/myWorkManager")
private WorkManager myWorkManager;
... 并像这样安排异步工作:
rjscWorkManager.schedule(new DetailWork(businessId));
我想定义@Asynchronous 方法,以便异步代码可以从 CDI 注入中受益,但我也想控制分配给该工作的线程数。这只能通过定义应用程序范围的工作管理器来实现吗?我在 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/
是否可以指定哪个 commonj.work.WorkManager 应该用于处理标记为 @Asynchronous 的方法?
在我正在增强的 WebLogic 12.1.3 应用程序中,我们之前定义了工作管理器并使用以下方法注入它们:
@Resource(mappedName = "vm/myWorkManager")
private WorkManager myWorkManager;
... 并像这样安排异步工作:
rjscWorkManager.schedule(new DetailWork(businessId));
我想定义@Asynchronous 方法,以便异步代码可以从 CDI 注入中受益,但我也想控制分配给该工作的线程数。这只能通过定义应用程序范围的工作管理器来实现吗?我在 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/