Java EE 클라이언트 애플리케이션 클래스 로드

Java EE(Java™ Platform, Enterprise Edition) 애플리케이션 클라이언트를 실행할 때, 애플리케이션이 사용하는 클래스를 로드하기 위해 클래스 로더의 계층 구조가 작성됩니다.

다음 목록에서는 클래스 로더의 계층 구조를 설명합니다.
  • Application Client for WebSphere® Application Server(Application Client) 런타임은 이 값을 WAS_LOGGING 환경 변수로 설정합니다.
  • [AIX Solaris HP-UX Linux Windows][z/OS]확장 클래스 로더는 부트스트랩 클래스 로더의 하위입니다. 이 클래스 로더에는 java/jre/lib/ext 디렉토리의 JAR 파일 또는 Java 명령의 -Djava.ext.dirs 매개변수에 의해 정의되는 JAR 파일이 있습니다. 애플리케이션 클라이언트 클라이언트 런타임은 -Djava.ext.dirs 매개변수를 설정하지 않습니다. 따라서, java/jre/lib/ext 디렉토리의 JAR 파일을 사용합니다.
  • [IBM i]확장 클래스 로더는 부트스트랩 클래스 로더의 하위입니다. 이 클래스 로더의 app_server_root /java/ext 디렉토리, java_home/lib/ext or java_home/jre/lib/ext 디렉토리 및 /QIBM/UserData/Java400/ext 디렉토리에 JAR 파일이 포함되어 있습니다. app_server_root 디렉토리는 제품 설치 경로입니다. java_home 디렉토리는 Java 파일의 설치 경로입니다.
    [IBM i]주의: java_home 매개변수는 사용 가능한 JVM(Java Virtual Machine)에 따라 세 가지 값 중 하나가 될 수 있습니다. 세 가지 가능한 값은 다음과 같습니다.
    • /QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit(Java SE 6 32비트)
    • /QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit(Java SE 6 64비트)
  • 시스템 클래스 로더에는 Java 명령의 -classpath 매개변수에 의해 정의되는 JAR 파일 및 클래스가 있습니다. 애플리케이션 클라이언트 런타임은 이 매개변수를 WAS_CLASSPATH 환경 변수에 설정합니다.
  • WebSphere 클래스 로더는 애플리케이션 클라이언트 사용자 디렉토리에 있는 애플리케이션 클라이언트 런타임 및 클래스를 로드합니다. 이 클래스 로더가 사용하는 디렉토리는 WAS_EXT_DIRS 환경 변수에 의해 정의됩니다. WAS_BOOTCLASSPATH, WAS_CLASSPATHWAS_EXT_DIRS 환경 변수는 WebSphere Application Server 설치용 app_server_root/bin/setupCmdLine 스크립트 또는 클라이언트 설치용 app_server_root/bin/setupClient 스크립트에서 설정됩니다.

Java EE 애플리케이션 클라이언트 런타임이 초기화되면, 추가 클래스 로더는 WebSphere 클래스 로더의 하위로 작성됩니다. 클라이언트 애플리케이션이 JDBC(Java DataBase Connectivity) API, JMS(Java Message Service) API 또는 URL(Uniform Resource Locator)과 같은 자원을 사용하는 경우, 다른 클래스 로더가 이 자원을 각각 로드하기 위해 작성됩니다. 최종적으로, 애플리케이션 클라이언트 런타임은 WebSphere 클래스 로더를 설정하고, 클라이언트 JAR Manifest를 반복 처리하여 EAR 파일 내에 클래스를 로드합니다. CLASSPATH 환경 변수에 의해 정의된 시스템 클래스 경로는 절대 사용되지 않으며, 클래스 로더 계층 구조의 파트도 아닙니다.

클라이언트 애플리케이션을 올바르게 패키지화하려면, 해당 클래스를 로드할 클래스 로더를 이해해야 합니다. Java 코드가 클래스를 로드하는 경우, 해당 클래스를 로드하는 데 사용된 클래스 로더가 지정됩니다. 이 클래스에 의해 순차적으로 로드된 클래스는 해당 클래스 로더 또는 상위 클래스 로더를 사용하나 하위 클래스 로더는 사용하지 않습니다.

어떤 경우에 애플리케이션 클라이언트 런타임은 클라이언트 애플리케이션 클래스가 애플리케이션 클라이언트 런타임이 작성한 클래스 로더와는 다른 클래스 로더에 의해 로드되는 시기를 발견할 수 있습니다. 이를 발견할 경우, 다음 메시지가 나타납니다.
WSCL0205W: The incorrect class loader was used to load [0]
이 메시지는 계층 구조에서 상위 클래스 로더 중 하나가 클라이언트 애플리케이션 클래스를 로드할 때 발생합니다. 이 상황은 일반적으로 EAR 파일과 하드 디스크 드라이브에 동일한 클래스를 가져서 유발됩니다. 상위 클래스 로더 중 하나가 클래스를 찾은 경우, 해당 클래스 로더는 애플리케이션 클라이언트 런타임 클래스 로더에 앞서 찾은 클래스를 로드합니다. 어떤 경우에는 클라이언트 애플리케이션이 별다른 문제 없이 작동합니다. 그러나 대부분의 경우 "클래스를 찾을 수 없음" 예외를 수신합니다.

클래스 경로 필드 구성

