IBM®
本文へジャンプ
    Japan [変更]    ご利用条件
 
 
検索範囲検索:    
    ホーム    製品    サービス & ソリューション    サポート & ダウンロード    マイアカウント    
skip to main content

developerWorks Japan  >  Information Management | XML | SOA and Web services | Rational  >

DB2 9 の pureXML 用の Web サービスを生成する

XML データ用の Web サービスをボトムアップで生成するための概念手法を検証する

developerWorks
ページオプション

JavaScript を要するドキュメントオプションは表示されません

ダウンロード

原文はこちら

原文はこちら


レベル: 中級

Vijay Bommireddipalli (vijayrb@us.ibm.com), Data Servers Solutions, IBM

2007年 06月 14日

Web サービスは SOA (service-oriented architecture) を実現するための重要な構成ブロックです。SOA に向かおうとするアプリケーションが増えるにつれ、アプリケーションの機能をWeb サービスとして公開する必要が生ずることがよくあります。この記事では、DB2® 9 の pureXML™ 機能を利用して、データベースにXML データを挿入し、またデータベースから XML データを取得する Web サービスを、単純な Java™ クラスを使って容易に作成する方法を説明します。いったんWeb サービスが生成され、WebSphere® Application Server にデプロイされると、RAD (Rational Application Developer) に組み込まれた Web サービス・エクスプローラーを使って、あるいは XForms を Web サービス・クライアントとして使うことで、それらのサービスをテストすることができます。その同じサービスは、SOAP over HTTP によるWeb サービス呼び出しを行うことができる任意の Web サービス・クライアントから使用することができます。

背景

最近では、Web サービスは SOA の重要なコンポーネントとして、高度に分離された柔軟なソリューションを実現します。Web サービスは、トップダウン、あるいはボトムアップの手法を使って構築することができます。トップダウンの手法では、まずサービス仕様 (例えば WSDL ファイル) から始め、そして基礎となるコードを、その仕様に合わせて実装します。一方ボトムアップの手法では、Java bean から始め、そしてその機能を Web サービスとして公開します。

IBM は DB2 9 で pureXML 機能を導入しました。この機能を利用すると、XML データをそのままデータベースに保管することができます。pureXML は XML を DB2 のファーストクラス・データ型として扱い、また XML 型の列は、任意の整形式 XML を本来の階層構造形式でデータベースに保管することができます。いったんデータが XML としてデータベースに保管されると、クエリーの評価のために XML が実行時に構文解析されることはないため、保管されたデータに対して非常に効率的にクエリーを実行することができます。そして XQuery や SQL、あるいは DB2 が提供するアプリケーション開発インターフェースを使うことで、XML データにアクセスし、操作することができます。

XForms は XML ベースの電子フォーム技術であり、フォーム・データを XML データ・インスタンスとして送信することができます。XForms は W3C 勧告であり、プラットフォームや機器に依存しません。XForms はデータ・モデルを表示から分離しているため、ユーザー・データを XML として送信することができます。そしてこのデータを受信する側は、ユーザーが送信したデータを XML インスタンスとして保管し、操作することができます。XForms を使ってデータを送信する方法は数多くあります。今回の例では Web サービスを使いましょう。

エンド・ユーザー・フォームとして XForms を使い、またトランスポート機構として Web サービスを、そしてストレージには DB2 9 を使うことで、変更に対する弾力性を持ち、大幅に開発時間を短縮できる、真のエンド・ツー・エンドの XML ソリューションを作成することができます。

DB2 9 や XForms、Web サービスに関する詳細については、「参考文献」のセクションを参照してください。




上に戻る


前提条件

この記事で説明する内容を理解するためには、下記の前提条件が必要です。

  • DB2 9 と pureXML 機能に慣れていること。DB2 9 の pureXML 機能に慣れるためには、この記事の「参考文献」のセクションを参照してください。
  • RAD に関する実際的な知識と、テスト用の WebSphere Application Server 環境を使ってアプリケーションをデプロイでき、削除できる能力。
  • Web サービスの開発の概念に慣れていること。



上に戻る


システム要件

