애플리케이션 클라이언트 문제점 해결 팁
이 문제점 해결 안내서를 사용하여 공통 Java EE(Java™ Platform, Enterprise Edition) 애플리케이션 클라이언트 문제점을 디버깅합니다. Java EE 애플리케이션 클라이언트 예외 중 하나에 대한 추적 항목을 검토한 후 안내서에서 예외를 찾으십시오.
이 안내서에 있는 일부 오류는 샘플입니다. 사용자가 수신하는 실제 오류는 여기에 보여준 것과 다를 수 있습니다. -CCverbose=true 옵션을 지정하여 launchClient 명령을 재실행하는 데 유용하다는 것을 파악할 수 있습니다. 이 옵션은 Java EE 애플리케이션 클라이언트 런타임이 초기화할 때 추가 정보를 제공합니다.
오류: java.lang.NoClassDefFoundError
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
이 예외는 Java 코드가 지정된 클래스를 로드할 수 없을 때 발생합니다. |
|
지정된 클래스가 EAR(Enterprise Archive) 파일 내의 JAR(Java Archive)
파일에 존재하는지 확인하십시오. 있다면 클래스 경로가 정확한지 확인하십시오. 예를 들어, 다음과 같은 예외를 받은 경우 java.lang.NoClassDefFoundError: WebSphereSamples.HelloEJB.HelloHomeHelloHome 클래스가 EAR 파일 내의 JAR 파일 중 하나에 존재하는지 확인하십시오. 있으면 클래스 경로가 WebSphereSamples.HelloEJB인지를 확인하십시오. |
- 어셈블리 도구로 EAR 파일을 열고 애플리케이션 클라이언트를 클릭하십시오.
- EAR 파일에 있는 기타 JAR 파일의 이름을 클래스 경로 필드에 추가하십시오.
클래스 경로 필드에 입력할 JAR 파일이 여러 개인 경우, JAR 이름을 반드시 공백으로 분리하십시오.
여전히 문제점이 있는 경우, EAR 파일 대신 파일 시스템에서 클래스가 로드되고 있는 상황입니다. 이 오류는 위반되는 클래스가 예외에 지정된 클래스가 아니므로 디버그하기 어렵습니다. 대신, 예외에 지정된 클래스 앞에서 다른 클래스 파일 시스템으로부터 로드됩니다. 이 오류를 해결하려면, -CCclasspath 옵션으로 지정된 클래스 경로와 애플리케이션 클라이언트 자원 구성 도구로 구성된 클래스 경로를 검토하십시오.
또는 클라이언트 컨테이너 자원 구성 스크립트 도구를 사용할 수도 있습니다.
EAR 파일에도 존재하는 클래스를 찾으십시오. 클래스 중 하나가 EAR 파일이 아닌 파일 시스템에 있는 상황을 해결해야 합니다. JAR 파일과 클래스를 파일 시스템에서 참조하는 대신 EAR 파일에 포함시키거나 클래스 경로에서 항목을 제거하십시오.
이 도구에서 -CCclasspath 매개변수 또는 자원 클래스 경로를 사용하고 여러 JAR 파일 또는 클래스를 구성한 경우에는 운영 체제에 맞는 올바른 문자로 구분되어 있는지 확인하십시오. 클래스 경로 필드와는 달리, 이 클래스 경로 필드는 플랫폼 특정 분리자를 사용합니다.
분리 문자는
콜론입니다.
분리 문자는 세미콜론입니다.
오류: com.ibm.websphere.naming.CannotInstantiateObjectException
오류: com.ibm.websphere.naming.CannotInstantiateObjectException: 지정된 참조 오브젝트에 대한 오브젝트 인스턴스를 가져오려는 경우 예외가 발생했습니다. [루트 예외는 javax.naming.NameNotFoundException: xxxxxxxxxx]
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
이 예외는 호스트 서버에 설치되지 않은 오브젝트에서 찾아보기를 수행할 때 발생합니다. 프로그램이 로컬 클라이언트 JNDI(Java Naming and Directory Interface) 네임스페이스에서 이름을 찾을 수 있지만 호스트 서버에 없기 때문에 NameNotFoundException 예외가 수신되었습니다. 일반적인 예는 사용자가 액세스하는 호스트 서버에 설치되어 있지 않은 EJB 컴포넌트를 찾는 것입니다. 이 예외는 사용자가 애플리케이션 클라이언트 모듈에서 구성한 JNDI 이름이 호스트 서버에 있는 자원의 실제 JNDI 이름과 일치하지 않을 경우에도 발생할 수 있습니다. |
|
올바르지 않은 호스트 서버에 액세스하는 경우, -CCBootstrapHost 매개변수로 launchClient 명령을 다시 실행하여 올바른 호스트 서버 이름을 지정하십시오. 올바른 호스트 서버에 액세스하고 있으면 제품 dumpnamespace 명령행 도구를 사용하여 호스트 서버 JNDI 네임 스페이스 목록을 표시하십시오. 문제가 있는 오브젝트 이름이 없다면, 해당 자원이 호스트 서버에 설치되지 않았거나 적절한 Application Server가 시작되지 않은 것입니다. 자원이 이미 설치되어 시작되었는지를 판별하는 경우, 클라이언트 애플리케이션의 JNDI 이름이 호스트 서버의 글로벌 JNDI 이름과 일치하지 않습니다. 어셈블리 도구를 사용하여 클라이언트 애플리케이션에서 문제가 있는 오브젝트 이름의 JNDI 바인딩 값을 호스트 서버 애플리케이션의 오브젝트 JNDI 바인딩 값과 비교하십시오. 값은 일치해야 합니다. |
오류: javax.naming.ServiceUnavailableException
오류: javax.naming.ServiceUnavailableException: 제공자 URL: "iiop://[invalidhostname]"을 사용하여 초기 컨텍스트를 가져오려 시도하는 중 통신 장애가 발생했습니다. 호스트 및 포트 정보가 올바른지 그리고 제공자 URL로 식별된 서버가 실행 중인 네임 서버인지 확인하십시오. 포트 번호가 지정되지 않는 경우, 기본 포트 번호 2809가 사용됩니다. 다른 가능한 원인은 네트워크 환경 또는 워크스테이션 네트워크 구성 문제점일 수 있습니다. 루트 예외: org.omg.CORBA.INTERNAL: JORB0050E: Profile.getIPAddress(), InetAddress.getByName[invalidhostname]에서 UnknownHostException이 발생했습니다. 부 코드: 4942F5B6 완료됨: Maybe
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
이 예외는 유효하지 않은 호스트 서버 이름을 지정할 때 발생합니다. |
|
launchClient 명령을 다시 실행하고 -CCBootstrapHost 매개변수를 사용하여 올바른 호스트 서버 이름을 지정하십시오. |
오류: javax.naming.CommunicationException
오류: javax.naming.CommunicationException: 통신 장애로 인해 초기 컨텍스트를 가져올 수 없습니다. 지정된 제공자 URL이 없어서, 기존 ORB의 부트스트랩 호스트 및 포트가 사용되었거나 새 ORB 인스턴스가 기본 부트스트랩 호스트 "로컬 호스트" 및 기본 부트스트랩 포트 2809로 작성되고 초기화되었습니다. ORB 부트스트랩 호스트 및 포트가 실행 중인 네임 서버로 되는지 확인하십시오. 루트 예외: org.omg.CORBA.COMM_FAILURE: WRITE_ERROR_SEND_1 부 코드: 49421050 완료됨: No
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
이 예외는 Application Server가 시작되지 않은 호스트 서버에 대해 launchClient 명령을 실행하는 경우에 발생합니다. 이 예외는 유효하지 않은 호스트 서버 이름을 지정할 때도 수신합니다. 이 상황은 launchClient 도구를 실행할 때 호스트 서버 이름을 지정하지 않으면 발생할 수 있습니다. 기본 동작은 WebSphere® Application Server가 호스트 서버의 이름을 모르기 때문에 로컬 호스트에 launchClient 도구를 실행하는 것입니다. 이러한 기본 동작은 WebSphere Application Server가 설치되어 있는 시스템과 동일한 시스템에서 클라이언트를 실행하는 경우에만 작동합니다. |
|
올바른 호스트 서버로 실행 중이지 않은 경우에는 launchClient 명령을 다시 실행하고 -CCBootstrapHost 매개변수를 사용하여 호스트 서버 이름을 지정하십시오. 그렇지 않으면 호스트 서버에서 Application Server를 시작하고 launchClient 명령을 다시 실행하십시오. |
![[Windows]](../images/windows.gif)
오류: javax.naming.CommunicationException
오류: javax.naming.CommunicationException: 다음 예외 때문에 패턴 wasuser6에 일치하는 사용자를 가져올 수 없습니다. javax.naming.CommunicationException: 단순 바인드 실패: server_location 루트 예외는 다음과 같습니다. javax.net.ssl.SSLHandshakeException: 핸드쉐이크 중 원격 호스트에서 연결을 닫음
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
이 예외는 LDAP(Windows 2000 Active Directory) 사용자 레지스트리를 통해 관리, 애플리케이션, Java 2 보안을 사용할 때 발생합니다. 배치 관리자는 다시 시작되었지만 관리 콘솔로 로그인할 수 없습니다. 오류 메시지는 SystemOut.log에 나타납니다. |
|
SSL 사용 옵션을 선택 취소하고 연결을 다시 시도하십시오. SSL 사용 옵션은 WebSphere Application Server 플러그인과 SSL을 사용하는 Application Server 간의 연결을 보호할지 여부를 지정합니다. 기본값은 SSL을 사용하지 않는 것입니다. |
오류: javax.naming.NameNotFoundException
오류: javax.naming.NameNotFoundException: comp/env/ejb 이름이 컨텍스트 "java:"에 없습니다.
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
이 예외는 Java 코드가 로컬 JNDI 네임스페이스에서 지정된 이름을 찾을 수 없을 때 발생합니다. |
|
어셈블리 도구로 EAR 파일을 열고 실패한 이름에 대한 바인딩을 확인하십시오. 이 정보가 정확한지를 확인하십시오. 자원 참조를 사용 중인 경우, 애플리케이션 클라이언트 자원 구성 도구로 EAR 파일을 열고, 자원 참조에 클라이언트 구성 정보가 있는지, 그리고 자원 참조의 이름이 클라이언트 구성의 JNDI 이름과 정확히 일치하는지 확인하십시오. 값이 정확하면 클래스 로더 오류가 있을 수 있습니다. |
오류: java.lang.ClassCastException
오류: java.lang.ClassCastException: 클래스를 로드할 수 없음: org.omg.stub.WebSphereSamples.HelloEJB._HelloHome_Stub at com.ibm.rmi.javax.rmi.PortableRemoteObject.narrow(portableRemoteObject.java:269)
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
이 예외는 애플리케이션이 EJB 홈 클래스로 좁혀가려고 하지만, 클래스 로더가 EJB 클라이언트측 바인딩을 찾을 수 없는 경우에 발생합니다. |
|
EAR 파일에 있는 EJB JAR 파일을 찾아서 클래스에 EJB(Java Bean) 클라이언트측 바인딩이 있는지 확인하십시오. 파일 이름이 _Stub 및 _Tie로 종료되는 클래스 파일이 있습니다. 바인딩 클래스가 EJB JAR 파일에 있으면 클래스 로더 오류가 있는 것일 수 있습니다. |
오류: WSCL0210EError: java.lang.NoClassDefFoundError
오류: WSCL0210E: Enterprise 아카이브 파일 [EAR 파일 이름]을 찾을 수 없습니다. com.ibm.websphere.client.applicationclient.ClientContainerException: com.ibm.etools.archive.exception.OpenFailureException
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
이 오류는 애플리케이션 클라이언트 런타임이 Enterprise 아카이브(EAR) 파일을 읽을 수 없을 때 발생합니다. | 이 오류의 가장 가능한 원인은 시스템이 launchClient 명령에 지정된 경로에서 EAR 파일을 찾을 수 없기 때문입니다. | launchclient 명령에 지정된 경로와 파일 이름이 올바른지 확인하십시오.
|
launchClient 명령이 정지된 것처럼 보이며 클라이언트 애플리케이션이 완료될 때 명령행에 리턴되지 않습니다.
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
launchClient 명령을 사용하여 애플리케이션 클라이언트를 실행할 때 WebSphere Application Server 런타임이 보안 로그인 대화 상자를 표시해야 할 수 있습니다. 이 대화 상자를 표시하기 위해 WebSphere Application Server 런타임은 AWT(Abstract Window Toolkit) 스레드를 작성합니다. 애플리케이션이 기본 메소드에서 애플리케이션 클라이언트 런타임으로 리턴할 때 애플리케이션 클라이언트 런타임은 운영 체제로 리턴하고 JVM(Java Virtual Machine) 코드를 종료하려 시도합니다. 그러나 AWT 스레드가 있기 때문에, JVM 코드는 System.exit를 호출할 때까지 종료되지 않습니다. | AWT 스레드가 있기 때문에, JVM 코드는 종료되지 않습니다. Java 코드는 AWT 스레드를 종료하기 위해 System.exit()를 호출하도록 요구합니다. |
|
![[Windows]](../images/windows.gif)
애플릿 클라이언트 애플리케이션 클라이언트가 Internet Explorer에서 HTML 브라우저를 실행하는 데 실패함
설명 | 가능한 원인 | 권장되는 응답 |
---|---|---|
애플릿 클라이언트 애플리케이션은 Windows 시스템에서만 실행됩니다. 애플릿 클라이언트 애플리케이션이 실행되면 애플리케이션 출력 데이터가 브라우저 창에 표시됩니다. Windows XP 운영 체제(서비스 팩 2 포함)에서 Internet Explorer를 사용하는 경우에는 출력 데이터를 표시하려 시도할 때 오류가 발생할 수 있습니다. | Windows XP 운영 체제(서비스 팩 2 포함)에는 팝업 브라우저 창의 표시를 차단하는 보안 기능이 있습니다. |
|