Java EE 클라이언트 애플리케이션 클래스 로드
당신이 실행할 때 Java™ Platform, Enterprise Edition ( Java EE ) 애플리케이션 클라이언트에서는 애플리케이션에서 사용하는 클래스를 로드하기 위해 클래스 로더의 계층 구조가 생성됩니다.
- 그만큼 Application Client for WebSphere® Application Server (애플리케이션 클라이언트) 런타임은 이 값을WAS_LOGGING 환경 변수.
확장 클래스 로더는 부트스트랩 클래스 로더의 하위입니다. 이 클래스 로더에는 JAR 파일이 포함되어 있습니다. 앱_서버_루트 /java/ext 디렉토리, java_home/lib/ext 또는 java_home/jre/lib/ext 디렉토리 및 /QIBM/UserData/Java400/ext 예배 규칙서. 그만큼 앱_서버_루트 디렉토리는 제품 설치 경로입니다. java_home 디렉토리는 Java 파일의 설치 경로입니다.
주목: java_home 매개변수는 활성화된 JVM(Java Virtual Machine)에 따라 세 가지 값 중 하나일 수 있습니다. 세 가지 가능한 값은 다음과 같습니다.
- /QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit (자바 SE 6 32비트)
- /QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit (자바 SE 6 64비트)
- 시스템 클래스 로더에는 다음에서 정의한 JAR 파일과 클래스가 포함되어 있습니다.-classpath Java 명령의 매개변수입니다. 애플리케이션 클라이언트 런타임은 이 매개변수를 WAS_CLASSPATH 환경 변수에 설정합니다.
- 그만큼 WebSphere 클래스 로더는 애플리케이션 클라이언트 런타임과 애플리케이션 클라이언트 사용자 디렉토리에 있는 모든 클래스를 로드합니다. 이 클래스 로더가 사용하는 디렉토리는 WAS_EXT_DIRS 환경 변수에 의해 정의됩니다. 그만큼WAS_BOOTCLASSPATH ,WAS_CLASSPATH , 그리고WAS_EXT_DIRS 환경 변수는 앱_서버_루트/bin/setupCmdLine 스크립트 WebSphere Application Server 설치 또는 앱_서버_루트/bin/setupClient 클라이언트 설치용 스크립트입니다.
다음과 같이 Java EE 애플리케이션 클라이언트 런타임이 초기화되면 추가 클래스 로더가 WebSphere 클래스 로더. 클라이언트 응용프로그램이 JDBC(Java Database Connectivity) API, JMS(Java Message Service) API 또는 URL(Uniform Resource Locator)과 같은 자원을 사용할 경우, 다른 클래스 로더가 이 자원을 각각 로드하기 위해 작성됩니다. 마지막으로 애플리케이션 클라이언트 런타임은 WebSphere 클래스 로더는 클라이언트 JAR 매니페스트를 반복적으로 처리하여 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 파일 내에서 클래스 참조
- 값은 EAR 파일 내에 포함된 JAR 및 클래스 파일을 참조해야 합니다.
- 값은 EAR 파일의 루트와 관련되어야 합니다.
- 값은 파일 시스템의 절대 경로를 참조할 수 없습니다.
- 복수 값은 콜론 또는 세미콜론이 아닌 공백으로 분리해야 합니다.
일반적으로, 모듈(JAR 파일)을 EAR 파일의 루트에 추가합니다. 이 경우, 클래스 경로 필드의 모듈(JAR 파일) 이름만 지정해야 합니다. 경로와 함께 모듈을 추가하려고 선택하는 경우, EAR 파일의 루트와 관련된 경로를 지정해야 합니다.
클래스 파일 참조의 경우, EAR 파일의 루트와 관련된 디렉토리를 지정해야 합니다. 어셈블리 도구를 사용하여 개별 클래스 파일을 EAR 파일에 추가할 수 있습니다. 이러한 추가 클래스 파일을 JAR 파일로 패키지화할 것을 권장합니다. 이 JAR 파일을 모듈 클래스 경로 필드에 추가하십시오. EAR 파일의 루트에 클래스 파일을 추가하는 경우 ./ 모듈 클래스 경로 필드에.
다음은 myapp.ear 파일에 myclient.jar라는 이름의 애플리케이션 클라이언트 JAR 파일 및
mybeans.jar EJB 모듈이 포함되어 있는 디렉토리 구조의 예를
살펴보겠습니다. 추가 클래스는
class1.jar 및 utility/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 매개변수를 사용하십시오. 이 매개변수는 런타임 시 지정되며, 플랫폼별로 클래스 경로 값을 가지며, 이것은 복수 값이 세미콜론 또는 콜론으로 분리됨을 의미합니다. 이런 측면에서 클라이언트와 서버는 유사합니다.
자원 클래스 경로
애플리케이션 클라이언트 자원 구성 도구를 사용하여 클라이언트 애플리케이션에서 사용하는 자원을 구성할 때 자원에 필요한 클래스 경로를 지정할 수 있습니다. 예를 들어, 애플리케이션이 JDBC 에 DB2® 데이터베이스, 추가db2java.zip 데이터베이스 공급자의 클래스 경로 필드로 이동합니다. 이러한 클래스 경로 값은 플랫폼에 특정하며, 복수 값을 구분하기 위해 세미콜론 또는 콜론이 필요합니다.
~에 WebSphere Application Server ~을 위한 i5/OS, IBM® Developer Kit for Java JDBC 액세스할 공급자 DB2/400, 추가할 필요는 없습니다.db2_classes.jar 파일을 클래스 경로에 추가합니다. 그러나 JDBC 프로바이더용 IBM Toolbox를 사용하는 경우 jt400.jar 파일의 위치를 지정해야 합니다.
launchClient API 사용
당신이 사용하는 경우launchClient 명령, WebSphere 클래스 로더 계층 구조가 생성됩니다. 그러나 launchClient API를 사용하는 경우에는 이 설정을 직접 수행해야 합니다. Java 시스템 특성의 정의 시 launchClient 쉘 명령을 복사하십시오.