2012-04-18 2 views
0

glassfish의 EAR에는 두 개의 ejb가 있는데, 둘 다 원격 인터페이스를 구현하고 있기 때문에 클라이언트 jndi 검색을 위해 매핑 된 이름이 모두 할당 된 이유는 무엇입니까?이름을 사용하지 않고 다른 bean에 mappedname으로 ejb bean을 삽입

이제 다른 하나에 주입하고 싶습니다. 내 ejb에 주석이없는 이름없이 Singleton Bean을 삽입했습니다.
하지만 여기가 작동하지 않습니다.

로컬 인 경우에도 JNDI 조회를 수행해야합니까?

@Stateless(mappedName = "ChildBean") 
public class ChildBean implements ChildBeanRemote {} 

@Stateless(mappedName = "ParentBean") 
public class ParentBean implements ParentBeanRemote 
{ 
    @EJB 
    private ChildBean childBean; 
} 

답변

1

나는 그것이 지금 작동

@Stateless(mappedName = "ChildBean") 
public class ChildBean implements ChildBeanRemote {} 

@Stateless(mappedName = "ParentBean") 
public class ParentBean implements ParentBeanRemote 
{ 
    @EJB 
    private ChildBeanRemote childBean; //You should use the interface and not the bean 
} 
+0

덕분에, 만약 내가 클래스 자체를 인터페이스와하지를 주입해야하는 이유 아직도 이해가 안가 그 같은 시스템 – djmj

+0

에이 때문입니다해야한다고 생각 당신은 EJB가 주입되고 어떤 정규 POJO도 주입되기를 원치 않는다. EJB는 원격 서버에 배포 될 수 있으므로 인터페이스를 통해 노출 된 메소드를 통해서만 액세스 할 수 있습니다. youy가 구현 한 방법은 EJB이기 때문에 로컬 인터페이스를 사용했다하더라도 작동하지 않을 것이고 하나의 ejb를 다른 EJB로 호출하는 것과 다르지 않습니다. 항상 첫 번째 ejb에서 두 번째 ejb를 찾은 다음 두번째 것. 희망이 명확하게. Spring이나 soem 프레임 워크를 통해 POJO를 주입하는 경우에도 항상 인터페이스를 사용하는 것이 좋습니다. – Prashanth

+0

하지만 인터페이스가없는 @Singleton 빈은 같은 jvm에 직접 주입 될 수 있습니다. 이것은 실제로 그렇게 간단하지 않습니다. – djmj

관련 문제