2009-10-25 5 views
1

여기 내 자바 클래스나는 예외를 받고 있어요이 클래스를 실행하면

import endpoint.NewSessionRemote; 
import javax.naming.Context; 
import javax.naming.InitialContext; 

public class HelloClient { 

    public static void main(String[] args) { 
     try { 
      Context ctx = new InitialContext(); 
      NewSessionRemote hello = (NewSessionRemote) ctx.lookup("endpoint.NewSessionRemote"); 
      System.out.println(hello.stringChange(4)); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

    } 
} 

입니다.

javax.naming.NameNotFoundException: endpoint.NewSessionRemote not found 
     at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216) 
     at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188) 
     at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74) 
     at com.sun.enterprise.naming.RemoteSerialContextProviderImpl.lookup(RemoteSerialContextProviderImpl.java:129) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154) 
     at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687) 
     at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227) 
     at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846) 
     at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706) 
     at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088) 
     at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223) 
     at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806) 
     at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563) 
     at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567) 
     at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555) 
java.lang.NullPointerException 

기타 모든 엔터프라이즈 bean 클래스는 EJB 3.0 표준에 따라 작성됩니다. 귀중한 기여가 예상됩니다.

솔루션

예외였다

응용 프로그램 측에서 제공 한 JNDI 이름이 servser의 (글래스 피시) 실제 JNDI 이름과 일치하지 않았다 때문에 발생
javax.naming.NameNotFoundException: endpoint.NewSessionRemote not found 

, 그래서 내가 그랬어 관리 콘솔 (공급 업체 고유)을 통해 Glassish의 JNDI 트리를 확인했고 NewSessionRemote 인터페이스의 JNDI (세션 Bean의 비즈니스 인터페이스는 NewSessionBean)은 신청서에 나와있는 이름과 다릅니다. 그럼 어떻게 이런 일이 갑자기 내 마음에 뭔가가 왔어 그게 ejb-jar.xml 또 다른 이름 JNDI 이름이 NewSessionRemote 태그에 지정되어 있습니다. 그래서 간단히 제거하고 EJB 모듈을 재배포합니다. 그게 전부 야.

+0

문제는 도움을 주셔서 감사합니다. – Switch

+0

그럼 같은 문제가있는 다른 사람들이 귀하의 경험을 통해 배울 수 있도록 솔루션에 대한 세부 정보를 게시하는 것이 어떻습니까? –

답변

0

에서 당신이 간단한 예제를 읽어 내가 제안

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); 

:

따라서, 당신은 당신의 env (iCtx 온)에이 같은 것을 넣어한다 서버에 연결하기 위해 특정 구성을 필요로하는 API를 사용합니다 (해당 구성의 세부 사항은 Javadoc 참조). 예를 들어 java.naming.factory.initial은 사용할 JNDI의 구현을 나타내는 속성입니다.

이제 JavaEE 서버에서 코드를 실행할 때이 구성을 암시 적으로 사용할 수 있으며 코드에서 수행 한 작업 만 수행하면 InitialContext이 인스턴스화되고 조회가 수행됩니다. 그러나 서버 외부에서 실행 중이면이 암시 적 구성이 존재하지 않으므로 InitialContext을 명시 적으로 구성해야합니다.

예제 코드는 main() 메서드를 사용하므로 사용자가 컨테이너 외부에서 실행 중임을 나타냅니다. 필요한 구성은 특정 응용 프로그램 서버에 따라 다르기 때문에 구성 할 설명서를 확인하려면 해당 설명서를 찾아야합니다.

+0

안녕하세요. 저는이 문제를 극복 할 수 있었지만 이제는 또 다른 예외가 생길 것입니다. – Switch

1

당신은 lookingUp() 인 RMI 레지스트리 (즉, 활성 서버)가없는 것 같습니다.

Context.INITIAL_CONTEXT_FACTORY 변수를 제공하지 않았으므로 조회는 유효한 URL이 아니어야합니다. JNDI를 사용하는 경우 당신이있어, http://java.sun.com/j2se/1.5.0/docs/guide/jndi/jndi-rmi.html