我的 EJB 单例中有一个异步方法,它是从同一个类中的另一个方法调用的。我已经知道我不能直接调用异步方法,我必须获得一个EJB代理。问题是,我不希望异步方法在类外可见;但是当我将其设为私有时,它不会异步执行。(我使用的是 Glassfish v3。)
javadocs没有说明所需的访问级别。那么这应该被认为是 Glassfish 中的一个错误吗?
方法注解不能在私有方法中使用。当 Glassfish 编译您的 EJB 时,它基本上会将您的注释转换为一段代码,将您的代码围绕在代理中。如果您的方法是私有的,它将绕过创建的代理 Glassfish...因此,在您的情况下,我建议使用您的异步方法创建一个新的 EJB,并将其注入您当前的 EJB
这是一个非常有趣的反馈。我可以看到您尝试做的事情的价值。尝试将您的 bean 标记为 an并将您的方法@LocalBean
注释为.@Asynchronous
protected
由于@LocalBean
支持基本上是通过子类化 bean 类(动态或静态)完成的,因此容器实际上不可能覆盖该private
方法。但我当然可以看到你的用例。如果protected
方法方法不起作用,我们可以将其添加为 EJB.next 的增强。
仍然可以访问同一包中的其他 bean,但它至少不那么公开。我经常希望 Java 有一个“唯一的子类”范围。我几乎从未使用过protected
,并且想,“太好了,现在我包中的每个人都可以访问它了。”