TERAバッチでジョブの非同期実行をしてみよう!
TERAバッチでジョブの非同期実行をする場合、同期実行をする際に加えて必要になるものは、「ジョブ管理テーブル」です。今回は、先ほど作成した多重起動のジョブを非同期実行してみましょう。先ほどまで利用していたHSQLDBにすでにジョブ管理テーブルを作成しているので、DBManagerにて確認してください。ジョブ管理テーブルの仕様は以下のとおりとなっています。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
必須となっているカラム以外については、自由に設定可能です。
非同期バッチデーモン起動前の準備
同期実行と非同期実行ではジョブの作成方法はほぼ変わりませんが、一点だけ気を付けなければならないことがあります。それは、「SqlMapConfigファイルは非同期バッチデーモン用に1つしかないため、SqlMapファイルを1カ所にすべて記述しなくてはいけない」という点です。
非同期バッチデーモン用のSqlMapConfigファイルは「batchapps\common\sqlMapConfig.xml」です。先ほどまでで作成した分割ジョブで利用している「sample\UC0003\UC0003_sqlMap.xml」を上記のファイルに、以下のように追記する必要があります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
これで非同期実行の準備は完了です。
非同期バッチデーモンの起動
非同期バッチデーモンは、TERAバッチにて提供されているため、開発者が作成する必要がありません。同期実行のときと同じ要領で、Eclipseの[実行]ダイアログを開き、[メイン]タブの[プロジェクト]に「terasoluna-batch-sample-foratmarkit04」を指定、[メイン・クラス]にTERAバッチが提供する「jp.terasoluna.fw.batch.springsupport.init.AsyncBatchDaemon」を指定します。
実行し、以下のようなログがコンソールに出力されることを確認します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ジョブ管理テーブルへのジョブ依頼情報の登録とジョブの実行
では、ジョブ管理テーブルにジョブ依頼情報を登録してみましょう。DBManagerから以下のINSERT文を発行します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
実行画面は以下のようになります。
上記のSQL文を発行すると、非同期バッチデーモンがジョブ管理テーブルを監視しているため、登録されたジョブ情報を取得し、自動的にジョブを実行します。コンソールに以下のようなログが出力されることを確認してください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
また、先ほどの多重実行ジョブの実行時と同様にテーブルの内容を確認してください。
非同期バッチデーモンの終了
非同期バッチデーモンは、ジョブ管理テーブルから取得したジョブ依頼情報が、デーモン終了用のジョブ依頼であれば終了します。非同期バッチデーモン終了用のジョブ依頼情報は以下のとおりです。
- ジョブID:「STOP」の文字例
- ジョブBean定義ファイル名:「StopDaemonBean.xml」
では、実際に非同期バッチデーモンを終了してみましょう。DBManagerから以下のINSERT文を発行します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
上記のSQL文を発行すると、今度は非同期バッチデーモンがデーモン終了用のジョブ依頼を取得し、終了します。コンソールに以下のようなログが出力されることを確認してください。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
以上が、TERAバッチを利用した非同期実行です。
結局、Javaバッチ処理は本当に業務で“使える”の?
本連載では、全4回にわたってJavaによるバッチ処理の現状から、OSSフレームワークを利用した際のバッチアプリケーションの構築方法について見ていきました。連載を通して読んでいただいた皆さま、ありがとうございました。
バッチ処理をJavaで実装するということはまだまだ事例としては少ないと思いますが、オープンソースのフレームワークが出てきはじめていることからも伺えるように、徐々に一般的になってきています。その背景には、Javaの性能向上や、Java技術者の拡大、Web/バッチを統一的に扱うことによるコスト削減の要求、運用・保守性を向上したいという要求があります。これらを踏まえると、今後ますますJavaを利用したバッチ処理は一般的なものになっていくと考えられます。
つまり、Javaによるバッチ処理は業務で“使える”ようになってきた、といっても過言ではないでしょう。本連載を通して1人でも多くの人がバッチ処理の現状とJavaという新しいアプローチに興味を持っていただければ、幸いです。なお、今回作成したアプリケーションのファイルは、SourceForgeからダウンロードできます。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- バッチ処理でデータベースアクセスを効率化する
Java TIPS - GoogleのMapReduceアルゴリズムをJavaで理解する
いま再注目の分散処理技術(前編) - 20世紀のJavaの歴史と21世紀への5つの提案
[コラム]米持幸久のJava Issue(2) - 開発存続の危機で分かったSEに必要なスキル
開発現場で学べること(6) - Webと企業システムをつなぐアーキテクチャ
[連載]Webと企業システム結ぶ実践的アーキテクチャ(1)