1. 概要

1.1. WebOTX Batch Serverとは

WebOTX Batch Serverは、Javaによるバッチ処理を効率的に実行するバッチアプリケーション実行基盤です。
Javaでのバッチ処理システム構築ニーズの高まりに応えるため、オープンソースの「 Spring Batch 」をベースにJavaバッチアプリケーション実行基盤として製品化しました。
Javaを利用したバッチ処理において課題となるジョブ実行時の性能やジョブ実行監視など、実行制御機能及び運用管理機能を強化しています。
また、バッチアプリケーション開発者はJavaを利用したオンライン処理で使用されるロジックをバッチ処理に流用することで、バッチアプリケーションの開発生産性を向上させることができます。
さらに、WebOTX Batch Serverは、Javaバッチアプリケーション開発環境製品「 SystemDirector 」、および、バッチジョブ実行スケジュール管理などの運用を実現する製品「 WebSAM JobCenter 」と連携し、Javaバッチシステムの開発から構築、運用までをトータルで支援します。

WebOTX Batch Server 概要
図1.1-1

Spring Batch:
SpringSourceおよびAccentureの協働により、Spring Frameworkをベースに開発されたオープンソースのバッチアプリケーション開発フレームワークです。

SystemDirector:
NEC標準のソフトウェア開発環境。
Javaバッチアプリケーション開発環境は、SystemDirector Enterprise、及びSystemDirector BATOOLが提供。

WebSAM JobCenter:
大規模ミッションクリティカルシステムにおいて数多くの稼働実績を持つジョブ運用管理製品。

1.2. WebOTX Batch Serverの役割

WebOTX Batch Serverは、Javaによるバッチ処理を効率的に実行するバッチアプリケーション実行基盤です。バッチアプリケーションの実行制御と稼働状況監視を行います。開発環境「SystemDirector」、および、運用環境「WebSAM JobCenter」と連携し、Javaバッチシステムの開発から構築、運用までをトータルで支援します。

WebOTX Batch Server と他製品との関連
図1.2-1

1.3. WebOTX Batch Serverの特長

バッチアプリケーション開発者はビジネスロジックの開発に専念でき、生産性アップ

WebOTX Batch Serverは、オープンソースソフトウェアであるSpring Batchをベースとした製品です。
Spring Batchは、「バッチ処理は、何らかの処理対象(アイテム)に対する(1件ずつの)繰り返し処理である」というモデルに基づくフレームワークとなっており、ループ処理、コミット処理、リスタート処理等のバッチ処理には汎用的な制御ロジックや、各種リソース(データベース、ファイルなど)に応じた入出力処理部品が予め含まれています。
従って、バッチアプリケーションの開発者は、1件のアイテムに対する処理をビジネスロジックとして開発することで、バッチアプリケーション全体を開発することができます。

Spring Batchがバッチ処理に必要な処理を既に用意
図1.3-1

Java VMの常駐化による高性能な実行基盤の提供

Javaでバッチアプリケーションを実装する際の問題点として、ジョブを実行するJava VMのメモリ使用量とJava VMの起動に時間がかかることがあげられます。これにより、Javaでバッチアプリケーションを実行する場合、実際のバッチアプリケーションの実行に加えて、Java VMの起動時間がオーバーヘッド分として、ジョブの実行時間に追加されていまいます。
WebOTX Batch Serverでは、ジョブを実行するJava VMを常駐化することができ、Java VMの起動時オーバーヘッドを削減しています。
また、単一のJavaプロセス上で複数のジョブを同時に実行することができるため、複数のジョブを実行するために、その分のJava VMを同時に起動する必要はありません。そのため、バッチサーバのメモリ使用量を削減するこができます。 このとき、Java VMプロセス上で複数のジョブが実行される構成となります。このとき、WebOTX Batch Serverでは、ジョブ毎のクラスローダを分離しているため、ジョブ間の隔離性を確保しています。さらに、Java VMプロセスを複数同時に起動する多重構成も可能であり、バッチアプリケーションの特性や、システムのマシンリソースに合わせて柔軟に対応することが可能です。
また、Java VMを常駐化することにより、HotSpot Compilerやデータベースのコネクションプーリング機能により、ジョブの実行性能の向上を実現します。
WebOTX Batch Serverでは、この常駐化できるJava VMをジョブ実行プロセス、またはバッチコンテナと呼んでいます。以下、バッチコンテナとは、この常駐可能なJava VM実行基盤のことを指します。

Java VMを常駐化することで、ジョブの実行性能を向上
図1.3-2

ジョブの実行優先度制御機能