サーバー・サイドの開発

  1. pureXML 機能を持つ DB2 9

    無料で使用できる DB2 Express-C を使うこともできます。DB2 Express-C は 2 台までのデュアルコア CPU サーバーで実行でき、また 4 GB までのメモリーと、任意のストレージ・システム設定に対応し、またデータベース・サイズや他の人為的な制限にはまったく制約されません。Express-C をダウンロードするためのリンクに関しては「参考文献」のセクションを参照してください。

  2. RAD バージョン: 7.0.0 (あるいはそれ以上)

    注意: ここで取り上げる例では、結果をテストするための詳細ステップを、RAD に付属の、組み込みのテスト用 WebSphere Application Server バージョン 6.1.0.2 を使って説明します。あるいは、WAR ファイルをエクスポートし、スタンドアロンの WebSphere Application Server (バージョン 6.1.0.2 以上) にデプロイすることもできます。この例は、WebSphere Application Server の下位レベルでは失敗します。

クライアント・サイド

  • XForms プラグインをインストールした Mozilla Firefox 1.5.x、あるいはそれ以上 (できれば Firefox 2.0.x)

    XForms プラグインは、Firefox のアドオンのページからインストールすることができます。XForms プラグインをインストールするには、Firefox 2.0.x を使ってこの URL を起動し、そして Install nowを選択します。




上に戻る


手順

概要

この例では、XML データ用の Web サービスをボトムアップの手法で生成する方法を、順を追って説明します。出発点として Java bean (FormServices.java) の実装を説明します。この Java bean には、DB2 9 のサンプル・データベースの XML 列のデータを操作するための、データ・アクセス用のメソッドとデータ操作用のメソッドが含まれています。この Java bean の内容に関する詳細については、「FormServices.java の説明」という標題の囲み記事を参照してください。次に、Java bean のこれらのメソッドを、RAD ツールを使って Web サービスとして公開します。そして最後に、これらの Web サービスを、提供された XForms を使ってテストします。

順を追って進めましょう

  1. サンプルのデータベースと xmlcustomer 表を作成する
    1. (もしまだ存在していなければ) コードページ UTF8 のサンプル・データベースを作成します。例えば下記のようにします。
       DB2 9 は XML データ型の列を作成するために UTF8 データベース・コードページを使います。 

      DB2 9 uses the UTF8 database codepage in order to create XML datatype columns.

    2. DB2 コマンド・プロンプトで、次のコマンドを使って xmlcustomer 表を作成します。
      connect to sample
      CREATE TABLE XMLCUSTOMER( CID  INT NOT NULL PRIMARY KEY, INFO  XML )

      XML 列 INFO は任意の整形式 XML を保管することができます。

      テスト挿入を試すには、DB2 のコマンド・プロンプトで下記を入力します。

      insert into xmlcustomer values ( 9999, '<test/>'); 

  2. RAD を起動し、「Dynamic Web Project」を作成する
    1. Web パースペクティブが表示されていることを確認します (そうでない場合には Window > Open Perspective > Web を選択して Web パースペクティブに切り替えます)。
    2. プロジェクトの名前として「XForms」と入力します (大文字と小文字は区別されます)。
    3. デフォルトを使用し、Finish をクリックします。

図 1. Web プロジェクトを作成する

  1. 提供された Java ソース・コード・ファイルをインポートし、必要な変更を行う
    1. 上で作成した XForms プロジェクトを、Java Resources フォルダーが表示されるまで展開します。
    2. New > package を右クリックして選択します。パッケージ名として「com.ibm.test」を指定し、Finish をクリックします。

図 2. パッケージを作成する

  1. 作成したばかりのパッケージを右クリックして Import > File System を選択し、FormServices.java (提供されている Java ソース・ファイル) をインポートします。
FormServices.java の説明

