【问题标题】:Null pointer with self injection EJB带有自注入 EJB 的空指针
【发布时间】:2017-12-08 15:40:30
【问题描述】:

我正在使用 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
    }
}

【问题讨论】:

    标签: java jakarta-ee dependency-injection proxy


    【解决方案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“视图”与外部客户端将看到的相同,因此只能访问其公共方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-10
      • 1970-01-01
      • 2015-01-23
      • 2012-10-29
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多