WebOTX Batch Serverでは、バッチアプリケーショングループ・バッチアプリケーション・ジョブという単位でバッチアプリケーションを管理します。 Spring Batchにより規定された構文に従って記載する、ジョブを定義したXMLファイル(以降ジョブ定義ファイル)を、WebOTX Batch Serverのバッチアプリケーションとして配備する方法について説明します。
配備作業はアプリケーショングループをアプリケーショングループストアに転送する操作(install)・削除する操作(uninstall)、およびアプリケーショングループストア内のアプリケーショングループを特定のコンテナにおいて有効化する操作(enable)・無効化する操作(disable)から成ります。
アプリケーショングループアーカイブをアプリケーショングループストアに転送することで適切に配置し、有効化・無効化操作を行うことで、バッチアプリケーションの追加・削除・更新をバッチドメインエージェント、および配備対象コンテナを停止することなく行うことができます。これらの操作の結果は永続化され、バッチドメインの起動、停止を行ってもその状態は保存されます。
また、install、uninstall、enable、disable の各操作は、操作時点で実行状態にあるジョブの実行に対しては影響を与えることなく完了します。enable操作の結果はenable操作完了以降に開始されるジョブ実行から有効となります。実行中のジョブの定義を含むバッチアプリケーショングループの uninstall 操作はブロックされること無く完了しますが、実際のリソースの破棄(ファイルの削除・クラスローダオブジェクトおよびジョブ定義コンテキストオブジェクトの破棄)は当該ジョブの実行が完了するまで行われません。
また、install 済み・enable 済みのバッチアプリケーショングループ・アプリケーション・ジョブの配備状態情報を提示する機能も提供されます。

