pureXML と JSON に対応したアプリケーションを構築する: 第 2 回 JSON を公開する pureXML 対応の Universal Services を作成する

JSONx ストアで JSON Universal Services を構成、デプロイ、テストする

pureXML® Universal Services for JSON (この記事では以降、JSON Universal Services とします) は、挿入、更新、削除、照会をはじめとするデータベース操作の一式であり、Web サービスとして公開されます。アプリケーションはこれらのサービスを利用することにより、JSON を pureXML で永続化し、その JSON に対してクエリーを実行することが WebSphere® Application Server と HTTP を介して容易に行えるようになります。この記事で説明する手順に従って、JSON Universal Services を構成し、テストしてください。

Faton (Tony) Avdiu, CoOp: DB2 Technical Enablement Specialist, IBM  

Photo of Faton (Tony) AvdiuFaton (Tony) Avdiu は、コンピューター・エンジニアリングの専攻で大学を卒業した DB2 pureXML イネーブルメントの協力スタッフで、現在 Pace University で情報システムの修士号の取得を目指しています。IBM では、DB2 に XML を保管するための技術に取り組んでいます。



Susan Malaika, Senior Technical Staff Member, IBM

Photo of Susan MalaikaSusan Malaika は、IBM Information Management Group (IBM Software Group の一部) のシニア・テクニカル・スタッフです。専門分野は XML、Web、データベースで、Global Grid Forum ではグリッド環境でデータをサポートする標準を開発しました。IBM 製品のソフトウェア・エンジニアとして働くかたわら、インターネット・スペシャリスト、データ・アナリスト、アプリケーション設計者兼開発者としても活躍しています。Web に関する共著作があり、トランザクション処理と XML を取り上げた記事も発表しています。彼女は IBM Academy of Technology の一員でもあります。



Michael Schenker, IBM DB2 for z/OS Optimizer Software Engineer, IBM

Author Photo: Michael SchenkerMichael Schenker は、ドイツの Leipzig University of Applied Science でコンピューター・サイエンスの修士号を取得しました。IBM に入社してから 7 年を数えます。研修生として非リレーショナル・ラッパーを重点とした DB2 情報統合に携わって以来、数々のデータベース関連の製品に取り組んできました。IBM の正社員となったのは 2003年の終わりです。2006年にはデータベース・ツール組織に加わり、IBM Data Studio Developer の DB2 Web サービス・プロバイダー機能を担当しました。SOA および Web 技術における彼の豊富な専門知識は、この間に培ったものです。最近になって、彼は DB2 for z/OS オプティマイザー・チームの一員となりましたが、DB2 内外の SOA と Web 技術には今でも興味を持っています。



2010年 4月 27日 (初版 2009年 10月 27日)

2009年 11月 03日 – 著者により、「JSON Universal Services 操作の詳細」セクションが追加されました。同セクションには、JSON Universal Services での操作に関連するパラメーター、エンコード方式、MIME タイプを説明する表 3 が記載されています。

2010年 4月 27日 – 著者によりダウンロード・ファイル jsonx.zip が、更新された新しいファイルに置き換えられました (「ダウンロード」を参照)。更新内容には以下の変更が含まれます。

文書内にマルチバイト文字が見つかった場合に xml2json() 関数で OutOfMemory 例外が発生しないようにしました。

文書内で CLOB の中にマルチバイト文字が見つかった場合に、xml2json() 関数によってそれ以降の文字が削除されないようにしました。

xml2json() 関数の出力フォーマットを定義するオプションのプロパティー・ファイルをサポートしました。

はじめに

この記事は、JavaScript または OpenSocial ガジェットを使用した 3 階層の pureXML アプリケーションを構築する方法を説明する 3 回連載の第 2 回目です。今回の記事で説明する手順に従うことで、連載第 1 回で説明した JSON データを、JSON Universal Services を介して公開できるようになります。

JSONx は、JSON に基づく XML 表現であり、JSON とは可逆的な関係にあります。JSONx により、XML をサポートするデバイスとソフトウェアは JSON を操作することが可能になります。連載の第 1 回目の記事ではこの JSONx を紹介し、JSONx を pureXML データベースに保管する方法を説明しました。pureXML は、SQL/XML、XQuery、XPath などの言語を使用して、XML を保管したり、XML に対して索引付けやクエリーを実行したりできるようにする機能です。

