Java EE クライアント・アプリケーションのクラス・ロード

実行するとJava™ Platform, Enterprise Edition( Java EE ) アプリケーション クライアントでは、アプリケーションで使用されるクラスをロードするためのクラス ローダーの階層が作成されます。

次のリストは、クラス・ローダーの階層について示したものです。
  • のApplication Client for WebSphere® Application Server(アプリケーションクライアント)実行時にこの値が設定されますWAS_LOGGING環境変数。
  • [AIX Solaris HP-UX Linux Windows][z/OS]extensions class loaderブートストラップ クラス ローダーの子です。 このクラスローダーには、java/jre/lib/extディレクトリまたはJARファイルで定義されている-Djava.ext.dirsJava コマンドのパラメータ。 Application Client クライアント・ランタイムは、-Djava.ext.dirs パラメーターを設定しません。 このため、java/jre/lib/ext ディレクトリーの JAR ファイルが使用されます。
  • [IBM i]拡張クラス・ローダーは、ブートストラップ・クラス・ローダーに対する子です。 このクラスローダーには、アプリケーションサーバールート/java/extディレクトリ、java_home/lib/extまたはjava_home/jre/lib/extディレクトリ、および/QIBM/UserData/Java400/extディレクトリ。 のアプリケーションサーバールートディレクトリは製品のインストール パスです。 java_home ディレクトリは、Java ファイルのインストール パスです。
    [IBM i]注意: java_home パラメータは、有効になっている Java 仮想マシン (JVM) に応じて、3 つの値のいずれかになります。 指定可能な 3 つの値は以下のとおりです。
    • /QOpenSys/QIBM/ProdData/JavaVM/jdk60/32bit(Java SE 6 32 ビット)
    • /QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit(Java SE 6 64 ビット)
  • システムクラスローダーには、JARファイルと、-classpath Java コマンドのパラメータ。 Application Client ランタイムは、このパラメーターを WAS_CLASSPATH 環境変数に設定します。
  • のWebSphereクラス ローダーは、アプリケーション クライアント ランタイムと、アプリケーション クライアント ユーザー ディレクトリに配置されたすべてのクラスをロードします。 このクラス・ローダーによって使用されるディレクトリーは、WAS_EXT_DIRS 環境変数によって定義されます。 のWAS_BOOTCLASSPATHWAS_CLASSPATH 、 そしてそのWAS_EXT_DIRS環境変数は、アプリケーションサーバールート/bin/setupCmdLineスクリプトWebSphere Application Server施設内、またはアプリケーションサーバールート/bin/setupClientクライアントインストール用のスクリプト。

としてJava EEアプリケーションクライアントランタイムが初期化されると、追加のクラスローダーが子として作成されます。WebSphereクラスローダー。 クライアントアプリケーションがJavaなどのリソースを使用する場合DataBase接続性( JDBC) API、Java Message Service (JMS) API、または Uniform Resource Locator (URL) を使用する場合、それぞれのリソースをロードするために異なるクラス ローダーが作成されます。 最後に、アプリケーションクライアントランタイムは、WebSphereクラス ローダーは、クライアント JAR マニフェストを繰り返し処理して、EAR ファイル内のクラスをロードします。 CLASSPATH 環境変数で定義されるシステム・クラスパスは使用されることはなく、 クラス・ローダーの階層には含まれません。

クライアント・アプリケーションを正しくパッケージ化するためには、 どのクラス・ローダーがクラスをロードするのかを理解している必要があります。 Java コードがクラスをロードすると、そのクラスをロードするために使用されるクラス ローダーがそのクラスに割り当てられます。 後になってそのクラスによってロードされるクラスはいずれも、 そのクラス・ローダーまたはその親のうちのいずれかを使用しますが、 子のクラス・ローダーを使用することはありません。

