2011-06-15 5 views
2

알아낼 수없는 한 가지 문제가 발생했습니다. 그것이 EJB 아니라, HelperInterface 외부 라이브러리 인터페이스입니다 : 당신이 볼 수 있듯이, HelperEJB가없는 인터페이스보기를 통해 노출되는다른 EJB에 하나의 EJB를 주입하는 Java EE

@Stateless 
public class MainEJB { 

    @EJB 
    private HelperEJB helper; 

} 

@Stateless 
public class HelperEJB implements HelperInterface { 

} 

(참고 :이 같은 다른에 하나의 EJB를 주입하고 싶습니다 인터페이스). 이 작동하지 않습니다, 나는 다음과 같은 예외를 얻을 것이다 : HelperEJB 어떤 인터페이스를 구현하지 않는 경우

javax.naming.NamingException: Lookup failed for 'org.mycompany.ejb.HelperEJB #org.mycompany.ejb.HelperEJB' 

그러나 :

@Stateless 
public class HelperEJB { 

} 

그것은 작동합니다. MainEJB와 HelperEJB 사이에 @Local 인터페이스가있는 경우에도 작동합니다.

첫 번째 시도에서와 같이 인터페이스가없는보기를 통해이 작업을 수행 할 수없는 이유는 무엇입니까? 개인 필드가 다음과 같이 인터페이스를 사용하여 선언하는 경우

답변

2

첫 번째 예는 작동합니다 :

@Stateless 
public class MainEJB { 
    @EJB 
    private HelperInterface helper; // changed this 
} 

@Stateless 
public class HelperEJB implements HelperInterface { 
} 

@Local 
public interface HelperInterface { 
} 
+0

감사합니다. 작동합니다. 왜 이렇게이다? 다른 EJB가 인터페이스 없음 뷰를 통해 주입되는 경우, 인터페이스를 구현하는 경우 해당 인터페이스 중 하나에서 참조해야합니다. – Dario

+1

@Dario Arjan Tijms가 그의 게시물에서 말했듯이. – deltaforce2

2

은 EJB 어떤 (사업) 인터페이스를 구현하지 않습니다 때없는 인터페이스보기 만 생성됩니다.

@LocalBean 주석을 사용하여 인터페이스 없음보기를 명시 적으로 선언 할 수 있습니다.