are*_*res 5 java websphere asynchronous ejb java-ee
我有需要执行的发言权两个任务task1和task2它们是相同的业务流程的一部分.我必须在task1完成时给最终用户做出响应,因此必须最小化响应时间.
我目前的方法是执行task1,一旦task1完成,就task2异步调用方法.task2很复杂,它的响应时间不受我的控制,因为它有一些外部依赖.
@Stateless
public class SessionBean1 {
    @Inject
    SessionBean2 sessionBean2;
    public void doTask1(){
        // task one stuff
        sessionBean2.doTask2();
    }
}
@Stateless
public class SessionBean2 {
    @Asynchronous
    public void doTask2(){
        // do task2 stuff
    }
}
在websphere 8.0(使用中的EJB容器)中,同步方法和异步方法由不同的线程池运行.
我最初的假设是即使task2表现不好,task1也没有影响,但遗憾的是,这不是真的.
如果task2执行得很糟糕,异步线程池中的所有线程都将被占用.这将导致task1等待异步线程空闲,从而task1产生影响.
websphrere服务器日志中的消息: 
The request buffer for thread pool WorkManager.WebSphere_EJB_Container_AsynchMethods_Internal_WorkManager has reached its capacity
我的问题是什么是实现我在这里想要实现的目标的正确方法.
另一种替代方法是增加管理控制台中“EJB 异步方法调用设置”的“工作请求队列大小”。这是一个队列,位于实际线程池本身之前,因此这可能会为您赢得更多时间。
理想情况下,这应该与上面建议的超时结合使用。
| 归档时间: | 
 | 
| 查看次数: | 13272 次 | 
| 最近记录: |