2017-12-08 1 views
0

JEE7을 사용하고 있습니다. 자체 주입을 사용하여 트랜잭션성에 대한 문제를 해결하는 Stateless EJB가 있습니다. selfMethod 메서드를 호출 할 때 public이되면 모든 것이 작동합니다. private 인 경우, 삽입 된 구성 요소는 널입니다. 필자는 그것이 프록시 모델과 자체 주입과 어떻게 든 관련이 있다고 생각하지만 실제로 이유를 이해하지 못합니다. 그러므로 단지 공용 방법이 될 SessionContext.getBusinessObject 방법은 외부 클라이언트가 보게 될 EJB의 같은 "보기"를 반환자체 주입을 사용한 null 포인터

@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(); 
     } 

    } 

참고 :

@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

는 EJB API는 자기 호출을위한 메커니즘을 제공 접근 가능하다.