【问题标题】:EJB @Asynchronous does not work in same classEJB @Asynchronous 在同一个类中不起作用
【发布时间】:2012-08-25 07:20:21
【问题描述】:

我有以下情况:

我希望“methodB”并行执行 10 次。但它只发生在从另一个 bean 调用“methodB”时。

为什么当从同一个类中的另一个方法调用方法时,注解“@Asynchronous”不起作用?

谢谢。

【问题讨论】:

  • 为什么是代码截图而不是代码?

标签: java jakarta-ee asynchronous ejb


【解决方案1】:

它仅适用于通过客户端代理调用的方法,例如@Local@Remote 接口。这在 EJB 3.1 规范(第 4.5 - 4.5.1 节)中有描述:

会话 bean 可以公开具有异步 客户端 调用语义的方法

...

@Asynchronous注解用于指定哪些业务方法是异步的。

...

异步方法调用语义仅适用于无接口、本地业务和远程业务客户端视图

【讨论】:

  • 知道了这一点,我解决了如下问题:@EJB FooLocal bean; bean.methodB();非常感谢。
  • 您的回答并不完全正确。您引用的部分要求通过远程或本地接口进行调用。相反,它说调用需要通过view,这是代理的 EJB 术语。如果从同一个 EJB 中调用该方法,它将通过隐式的this 参数,该参数无法被拦截,因此无法正常工作。
  • @RafaelOrágio 您不需要该界面。 @EJB Foo bean; bean.methodB(); 也可以。见adam-bien.com/roller/abien/entry/how_to_self_invoke_ejb
  • 这是真的@Arjan Tijms。谢谢!
  • 但是 methodB() 应该是公开的 :)
猜你喜欢
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多