Java ソース・コード FormServices.java は 2 つのクラスから構成されています。

  • クラス DB:

    このクラスはデータベース接続を処理します。これを実行させるためには、その環境専用の変更を行う必要があることに注意してください。

  • メソッド:

    connect: アプリケーション・コードを DB2 データベースに接続します。connect メソッドはタイプ 4 の JDBC (Java Database Connectivity) ユニバーサル・ドライバーを使います。

    disconnect: アプリケーションをデータベースから切り離し、JDBC リソースを解放します。

  • クラス FormServices:

    このクラスは、データベースのデータを操作するためのメソッドと、フォームに表示するデータを取得するためのメソッドを持っています。これらのメソッドは Web サービスとして公開されます。XML データを操作できる基本的なメソッドは 3 つあります。この同じ 3 つのメソッドを繰り返すことで、XML データを文字列として扱うことができます。この 3 つのメソッドは次の通りです。

  • メソッド:

    insertFormData: このメソッドは、入力 XML データを DB2 データベースの XML 列に保管します。XML 入力は XML データ (例えば < などのエスケープされた文字列ではないもの) でなければならないことに注意してください。

    retrieveFormData: このメソッドは、固有キーに基づいて、XML 列に保管されたフォーム・データを取得します。

    retrieveFormIDs: このメソッドは、フォームの ID を取得し、それらを XML に適したものとして XForms に返します。このメソッドを使うと、フォーム内でドロップダウン・メニューを生成することができます。

    3 つのメソッド *AsString() は、基本的に上記のメソッドと同じですが、ネットワークで XML データを転送するのではなく、XML が文字列に変換されます。従って <hello/> は “<hello/>” になります。これらのコンビニエンス・メソッドが提供されているため、組み込みの Web サービス・エクスプローラーを使ってそれをテストすることができます。

    genSOAPElement: これはペイロードを文字列から SOAPElement に変換するためのヘルパー・メソッドです。

    genStringfromSOAP: これはペイロードを SOAPElement から文字列に変換するためのヘルパー・メソッドです。


図 3. FormServices.java からサンプル・コードをインポートする

  1. //Change というパターンを検索し、環境に合わせて必要な変更を行います。必要な変更をたどるために、コード内のコメントが役立つはずです。
  2. この例をここで説明する通りに追う場合には、必要な変更は Database クラスの userid とパスワードのみですが、これも (上記と同じように) //Change というパターンでマーキングされています。
  3. コードが正常にコンパイルでき、すべてのインポートが解決されていることを確認します。そのためには XForms プロジェクトの Java Build Path に db2jcc.jar を追加する必要があります。
  4. 外部の jar である、db2jcc.jar を追加するためには、プロジェクトを右クリックして Properties > Java Build Path > Add External Jars > を選択し、そして DB2 のインストール (\sqllib\java) からdb2jcc.jar を選択します。
  5. コンパイルされた Java コードを Web サービスとして公開する
    1. FormServices.java を右クリックし、次に Web Services > Create Web Service をクリックします。もし Web Services メニューが表示されていない場合には、下記に従って、このメニューを有効にします。
    2. もし Web Services メニューが表示されていない場合。ワークベンチの Web サービス機能を有効にする必要があります。そのためには、Windows >Preferences > Workbench > Capabilities をクリックし、そして Web Service Developer が有効になっていることを確認します。

図 4. Java ソースから Web サービスを生成する

  1. 設定が下記に示す通りであることを確認します。警告が表示されたら OKをクリックします。

    注意: サービスが生成されると、ツールはさまざまな Java データ型を、JAX-RPC 仕様の定義に従って等価な XSD 型にマップします。IBM WebSphere の SOAP エンジンは、Java bean の javax.xml.soap.SOAPElement データ型を WSDL の XML スキーマ xsd:anyType にマップします。しかし、JAX-RPC 仕様は現在、xsd:anyType に対する標準の Java マッピングを定義していません。xsd:anyType をサポートするために JAX-RPC 実装は必要ありません。この例は他の SOAP エンジンでは動作しないかもしれず、また他の SOAP エンジンでのテストを行ってはいません。


図 5. Web サービスの設定をレビューする

  1. 有効にする必要があるサービスを選択するためのメニューが表示されるまで Next をクリックします。すべてのサービスがチェックされ、Web サービスとして公開されるようになっていることを確認し、Finishをクリックします。

    注意: 警告が表示されたら OK をクリックします (説明は上記の注意を参照してください)。

