Asynchronous Singletion EJB是一个异步方法(LockType.Write)块,直到该方法处理为止,还是在将控件返回给客户机后立即释放锁?
我有一个单例EJB(3.1),它对所有方法都使用默认容器管理的并发性和默认值(LockType.Write),因为它没有显式指定 我有一个异步方法,如下所示:Asynchronous Singletion EJB是一个异步方法(LockType.Write)块,直到该方法处理为止,还是在将控件返回给客户机后立即释放锁?,asynchronous,concurrency,singleton,java-ee-6,ejb-3.1,Asynchronous,Concurrency,Singleton,Java Ee 6,Ejb 3.1,我有一个单例EJB(3.1),它对所有方法都使用默认容器管理的并发性和默认值(LockType.Write),因为它没有显式指定 我有一个异步方法,如下所示: @Asynchronous @TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED) @AccessTimeout(-1) public AsyncResult<Boolean> myAsyncMethod(....){ } 异步的 @Tra
@Asynchronous
@TransactionAttribute(value = TransactionAttributeType.NOT_SUPPORTED)
@AccessTimeout(-1)
public AsyncResult<Boolean> myAsyncMethod(....){
}
异步的
@TransactionAttribute(值=TransactionAttribute类型。不受支持)
@访问超时(-1)
公共AsyncResult myAsyncMethod(..){
}
我的问题是,当调用时,这个方法会锁定整个单例bean,直到上面的方法完成处理,还是只锁定到该方法将未来的对象返回给客户机
另外,
“@AccessTimeout(-1)”
将对该方法/bean的并发性产生什么影响。回答问题1:由于该方法标记为@Asynchronous,它将立即返回。没有阻拦,什么都没有
对问题2的回答:在会话bean方法/类上使用@AccessTimeout(-1)意味着一旦线程进入该方法,它将永远阻塞,直到完成处理。但是,在这种情况下,这并不重要,因为@Asynchronous将启动,释放调用线程并在不同的后台线程中启动处理
巧合的是,几天前我碰巧就这个话题写了一篇文章。我还建议大家阅读EJB3.2规范文档——这是一份可靠而全面的参考资料
我的问题是,当调用时,这个方法会锁定整个系统吗
单例bean,直到上述方法完成处理或将其
只锁定到方法将未来对象返回给
客户
单例bean在客户端线程上从来没有被锁定过。客户机线程调度异步方法并返回未来,而不访问bean。最终执行异步方法的线程将在方法执行期间锁定bean
另外,“@AccessTimeout(-1)”对的并发性有什么影响
这个方法是/bean
@AccessTimeout(-1)
将导致最终尝试执行异步方法的线程阻塞,直到可以获取容器管理的锁。因此,您的意思是,除非该方法完成处理,否则我将无法在singleton中执行其他方法。除非我将此方法标记为LockType。请阅读。。。这种理解正确吗?是的,异步方法将与bean中的任何其他方法一样锁定bean。唯一的区别是哪个线程持有锁,这对客户端来说很重要,因为客户端线程不会阻塞等待锁的过程(如果bean已经被锁定,异步线程将阻塞)。