是否可以指定应该使用哪个 commonj.work.WorkManager 来处理标记为@Asynchronous的方法?
在我正在增强的WebLogic 12.1.3应用程序中,我们之前定义了工作管理器并使用以下方法注入它们:
@Resource(mappedName = "vm/myWorkManager")
private WorkManager myWorkManager;
...并安排异步工作如下:
rjscWorkManager.schedule(new DetailWork(businessId));
我想定义@Asynchronous方法,以便异步代码可以从CDI注入中受益,但我也想控制分配给工作的线程数。这只能通过定义应用程序范围的工作经理来实现吗?我没有在EJB规范或与@Asynchronous和工作管理器相关的WebLogic文档中看到任何内容。
答案 0 :(得分:2)
您可以通过在 weblogic-ejb-jar.xml 中将EJB分配给工作管理器来限制分配给@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/