애플리케이션 액세스 문제점
서블릿, JavaServer Pages 파일, 독립형 애플리케이션 또는 기타 클라이언트가 WebSphere® Application Server에서 호스트하는 엔터프라이즈 Bean, ConnectionPool 또는 기타 이름 지정된 오브젝트에 액세스할 때 발생한 문제점을 해결하려면, 먼저 클라이언트에서 대상 서버에 액세스할 수 있는지 확인해야 합니다.
- 클라이언트 서버의 명령 프롬프트에서 ping server_name을 입력하고 연결을 확인하십시오.
- 관리 콘솔을 사용하여 대상 자원의 애플리케이션 서버와, 적용되는 경우 엔터프라이즈 Bean(EJB) 모듈 또는 웹 모듈이 시작되었는지 확인하십시오.
연결에 문제점이 없고 대상 자원이 실행되고 있는 것으로 나타나는 경우에만 계속하십시오.
- JNDI 찾아보기 조작에서 NameNotFoundException 발생
- JNDI 찾아보기 조작에서 CannotInstantiateObjectException 발생
- 서버의 로그 파일에 일부 네이밍 예외가 발생했음을 표시하는 NMSV0610I 메시지가 나타납니다.
- JNDI 컨텍스트 조작에서 OperationNotSupportedException 발생
- WSVR0046E: 바인드 실패. ejb/jndiName: ejb/jndiName. 원래 예외 : org.omg.CosNaming.NamingContextPackage.AlreadyBound
- "새 InitialContext" 조작 또는 URL 이름을 사용하는 JNDI 컨텍스트 조작에서 ConfigurationException 발생
- "새 InitialContext" 조작에서 ServiceUnavailableException 발생
- "새 InitialContext" 조작에서 CommunicationException 발생
NMSV0605E: 컨텍스트에서 참조 오브젝트가 검색되었습니다...
사용자의 문제점과 유사한 문제점이 없거나 제공된 정보로 사용자의 문제점을 해결할 수 없는 경우 IBM® Support에 문의하여 추가 지원을 요청하십시오.
JNDI 찾아보기 조작에서 NameNotFoundException 발생
NameNotFoundException에는 세 가지 원인이 있습니다.
- 이름 찾아보기가 잘못된 경우.
- 찾아보는 오브젝트가 바인드되지 않은 경우.
- 동일한 호스트에서 실행 중인 같은 이름의 두 서버가 상호운영을 위해 사용 중인 경우.
- 잘못된 이름 찾아보기
- 엔터프라이즈 Bean, 데이터 소스, 메시징 자원 또는 기타 자원에 액세스하는 동안
NameNotFoundException이 발생한 경우, 다음을 시도하십시오.
- NameNotFoundException의 원인을 판별하십시오.
관리 콘솔에서 대상 오브젝트의 특성을 찾아보고 대상 오브젝트가 지정하는 JNDI(Java™ Naming and Directory Interface) 이름이 클라이언트에서 사용 중인 JNDI 이름과 일치하는지 확인하십시오.
초기 컨텍스트를 획득한 서버와 다른 서버에 상주하는 오브젝트를 찾을 경우, 완전한 이름을 사용해야 합니다.- 엔터프라이즈 Bean에 액세스하는 Servlet과 같이 다른 서버 오브젝트에서 액세스하고 기본 컨텍스트를 사용하며 완전한 JNDI 이름을 지정하지 않은 경우, 다른 서버에서 오브젝트를 호스트하면 NameNotFoundException이 발생할 수 있습니다.
- 독립형 클라이언트에서 액세스하는 경우, 액세스하려는 오브젝트가 초기 컨텍스트를 획득한 서버와 다른 서버에 있는 것일 수 있습니다.
- 완전한 JNDI 이름을 사용하여 문제점을 정정하십시오.오브젝트가 단일 서버에 있는 경우 완전한 JNDI 이름은 다음과 같습니다.
cell/nodes/nodeName/servers/serverName/jndiName
제한사항: 오브젝트는 해당 릴리스에서 지원되지 않습니다.오브젝트가 서버 클러스터에 있는 경우 완전한 JNDI 이름은 다음과 같습니다.cell/clusters/clusterName/jndiName
- NameNotFoundException의 원인을 판별하십시오.
- 찾아보는 오브젝트가 바인드되지 않은 경우
- 찾아보는 오브젝트가 바인드되지 않은 곳에서 NameNotFoundException을 정정하려면 다음을 수행하십시오.
- 찾아보는 오브젝트가 엔터프라이즈 Bean과 같은 애플리케이션 오브젝트인 경우 애플리케이션이 실행 중인지 확인하십시오.
- dumpNameSpace 도구를 실행하여 네임 스페이스 컨텐츠를 보고 찾아보는 오브젝트가 예상한 이름의 네임 스페이스로 바인드되었는지 확인하십시오.
- 동일한 호스트에서 실행 중인 같은 이름의 두 서버가 상호운영을 위해 사용 중인 경우
- node1의 서버에서 실행 중인 애플리케이션이 node2에 있는 비슷한 이름의 서버에서
상주하는 오브젝트에 대한 원격 오브젝트 참조를 사용하고 두 노드가 모두 동일한 호스트에
설치된 경우 여러 가지 다른 장애가 발생할 수 있습니다.
- JNDI 찾아보기는 NameNotFoundException으로 실패합니다.
- JNDI 찾아보기를 통해 얻은 것 이외의 방법으로 얻은 오브젝트 참조도 보통 org.omg.CORBA.OBJECT_NOT_EXIST 예외로 실패합니다.
- 오브젝트가 로컬 프로세스에도 존재하기 때문에 원격 오브젝트 참조가 로컬 프로세스에 있는 오브젝트에 올바르지 않게 해석됩니다. 즉, node2의 서버 프로세스에 있는 원격 오브젝트에 대한 참조가 node1의 서버 프로세스인 로컬 프로세스에 있는 오브젝트와 같은 유형으로 잘못 해석합니다.
다른 노드 및 다른 호스트의 서버 간 오브젝트 참조는 서버 이름이 고유하지 않아도 예외로 이어지지 않습니다.
장애를 수정하려면 오브젝트 요청 브로커(ORB)에 대한 JVM(Java Virtual Machine) 사용자 정의 특성인 com.ibm.websphere.orb.uniqueServerName을 각 서버 또는 두 서버 모두에 대해 true로 설정하십시오.- 관리 콘솔에서 을 클릭하십시오.
- 사용자 정의 특성 설정 페이지에서 다음 사용자 정의 특성을 정의하십시오.
- 이름에 com.ibm.websphere.orb.uniqueServerName을 지정하십시오.
- 값에 true를 지정하십시오.
- 확인을 클릭하십시오.
- 콘솔 작업 표시줄에서 저장을 클릭하십시오.
- Application Server를 다시 시작하십시오.
노드 에이전트의 유사한 장애를 방지하기 위해 노드 에이전트 JVM(Java Virtual Machine) 사용자 정의 특성 ORB인 com.ibm.websphere.orb.uniqueServerName을 true로 설정할 수 있습니다.
JNDI 찾아보기 조작에서 CannotInstantiateObjectException 발생
- 직렬화된 Java 오브젝트를 찾고 있지만 오브젝트의 직렬화를 해제하는 데 필요한 필수 클래스가 런타임 환경에 없습니다.
- 참조 오브젝트를 찾고 있지만 찾아보기 처리의 일부로 참조 오브젝트를 처리하는 데 사용된 연관된 팩토리를 실행할 수 없습니다.
- 관련 로그에서 CannotInstantiateObjectException 바로 앞의 예외를 찾아보십시오.
이 예외가 java.lang.NoClassDefFoundError 또는
java.lang.ClassNotFoundException일 경우, 오류 메시지에서 참조되는 클래스를
클래스 로더로 찾을 수 있는지 확인하십시오..
JVM 로그를 확인하십시오.
대상 자원을 호스트하는 서버의 로그를 보십시오.
- 루트 원인에 대한 스택 추적을 인쇄하고 팩토리 클래스를 찾아보십시오. 이것은 javax.naming.NamingManager.getObjectInstance()에서 호출됩니다. 실패 원인은 팩토리 구현에 따라 다르고 팩토리 클래스의 개발자에게 문의해야 합니다.
서버의 로그 파일에 일부 네이밍 예외가 발생했음을 표시하는 NMSV0610I 메시지가 나타납니다.
이 오류는 정보용으로만 사용되며 예외가 실제 문제점과 관련된 경우에 제공됩니다. 대부분은 실제 문제점과 관련되지 않습니다. 실제 문제점과 관련된 경우, 로그 파일은 인접 항목을 포함하여 컨텍스트를 제공해야 합니다.
- 문제점이 발생하지 않는 경우, 이 메시지를 무시하십시오. 또한 발생하는 문제점이 보고되고 있는 예외와 관련된 것으로 나타나지 않는 경우 및 로그에 다른 인접 오류 메시지가 없는 경우에도 메시지를 무시하십시오.
- 문제점이 발생하는 경우 기본 오류 메시지의 로그를 살펴보십시오.
- NMSV0610I 메시지에 제공된 정보는 발생한 네이밍 예외에 대한 응답으로 송신된 기타 인접 오류 메시지의 중요한 디버그 데이터를 제공할 수 있습니다.
JNDI 컨텍스트 조작에서 OperationNotSupportedException 발생
- 바인드와 같은 업데이트 조작이 "java:comp/env"로 시작하는 이름을 사용하여 수행 중입니다. 해당 컨텍스트와 서브컨텍스트는 읽기 전용 컨텍스트입니다.
- 비 CORBA 오브젝트의 컨텍스트 바인드 또는 리바인드 조작이 제품에 속하지 않는 원격 네임스페이스에서 수행 중입니다. CORBA 오브젝트만을 해당 CosNaming 네임 스페이스에 바인드할 수 있습니다.
문제점을 야기하는 오류를 판별하려면 전체 예외 메시지를 점검하십시오.
WSVR0046E: 바인드 실패. ejb/jndiName: ejb/jndiName. 원래 예외 : org.omg.CosNaming.NamingContextPackage.AlreadyBound
이 오류는 이름 바인드 충돌이 발생한 서버와 동일한 서버에 두 개의 엔터프라이즈 Bean 서버 애플리케이션이 설치되었을 때 발생합니다. 즉, jndiName 값이 두 애플리케이션의 배치 디스크립터에서 동일합니다. 서버 시작 도중 해당 jndiName 값을 사용하는 두 번째 애플리케이션이 시작될 때 오류가 표시됩니다.
이것이 문제점인지 확인하려면 둘 이상의 엔터프라이즈 Bean 애플리케이션에 지정된 jndiName 검색시 서버에서 실행 중인 모든 엔터프라이즈 Bean 서버 애플리케이션에 대한 배치 디스크립터를 조사하십시오.
문제점을 정정하려면 서버 프로세스의 각 엔터프라이즈 Bean이 서로 다른 이름으로 바인드되도록 중복된 jndiName 값을 변경하십시오.
"새 InitialContext" 조작 또는 URL 이름을 사용하는 JNDI 컨텍스트 조작에서 ConfigurationException 발생
초기 JNDI 컨텍스트 확보 중인 경우, 유효하지 않은 JNDI 특성 값이 InitialContext 생성자에 전달되어 구성 예외가 발생할 수 있습니다. 여기에는 시스템 특성 또는 클래스 로더에 유효하게 표시되는 일부 jndi.properties 파일에 설정된 JNDI 특성이 포함됩니다. 형식이 틀린 제공자 URL은 잘못되었을 가능성이 가장 높은 특성입니다. JNDI 클라이언트가 CLASSPATH가 모든 필수 개별 jar 파일을 포함하도록 설정된 thin 클라이언트로 실행 중인 경우, com/ibm/websphere/naming/jndiprovider.properties 특성 파일을 포함하는 .jar 파일이 CLASSPATH에 있는지 확인하십시오.
예외가 URL 형식의 이름을 가진 JNDI 컨텍스트 호출에서 발생한 경우, 현재 JNDI 구성이 제대로 설정되지 않았을 수도 있으며 따라서 필수 팩토리 클래스 이름을 판별할 수 없거나 팩토리가 현재 클래스 로더에 유효하게 표시되지 않을 수도 있습니다. 이름이 Java: URL인 경우, JNDI 클라이언트가 Java EE(Java Platform, Enterprise Edition) 클라이언트 또는 서버 환경에서 실행 중이어야 합니다. 즉, 클라이언트가 컨테이너에서 실행 중이어야 합니다.
예외 메시지를 확인하여 원인을 확인하십시오.
InitialContext 생성자에서 예외가 발생한 경우, 특성 설정 또는 CLASSPATH를 정정하십시오.
예외가 JNDI 컨텍스트 메소드에서 발생한 경우, java.naming.factory.url.pkgs 특성이 이름에 URL 설계에 필요한 팩토리의 패키지 이름을 포함하는지 확인하십시오. Java 설계를 사용하는 URL 이름은 컨테이너에서 실행 중인 동안에만 사용할 수 있습니다.
"새 InitialContext" 조작에서 CommunicationException 발생
- 제공자 URl의 호스트 이름 또는 포트가 틀립니다.
- 도메인 네임 서버가 호스트 이름을 IP 주소에 대응시킬 수 없거나 IP 주소가 서버가 실제로 실행되는 IP 주소와 일치하지 않습니다.
- 클라이언트 또는 서버의 방화벽이 사용 중인 제공자 URL에 지정된 포트를 방해하고 있습니다.
- 클라이언트 및 서버 시스템의 제공자 URL 및 네트워크 구성이 올바른지 확인하십시오.
- 호스트 이름을 클라이언트 시스템이 도달할 수 있는 IP 주소로 대응시킬 수 있는지 확인하십시오. Ping 명령을 사용하여 이를 수행할 수 있습니다.
- 방화벽을 실행 중인 경우, 제공자 URL에 지정된 포트를 사용할 수 있는지 확인하십시오.