WebOTX Batch Serverでは、バッチアプリケーションをバッチアプリケーションアーカイブという単位で扱います。バッチアプリケーションアーカイブはjar形式で圧縮された以下のファイル構成となります。
batchapg.jar/ wobs-batchapgroup.xml : バッチアプリケーショングループ配備記述ファイル lib/ : バッチアプリケーショングループライブラリフォルダ classes/ : バッチアプリケーショングループクラスフォルダ <アプリケーション1名>/ : バッチアプリケーションフォルダ wobs-batchap.xml : バッチアプリケーション配備記述ファイル lib/ : アプリケーションライブラリフォルダ classes/ : アプリケーションクラスフォルダ <アプリケーション1名>.xml : ジョブ定義コンテキストファイル [ - 中略 - ] <アプリケーションn名>/ wobs-batchap.xml : バッチアプリケーション配備記述ファイル lib/ : アプリケーションライブラリフォルダ classes/ : アプリケーションクラスフォルダ <アプリケーションn名>.xml : ジョブ定義コンテキストファイル
バッチアプリケーショングループ配備記述ファイルおよび各バッチアプリケーション配備記述ファイルは省略可能です。省略時は各配備記述の全項目が既定値に設定されていると解釈し配置および有効化動作を行います。
バッチアプリケーショングループ単位の配備記述ファイルです。
詳細については、wobs-batchapgroup.xml を参照してください。
バッチアプリケーションとしてapp1, app2, testappを設定した例です。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="batchapgroupDD" class="com.nec.webotx.batch.core.applicationmanagement.GroupDeploymentDescriptionFactoryBean">
<property name="applicationFolders" value="app1,app2,testapp"/>
<property name="classLoaderProps">
<props>
<prop key="delegate">true</prop>
</props>
</property>
<property name="stickyRequestPathPatternList">
<list>
<value>user1/sampleGroup/sampleApp1/*</value>
</list>
</property>
<property name="stickyTrigger">
<set>
<value>onDemand</value>
<value>jobExecuting</value>
</set>
</property>
</bean>
</beans>
また、クラスローダの検索優先設定について、アプリケーショングループクラスローダを優先に設定し、 特定の実行者(user1)が実行する特定のバッチアプリケーション(バッチアプリケーショングループsampleGroup内のアプリケーションsampleApp1)についてApplicationContextの固定化する設定をしています。
バッチアプリケーション単位の配備ファイルです。
詳細については、wobs-batchap.xml を参照してください。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="batchapDD" class="com.nec.webotx.batch.core.applicationmangment.ApplicationDeploymentDescriptionFactoryBean">
<property name="applicationContextFile" value="app1-context.xml"/>
<property name="classLoaderProps">
<props>
<prop key="delegate">true</prop>
</props>
</property>
<property name="jobClassLoaderProps">
<props>
<prop key="jobName1">false</prop>
</props>
</property>
</bean>
</beans>
ジョブ定義コンテキストファイルについては、ジョブ定義方法をご参照ください。
運用UIプロセスから参照可能なファイルシステム上に存在するバッチアプリケーションアーカイブを、指定されたドメインのアプリケーショングループストア内に配置(インストール)する機能です。 運用UIプロセスはアプリケーションアーカイブのファイルをドメインエージェントに対してJMX を経由して転送します。ドメインエージェントはアプリケーショングループストアへアプリケーションアーカイブを配置します。このときアプリケーションアーカイブファイルは構造を解析されてアプリケーショングループとして配置されます。
バッチアプリケーショングループ名が同じアプリケーションは常に一つだけ存在することができ、既存と同じバッチアプリケーショングループ名をもつファイルが転送された場合、既存の情報は削除され、新たに転送されたファイルに置き換わることになります。 ただし、このとき既に有効化状態となっていたジョブ実行環境上のアプリケーショングループの実体は置き換わりません。また、実行中のジョブに対しても影響はありません。
このとき、バッチアプリケーションの置換配備によって有効化済みのバッチアプリケーションの詳細情報が失われます。 これは同名のバッチアプリケーションによる置換で、有効化されたバッチアプリケーションの実体の区別が行えなくなるためです。 たとえば以下のような場合が考えられます。
[root@localhost ~]# otxadmin install-bs-batchapgroup --container container1 --batchapgroup default default.jar [BS240343001] default.jar を転送中 [BS240343002] default.jar の転送が完了しました。 [BS240343004] default.jar のインストールと有効化を実行中 [BS240343005] default.jar のインストールと有効化が完了しました。 [root@localhost ~]# otxadmin list-bs-jobs --detail [container] [batchapgroup] [batchap] [job] [enablementId] container1 default default hello default,container1,20110708105251.986+0900,1
default.jarをWebOTX Batch Serverに配備し、container1上で有効化します。さらにdefault2.jarをdefault.jarという名前で置換配備します。
[root@localhost ~]# otxadmin install-bs-batchapgroup --enabled=false --batchapgroup default default2.jar
[BS240343001] default2.jar を転送中
[BS240343002] default2.jar の転送が完了しました。
[BS240343003] default2.jar をインストール中。
[BS240343006] default2.jar のインストールが完了しました。
[root@localhost ~]# otxadmin list-bs-jobs --detail
[container] [batchapgroup] [batchap] [job] [enablementId]
default default hello
container1 default -unavailable- -unavailable- default,container1,20110708105251.986+0900,1
WebOTX Batch Serverでは既に配備、有効化されていたdefaultというバッチアプリケーションと今回新たに配備されたdefaultというバッチアプリケーションが同一かどうか区別できないため、既に有効化されたバッチアプリケーションの有効化情報のバッチアプリケーション名とジョブ名に-unavailable-と表示しています。このジョブは、ジョブ名が不明なため実行できません。
ジョブ実行環境上のアプリケーショングループの実体を最新のものに更新するには、置換されたバッチアプリケーションに対して再度有効化操作を行います。再配備時に有効化操作も同時に行うと、上記で示した状態は解消され、配備されたバッチアプリケーションと有効化されたバッチアプリケーションが後に更新したものに置き換わります。
[root@localhost ~]# otxadmin install-bs-batchapgroup --container container1 --batchapgroup default default2.jar [BS240343001] default2.jar を転送中 [BS240343002] default2.jar の転送が完了しました。 [BS240343004] default2.jar のインストールと有効化を実行中 [BS240343005] default2.jar のインストールと有効化が完了しました。 [root@localhost ~]# otxadmin list-bs-jobs --detail [container] [batchapgroup] [batchap] [job] [enablementId] container1 default default hello default,container1,20110708133651.986+0900,2
アプリケーショングループストアに配置されているアプリケーショングループを、指定されたコンテナで実行可能な状態にする機能です。有効化操作を行う毎にジョブ実行環境を構築し、その環境内にアプリケーショングループの実体を生成します。アプリケーショングループの実体はバッチアプリケーショングループ配備記述ファイルの設定に従って有効化されます。有効化では一つのアプリケーションが各コンテナに対してそれぞれ一つだけ存在することができ、n個のコンテナがあった場合、一つのアプリケーションについて最大でn個の有効化が存在することになります。
バッチアプリケーションの有効化が行われると、有効化に対してグループ有効化識別子と呼ばれる1つの一意な識別子が付与されます。この識別子は英数字からなる任意の文字列で、ジョブ実行中にバッチアプリケーショングループの更新を行い該ジョブ実行が完了する前に配備状態を取得する際などに、バッチアプリケーショングループ名だけではどの有効化処理によって有効状態になったアプリケーショングループであるか判別できない場合に識別するために利用します。
グループ有効化識別子は有効化操作の実行やバッチドメインの再起動によって変わり、常に同じ値が割り当てられるものではありません。グループ有効化識別子は後述する配備状態提示機能で確認できます。
すでにバッチアプリケーションで有効化されているバッチコンテナに対して、再度同名のバッチアプリケーションを有効化した場合、有効化情報は上書きされ、新たなバッチアプリケーションの実体がジョブ実行環境に配置されます。このとき実行状態にあるジョブはこの影響を受けることはありませんが、再有効化の操作が完了した後に実行されたジョブについては、新たに有効化されたジョブが実行に使用されます。また再有効化の操作を行い、失敗となった場合は、既に有効化されているバッチアプリケーションの有効化状態がそのまま継続します。
指定されたコンテナで実行可能状態となっているアプリケーショングループを無効化する機能です。アプリケーショングループの実行のために構築されたジョブ実行環境とアプリケーショングループの実体は削除されます。
無効化操作は操作時点で実行状態にある全てのジョブの実行が完了した時点で行われます。完了に長い時間を要するジョブの実行が行われている状況で無効化処理を行うと、無効化処理の完了まで待ち続けることになります。そのため、ドメインエージェントでは無効化処理の完了を待つか非同期で行うかを指定できるオプションを用意しています。
また、無効化操作はそのバッチコンテナに対して有効化操作が行われたバッチアプリケーションにのみ行えます。有効化操作が行われていないバッチコンテナに対する無効化操作は例外なく失敗します。
指定したドメインのアプリケーショングループストアに配置されているアプリケーショングループを削除する機能です。
削除しようとするバッチアプリケーションが1つ以上のバッチコンテナで有効化されている場合、削除操作は失敗します。そのバッチアプリケーションのすべての有効化に対して無効化操作を行った後に、再度削除操作を行ってください。また、配備されていないバッチアプリケーションに対する削除処理は必ず失敗します。
配備、削除、ドメインの再起動時にエラーによって配備したバッチアプリケーションが削除できない場合のために、WebOTX Batch Serverには強制削除機能があります。強制削除機能を使うと、配備したバッチアプリケーションとその有効化情報を削除することが出来ます。強制削除機能を利用するには、以下の手順を行います。
ただし、強制削除できるバッチアプリケーションはエラー状態となっているものだけです。強制削除を行おうとするバッチアプリケーションがエラー状態かどうかを確認するには、バッチドメインエージェントのログファイルを参照してください。
アプリケーショングループストアに配置されているアプリケーショングループの名前、およびそのアプリケーショングループに含まれるアプリケーション・ジョブの名前を一覧する機能です。また、一覧に有効化されたコンテナの情報を付加して表示する機能も提供します。
この操作により、配備済みバッチアプリケーションの一覧と、それらの有効化の状態を確認することができます。