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
}
}