図 6. Web サービスとして公開するメソッドを選択する

  1. 指示されたらStart Server をクリックします。生成されたサービスが組み込みの WebSphere Application Server テスト・サーバーに公開されます。
  1. 組み込みのテスト用 WebSphere Application Server で XForms を実行する
    1. XForms アプリケーションをテストする前に、インストールされている必要な JAR ファイルが、JDBC タイプ 4 ドライバーを使って DB2 に接続する上で適切なバージョンであることを確認します。
      1. インストールされた WebSphere Application Server のディレクトリーに db2jcc.jar と db2jcc_license_cu.jar というファイルがあることを確認します。(例えばこの例の場合、私はこれらの JAR ファイルを「C:\Program Files\IBM\SDP70\runtimes\base_v61\lib」の下にインストールする必要がありました。)
      2. もしそこにこの 2 つの JAR ファイルがない場合には、そこに JAR ファイルをコピーし、必ず WebSphere Application Server のシステム・サーバーを再起動します。
    2. この前のステップで作成された Web サービスで XForms を実行する前に、同じ WebSphere Application Server に SOAPForwarding サーブレットをインストールする必要があります。このファイル (SOAPResolution.war) は、この記事の「ダウンロード」セクションに含まれるダウンロードの一部として提供されています。

      このステップは、Mozilla の XForms アドオンが現状では有効な SOAP 呼び出しを行わないことを単にカバーしているにすぎません。このステップは、この欠陥が Mozilla XForms アドオンの今後のリリースで修正されれば必要なくなります。この記事の執筆時点では、Firefox Xforms Version 0.7.0.1 を使った Web サービス呼び出しには SOAPAction ヘッダーがありませんでした。SOAPForwarding サーブレットは単に、この必要な SOAPAction ヘッダーを追加します。

      1. XformEAR を右クリックし、Import > war file を選択します。
      2. ファイル・システムをブラウズし、提供された SOAPResolution.war ファイルを選択します。Web プロジェクトの名前 (Web project) は、下記のように自動的に入力されるはずです。これが既存の XFormEAR プロジェクトに追加されていることを確認します。

図 7. SOAPResolution WAR

  1. Finish をクリックしてサーブレットをインポートします。
  1. RAD に組み込みの Web サービス・エクスプローラーを使って Web サービスをテストする
    1. これでアプリケーションを正常にデプロイして起動できたので、今度はデプロイされたサービスをテストします。
    2. RAD の中で、生成された FormServices.wsdl を右クリックし、Test with Web services explorer を選択します。
  1. 図のように、正しいポート番号を使ってエンドポイントを指定し、*AsString. で終わるすべてのメソッドを試します。この例では、*AsString で終わり、エスケープされた文字列として XML を返すメソッドが 3 つあります。大部分のブラウザーは、エスケープされた文字列 (「<」ではなく <) として XML を要求します。しかし XForms では真の XML 値を要求します。他の (*AsString を持たない) 3 つのメソッドは、*AsString を持つメソッドと機能的には等価ですが、真の XML データを返します。

図 8. Web サービス・エクスプローラーを使って *AsString サービスをテストする

  1. XForms を使って XML Web サービスをテストする
    1. デモと一緒に提供されている XForms を起動します。

      提供されている xmlcustomer.xhtml ファイルを右クリックし、Open with Firefox を選択します。このステップは前提として、この記事の「前提条件」セクションで指定した通りに XForms プラグインをインストールしてあるものとしています。下記のスクリーン・チャプチャーに示すような XForms が表示されるはずです。

    2. 必ず、一意の「Id Val」を指定し、また必要に応じて名前その他を入力、あるいは変更します。
    3. xmlcustomer フォームを使って Id Val フィールドに一意の ID を指定し、そしてSubmit を押します。

      指定された Id Val は、DB2 の XMLCUSTOMER 表の CID 列に対して一意でなければなりません。

    4. Submit を押すと、XForms は insertFormData サービスに対して Web サービス呼び出しを行い、フォームのユーザー・データを XML インスタンスとして DB2 に挿入します。

      もしエラーが発生した場合、あるいは何も起こらない場合には、考えられる原因と助言を「トラブルシューティングのヒント」セクションにあげましたので、それを参照してください。

トラブルシューティングのヒント

XForms:

「Submit」を押しても何も起こらない場合には、

  • Firefox で Tools > Java script console に進み、スタイルシート・エラーのほかにエラーがないかどうかを調べます。
  • XForms Error (14): Security check failed! Trying to submit data to a different domain than document (セキュリティー・チェックに失敗しました。文書と異なるドメインにデータを送信しようとしました) というエラーが表示された場合。

    Mozilla の XForms 拡張機能は、デフォルトではクロス・ドメインの送信を許可しません。この詳細については、次のURL をチェックしてください。クロス・ドメインの送信を有効にするには、「hostperm.1」というファイルを見つけ、そのファイルに"host xforms-xd 3 scheme:file"という行を追加します。(他にも、これに似た行があるはずです。) 私の場合、hostperm.1 は C:\Documents and Settings\Administrator\Application Data\Mozilla\Firefox\Profiles\m6g6ho0d.default ディレクトリーの下にありましたが、皆さんの場合はパスが異なるかもしれません。次にブラウザーを再起動します。

