EJB中的@Asynchronous私有方法

Mik*_*zak 2 java ejb glassfish java-ee ejb-3.1

我的EJB单例中有一个异步方法,它是从同一个类中的另一个方法调用的.我已经知道我无法直接调用异步方法,我必须获取EJB代理.问题是,我不希望异步方法在类外可见; 但是当我将它设为私有时,它不是异步执行的.(我正在使用Glassfish v3.)

javadocs没有说明所需的访问级别.那么这应该被认为是Glassfish中的一个错误吗?

Plí*_*eão 8

方法注释不能在私有方法中使用.当Glassfish编译EJB时,它基本上会将您的注释转换为代码中包含代码的代码片段.如果你的方法是私有的,它将绕过Glassfish创建的代理...所以,在你的情况下,我建议用你的异步方法创建一个新的EJB,将它注入你当前的EJB中

  • 它只是一个Glassfish实现,但是看看Javadoc说:"用于将方法标记为异步方法或将类或接口的所有业务方法指定为异步." 业务方法是可供其他人使用的方法.私人方法不进来. (2认同)
  • EE规范要求只能使用公共方法.除非进行AOP /编织,否则容器无法为私有方法创建代理.您尝试调用私有方法的事实意味着您没有正确调用业务方法,您只是调用本地方法. (2认同)