声明为final的方法导致@EJB为null,为什么?

时间:2017-06-11 19:30:10

标签: nullpointerexception ejb wildfly final wildfly-10

我有以下方法。声明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.
    }
}

(配置本身是单身)

1 个答案:

答案 0 :(得分:2)

除了public的业务方法(客户端可以调用的方法)之外,Ejb bean不喜欢任何其他mehod修饰符。虽然这个特殊情况看起来像Wildfly中的一个错误。 Wildfly 10符合JavaEE7,因此它的EJB容器应符合EJB 3.2规范,该规范说明会话bean的以下内容:

  

只有bean类的公共方法和除了的任何超类   可以通过无接口视图调用java.lang.Object。   尝试通过任何其他访问修改程序调用方法   无界面视图引用必须导致   javax.ejb.EJBException异常

所以你的商业方法无论如何都不能是最终的,但你的服务器应该通知你。