context.lookup(“java:comp/env/MyBean”)을 사용할 때 NameNotFoundExcpetion이 발생하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/653966

  •  19-08-2019
  •  | 
  •  

문제

사용할 때 NameNotFoundException이 발생하는 이유는 무엇입니까? context.lookup("java:comp/env/MyBean") 하지만 내가 사용할 때는 그렇지 않다 context.lookup(MyBean.class.getName()) ?

오류는 "java:comp/env/MyBean에 바인딩된 개체가 없습니다"라고 보고합니다. 이름을 바인딩하는 방법과 바인딩 이유는 무엇입니까? class.getName() 아직도 일해요?java:comp/env 를 사용하는 이유는 무엇입니까?

저는 Netbeans 6.5, Glassfish 2.1을 사용하고 있습니다.

도움이 되었습니까?

해결책

그만큼 자바:컴포넌트/환경 접두사는 리소스 참조라는 항목에 사용됩니다.이는 찾고 있는 리소스와 리소스의 실제 JNDI 이름 간의 추상화입니다.기본 리소스의 위치를 ​​변경할 수 있습니다(예:다른 서버 및 컨텍스트) 조회 코드에 영향을 주지 않고.

WAS에서만 사용했는데 리소스에 액세스해야 하는 각 모듈에 대해 기존 리소스(JMS, JDBC, EJB ...)에 대한 참조를 생성한다는 아이디어입니다.배포 구성의 일부입니다.

여기 Sun의 튜토리얼 그리고 여기에 Glassfish 예가 있습니다.

다른 팁

이것이 Glassfish의 경우에 사실인지 확실하지 않지만 JBoss의 경우 디버그를 켜면 사용될 JNDI 이름을 알 수 있습니다.

예를 들어, Demobean이라는 세션 Bean을 배포하는 동안 Server.log 파일에 다음 로그인이 표시됩니다.

2009-07-24 09 : 08 : 18,747 디버그 [org.jboss.ejb3.stateveless.stateLessDelegateWrapper] jboss.j2ee : jar = sessionbeandemo.jar, name = demobean, service = ejb3 2009-07-24 09 : 08 : 18,747 Debug [org.jboss.ejb3.proxydeployer]에 대한 선언 된 원격 바인딩 없음 : Demobean 2009-07-24 09 : 08 : 18,747 Debug [org.jboss.ejb3.proxydeployer] Demobean 2009-07-24 09에 대한 원격 인터페이스가 있습니다. 08 : 18,747 디버그 [org.jboss.ejb3.proxydeployer] 기본 원격 바인딩은 jndiname을 데모 비안/리모컨

그런 다음 클라이언트 코드에서 다음과 같이 찾을 수 있습니다.

        InitialContext ctx;
        try {
            ctx = new InitialContext();
            DemoBeanRemote demo = (DemoBeanRemote) ctx.lookup("DemoBean/remote");
            System.out.println(demo.sayHello());
        } catch (NamingException e) {
            e.printStackTrace();
        } 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top