場合によっては、Application Client ランタイムは、クライアント・アプリケーション・クラスが、Application Client ランタイムによって作成されたクラス・ローダーとは異なるクラス・ローダーによってロードされたことを、検出することができます。 これが検出された場合、次のメッセージが表示されます。
WSCL0205W: The incorrect class loader was used to load [0]
このメッセージは、 クライアント・アプリケーション・クラスが階層中の親クラス・ローダーのいずれかによってロードされたときに出されます。 この状態は、通常、EAR ファイルとハード・ディスクに同じクラスがある場合に引き起こされます。 親クラス・ローダーのいずれかがあるクラスを見つけると、そのクラス・ローダーは、Application Client ランタイムのクラス・ローダーよりも前にそのクラスをロードします。 場合によっては、クライアント・アプリケーションは依然として正しく機能します。 しかし、ほとんどの場合、クラスが見つかりません例外。

クラスパス・フィールドの構成

梱包の際はJava EEクライアント アプリケーションでは、さまざまなクラス パス フィールドを構成する必要があります。 理想的には、アプリケーションが必要とするものすべてを EAR ファイルにパッケージすべきです。 これはあなたのJava EEクライアントアプリケーションをクライアントに提供します。 ただし、JDBC API、JMS API、または URL のようなリソースは、 パッケージにしないようにしてください。 このようなリソースの場合は、ハード・ディスク上のそれらのクラスにアクセスするのに、クラスパス参照を使用してください。 また、再配布する必要のない他のクラスがクライアント・マシン上にインストールされている場合があります。 この場合も、このトピックで後述するように、ハード・ディスク上のクラスにアクセスするのにクラスパス参照を使用することができます。

EAR ファイル内のクラスの参照

WebSphere製品Java EEアプリケーションはシステム クラス パスを使用しません。 MANIFEST クラスパス項目を使用して、EAR ファイル内の他の JAR ファイルを参照します。 アセンブリー・ツールを使用して、以下の値を構成します。 例えば、クライアント・アプリケーションが EJB JAR ファイルのパスにアクセスする必要がある場合には、デプロイされたエンタープライズ Bean モジュール名を、アプリケーション・クライアントのクラスパスに追加します。 以下のように、 各種モジュール (アプリケーション・クライアント、EJB、Web) ごとの Classpath フィールドのフォーマットは同じです。
  • これらの値は、EAR ファイルに含まれている JAR ファイルとクラス・ファイルを参照する必要があります。
  • これらの値は、EAR ファイルのルートを起点とする相対的な値でなければなりません。
  • 値は、ファイル・システム内の絶対パスを参照できません。
  • 値が複数の場合は、コロンでもセミコロンでもなく、スペースで区切らなければなりません。
注意:これは、アプリケーションがプラットフォームに依存せずに機能できるようにする Java メソッドです。

普通は、モジュール (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.jarClasspath プロパティの値として。 検索順序は以下のとおりです。 myapp.ear/myclient.jar myapp.ear/xyz.class myapp.ear/mybeans.jar myapp.ear/utility/class2.zip myapp.ear/class1.jar

EAR ファイル内にないクラスの参照

launchClient の -CCclasspath パラメーターを使用します。 このパラメーターは、実行時に指定され、 プラットフォーム固有のクラスパスの値を取ります。 この場合、複数の値はセミコロンまたはコロンで区切られます。 この点に関しては、クライアントとサーバーは類似しています。

リソースのクラスパス

アプリケーションクライアントリソース構成ツールを使用してクライアントアプリケーションで使用されるリソースを構成する場合[z/OS](ACRCT)、またはz/OS®ACRCT スクリプト ツール、リソースに必要なクラスパスを指定できます。 たとえば、アプリケーションがJDBCにDB2®データベース、追加db2java.zipデータベース プロバイダーのクラス パス フィールドに追加します。 これらのクラスパス値はプラットフォーム固有であり、 複数の値を分離するのにセミコロンまたはコロンを必要とします。

の上WebSphere Application Serverのためにi5/OS、使用する場合はIBM® Developer Kit for JavaJDBCアクセスするプロバイダーDB2/400を追加する必要はありませんdb2_classes.jarファイルをクラスパスに追加します。 ただし、 IBM Toolbox for JavaJDBCプロバイダーの場所を指定しますjt400.jarファイル。

launchClient API の使用

を使用する場合launchClientコマンド、WebSphereクラス ローダー階層が自動的に作成されます。 しかし、launchClient API を使用する場合には、 このセットアップを自分で行う必要があります。 コピーlaunchClientJava システム プロパティを定義するためのシェル コマンド。