pureXML 対応の Universal Services は単純ながらも、DB2® データベースの pureXML 列に保管された XML に対してクエリーや変更を行えるようにしてくれる、データベース操作の確固たるセットです。挿入、更新、削除、照会を含めたこれらのデータベース操作は、Web Services として公開され、クライアントに対してはデータを XML として返します。Universal Services を使用可能にするには、単純な構成およびデプロイメント手順に従えばよいだけです。Universal Services についての詳細は、developerWorks の記事「Data Web Services を使用した pureXML のための Universal Services」を参照してください (この記事へのリンクは、「参考文献」を参照)。

よく使われる頭字語

  • HTML: HyperText Markup Language
  • HTTP: HyperText Transfer Protocol
  • JSON: JavaScript Object Notation
  • SOA: Service Oriented Architecture
  • URL: Uniform Resource Locator
  • WAR: Web ARchive ファイル
  • XML: Extensible Markup Language

JSON Universal Services は Universal Services と似ていますが、これらのサービスが処理対象とするのは pureXML 列に保管された JSONx データです。また、前述のとおりデータベース操作には挿入、更新、削除、照会が含まれますが、クライアントにはデータが XML ではなく、JSON として返されます。

JSON Universal Services を使用することで、JavaScript (およびその他の) クライアント・アプリケーションは、XML ストアを使用して JSON を永続化しているということをまったく認識しなくなります。また、DB2 のネイティブ XML 機能を利用して、永続化された JSON オブジェクトを扱うことができるため、XPath などの宣言型言語を使ってデータを表示、照会、操作することができ、開発時間が大幅に短縮されます。

この記事では、連載第 1 回目の「pureXML と JSON に対応したアプリケーションを構築する: 第 1 回 DB2 pureXML による JSON の保管とクエリー」(「参考文献」にリンクを記載) で説明した DB2 サンプル・データベースを基に、JSON Universal Services を JSONx ストアで構成、デプロイ、そしてテストする手順を説明します。

この手順のより詳しい説明が必要な場合は、JSON Universal Services ダウンロード・パッケージの README.pdf ドキュメントにステップ・バイ・ステップの完全な手順が説明されているので、そちらを参照してください (このダウンロード・パッケージを解凍すると、JSONUniversalServices ディレクトリーに README.pdf が含まれています)。

前提条件

JSON Universal Services をインストールする前に、連載第 1 回目の記事で説明したインストールを完了させる必要があります。JSONx バンドルを実行してデータベースを作成し、DB2 に必要な Java™ ユーザー定義関数 (UDF) を登録してください。これらの UDF によって、JSON から JSONx への変換、およびその逆の変換が可能になります。また、お使いのシステムに DB2 9.5 または 9.7、Java Runtime Environment 1.5.0、および Web サーバー (例えば WebSphere Application Server V6.x または Apache Tomcat V6.x) がインストールされていることも必要です。Java Runtime は DB2 システムの一部であることに注意してください。これらの製品がまだインストールされていない場合は第 1 回の記事を読んでください。第 1 回の記事へのリンクは、「参考文献」に記載されています。

連載第 1 回目の記事で、CUSTOMER 表を作成しました。これからこの表を使用して、JSON Universal Services をインストールした後、テストを行います。表 1 に、CUSTOMER 表の概要を示します。

表 1. JSONXMLADMIN.CUSTOMER 表の概要
列名データ型説明
CID INTEGER 顧客 ID
INFOXML 顧客に関する個人情報が保管されるレコード
COMMENTVARCHAR(256)顧客を特定するための短いテキスト

前提条件のインストールと表の作成が完了したところで、特定の pureXML 列を対象とした JSON Universal Services の構成およびインストール手順に取り掛かります。


JSON Universal Services のインストール

このセクションでは、JSON Universal Services パッケージをダウンロードしてローカルの一時作業ディレクトリーに解凍してあることを前提とします。この記事で使用する JSON Universal Services のローカル一時作業ディレクトリーは、C:\temp\JSONUniversalServices です。図 1 に、パッケージに含まれるディレクトリーおよびファイルを示します。

図 1. JSON Universal Services ダウンロード・パッケージの内容
解凍された JSON Universal Services パッケージに含まれるディレクトリーおよびファイルのスクリーン・キャプチャー

ディレクトリーには classes、services、および war の 3 つがあります。ファイルは、configure.bat、configure.sh、README.pdf の 3 つです。

