DB2 ヘルス・モニター・サンプル・アプリケーションの概念を開発したとき、サービス指向アーキテクチャー (SOA) の利点を一般の人々にもたらすという IBM のビジョンを促進することがその目標となりました。私の場合について言えば、DB2 の見地からそれを示すことです。DB2 ヘルス・モニター・サンプル・アプリケーションは、次のような点で実行可能なビジネス・ソリューションを作るために、多くのイニシアチブを取り込んで作成されました。
- コスト - オープン・ソース・テクノロジーを適切に利用して、既存のインフラストラクチャーを利用する。
- 開発 - できる限りプログラミング言語とオペレーティング・システムの独立性を維持する。
- スケーラビリティー - 最小限の要員を増やすだけで、従来および新規の両方のテクノロジーの拡張性を確保できる。
- 保守容易性 - ベスト・プラクティスおよび標準を使用して将来の開発コストを削減する。
DB2 ヘルス・モニター・サンプル・アプリケーションは、これらのイニシアチブを取り込み、それと同時にアプリケーション開発者には既存のデータをサービスとして公開し、技術に特に精通していないビジネス・リーダーにも SOA の価値を提示できるように設計されました。
2 つのパートから構成されるこのシリーズでは、SOA および XML データの使用という両方の見地から PHP 用の DB2 ヘルス・モニター・サンプル・アプリケーションについて説明します。
通常、アプリケーションを開発するときに最初に考えるのは、どのような種類のテクノロジーを使用するべきかという点です。
選択したテクノロジーがたどるシナリオは、従来から次のいずれかの結果となります。
- タスクに最適なテクノロジーの選択
- タスクに過不足ないテクノロジーの選択
いずれのケースにおいても、開発者は、コードの再利用、プラットフォームの独立性、パフォーマンスのトレードオフを考慮しなければならず、それと同時にベンダー・ロックインも回避する必要があります。
この問題を解決するために、アプリケーション開発者は、ソフトウェア・スタックの柔軟性が得られるのと同時にレガシー・データを処理できて、サービス品質も維持されるソリューションを必要としています。サービス指向アーキテクチャー (SOA) は、XML を、かつては互換性のなかったソフトウェア・スタックが通信し合える共通のメディアとして使用することにより、これを実現しています。図 1 に、典型的な SOA スタックを示します。
図 1: SOA スタック
DB2 ヘルス・モニター・サンプル・アプリケーションの場合は、次のソフトウェア・スタックを使用しました。
- プレゼンテーション:HTML、CSS、JS (AJAX)
- ビジネス・ロジック:PHP
- データ・ソース:DB2 9 Express-C
- Web サーバー:Apache HTTP Server
- オペレーティング・システム:Windows および Linux
SOA のテーマどおり、DB2 ヘルス・モニター・サンプル・アプリケーションで使ったソフトウェア・スタックは、次の設計目標に沿った最善のテクノロジーの選択となっています。
- プレゼンテーション・レベルでは、AJAX によってヘルス・モニターの概念が非常にうまく表現されています。つまり、このテクノロジーを非同期に使用して、システムに関する頻繁に発生する定期的な更新を取得できます。
- ビジネス・ロジック・レベルでは、PHP が J2EE や .NET などのエンタープライズ・クラスの重いフレームワークを代替する軽い中間層の役割を果たしています。
- PHP、Apache、および Linux は、DB2 がオープン・ソース・テクノロジーとの併用が可能であることを物語っています。
最適なテクノロジーを使用しましたが、SOA パラダイムにおいては、そもそも XML へのデータ変換の問題が残されています。
過去においては (今でも続いていますが)、アプリケーションのデータ・アクセス層またはビジネス・ロジック層で PHP、Java、または C# などの中間層プログラミング言語を使用することによってデータの操作および必要な書式への変換を行うことで、開発者はこの問題を解決してきました。これは許容できる範囲ではありますが、明らかにソフトウェア設計のベスト・プラクティスを逸脱しています。
本来、データを保管するだけではなく、データベース操作言語 (DML) を使用してデータを更新し、必要な書式で返すこともデータベースの役割です。この処理にプログラミング言語を使用するべきではありません。これはちょうど中間層で 2 つの SQL 照会を実行して手動でデータを結合すべきではないのと同様であり、既存の XML データを使用する場合や SQL データを XML に変換する場合にも適用すべきです。
これは伝統的に、データベース管理システム (DBMS) またはデータ・ストレージ・メカニズムも、ソフトウェア・アーキテクチャーにおけるそれぞれの重要な進化によって発展していかなければならないという考えに受け継がれています。データ・ストレージ・メカニズムが、フラット・ファイルの使用からリレーショナル・データベースへと進化を遂げたのと同様に (マルチユーザーおよび多層構成アプリケーションの必要性から)、SOA の導入 (特に Web サービス) は、DBMS が XML を使用できるべきであるという要件を生み出しています。
IBM DB2 9 ソフトウェアは、pureXML™ テクノロジーおよびハイブリッド・データベース・エンジンを使用することによって、次の 2 つの見地からこの問題を解決します。
- レガシー・データ
- XML データ
ストレージ方式には関係なく、データが従来の SQL データ型であっても、新しい XML データ型であっても、XML として取り出せるというのが pureXML を支える原則です。
DB2 ヘルス・モニター・サンプル・アプリケーションは、前者のアプローチを使います。まず、データベースにすでに存在している一連のユーザー定義関数 (UDF) を使用してすべてのヘルス・モニター・データを収集してから、リレーショナル表の形式で標準的な SQL データ型を返します。次に、pureXML を使用して、すべてのヘルス・モニター・データを DB2 9 エンジン自体の中で XML に変換します。
アーキテクチャー的には、pureXML を併用する SOA パラダイムによって、次のように変換が行われます。
図 2: パッケージ・アーキテクチャー
上図のように、単一の完全な SOA アプリケーションは、プロデューサーとコンシューマーという 2 つの部分から構成されます。PHP 用の DB2 ヘルス・モニター・サンプル・アプリケーションについても同じですが、これらの構成要素のそれぞれは、さらに別々のプレゼンテーション層、ビジネス・ロジック層、データ・アクセス層にまたがって完全に分散する (ベスト・プラクティスのソフトウェア設計パラダイムに記述されているとおり)、一連のパッケージに細分化されます。
プロデューサーの視点からは 2 つのパッケージがあります。
-
Web サービス・プロデューサー DB - データ・ソースに接続し、照会を作成してデータ・ソースに対して実行するパッケージ
- Web サービス・プロデューサー - 通信が経由する SOAP サーバーに加え、WSDL (標準化された XML 文書フォーマット) によって Web に公開する機能を含むパッケージ
同様にコンシューマーの視点からも 2 つのパッケージがあります。
-
Web サービス・コンシューマー - Web サービスに要求を送信し、XML 出力を受信する SOAP クライアントが含まれるパッケージ
- Web サービス・コンシューマー GUI - XML データをユーザーにとって意味のあるフォーマットで表現するパッケージ
DB2 ヘルス・モニター・サンプル・アプリケーションについて興味深い点は、データ・ソースからプレゼンテーション層への XML データの伝搬です。データ (従来の SQL データ型) のオリジナルのストレージ方式、およびエンド・ユーザーへの最終的なレンダリング (スタイルシートを使用して XML として表示されている場合がある) を除いて、すべてが XML です。
ここでも DB2 9 pureXML は、XQuery ステートメントを使用して、データベース・エンジン自体の中で SQL データを XML に変換します。従来のリレーショナル構造では SQL が DML を意味するのと同様に、XML の場合は XQuery が DML と同等の役割を果たします。DB2 ヘルス・モニター・サンプル・アプリケーションは、Web サービス・プロデューサー DB パッケージを使用して、データ・アクセスのみを実行します。つまり、XQuery ステートメントを作成して DB2 9 エンジンに送信し、データを収集して、記述して、XML としてデータを組み立てます。
このサンプルは単一アプリケーションのみを示していますが、複数の層、サービス、アプリケーションが存在するエンタープライズ・レベルでは、どのような様子になるか想像してみてください。たとえサービス管理および共通タスクの共用に集中化アプローチを使用したとしても、各アプリケーションにデータベースのデータを操作して XML として表現する役割を担当させていたとしたら、データベースによって保証済みのデータ保全性を開発者が侵害することになります。
この記事では、SOA の観点から PHP 用のDB2 ヘルス・モニター・サンプル・アプリケーションの作成を検証し、ソフトウェア・スタックの柔軟性およびベスト・プラクティスのソフトウェア設計を維持するという概念を DB2 9 がどのようにサポートしているかを見てきました。
パート 2 では、pureXML の観点から DB2 ヘルス・モニター・サンプル・アプリケーションを検証し、詳細なコード・サンプルを示しながら開発者、データベース管理者、およびビジネス全体にもたらされる利点について説明します。パート 2 で示すコード・サンプルは、PHP コード・スニペット、SQL 照会、SQL/XML 照会、および XQuery ステートメントなどです。
注
- ヘルス・モニター・デモは、Web 2.0 Starter Toolkit for DB2 (PHP) にバンドルされています。
- ディスカッション・フォーラムに参加してください。(日本語サイト)
- テクノロジーのブック・ストア (US)で、この記事で取り上げた技術やその他の技術に関する本を探してください。
- developerWorks ブログ(日本語サイト)を確認して、developerWorks コミュニティー(日本語サイト)に参加してください。
- IBM 製品の評価版 (US)をダウンロードし、DB2® や Lotus®、Rational®、Tivoli®、WebSphere® などが提供するアプリケーション開発ツールやミドルウェア製品をお試しください。

Rizwan Tejpar は、IBM の業界別インターンシップ・プログラム (IIP) の学生であり、IIP において DB2 のオープン・ソース・テクノロジーとの連係を示すサンプル・アプリケーションを開発しています。Tejpar は、2006 年には ZendCon コンファレンスに、2007 年には SDWest コンファレンスに出席して、トレード・ショーの会場で開発者向けの DB2 pureXML™ 機能のデモンストレーションを行いました。最近では PHP 用のDB2 ヘルス・モニター・サンプル・アプリケーションに貢献し、これはデータベースのヘルス・モニターに SOA の着想を取り入れたものでした。Tejpar には、これ以外にも C++、C#、.NET、SQL、XQuery、および JSP などのプログラミング言語の経験があります。