ジョブ実行者が実行要求したジョブは、実行優先度を持つことができます。そのため、後から実行要求したジョブでも、そのジョブの実行優先度が高ければ、後から要求された優先度の高いジョブが先に実行されます。
また、WebOTX Batch Serverでは、ジョブを受け付けるキュー(ジョブリクエストキュー)を持ち、この中に実行要求したジョブを挿入し、実行を開始します。このキューは複数個作成することができます。そのため、ジョブ実行者は、ジョブ単位でキューを使い分けたり、優先度単位でキューを分けるなど、ジョブの実行を柔軟に制御することができます。特定のジョブ実行者だけが特定のキューを占有して使用することもできます。

ジョブの実行に優先度付けをつけることができる
図1.3-3

運用性の向上

オープンソースソフトウェアは、その進化や実験的・先進的機能への取り組みが早く、手軽に利用することができることから、近年様々な局面での利用が進んでいます。その反面、商用製品に比べて運用管理系の機能が不足していると言われています。
WebOTX Batch Serverでは、基本的なジョブ操作(起動、停止、再実行、強制停止、状態表示)のコマンドを提供しており、常駐化したジョブ実行プロセス上でバッチアプリケーションにより出力されたログやジョブの終了コードを、コマンドの標準出力や戻り値として返却可能にする等、ジョブスケジューラ製品との連携や本番運用を想定した機能強化を行っています。
また、ジョブ実行時に任意のIDを指定可能にしており、ジョブスケジューラ製品で利用されるジョブに付けられるIDなどと共用して、ジョブ実行結果との紐付けも可能にしています。
WebSAM JobCenterからは、WebOTX Batch Server用の単位ジョブ部品が提供され、WebSAM JobCenterのGUIを使用してジョブネットワークおよびジョブのフロー定義やジョブパラメータの設定やジョブに対する各種操作が行えるなど、より運用性を高める為の連携を行っています。

ジョブの実行制御をコマンドから簡単に操作
図1.3-4

ジョブの実行監視機能

ジョブの実行において、ジョブの終了予定時刻や、ジョブの最大実行時間を指定することができ、指定した終了予定時刻や時間を超えた場合、OSに警告ログを出力することができます。また、バッチコンテナのメモリ使用状況を監視しており、指定したある閾値を超えた場合も警告ログを出力することができます。
これらの警告ログは、運用管理ソフトウェアと連携することにより、警告ログ出力時の対処方法を指定することができます。

ジョブの実行状況を監視し、閾値を超えたら警告ログを出力
図1.3-5

連続稼働システムにおけるバッチ業務運用の継続機能

バッチアプリケーションを追加する場合や、バージョンを更新する場合、バッチコンテナを停止することなく、追加や更新をおこなうことができます。そのため、現在実行中のバッチアプリケーション処理を停止することなく、継続して実行することができます。
また、バッチコンテナを停止することなく、設定情報を動的に変更することができます。従って、例えば、バッチコンテナで起動中のスレッドの数を動的に変更することができます。

バッチアプリケーションを停止すること無く、追加・更新を実現
図1.3-6

分散トランザクション機能

バッチ処理では、複数のデータベースなどのリソースを読み込んだり、更新することがあります。また、これらの処理を1つのトランザクションで実現したい場合があります。WebOTX Batch Serverでは、複数のリソースを跨る分散トランザクション機能を実装しています。そのため、複数のデータベースを同時に更新する場合でも、1トランザクションでバッチ処理を実現することができます。

GUIによる運用管理機能

GUIからWebOTX Batch Serverの各種パラメーを設定することができるので、運用管理者は負担無く、設定の変更や確認をおこなうことができます。
また、WebOTXブランドで共通のGUIを使用しているため、WebOTX各製品の統合運用の一元的な管理を実現します。

WebOTXブランドでGUIを一元管理
図1.3-7

WebOTX Batch Serverの2つのエディション

WebOTX Batch Serverには、Express EditionとStandard Editionの2つがあります。それぞれのエディションでは、機能や実行制限に違いがあります。 登録ライセンスに応じた作成可能なドメインは以下のようになります

登録ライセンスに応じた作成可能ドメイン
登録ライセンス Standard Edition ドメイン Express Edition ドメイン
Standard Edition
Express Edition
×
Express Edition + Upgrade license

ドメインによる違いは以下のようになります。

ドメインのエディションによる違い
項目 Standard Edition ドメイン Express Edition ドメイン
同時起動可能ドメイン数 無制限 1
ジョブリクエストキュー数 無制限 1
作成可能コンテナ数 無制限 固定名(container1)の1つのみ
同時実行可能コンテナ数 無制限 1
コンテナプロセス多重度 無制限 1
利用可能バッチアプリケーション名 無制限 固定名(default)の1つのみ
利用可能バッチアプリケーショングループ名 無制限 固定名(default)の1つのみ
同時実行可能ジョブ数 無制限 2
実行優先度制御 ×
分散トランザクション制御 ×
バッチアプリケーション動的配備 ×
多重実行制御 ×