必要なファイルとスクリプトがシステムで使用できるようになったら、JSON Universal Services のインストール作業に進みます。この作業は基本的に、以下の 3 つのステップからなります。

  • ローカル・システムの設定に合わせて JSON Universal Services を構成する
  • JSON Universal Services をアプリケーション・サーバーにデプロイする
  • JSON Universal Services をテストする

JSON Universal Services を構成する

この Web サービスの構成は、ダウンロードに付属の configure.bat というスクリプト (Linux® を使用している場合は、configure.sh) によって行われます。このスクリプトは JSONx バンドルと連動するように変更されているため、JSONx バンドルを変更した場合、または別のデータベースを使うことにした場合には、それに応じて configure.bat スクリプトを変更してから実行してください。ローカル・システムの設定に合わせて、一部のパラメーターを調整しなければならない場合もあります。表 2 に、この構成スクリプトで使用するパラメーターを記載します。

表 2. 構成スクリプトで使用するパラメーターの概要
パラメーター名説明値 (サンプル・データベースに準拠)
DB2INSTALLDIRDB2 システムのディレクトリー・パスC:\Program Files\IBM\SQLLIB
DBSCHEMAXML 列を含む表が属するデータベース・スキーマの名前JSONXMLADMIN
DBNAME Universal Services と共に使用するデータベースの名前JSONSMPL
DBTABLEXML 列が含まれる表の名前CUSTOMER
DBPRIMARY DBTABLE に指定された表の主キーが設定された列の名前。この列の型は INTEGER または VARCHAR のいずれかになります。CID
DBCOMMENT DBTABLE に指定された表のコメント列の名前COMMENT
DBXML DBTABLE に指定された表の XML 列の名前。この列には、XML データが含まれます。INFO

表 2 に記載した 3 つのパラメーター、DBPRIMARY、DBCOMMENT、DBXML の値が、表 1 と同じ列名となっていることに注意してください。

図 2 に、表 2 に記載した値に従って編集した後の構成ファイルを示します (図 2 のテキスト版を表示するには、ここをクリックしてください)。

図 2. 編集後の構成ファイル configure.bat
編集後の configure.bat ファイルのスクリーン・キャプチャー

configure.bat (Linux を使用している場合は configure.sh) を適切なパラメーターに編集した後は、このスクリプトを実行することによって JSON Universal Services を構成することができます。スクリプトは、JSON Universal Services Web アプリケーションに必要なすべてのファイルが含まれる WAR (Web Application Archive) ファイルを作成するので、アプリケーション・サーバーにはこのファイルをデプロイすることができます。注意する点として、スクリプトは DB2 コマンド行プロセッサーで実行してください。そうでないと、スクリプトの実行に失敗します。

JSON Universal Services をデプロイする

前のセクションの説明に従って configure.bat スクリプトを編集し、実行した結果、WAR ファイルが作成されています。今度はこの WAR ファイルをアプリケーション・サーバーにデプロイします。WAR ファイルをアプリケーション・サーバーにデプロイする前に必要な作業として、アプリケーション・サーバー上にデータ・ソースを構成してください。これによって、Universal Services が DB2 データベースにアクセスできるようになります。

データ・ソースをセットアップするには、アプリケーション・サーバーの標準構成プロセスに従ってください。セットアップする際に唯一考慮しなければならないことは、データ・ソースの名前です。この名前は、jdbc/[データベース名] というパターンになっていなければなりません。この記事の例で使用するデータ・ソース名は、jdbc/jsonsmpl です。データ・ソースのセットアップ方法に関する詳細は、お使いのアプリケーション・サーバーのマニュアルを参照するか、JSON Universal Services ダウンロード・パッケージの JSONUniversalServices ディレクトリーに含まれる README.pdf ドキュメントを読んでください。

次のステップは、実際の WAR ファイルをアプリケーション・サーバーにデプロイすることです。ただし、WebSphere Application Server V6.x と Apache Tomcat V6.x に必要な Web サービス成果物には違いがあるため、構成スクリプトは 2 つの WAR ファイルを作成します。つまり、アプリケーション・サーバーごとに固有の WAR ファイルがあるということです。

