【问题标题】:Error when using Asynchronous annotation in EJB在 EJB 中使用异步注解时出错
【发布时间】:2012-11-10 10:07:15
【问题描述】:

在 EJB 中调用 @Asynchronous 方法时,我看到一个错误被记录下来,尽管方法执行工作正常。关于出了什么问题的任何建议? WebSphere V8 上的 EJB 3.1

界面是:

@Local
public interface MyService {
    @Asynchronous
    public void doJob(MyObj o);
}

实现类:

@Stateless
@Local(MyService.class)
public class MyBean implements MyService {
    @Asynchronous
    public void doJob(MyObj o) {

        // insert to DB

   }
}

错误信息

CWWAM1101E:在类 {0} 中,方法 {1} 使用 @Asynchronous 注释,但必须应用于 bean 类的业务方法或本地/远程业务接口的业务方法。 em>

【问题讨论】:

    标签: java asynchronous ejb websphere ejb-3.1


    【解决方案1】:

    当您实现接口 (MyService) 时,您的 bean 不会公开无接口视图。这意味着 EJB 容器必须“做某事”的所有方法都必须在该接口中定义。

    很可能void doJob(...) 没有定义MyService。如有疑问,请出示doJobMyService 的完整定义。

    【讨论】:

    • 我猜错误是关于在接口中注释了方法声明。您可以尝试从MyService 中删除@Asynchronous 吗?那么你应该只在MyBean 上有@Asynchronous 注释。
    • 附注@Local 注释是双重的很好。你只需要一次。在这种情况下,删除MyBean 上的那个。
    • 尝试了各种场景。 1 - 如果向接口和实现添加注释,则异步功能起作用,并记录错误消息。 2 - 如果仅向界面添加注释,则不会记录错误消息,但功能不起作用。 3 - 如果仅在实现中添加注释,则会记录错误,但功能不起作用。
    • 这听起来像是 WebSphere 中的一个错误:\ 您可以尝试的最后一件事是根本不实现接口。所以,完全删除implements MyService@Local。这不是必须的,只是为了完整性。
    【解决方案2】:

    这是 WebSphere V8.0.0.5 之前的一个缺陷,预计 V8.0.0.6 中会修复

    【讨论】:

      猜你喜欢
      • 2015-05-07
      • 2018-07-01
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 2013-04-10
      • 2017-01-27
      相关资源
      最近更新 更多