1.4. WebOTX Batch Serverの構成

1.4.1. プロセス構成

WebOTX Batch Serverのプロセス構成
用語 説明 プロセス名 (引数)
ドメインエージェント バッチドメインの管理、および、ジョブ制御コマンドからのジョブリクエストを受付けを行う常駐javaプロセスです。 JAVA_HOME/bin/java -Dwebotx.funcid=agent -Ddomain.name=<ドメイン名> ...
標準出力標準エラー出力記録プロセス ドメインエージェントの標準出力 標準エラー出力 をログファイルに記録するプロセスです。 ${AS_INSTALL}/bin/rotatelogs -g3 ${DOMAIN_HOME}/logs/server.log 2M
バッチコンテナの標準出力 標準エラー出力 をログファイルに記録するプロセスです。 ${AS_INSTALL}/bin/rotatelogs -g5 ${DOMAIN_HOME}/logs/batch/<コンテナ名>/<コンテナ名>_<コンテナプロセス識別子>.out 1M
バッチコンテナ ジョブを実行するjavaプロセスです。
バッチコンテナのjavaプロセス数は、バッチコンテナの多重度に相当するjavaプロセスが起動されます。各プロセスには、<コンテナ名>_<シーケンス番号>の識別子が割り当てられます。(例) container1_1
JAVA_HOME/bin/java -Dwebotx.funcid=batch ... <コンテナ名> <コンテナプロセス識別子>
バッチコンテナ 起動プロセス バッチコンテナのjavaプロセスを起動したスクリプトのプロセスです。バッチコンテナプロセス毎に1つ存在します。 /bin/sh ${DOMAIN_HOME}/bin/startbatchcontainer.sh <コンテナ名> <コンテナプロセス識別子>
名前サーバ Object Brokerの名前サーバのプロセスです。 ${AS_INSTALL}/../ObjectSpinner/bin/namesv -WOdomain ${DOMAIN_HOME}
運用管理コマンド バッチドメインやバッチコンテナの開始、停止指示や、バッチアプリケーションの追加、更新、削除などの運用管理をおこなうコマンドです。 ${AS_INSTALL}/bin/otxadmin ...
ジョブ制御コマンド ジョブの操作(開始、再実行、停止、強制停止、実行結果確認)指示を行う制御コマンドです。 ${BS_HOME}/bin/jobctl ...
${BS_HOME}/bin/start-job ...
${BS_HOME}/bin/stop-job ...
${BS_HOME}/bin/result-job ...
${BS_HOME}/bin/status-job ...

1.4.2. ディレクトリ構成

${AS_INSTALL}			:WebOTXインストールディレクトリ
+-- bin				:運用管理コマンド格納ディレクトリ
+-- config
+-- lib				:ライブラリ格納ディレクトリ
+-- logs
+-- batch			:${BS_HOME} Batch Serverホームディレクトリ
|   +-- bin			:ジョブ制御、環境設定、メンテナンスコマンド格納ディレクトリ
|   +-- config			:設定ファイル格納ディレクトリ
|   +-- lib			:ライブラリ格納ディレクトリ
|   |   +-- databases		:リポジトリ管理コマンド用JDBCドライバ格納ディレクトリ
|   +-- licenses		:ライセンスファイル、関連文書格納ディレクトリ
|   +-- logs			:ログ出力ディレクトリ
|   +-- sample			:サンプル格納ディレクトリ
+-- domains
    +-- WebOTXAdmin		:管理ドメインルートディレクトリ
    +-- <domainName>		:${DOMAIN_HOME} ドメインルートディレクトリ
        +-- bin			:コマンド格納ディレクトリ
        +-- config		:設定ファイル格納ディレクトリ
        |   +-- batch
        +-- containers
        |   +-- <containerName>	:${CONTAINER_HOME} バッチコンテナホームディレクトリ
        +-- defaultRepo		:Derbyシステムディレクトリ
        +-- lib			:ライブラリ格納ディレクトリ
        |   +-- ext
        +-- logs		:ログ出力ディレクトリ
            +-- agent
            +-- batch

1.4.3. ポート番号一覧

バッチドメインが使用するポート番号は下表の通りです。
表中の「使用有無」に関わらず、全てのポート番号がドメイン間、および、他ソフトウェアの利用ポート番号と重複しないように設定することを推奨します。