これらの WAR ファイルは、JSON Universal Services の作業ディレクトリーである C:\temp\JSONUniversalServices のなかの war サブディレクトリーにあります。詳細に説明すると、war ディレクトリーには tomcat と was という 2 つのサブディレクトリーがあり、tomcat ディレクトリーには Apache Tomcat V6.x にインストールする WAR ファイルがあり、was ディレクトリーには WebSphere Application Server V6.x にインストールする WAR ファイルがあります。WAR ファイルをアプリケーション・サーバーにインストールするには、標準の手順に従います。詳細な手順については、アプリケーション・サーバーのマニュアルを参照するか、JSON Universal Services ダウンロード・パッケージに含まれている README.pdf ドキュメントを読んでください。

これで、セットアップした Web サービスをテストする準備が整いました。テストに使用する JSON Universal Services テスト・ページはすでに、WAR ファイルをデプロイしたことによって利用可能になっています。


JSON Universal Services のテスト

ローカル・システムで JSON Universal Services が正常にセットアップおよび構成されていることを確実にするためには、これらのサービスをテストする必要があります。最も簡単なテストの方法は、単純な HTML ページを使用する方法です。この HTML ページはすでに JSON Universal Services のデプロイメントの一部としてアプリケーション・サーバーに用意されています。

JSON Universal Services テスト・ページにアクセスするには、ブラウザーで http://localhost:8080/JSONUniversalServices/testServices.html という URL のページを表示します。WAR ファイルを Apache Tomcat にインストールした場合はポート 8080 を使用しますが、WebSphere Application Server を使用している場合は、ポート 9080 を使用してページにアクセスする必要があります。このように、ローカル・システムに応じたホスト名またはポート番号を指定する必要があることに注意してください。テスト・ページにアクセスすると、図 3 のページが表示されます。

図 3. JSON Universal Services テスト・ページ
JSON Universal Services テスト・ページのスクリーン・キャプチャー

この単純なテスト・ページでは、データベースに JSONx として保管された JSON データに対して挿入、更新、削除、照会などの操作を実行することができます。これらの Web サービスは、テスト・ページに提供されているボタンによって呼び出されます。図 4 に、テスト・ページのボタンによって getPrimaryKeys 操作を呼び出した後の Web サービスのレスポンスを示します。

図 4. Web サービス操作 getPrimaryKeys の呼び出しに対するレスポンス
JSON Universal Services テスト・ページのスクリーン・キャプチャー

JSON 文書は変換され、XML 文書として列に挿入されています。列に挿入された文書は、JSON フォーマットでも、XML フォーマットでも取得することができます。

例えば getJSONDocumentByKey メソッドを呼び出すと、JSON 表現の文書を取得することになります。

リスト 1. JSON フォーマットでの Kathy Smith の顧客情報
{
  "customerinfo" : {
    "cid" : 1000 ,
    "name" : "Kathy Smith" ,
    "addr" : {
      "country"    : "Canada" ,
      "street"     : "5 Rosewood" ,
      "city"       : "Toronto" ,
      "prov-state" : "Ontario" ,
      "pcode-zip"  : "M6W 1E6"
    } ,
    "phone" : {
      "work" : "416-555-1358"
    }
  }
}

一方、getXMLDocumentByKey メソッドを呼び出すと、DB2 pureXML データベースに保管されている形のままの XML 文書 (JSONx フォーマット) を取得することができます。

リスト 2. JSONx フォーマットでの Kathy Smith の顧客情報
<json:object xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx">
  <json:object name="customerinfo">
	<json:number name="cid">1000</json:number>
	<json:string name="name">Kathy Smith</json:string>
	<json:object name="addr">
	  <json:string name="country">Canada</json:string>
	  <json:string name="street">5 Rosewood</json:string>
	  <json:string name="city">Toronto</json:string>
	  <json:string name="prov-state">Ontario</json:string>
	  <json:string name="pcode-zip">M6W 1E6</json:string>
	</json:object>
	<json:object name="phone">
	  <json:string name="work">416-555-1358</json:string>
	</json:object>
  </json:object>
</json:object>

このページにはさらに、挿入、更新、削除、XML クエリーなどの他のサービスも用意されています。詳細については、次のセクションとテスト・ページに提供されている説明を読んでください。

JSON Universal Services 操作の詳細

