Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous Singletion EJB是一个异步方法(LockType.Write)块,直到该方法处理为止,还是在将控件返回给客户机后立即释放锁?_Asynchronous_Concurrency_Singleton_Java Ee 6_Ejb 3.1 - Fatal编程技术网

Asynchronous Singletion EJB是一个异步方法(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

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

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

@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已经被锁定,异步线程将阻塞)。