バッチ処理はJavaでバッチリ?その現状とこれから安藤幸央のランダウン(37)

「Java News.jp(Javaに関する最新ニュース)」の安藤幸央氏が、CoolなプログラミングのためのノウハウやTIPS、筆者の経験などを「Rundown」(駆け足の要点説明)でお届けします。(編集部)

» 2007年11月14日 06時00分 公開

バッチ処理の変遷

 Javaの登場以来、ホストコンピュータ、専用サーバなどで動いていた数多くのレガシー既存資産システムが、Java環境へ移行してきました。Web上のオンラインアプリケーションにおいては、特にJavaの活躍の場が増えたといってもよいでしょう。

 その中でも移行が遅れており、旧来のマシン環境、旧来の言語での利用が続いてきたものに「バッチ処理」が挙げられます。

そもそも「バッチ処理」とは何か?

 ここでいうバッチ処理はWindowsのバッチファイル(.bat)を示すのではありません。大量のトランザクションデータを扱い、大量のデータを順次処理することを示します。

編集部注:バッチ処理について詳しく知りたい読者は、@IT情報マネジメント用語事典の[バッチ処理]をご参照ください。

 また、バッチ処理の実行は一定の処理時間内に完了することが求められます。さらに、異常時には正確に状況を把握することが必須となっています。

 バッチ処理は、ある業種においては現在もなくてはならない仕組みながらも、従来のJava環境ではおざなりになってきた分野だといえます。

 Webアプリケーションがイメージする大規模アクセスや運用の形態と、金銭情報などを1件の漏れもなく、大量のデータを規定時間内に確実に処理するバッチ処理とでは、考え方やアプローチがまったく違うことにも起因しています。

 また、バッチ処理自身が、スケジューリングされ比較的長時間実行するアプリケーションであるということも、その特殊性を表しています。

Javaがバッチで使えるのかという不安感が変化してきている
  • New I/O API(java.nioパッケージにより、大量、多数のファイルの読み書きの性能向上
  • テストの自動化の手法やテストツールも充実してきた
  • クライアントサイド、サーバサイドでのJava実行性能の向上
  • 最新のハードウェアに対応した実行環境がメンテナンスされているという安心感

既存の環境で必要十分だという旧来までの安心感が変化してきている
  • 習熟したCOBOL(バッチ処理によく使われる言語)技術者の確保が難しくなってきている
  • ハードウェアのリプレイスの際に、旧来と同じ環境を確保しにくくなっている
  • 開発スタイルの変化や、オンラインアプリケーションとの連携の重視
  • 最新のハードウェア、ソフトウェア環境で実行した方が素早く安価に実行完了できること

Spring Batchの登場

Spring Batch(エンタープライズ・バッチアプリケーション・フレームワーク)のサイト Spring Batch(エンタープライズ・バッチアプリケーション・フレームワーク)のサイト

Spring Batchとは?

 Spring Batchとは、Interface21とAccentureが共同で開発したSpring用のバッチフレームワークです。今年のJavaOneで初めて披露されました(参照)。

編集部注:Springについて詳しく知りたい読者は、記事「DI:依存性の注入とは何か?」の「Spring Frameworkとは」をご参照ください。

 Spring Batchはバッチ処理用として標準化され、主にエンタープライズ分野で採用してもらうために作られたオープンソースのフレームワークです。バッチの最適化や、障害時のリトライや、規模が拡大したときのスケール対策、負荷分散などにも有効です。

 一方、Spring Batchにはまだまだ難しいこと、面倒なことも残っています(作り方次第で、うまく回避できることですが)。起動時にパラメータを受け渡したり、常駐プロセス化をするのが面倒です。状況に応じて、バッチ内での処理を動的に切り替えたりすることはバッチの性格上不得意な事柄であることは確かです。

 また、Spring Batchの利用には大量に複雑なXML設定ファイルを用意しなければいけません。バッチ処理の規模がSpring Batchフレームワークを利用するに値する規模であるかどうか、正確に見極める必要があります。

 さらに、現状のSpring Batchが出力するログ情報は比較的少ないため、実運用には何らかの補助、追記が必要な場合もあることを念頭に置いておいてください。

Spring Batchの用途と機能
  • バッチプロセスを定期的にコミット
  • 同時バッチ処理:ジョブの並列処理
  • 段階的、エンタープライズ向けメッセージ駆動型処理
  • 大規模並列バッチ処理
  • 処理を失敗した後の手動またはスケジュール設定された再起動
  • 相互依存した処理の順次処理(ワークフロー主導型の拡張機能)
  • 部分的な処理:レコードをスキップした処理(例:ロールバック)
  • 全バッチトランザクション:簡単なデータモデルや小さいバッチサイズ条件用

Javaバッチ処理関連の製品とオープンソース

 ほかにも、Javaのバッチ処理のための製品やオープンソースがいろいろとありますので、参考にしてみてください。

日本HP、サンモアテック「SUNBATCH」

 SUNBATCHのWorkerクラスを拡張してバッチ処理を実装。ジョブ定義はXMLファイルを記述して行う(参照)。

メディア情報開発「ParallelFrame」

ParallelFrameのサイト ParallelFrameのサイト

 COBOLバッチのアルゴリズムをJavaバッチで再構築できるフレームワークが用意されている。「仕様書ジェネレーター」なるユーティリティも付属。

NRI「オブジェクトワークス/BT JobManager」

 J2EEJava EE)基盤上に必要なジョブの実行制御機能を提供。「ジョブの実行要求」「ジョブのキューイング」「ジョブの実行情報管理」「ジョブのイベント通知」などの機能を持つ。

