我有以下方法。声明final
方法时,@EJB
为空。为什么会这样?当我省略final
关键字时,它可以正常工作。
@Stateless
@TransactionManagement(TransactionManagementType.CONTAINER)
public class TokenService2
{
@EJB
private Configuration configuration;
public final void processAuthentication(String authCode) throws FileNotFoundException, IOException
{
//here configuration is NULL.
}
}
(配置本身是单身)
答案 0 :(得分:2)
除了public
的业务方法(客户端可以调用的方法)之外,Ejb bean不喜欢任何其他mehod修饰符。虽然这个特殊情况看起来像Wildfly中的一个错误。 Wildfly 10符合JavaEE7,因此它的EJB容器应符合EJB 3.2规范,该规范说明会话bean的以下内容:
只有bean类的公共方法和除了的任何超类 可以通过无接口视图调用java.lang.Object。 尝试通过任何其他访问修改程序调用方法 无界面视图引用必须导致 javax.ejb.EJBException异常
所以你的商业方法无论如何都不能是最终的,但你的服务器应该通知你。