「Java News.jp(Javaに関する最新ニュース)」の安藤幸央氏が、CoolなプログラミングのためのノウハウやTIPS、筆者の経験などを「Rundown」(駆け足の要点説明)でお届けします。(編集部)
Javaの登場以来、ホストコンピュータ、専用サーバなどで動いていた数多くのレガシー(既存資産)システムが、Java環境へ移行してきました。Web上のオンラインアプリケーションにおいては、特にJavaの活躍の場が増えたといってもよいでしょう。
その中でも移行が遅れており、旧来のマシン環境、旧来の言語での利用が続いてきたものに「バッチ処理」が挙げられます。
ここでいうバッチ処理はWindowsのバッチファイル(.bat)を示すのではありません。大量のトランザクションデータを扱い、大量のデータを順次処理することを示します。
編集部注:バッチ処理について詳しく知りたい読者は、@IT情報マネジメント用語事典の[バッチ処理]をご参照ください。
また、バッチ処理の実行は一定の処理時間内に完了することが求められます。さらに、異常時には正確に状況を把握することが必須となっています。
バッチ処理は、ある業種においては現在もなくてはならない仕組みながらも、従来のJava環境ではおざなりになってきた分野だといえます。
Webアプリケーションがイメージする大規模アクセスや運用の形態と、金銭情報などを1件の漏れもなく、大量のデータを規定時間内に確実に処理するバッチ処理とでは、考え方やアプローチがまったく違うことにも起因しています。
また、バッチ処理自身が、スケジューリングされ比較的長時間実行するアプリケーションであるということも、その特殊性を表しています。
Spring Batchとは、Interface21とAccentureが共同で開発したSpring用のバッチフレームワークです。今年のJavaOneで初めて披露されました(参照)。
編集部注:Springについて詳しく知りたい読者は、記事「DI:依存性の注入とは何か?」の「Spring Frameworkとは」をご参照ください。
Spring Batchはバッチ処理用として標準化され、主にエンタープライズ分野で採用してもらうために作られたオープンソースのフレームワークです。バッチの最適化や、障害時のリトライや、規模が拡大したときのスケール対策、負荷分散などにも有効です。
一方、Spring Batchにはまだまだ難しいこと、面倒なことも残っています(作り方次第で、うまく回避できることですが)。起動時にパラメータを受け渡したり、常駐プロセス化をするのが面倒です。状況に応じて、バッチ内での処理を動的に切り替えたりすることはバッチの性格上不得意な事柄であることは確かです。
また、Spring Batchの利用には大量に複雑なXML設定ファイルを用意しなければいけません。バッチ処理の規模がSpring Batchフレームワークを利用するに値する規模であるかどうか、正確に見極める必要があります。
さらに、現状のSpring Batchが出力するログ情報は比較的少ないため、実運用には何らかの補助、追記が必要な場合もあることを念頭に置いておいてください。
ほかにも、Javaのバッチ処理のための製品やオープンソースがいろいろとありますので、参考にしてみてください。
SUNBATCHのWorkerクラスを拡張してバッチ処理を実装。ジョブ定義はXMLファイルを記述して行う(参照)。
COBOLバッチのアルゴリズムをJavaバッチで再構築できるフレームワークが用意されている。「仕様書ジェネレーター」なるユーティリティも付属。
J2EE(Java EE)基盤上に必要なジョブの実行制御機能を提供。「ジョブの実行要求」「ジョブのキューイング」「ジョブの実行情報管理」「ジョブのイベント通知」などの機能を持つ。
オンライン・アプリケーションからの起動やジョブ・スケジューラからの起動など、さまざまなジョブ起動のバリエーションをサポートするフレームワーク
同社の「BJF(Btach Job Framework)」と連携してJavaのバッチ処理を実現するフレームワークソリューション。
NQS(Network Queuing System、CPUやメモリ領域の制限や実行形態により最適なキューを選択して、バッチジョブをバッチシステムにキューイングする機能)とPBS(Portable Batch System、各ユーザーにCPUやメモリ領域を適切に割り振り、バッチジョブの管理を効率的に行うための分散型リソース管理システム)をサポートしたJavaによるオープンソースのバッチシステム。
オープンソースのコード自動生成フレームワークblanco Frameworkのツールの1つで、バッチ処理の定義書(xlsファイル)からバッチ処理を行うJavaのソースコードを自動生成する。
編集部注:blanco Frameworkについて詳しく知りたい読者は、記事「お決まりコードを設計書から自動生成するblancoCsv」の「開発現場の犠牲者削減、blanco Frameworkとは?」をご参照ください。
先進的な企業ではバッチ処理に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.