NTTデータ「TERASOLUNA Batch Framework for Java」

 オンライン・アプリケーションからの起動やジョブ・スケジューラからの起動など、さまざまなジョブ起動のバリエーションをサポートするフレームワーク

ワイ・エス・ピー「Web Solid Framework」

ワイ・エス・ピーサイト内にあるWSF(Web Solid Framework)の構成 ワイ・エス・ピーのサイト内にあるWSF(Web Solid Framework)の構成

 同社の「BJF(Btach Job Framework)」と連携してJavaのバッチ処理を実現するフレームワークソリューション。

「Java Batch System」

SourceForge.netの「Java Batch System」のサイト SourceForge.netの「Java Batch System」のサイト

 NQS(Network Queuing System、CPUやメモリ領域の制限や実行形態により最適なキューを選択して、バッチジョブをバッチシステムにキューイングする機能)とPBS(Portable Batch System、各ユーザーにCPUやメモリ領域を適切に割り振り、バッチジョブの管理を効率的に行うための分散型リソース管理システム)をサポートしたJavaによるオープンソースのバッチシステム。

blanco Framework「blancoBatchProcess」

blancoBatchProcessのサイト blancoBatchProcessのサイト

 オープンソースのコード自動生成フレームワークblanco Frameworkのツールの1つで、バッチ処理の定義書(xlsファイル)からバッチ処理を行うJavaのソースコードを自動生成する。

編集部注:blanco Frameworkについて詳しく知りたい読者は、記事「お決まりコードを設計書から自動生成するblancoCsv」の「開発現場の犠牲者削減、blanco Frameworkとは?」をご参照ください。

Javaによるバッチ処理の将来は?

 先進的な企業ではバッチ処理にJavaを用いる企業はありましたが、独自の実装や独自のフレームワークを用いていることがほとんどでした。今後はSpring Batchのような標準化されたバッチフレームワークが進化していくことにより、ノウハウの蓄積や、運用経験などが積み重ねられることが期待されます。

 では、バッチ処理をSpring Batchなど新規フレームワークで置き換える場合、注意が必要な事項をいくつか挙げておきましょう。

バッチ処理をフレームワークに置き換える際の注意点
  • 実際に開発したバッチ処理を運用・管理する部門はどこなのか? 運用・メンテナンスを行うメンバーと十分協議し了解を得ておくこと。開発者側の勝手な都合で、フレームワークの採用を決めてしまわないこと
  • バッチ処理の規模や、パフォーマンス要件など、運用に際して必要条件を明確にし、さまざまな観点から十分余裕のある開発を行うこと
  • 障害時の復旧や再起動における手順など、さまざまな条件下における対応策が練られており、マニュアル化しておくこと。必ずしも開発担当者が障害を担当するわけではない
  • 十分なテスト計画、負荷テスト、網羅テスト、長時間安定テストを行うこと
  • 今後何年間使い続けるシステムなのかを考えたうえで、ハードウェアのリプレイスや、規模のスケールに対応した運用計画を練っておくこと

 Javaの実効性能の向上や、技術者層の広がり、メンテナンス性を考えると、バッチ処理関係においても今後Javaへの移行はますます進むと考えられます。懸念事項を1つ1つ払拭(ふっしょく)し、新しい技術を最大限に活用していってほしいものです。

 次回は 2008年1月中ごろに公開の予定です。内容は未定ですが、読者の皆さんの興味を引き、役立つ記事にする予定です。何か取り上げてほしい内容などリクエストがありましたら、編集部@ITの掲示板までお知らせください。次回もどうぞよろしく。

プロフィール

安藤幸央(あんどう ゆきお)

安藤幸央

1970年北海道生まれ。現在、株式会社エクサ マルチメディアソリューションセンター所属。フォトリアリスティック3次元コンピュータグラフィックス、リアルタイムグラフィックスやネットワークを利用した各種開発業務に携わる。コンピュータ自動彩色システムや3次元イメージ検索システム大規模データ可視化システム、リアルタイムCG投影システム、建築業界、エンターテインメント向け3次元 CG ソフトの開発、インターネットベースのコンピュータグラフィックスシステムなどを手掛ける。また、Java、Web3D、OpenGL、3DCG の情報源となるWebページをまとめている。

ホームページ
Java News.jp(Javaに関する最新ニュース)

所属団体
OpenGL_Japan (Member)、SIGGRAPH TOKYO (Vice Chairman)

主な著書
「VRML 60分ガイド」(監訳、ソフトバンク)
これがJava だ! インターネットの新たな主役」(共著、日本経済新聞社)
The Java3D API仕様」(監修、アスキー)


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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