ポート番号(既定値)一覧
ポート番号 説明 既定利用 (*1) <domainName>.properties中のキー
6312 ドメイン管理ポートです。RMI/JRMPプロトコルの管理ポート番号です。 domain.admin.port
6412 BSのジョブ制御コマンド(ネイティブコマンド)用に使用するポート番号です。 webotx.batch.domain.http.port
6812 ドメイン管理ポートです。JMXMPプロトコルの管理ポート番号です。
有効化時のみ使用します。
× domain.admin.jmxmp.port
7880 運用管理エージェント上で動作するIIOPリスナ(組み込みIIOPサービス)のポート番号です。 server.embedded-iiop-service.port
9925 oadが使用するポート番号です。 × server.objectbrokerservice.oad.OadPort
9909 名前サーバが使用するポート番号です。 server.objectbrokerservice.namesv.NameServicePort
9926 oadjが使用するポート番号です。
有効化時のみ使用します。
× server.objectbrokerservice.oadj.Port
9927 corbalocサーバが使用するポート番号です。
有効化時のみ使用します。
× server.objectbrokerservice.corbaloc.CorbalocServerPort
5965 C++版のRCS が使用するポート番号です。
有効化時のみ使用します。
× server.transactionservice.rcs-cpp-port
1527 Derby (*2) が使用するポート番号です。
ジョブリポジトリ用のデータベースの既定値となっているDerby を使用する場合に使用します。
database.<sampleDB>.portNumber

上記ポート番号以外に、動的に割り当てられる一時ポート(エフェメラルポート)を使用します。 エフェメラルポートについての注意事項については、以下を参照してください。

1.4.4. ログファイル一覧

ドメインエージェントプロセスのログファイル
ログファイルパス 説明 最大サイズ
(既定値)
世代数
(既定値)
DOMAIN_HOME/logs/batch/agent/agent.log Batch Serverのログとプロキシログが出力されます。 1MB 10
DOMAIN_HOME/logs/batch/agent/environments.log Batch Server初期化時の環境ログが出力されます。 1MB 10
DOMAIN_HOME/logs/server.log WebOTX共通のログについては
各サービスのログ を参照してください。
2MB 3
DOMAIN_HOME/logs/webotx_agent.log 1MB 2
DOMAIN_HOME/logs/agent_operation.log 100KB 1
DOMAIN_HOME/logs/agent/webotx_admin.log 100KB 1
DOMAIN_HOME/logs/agent/webotx_jndisp.log 100KB 1
DOMAIN_HOME/logs/ObjectBroker/objava.log 1MB 1
DOMAIN_HOME/logs/ObjectBroker/webotx_ospi.log 100KB 1
DOMAIN_HOME/logs/deploy/webotx_deploy.log 100KB 1
DOMAIN_HOME/logs/jdbc/webotx_jdbc.log 512KB 1
DOMAIN_HOME/logs/TS/webotx_jta.log 512KB 1
DOMAIN_HOME/logs/TS/webotx_ts.log 100KB 1
DOMAIN_HOME/logs/TS/RCS.trc 1024KB -
DOMAIN_HOME/logs/TS/LRS.trc 1024KB -

バッチコンテナプロセス(*3)のログファイル
ログファイルパス 説明 最大サイズ
(既定値)
世代数
(既定値)
DOMAIN_HOME/logs/batch/コンテナ名/コンテナ名_識別番号.log 識別番号(*4)が示すバッチコンテナプロセスでの、Batch Containerのログとプロキシログが出力されます。 1MB 10
DOMAIN_HOME/logs/batch/コンテナ名/コンテナ名_識別番号.out 識別番号(*5)が示すバッチコンテナプロセスの標準出力/標準エラー出力をrotatelogsによって採取します。 1MB 5
DOMAIN_HOME/logs/batch/コンテナ名/environments_識別番号.log 識別番号(*4)が示すバッチコンテナプロセス起動時の環境ログが出力されます。 1MB 10
DOMAIN_HOME/logs/batch/コンテナ名/allExecution_識別番号.log 識別番号(*5)が示すバッチコンテナプロセス上で実行されたジョブのジョブ実行ログの全てが出力されます。 1MB 10
DOMAIN_HOME/logs/batch/アカウント/バッチAPG/バッチAP/ジョブ名/ジョブ名_ジョブ識別番号.log ジョブ識別番号(*5)が示すのジョブの実行ログです。ジョブを再実行した場合に同一のログファイルに追記されます。 - -

運用管理コマンドのログ
ログファイルパス 説明 最大サイズ
(既定値)
世代数
(既定値)
AS_INSTALL/batch/logs/ant_setup.log Batch Serverインストール時のログ - -
AS_INSTALL/batch/logs/setuptools/repoadmin.log repoadminコマンドの実行ログ 1MB 1
AS_INSTALL/batch/logs/setuptools/setupDomain.log setupDomainコマンドの実行ログ 1MB 1

Derby(*2)を利用する場合
ログファイルパス 説明 最大サイズ
(既定値)
世代数
(既定値)
DOMAIN_HOME/defaultRepo/derby.log サンプルアプリケーションの動作確認用のDerby利用時のログが出力されます。 - -