【发布时间】:2012-08-25 07:20:21
【问题描述】:
我有以下情况:
我希望“methodB”并行执行 10 次。但它只发生在从另一个 bean 调用“methodB”时。
为什么当从同一个类中的另一个方法调用方法时,注解“@Asynchronous”不起作用?
谢谢。
【问题讨论】:
-
为什么是代码截图而不是代码?
标签: java jakarta-ee asynchronous ejb
我有以下情况:
我希望“methodB”并行执行 10 次。但它只发生在从另一个 bean 调用“methodB”时。
为什么当从同一个类中的另一个方法调用方法时,注解“@Asynchronous”不起作用?
谢谢。
【问题讨论】:
标签: java jakarta-ee asynchronous ejb
它仅适用于通过客户端代理调用的方法,例如@Local 或@Remote 接口。这在 EJB 3.1 规范(第 4.5 - 4.5.1 节)中有描述:
会话 bean 可以公开具有异步 客户端 调用语义的方法
...
@Asynchronous注解用于指定哪些业务方法是异步的。
...
异步方法调用语义仅适用于无接口、本地业务和远程业务客户端视图。
【讨论】:
view,这是代理的 EJB 术语。如果从同一个 EJB 中调用该方法,它将通过隐式的this 参数,该参数无法被拦截,因此无法正常工作。
@EJB Foo bean; bean.methodB(); 也可以。见adam-bien.com/roller/abien/entry/how_to_self_invoke_ejb