クラスローダ

概要

WebOTX Batch Serverではジョブ実行毎、アプリケーション毎、アプリケーショングループ毎の隔離性を高めるため、ジョブ実行毎、アプリケーション毎、アプリケーショングループ毎に作成され、階層化されたクラスローダを提供します。各クラスローダは委譲の抑止設定を行うことができます。クラスローダの委譲抑止設定はグループ配備記述ファイル、アプリケーション配備記述ファイルに記述を行います。

以下の図のように、ジョブ実行、アプリケーション、アプリケーショングループ等に応じたクラスローダを作成することができます。これにより、ジョブ実行毎、アプリケーション毎、アプリケーショングループ毎に使用クラスを隔離し、バージョンが異なる同名のクラスをアプリケーションごとに使い分けるなどということが可能です。
図では、BatchApplicationGroup1のBatchApplicationGroupClassLoaderで読み込んだClass1と、BatchApplicationGroup2のBatchApplicationGroupClassLoaderで読み込んだClass1は別物として扱われます。

機能概要図

クラスローダの階層構成は以下のようになります。BatchServer で提供するのはBSClassLoader以下のクラスローダです。

クラスローダ階層図

Batch Serverで提供するそれぞれのクラスローダの役割は以下の表のとおりとなります。ユーザによる利用および設定ができないクラスローダに関しては記述を省略しています。

名前 概要 ロードするパス
SharedClassLoader 複数のJavaバッチアプリケーションで共通的に利用するクラスをロードするクラスローダです。ドメイン毎の隔離性強化の目的で使用します。 ${DOMAIN_HOME}/lib
BatchApplicationGroupClassLoader Javaバッチアプリケーショングループ内で共通的に利用するクラスをロードするクラスローダです アプリケーショングループライブラリフォルダ
アプリケーショングループクラスフォルダ
BatchApplicationClassLoader 単独のJavaバッチアプリケーションのみで利用するクラスをロードするクラスローダです。
Javaバッチアプリケーション毎にこのクラスローダをインスタンス化することでJavaバッチアプリケーション間のクラス競合を防ぎます。
アプリケーションライブラリフォルダ
アプリケーションクラスフォルダ
JobClassLoader ジョブ実行毎に作成されるクラスローダです。同一のジョブ定義のジョブをパラメータのみ変更し、並列実行する場合においてクラスの衝突を避けるために用います アプリケーションライブラリフォルダ
アプリケーションクラスフォルダ

以下のフォルダはバッチアプリケーションアーカイブ内のフォルダになります。

詳細については下記を参照してください。

以下は、各クラスローダの作成と破棄に関しての記述です。

名前 作成 作成者 作成単位 破棄
SharedClassLoader バッチコンテナの初期化でインスタンス化されるクラスローダです。 コンテナ管理 バッチコンテナプロセス毎 コンテナが破棄されるときにクラスローダも破棄されます。
BatchApplicationGroupClassLoader アプリケーションのenable操作時にインスタンス化されるクラスローダです。 アプリケーション管理 バッチアプリケーショングループ毎 アプリケーションのdisable操作時に破棄されます。
BatchApplicationClassLoader アプリケーションのenable操作時にインスタンス化されるクラスローダです。 アプリケーション管理 バッチアプリケーション毎 アプリケーションのdisable操作時に破棄されます。
JobClassLoader ジョブ実行時にインスタンス化されるクラスローダです。 アプリケーション管理 ジョブ実行毎 ジョブ実行終了後に破棄されます。
関連

クラスロードの委譲設定

階層化されたクラスローダはクラスをロードする際に、まず自分でクラスをロードするのか、 それともまずは親クラスローダにクラスのロードを委譲するのか、というクラスロードの委譲設定を行うことができます。
バッチサーバが提供するクラスローダは、クラスロード時に親クラスローダに委譲をせずに、まず自分でクラスをロードするような既定値が設定されています。 基本的に既定値による運用で問題ありませんが、必要に応じて委譲設定を行うことで、親クラスローダにクラスロードを委譲することができます。
グループ配備記述、アプリケーション配備記述に下記の設定を記述することにより、各クラスローダの委譲設定を行うことができます。

グループ配備記述
プロパティ名 キー名 説明
classLoaderProps delegate true/false BatchApplicationGroupClassLoaderの委譲設定。親クラスローダを優先検索する(true)か、BatchApplicationGroupClassLoaderを優先検索(false)するかを指定します。
アプリケーション配備記述
プロパティ名 キー名 説明
classLoaderProps delegate true/false BatchApplicationClassLoaderの委譲設定。親クラスローダを優先検索する(true)か、BatchApplicationClassLoaderを優先検索(false)するかを指定します。
jobClassLoaderProps <ジョブ名> true/false JobClassLoader使用のON/OFF

具体的な記述方法は、各配備記述の定義方法を参照してください。

グループ配備記述、アプリケーション配備記述が存在しない場合や、ファイルがあっても委譲設定についての記述がない場合は、ドメイン毎に設定される委譲設定が適用されます。
ドメイン毎の委譲設定の既定値は以下となります。

ClassLoader名 システム全体の委譲設定の既定値
BootStrapClassLoader
ExtensionClassLoader
ClassPathClassLoader
BSClassLoader
SharedClassLoader false
BatchApplicationGroupClassLoader false
BatchApplicationClassLoader false
JobClassLoader false (変更不可)

JobClassLoaderの委譲設定の値は常にfalseで変更不可です。

JobClassLoaderによるジョブ実行毎のクラスローダ作成

WebOTX Batch Serverでは、ジョブ実行毎にクラスローダを作成する機能を提供しています。 これにより、同一のジョブ定義のジョブをパラメータのみ変更し、並列実行する場合においてクラスの衝突を避けることができます。 上で述べたとおり、アプリケーション配備記述に使用のON/OFFの記述を行ってください。
JobClassLoader使用の既定値はfalseです。したがって、アプリケーション配備記述に記述を行わなければ、JobClassLoaderは使用できません。

JobClassLoaderの使用のON/OFFと、委譲設定の既定値
JobClassLoader使用のON/OFFの既定値 委譲機能の既定値
false false (変更不可)