带有自注EJB的空指针

时间:2017-12-08 15:40:31

标签: java java-ee dependency-injection proxy

我正在使用JEE7,我有一个使用自注射来解决事务性问题的无状态EJB。 当我调用方法 selfMethod 并且它是公共的时,一切正常。如果它是私有的,则注入的组件为空。 我想这与代理模型和自我注入有某种关系,但并不真正理解为什么。

@Stateless
public class AnEjb {

    @Inject
    @EJB
    private AnEjb self;

    @Inject
    private AClass anObject;

    public void normalMethod() {
        self.selfMethod();
    }

    public/private void selfMethod() {
        anObject.anyMethod();  // Null pointer exception if selfMethod is private, no problem if it is public
    }
}

1 个答案:

答案 0 :(得分:1)

EJB API提供了一种自我调用机制:

    @Stateless
    public class AnEjb {

        @Resource
        private SessionContext sessionContext;

        private AnEjb self;

        @PostConstruct
        void initialise() {
            self = sessionContext.getBusinessObject(AnEjb.class);
        }

        public void normalMethod() {
            self.selfMethod();
        }

        public void selfMethod() {
            anObject.anyMethod();
        }

    }

请注意,SessionContext.getBusinessObject方法返回外部客户端将看到的EJB的相同“视图”,因此只能访问其公共方法。