Java EE 클라이언트 애플리케이션을 패키지화하는 경우, 다양한 클래스 경로 필드를 구성해야 합니다. 이론적으로, 애플리케이션이 필요로 하는 모든 것을 EAR 파일로 패키지화해야 합니다. 이 방법이 Java EE 클라이언트 애플리케이션을 클라이언트로 분배하는 가장 용이한 방법입니다. 그러나 자원( JDBC API, JMS API 또는 URL)을 패키지해서는 안 됩니다. 이러한 자원의 경우에는 하드 디스크 드라이브에서 이러한 클래스에 액세스하기 위해 클래스 경로 참조를 사용합니다. 또한 재분배가 필요하지 않은 클라이언트 시스템에 다른 클래스를 설치할 수도 있습니다. 이 경우, 이 주제의 뒤에서 설명한 대로 하드 디스크 드라이브의 클래스에 액세스하기 위해 클래스 경로 참조를 사용합니다.

EAR 파일 내에서 클래스 참조

WebSphere 제품 Java EE 애플리케이션은 시스템 클래스 경로를 사용하지 않습니다. MANIFEST 클래스 경로 항목을 사용하여 EAR 파일 내의 기타 JAR 파일을 참조하십시오. 어셈블리 도구를 사용하여 이러한 값을 구성하십시오. 예를 들어, 클라이언트 애플리케이션이 EJB JAR 파일의 경로에 액세스할 경우, 배치된 엔터프라이즈 Bean 모듈 이름을 애플리케이션 클라이언트 클래스 경로에 추가하십시오. 각각 다른 모듈(애플리케이션 클라이언트, 엔터프라이즈 Bean, 웹)에 대한 클래스 경로 필드의 형식은 동일합니다.
  • 값은 EAR 파일 내에 포함된 JAR 및 클래스 파일을 참조해야 합니다.
  • 값은 EAR 파일의 루트와 관련되어야 합니다.
  • 값은 파일 시스템의 절대 경로를 참조할 수 없습니다.
  • 복수 값은 콜론 또는 세미콜론이 아닌 공백으로 분리해야 합니다.
주의: 이는 애플리케이션이 플랫폼과 독립적으로 기능할 수 있도록 하는 Java 메소드입니다.

일반적으로, 모듈(JAR 파일)을 EAR 파일의 루트에 추가합니다. 이 경우, 클래스 경로 필드의 모듈(JAR 파일) 이름만 지정해야 합니다. 경로와 함께 모듈을 추가하려고 선택하는 경우, EAR 파일의 루트와 관련된 경로를 지정해야 합니다.

클래스 파일 참조의 경우, EAR 파일의 루트와 관련된 디렉토리를 지정해야 합니다. 어셈블리 도구를 사용하여 개별 클래스 파일을 EAR 파일에 추가할 수 있습니다. 이러한 추가 클래스 파일을 JAR 파일로 패키지화할 것을 권장합니다. 이 JAR 파일을 모듈 클래스 경로 필드에 추가하십시오. EAR 파일의 루트에 클래스 파일을 추가하는 경우, ./를 모듈 클래스 경로 필드에 추가하십시오.

다음은 myapp.ear 파일에 myclient.jar라는 이름의 애플리케이션 클라이언트 JAR 파일 및 mybeans.jar EJB 모듈이 포함되어 있는 디렉토리 구조의 예를 살펴보겠습니다. 추가 클래스는 class1.jarutility/class2.zip 파일에 상주합니다. xyz.class 클래스 파일은 JAR 파일이 아닌 EAR 파일 루트에 패키지화되어 있습니다. 클래스 경로 특성의 값으로 ./ mybeans.jar utility/class2.zip class1.jar을 지정하십시오. 검색 순서는 myapp.ear/myclient.jar myapp.ear/xyz.class myapp.ear/mybeans.jar myapp.ear/utility/class2.zip myapp.ear/class1.jar입니다.

EAR 파일에 없는 클래스 참조

launchClient -CCclasspath 매개변수를 사용하십시오. 이 매개변수는 런타임 시 지정되며, 플랫폼별로 클래스 경로 값을 가지며, 이것은 복수 값이 세미콜론 또는 콜론으로 분리됨을 의미합니다. 이런 측면에서 클라이언트와 서버는 유사합니다.

자원 클래스 경로

ACRCT[z/OS](Application Client Resource Configuration Tool) 또는 z/OS® ACRCT 스크립트 도구를 사용하여 클라이언트 애플리케이션이 사용하는 자원을 구성할 때, 자원에 필요한 클래스 경로를 지정할 수 있습니다. 예를 들어, 애플리케이션이 DB2® 데이터베이스에 대해 JDBC를 사용하는 경우에는 데이터베이스 제공자의 클래스 경로 필드에 db2java.zip을 추가하십시오. 이러한 클래스 경로 값은 플랫폼에 특정하며, 복수 값을 구분하기 위해 세미콜론 또는 콜론이 필요합니다.

WebSphere Application Server for i5/OS™에서, Java JDBC 제공자용 IBM® Developer Kit을 사용하여 DB2/400에 액세스하는 경우에는 클래스 경로에 db2_classes.jar 파일을 추가하지 않아도 됩니다. 그러나 Java JDBC 제공자용 IBM Toolbox를 사용하는 경우, jt400.jar 파일의 위치를 지정하십시오.

launchClient API 사용

launchClient 명령을 사용할 경우, WebSphere 클래스 로더 계층 구조가 작성됩니다. 그러나 launchClient API를 사용하는 경우에는 이 설정을 직접 수행해야 합니다. Java 시스템 특성 정의 시 launchClient 쉘 명령을 복사하십시오.


주제 유형을 표시하는 아이콘 참조 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rcli_classloading
파일 이름:rcli_classloading.html