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