WebSphere Application Server:

もし XForm.war アプリケーションが起動しない場合には、システム・ログをチェックします。Microsoft® Windows システムでは、デフォルトの場所は C:\Program Files\IBM\SDP70\runtimes\base_v61\profiles\AppSrv01\logs\server1 です。

高度なトラブルシューティング:

自分が今、サーバーの問題に対処しているのかクライアントの問題に対処しているのかを適切に判断するためには、xform から WebSphere Application Server に対してネットワーク上に送信されている内容を調べます。これは https://tcpmon.dev.java.net/ などの TCP モニターを使って行うことができます。

XForms の送信アクションを TCP モニターが実行している新しいポート番号にリダイレクトし、TCP モニターが受信メッセージをサーバーに送信するようにします。

例えば、

サーバーが localhost:9081 を指すようにし、TCP モニターを localhost:8080 で実行します。そして、提供されているサンプルの xform にあるすべての localhost:9081 を localhost:8080 に変更します。こうすることで、すべての送信は TCP モニターを通して送信され、また TCP モニターは何が送信されているかを表示するようになります。

ファイアウォールが、どの通信もブロックしていないことを確認します。


図 9. xform を使って挿入サービスをテストする

  1. もしエラーがなければ、取得フォームが表示されるはずです。挿入の際に指定した ID と同じ ID を指定し、Retrieve を押します。
  2. この場合は、xform はretrieveFormData サービスに対して Web サービス呼び出しを行い、DB2 からユーザー・データを XML インスタンスとして取得し、それを xform にマップします。



図 10. xform を使って取得サービスをテストする








上に戻る


まとめ

ここでは、DB2 pureXML の XML データ用の Web サービスをボトムアップで生成する方法を見てきました。このサービスは、SOAP over HTTP による Web サービスによって、XML データを DB2 9 に保管することができ、また DB2 9 から XML データを取得することができます。また、エスケープされた文字列として、あるいは実際の XML として、ネットワーク上で XML を挿入、取得することができます。そして Java ソースを変更することで特定の要求に合わせることができ、これらのメソッドはどれも Web サービスとして公開することができます。こうして公開された Web サービスは任意のクライアントに対するエンドポイントとして動作し、SOAP over HTTP による呼び出しを行うことでデータベースからデータを取得でき、またデータベースにデータを保管することができます。

謝辞

この記事に関して助力くださり、またレビューしてくださった Michael Schenker と Keith Wells、Jan Kratky、Cindy Saracco、Sal Ledezma、そして Matthias Nicola の各氏に感謝いたします。







上に戻る


ダウンロード

内容ファイル名サイズダウンロード形式
Sample java code and Xformjavaxformsample.zip10KBHTTP
ダウンロード形式について


参考文献

学ぶために

製品や技術を入手するために
  • DB2 Express-Cをダウンロードしてください。無料でビルドでき、デプロイでき、配布でき、その他あらゆることができます。

  • DB2 Enterprise 9の無料の試用版をダウンロードしてください。

  • IBM 製品の評価版をダウンロード し、DB2 や Lotus®、Rational®、Tivoli®、WebSphere® などのアプリケーション開発ツールやミドルウェア製品を実際に試してみてください。


議論するために


著者について

V. Bommireddipalli photo

Vijay Bommireddipalli はカリフォルニア州サンノゼにある IBM の Silicon Valley Lab の Data Servers Solutions チームに所属し、クライアントやパートナーが DB2 でソリューションを開発するための支援を行っています。このチームに異動する前は Warehouse Manager 開発チームの開発者でした。彼はマサチューセッツ大学ダートマス校 (University of Massachusetts - Dartmouth) で電子及びコンピューター工学の修士課程を修了後、 2000年7月に IBM に入社しました。




記事の評価


サイト改善のため、ご意見をお寄せください。こちらのフォームからお願いいたします。



 


 


不充分・不完全である大変素晴らしい
 


この記事を共有する

del.icio.us del.icio.us newsing newsing FC2ブックマーク FC2ブックマーク
Choix! Choix! ニフティクリップ ニフティクリップ Yahoo!ブックマーク Yahoo!ブックマーク
MM/memo MM/memo CZブックマーク CZブックマーク livedoorクリップ livedoorクリップ
はてなブックマーク はてなブックマーク Buzzurl(バザール) Buzzurl(バザール)




上に戻る


    日本IBMについて プライバシー お問い合わせ