このセクションの表 3 には、JSON Universal Services での操作に関連するパラメーターとそのエンコード方式、および MIME タイプを記載します。これらの操作を行うには、HTTP GET、または MIME タイプが URL エンコードあるいはプレーン・テキストの HTTP POST を使用します。

  • getDocumentByKey および getXMLDocumentByKey 操作では、ID を指定し、これに対応する保管されたデータをそれぞれ JSON フォーマット、XML フォーマットで取得することができます。
  • insert および update 操作では、挿入または更新する JSON 文書の ID、および新規文書を指定することができます。リクエストが成功すると、更新カウント 1 を受け取ります。成功しなかった場合は、更新カウント 0 を受け取ります。
  • delete 操作では、pureXML ストアから削除する文書の ID を指定することができます。削除リクエストが成功すると、更新カウント 1 を受け取ります。成功しなかった場合は、更新カウント 0 を受け取ります。
  • runXMLQuery 操作では、XQuery、または XMLQUERY (SQL/XML の一部) への入力を指定し、保管された多数の文書を範囲として XML コンテンツを取得することができます。これらの操作の例については、テスト・ページを参照してください。
表 3. JSON Universal Services 操作の概要
操作入力パラメーターHTTP GET HTTP POST MIME_TYPE application/x-www-form-urlencoded HTTP POST MIME-TYPE text/plain, application/jsonレスポンス
getDocumentByKeyidid:クエリー・ストリングに URL エンコードされたパラメーターと値id:メッセージに URL エンコードされたパラメーターと値id: クエリー・ストリングに URL エンコードされたパラメーターと値JSON 文書 (テキスト/プレーン)
getXMLDocumentByKeyidid:クエリー・ストリングに URL エンコードされたパラメーターと値id:メッセージに URL エンコードされたパラメーターと値id:クエリー・ストリングに URL エンコードされたパラメーターと値JSONx 表現の文書 (テキスト/XML)
insertid(一意)
doc (JSON 文書)
id: クエリー・ストリングに URL エンコードされたパラメーターと値
doc: クエリー・ストリングに URL エンコードされたパラメーターと値
id:メッセージに URL エンコードされたパラメーターと値
doc:メッセージに URL エンコードされたパラメーターと値
id:クエリー・ストリングに URL エンコードされたパラメーターと値
doc:POST メッセージの内容
更新カウント (テキスト/プレーン)
updateid
doc (JSON 文書)
id:クエリー・ストリングに URL エンコードされたパラメーターと値
doc:クエリー・ストリングに URL エンコードされたパラメーターと値
id:メッセージに URL エンコードされたパラメーターと値
doc:メッセージに URL エンコードされたパラメーターと値
id:クエリー・ストリングに URL エンコードされたパラメーターと値
doc:POST メッセージの内容
更新カウント (テキスト/プレーン)
deleteidid:クエリー・ストリングに URL エンコードされたパラメーターと値id:メッセージに URL エンコードされたパラメーターと値id:クエリー・ストリングに URL エンコードされたパラメーターと値更新カウント (テキスト/プレーン)
runXMLQueryquery
(XQuery、または XMLQUERY への入力)
query:クエリー・ストリングに URL エンコードされたパラメーターと値query:メッセージに URL エンコードされたパラメーターと値query:POST メッセージの内容結果が含まれる XML 文書 (テキスト/XML)

まとめ

この記事では JSON Universal Services の紹介として、DB2 サンプル・データベースをベースとした JSONx ストアに JSON Universal Services を構成、デプロイ、そしてテストする手順を説明しました。

この連載の第 1 回目で焦点としたのは、JSON を XML として DB2 pureXML データベースに保管できるようにする新しいフォーマット、JSONx の紹介です。また、典型的な JSON の使用ケースを説明し、pureXML を使用して JSON を保管することの利点についても概要を述べました。

連載の次回の記事では、JSONx Universal Services をバックエンドとして使用する Open-Social Gadgets でプレゼンテーション層を作成する方法に焦点を当てます。


ダウンロード

内容ファイル名サイズ
JSON Universal Services packageJSONUniversal Services.zip3692KB

参考文献

学ぶために

製品や技術を入手するために

  • DB2 Express-C: DB2 データ・サーバーの無料コミュニティー・エディションをダウンロードしてください。
  • IBM 製品の評価版: DB2®、Lotus®、Rational®、Tivoli®、および WebSphere® のアプリケーション開発ツールとミドルウェア製品を体験するには、評価版をダウンロードするか、IBM SOA Sandbox のオンライン試用版を試してみてください。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML, Information Management, SOA and web services
ArticleID=448401
ArticleTitle=pureXML と JSON に対応したアプリケーションを構築する: 第 2 回 JSON を公開する pureXML 対応の Universal Services を作成する
publish-date=04272010