
OSSのJavaバッチフレームワークでHello World!
株式会社NTTデータ 技術開発本部 ソフトウェア工学推進センタ
池田 貴之
2008/4/17
オープンソースのJavaバッチフレームワーク
| 今回の主な内容 ・バッチ処理に必要な機能とTERAバッチ ・TERAバッチの特徴 ・Javaバッチアプリケーション作成のための準備 ・HelloWorld!アプリケーションの実装 ・次回はDBを利用したバッチアプリケーション |
連載第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バッチは持っていません。“餅は餅屋”ということで、ジョブスケジューリングを行う場合、ベンダ製品ではJP1やSystemwalker、オープンソースではHinemosといったジョブスケジューラが存在するため、適したものを選択して利用してください。
![]() |
| 図1 TERAバッチの構成図(画像をクリックすると拡大します) |
TERAバッチの特徴
■ TERAバッチを使う利点とは?
筆者が考える、TERAバッチのメリットは以下のとおりです。
- 前述のとおり、バッチ処理に必要な一通りの機能を持っている
- ドキュメント類が充実している(2008年4月現在で、SpringBatchはまだ日本語ドキュメントが不十分)
- NTTデータの社内基幹系システムにおいてバッチシステムを構築したノウハウが集約されて作られている
- SI案件での実績が十分ある(オープンソースとしてリリースして3カ月で、すでに10件以上の採用実績)
- オープンソースとはいえ、厳格な試験(カバレッジ率など提示)を行っており、品質は十分確保されている
手前みそではあるのですが、現時点でのオープンソースJavaバッチフレームワークとしては、良いところにいるのではないでしょうか。
■ TERAバッチのアーキテクチャ
TERAバッチのアーキテクチャを一言で表すと、「入力と業務処理(+出力)の分割」です。ファイルやDBからデータを受け取る処理と、受け取ったデータを加工してファイルやDBに書き出す処理を、別のモジュールおよびスレッドで実行します。
こうすることで、入力と出力のどちらかで待ち(主に、I/O待ち)が発生しても、効率よく処理を継続することができます。これは、処理時間とCPU使用効率を重視するバッチ処理では大事なことです。
![]() |
| 図2 TERAバッチの処理アーキテクチャ |
また、TERAバッチは、Spring Framework(DIコンテナ)、iBATIS(O/Rマッピングツール)をはじめとした多くの標準的なオープンソースプロダクトを組み合わせて作られています。そのため、これらの機能の知識がある場合は、学習コストもさほど掛かりませんし、Spring FrameworkやほかのTERASOLUNAフレームワークを利用したアプリケーションなどとの連携・モジュールの共通化も可能です。
編集部注:Spring Framework(DIコンテナ)について詳しく知りたい読者は、インデックス「DI×AOP(Spring/Seasarなど)」をご覧ください。
それでは、次ページ以降で実際にJavaによるバッチ処理のアプリケーションを作っていきましょう。
| Index | ||||||||
|
||||||||
Javaバッチ処理は本当に業務で“使える”の? バックナンバー 連載インデックスへ»
- 第1回 鉄板焼きのお店から学ぶ、バッチ処理“超”入門
- 第2回 OSSのJavaバッチフレームワークでHello World!
- 第3回 Eclipseで作る! DBを使った実践的なJavaバッチ
- 最終回 Javaバッチフレームワークで多重実行、非同期実行
| Java Solution全記事一覧 |
TechTargetジャパン
- 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ - 新キャラ登場!スクラムやるならRedmineとALMinium (2011/12/26)
「黒板を“かんばん”にしてたら先生に怒られた(T_T)」「管理はPC内でやればいいのよ」「承知しました」
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


