Singletion EJB是一个异步方法(LockType.Write)块,直到该方法处理或在将控件返回给客户端后立即



我有一个单例EJB(3.1),它对所有方法使用默认的容器管理并发和默认的(LockType.Write),因为它没有明确指定。

我有一个异步方法,如下所示:

@Asynchronous
@TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED)
@AccessTimeout(-1)
public AsyncResult<Boolean> myAsyncMethod(....){
}

我的问题是,当被调用时,这个方法会锁定整个singleton bean,直到上面的方法完成处理,还是只锁定到该方法向客户端返回Future对象?

"@AccessTimeout(-1)"对这个方法/bean的并发性有什么影响。

我的问题是,当被调用时,这个方法会锁定整个singleton bean,直到上面的方法完成处理锁定,直到该方法将Future对象返回到客户

单例bean在客户端线程上根本不会被锁定。客户端线程调度异步方法,并在不访问bean的情况下返回Future。最终执行异步方法的线程将在方法执行期间锁定bean。

"@AccessTimeout(-1)"对这个方法/bean。

@AccessTimeout(-1)将导致最终尝试执行异步方法的线程阻塞,直到可以获取容器管理的锁为止。

对Q1的回答:由于该方法被标记为@Asynchronous,它将立即返回。没有阻止任何

回答Q2:在会话bean方法/类上使用@AccessTimeout(-1)意味着一旦线程进入该方法,它将永远阻塞,直到完成处理。然而,在这种情况下,这不是一个问题,因为@Asynchronous将启动,释放调用线程,并在不同的后台线程中开始处理

无独有偶,几天前我碰巧写了一篇关于这个话题的博客文章。我还建议阅读EJB 3.2规范文档,这是一份可靠而全面的参考资料

相关内容

最新更新