連載
» 2008年04月17日 00時00分 UPDATE

Javaバッチ処理は本当に業務で“使える”の?(2):OSSのJavaバッチフレームワークでHello World! (1/3)

[池田貴之,株式会社NTTデータ]

バッチ処理を知っている人も知らない人でも

 連載第1回の「鉄板焼きのお店から学ぶ、バッチ処理“超”入門」では、近年Javaによるバッチ処理が注目されてきており、商用やオープンソースのJavaバッチ処理用のソフトウェアが登場しつつあるという現状を紹介しました。

 オープンソースのJavaバッチフレームワークとしては、SpringBatchがあるものの、2008年4月現在では正式版がリリースされたばかりで、日本語のドキュメントも少なく、本格的に採用するにはまだ早い状況だと思います。そんな中登場したのが、TERASOLUNA Batch Framework for Java(以下、TERAバッチ)です。今回は、TERAバッチのアーキテクチャと機能を簡単に紹介し、JavaバッチでHelloWorld!アプリケーションを実際に実装していくこととします。

編集部注:Batch Framework for Java」を含むTERASOLUNAフレームワーク全体について詳しく知りたい読者は、特集「Java、.NET、Ajax開発の“銀の弾丸”オープンソース?」をご覧ください。

バッチ処理に必要な機能とTERAバッチ

 バッチ処理を行ううえで、フレームワークとして用意されているとうれしい機能は何でしょうか。それは以下のような機能で、TERAバッチも持ち合わせている機能です。

【1】ファイルを読み書きするファイルアクセス機能

 TERAバッチでは、ファイルへの読み書きを行う機能を用意しています。CSVファイル固定長ファイルと、JavaBeanのマッピングを、アノテーションベースで簡単に行うことができます。

編集部注:アノテーションについての詳細は、「J2SE 5.0「Tiger」で何が変わるか?」をご参照ください。

【2】DBアクセスを行う機能

 TERAバッチでは、O/RマッピングツールとしてiBATISを利用することで、柔軟なSQL記述を行いつつ、JavaBeanへのマッピング処理を簡略化しています。

編集部注:O/Rマッピングについて詳しく知りたい読者は、記事「O/Rマッピングの役割とメリット」をご覧ください。

【3】一括でトランザクションを行う機能

 バッチ処理は性能が命ですので、複数(数百〜数千件)のINSERT、UPDATEを一括でコミットするように設計することがよくあります。TERAバッチは、一括トランザクションコミットを行う機能を持っています。

【4】業務的・システム的な異常に対応する機能

 正常な処理だけでなく、異常系にも十分対応することが必要です。TERAバッチには、異常なデータをはじく「入力チェック」機能、ロジック内部で発生した例外を統一的に扱う「例外処理」機能、処理途中から再開できる「リスタート」機能などを用意しています。

【5】同期処理機能、非同期処理機能

 バッチ処理というと、夜間にジョブスケジューラから起動されて、長時間かけて大量データの処理を行うというイメージがあります。一方で、昼間にオンラインアプリケーションから直接呼び出されるものや、1回の処理時間が非常に短いものもあります。

 前者のような処理は、1つのプロセスの中でさまざまな処理を行い、ジョブが完了したら、そのプロセスも消滅するという形態が最適です。一方、後者のような処理では、デーモンプロセスキューに積まれたジョブを随時処理していくという形態にします。TERAバッチでは、前者を「同期ジョブ実行」、後者を「非同期ジョブ実行」と呼んでいます。

【6】ジョブの多重実行機能

 夜間の限られた時間内にジョブを終わらせなければならない場合に、ジョブの多重実行を行うことはよくあります。TERAバッチでは、入力データの値の範囲などを条件にしてジョブを多重実行できます(ジョブスケジューラの設定で多重実行を行い、フレームワークの機能を利用しないこともあります)。

TERAバッチが持っていない機能

 以上のように、TERAバッチでは、バッチ処理に必要な機能を一通り有していますが、逆に、TERAバッチが持っていない機能としては、「ジョブスケジューリング」があります。

 ジョブの依存関係を定義し起動する機能をTERAバッチは持っていません。“餅は餅屋”ということで、ジョブスケジューリングを行う場合、ベンダ製品ではJP1Systemwalker、オープンソースではHinemosといったジョブスケジューラが存在するため、適したものを選択して利用してください。

図1 TERAバッチの構成図 図1 TERAバッチの構成図(画像をクリックすると拡大します)

TERAバッチの特徴

TERAバッチを使う利点とは?

 筆者が考える、TERAバッチのメリットは以下のとおりです。

  • 前述のとおり、バッチ処理に必要な一通りの機能を持っている
  • ドキュメント類が充実している(2008年4月現在で、SpringBatchはまだ日本語ドキュメントが不十分)
  • NTTデータの社内基幹系システムにおいてバッチシステムを構築したノウハウが集約されて作られている
  • SI案件での実績が十分ある(オープンソースとしてリリースして3カ月で、すでに10件以上の採用実績)
  • オープンソースとはいえ、厳格な試験(カバレッジ率など提示)を行っており、品質は十分確保されている

 手前みそではあるのですが、現時点でのオープンソースJavaバッチフレームワークとしては、良いところにいるのではないでしょうか。

TERAバッチのアーキテクチャ

 TERAバッチのアーキテクチャを一言で表すと、「入力と業務処理(+出力)の分割」です。ファイルやDBからデータを受け取る処理と、受け取ったデータを加工してファイルやDBに書き出す処理を、別のモジュールおよびスレッドで実行します。

 こうすることで、入力と出力のどちらかで待ち(主に、I/O待ち)が発生しても、効率よく処理を継続することができます。これは、処理時間とCPU使用効率を重視するバッチ処理では大事なことです。

図2 TERAバッチの処理アーキテクチャ 図2 TERAバッチの処理アーキテクチャ

 また、TERAバッチは、Spring FrameworkDIコンテナ)、iBATIS(O/Rマッピングツール)をはじめとした多くの標準的なオープンソースプロダクトを組み合わせて作られています。そのため、これらの機能の知識がある場合は、学習コストもさほど掛かりませんし、Spring FrameworkやほかのTERASOLUNAフレームワークを利用したアプリケーションなどとの連携・モジュールの共通化も可能です。

編集部注:Spring FrameworkDIコンテナ)について詳しく知りたい読者は、インデックス「DI×AOP(Spring/Seasarなど)」をご覧ください。

 それでは、次ページ以降で実際にJavaによるバッチ処理のアプリケーションを作っていきましょう。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。