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」を参照してください (この記事へのリンクは、「参考文献」を参照)。
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 |
| INFO | XML | 顧客に関する個人情報が保管されるレコード |
| COMMENT | VARCHAR(256) | 顧客を特定するための短いテキスト |
前提条件のインストールと表の作成が完了したところで、特定の pureXML 列を対象とした JSON Universal Services の構成およびインストール手順に取り掛かります。
JSON Universal Services のインストール
このセクションでは、JSON Universal Services パッケージをダウンロードしてローカルの一時作業ディレクトリーに解凍してあることを前提とします。この記事で使用する JSON Universal Services のローカル一時作業ディレクトリーは、C:\temp\JSONUniversalServices です。図 1 に、パッケージに含まれるディレクトリーおよびファイルを示します。
図 1. 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 をテストする
この Web サービスの構成は、ダウンロードに付属の configure.bat というスクリプト (Linux® を使用している場合は、configure.sh) によって行われます。このスクリプトは JSONx バンドルと連動するように変更されているため、JSONx バンドルを変更した場合、または別のデータベースを使うことにした場合には、それに応じて configure.bat スクリプトを変更してから実行してください。ローカル・システムの設定に合わせて、一部のパラメーターを調整しなければならない場合もあります。表 2 に、この構成スクリプトで使用するパラメーターを記載します。
表 2. 構成スクリプトで使用するパラメーターの概要
| パラメーター名 | 説明 | 値 (サンプル・データベースに準拠) |
|---|---|---|
| DB2INSTALLDIR | DB2 システムのディレクトリー・パス | C:\Program Files\IBM\SQLLIB |
| DBSCHEMA | XML 列を含む表が属するデータベース・スキーマの名前 | JSONXMLADMIN |
| DBNAME | Universal Services と共に使用するデータベースの名前 | JSONSMPL |
| DBTABLE | XML 列が含まれる表の名前 | 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 (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 が正常にセットアップおよび構成されていることを確実にするためには、これらのサービスをテストする必要があります。最も簡単なテストの方法は、単純な 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 テスト・ページ
この単純なテスト・ページでは、データベースに JSONx として保管された JSON データに対して挿入、更新、削除、照会などの操作を実行することができます。これらの Web サービスは、テスト・ページに提供されているボタンによって呼び出されます。図 4 に、テスト・ページのボタンによって getPrimaryKeys 操作を呼び出した後の Web サービスのレスポンスを示します。
図 4. Web サービス操作 getPrimaryKeys の呼び出しに対するレスポンス
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 クエリーなどの他のサービスも用意されています。詳細については、次のセクションとテスト・ページに提供されている説明を読んでください。
このセクションの表 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 | レスポンス |
|---|---|---|---|---|---|
| getDocumentByKey | id | id:クエリー・ストリングに URL エンコードされたパラメーターと値 | id:メッセージに URL エンコードされたパラメーターと値 | id: クエリー・ストリングに URL エンコードされたパラメーターと値 | JSON 文書 (テキスト/プレーン) |
| getXMLDocumentByKey | id | id:クエリー・ストリングに URL エンコードされたパラメーターと値 | id:メッセージに URL エンコードされたパラメーターと値 | id:クエリー・ストリングに URL エンコードされたパラメーターと値 | JSONx 表現の文書 (テキスト/XML) |
| insert |
id(一意) doc (JSON 文書) |
id: クエリー・ストリングに URL エンコードされたパラメーターと値 doc: クエリー・ストリングに URL エンコードされたパラメーターと値 |
id:メッセージに URL エンコードされたパラメーターと値 doc:メッセージに URL エンコードされたパラメーターと値 |
id:クエリー・ストリングに URL エンコードされたパラメーターと値 doc:POST メッセージの内容 | 更新カウント (テキスト/プレーン) |
| update |
id doc (JSON 文書) |
id:クエリー・ストリングに URL エンコードされたパラメーターと値 doc:クエリー・ストリングに URL エンコードされたパラメーターと値 |
id:メッセージに URL エンコードされたパラメーターと値 doc:メッセージに URL エンコードされたパラメーターと値 |
id:クエリー・ストリングに URL エンコードされたパラメーターと値 doc:POST メッセージの内容 | 更新カウント (テキスト/プレーン) |
| delete | id | id:クエリー・ストリングに URL エンコードされたパラメーターと値 | id:メッセージに URL エンコードされたパラメーターと値 | id:クエリー・ストリングに URL エンコードされたパラメーターと値 | 更新カウント (テキスト/プレーン) |
| runXMLQuery |
query (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 package | JSONUniversal Services.zip | 3692KB | HTTP |
学ぶために
- 「Data Web Services を使用した pureXML のための Universal Services」(Susan Malaika、Christian Pichler 共著、developerWorks、2008年8月): pureXML 対応の Universal Services についての詳細を調べてください。
- 「pureXML 対応 JSON アプリケーションを構築する: 第 1 回 DB2 pureXML による JSON の保管とクエリー」(Nuno Job、Susan Malaika、Michael Schenker 共著、developerWorks、2009年10月): この連載の第 1 回目の記事を読んで、JSON オブジェクトを保持してセッション間で状態を維持するメリットを活用してください。DB2 pureXML と単純な JSON と XML のマッピングによって、JSON の保管、管理、そしてクエリーを実行できるようになります (3 回連載の第 1 回)。
- 「pureXML と JSON に対応したアプリケーションを構築する: 第 3 回 pureXML 対応の OpenSocial ガジェットの作成」(Han Nguyen、Andy B Smith、Mark D Weitzel 共著、developerWorks、2009年11月): SON Universal Services と対話できるように、OpenSocial ガジェットを定義し、デプロイして、テストします (3 回連載の第 3 回)。
- 「IBM Data Studio: Get Started with Data Web Services」(Michael L. Pauser 著、developerWorks、2007年11月): 初めて Data Web Service を開発する人のために、その方法を極めて詳細かつわかりやすく紹介しています。
- Industry Formats and Services with pureXML: 多彩に揃ったサンプルを無料でダウンロードしてください。それぞれのサンプルによって XML ベースの Industry Formats と pureXML を操作する方法がわかります。XML スキーマの登録方法、XML インスタンス文書の検証方法、XQuery または SQL/XML を使用した XML データのクエリー方法を紹介するサンプルもあります。
- 「Data Web Services: Build Web Services the new way to access IBM database servers」(Vijay Bommireddipalli 著、developerWorks、2007年12月): Data Web Service の作成およびカスタマイズを行ってください。この記事では Data Web Services のアーキテクチャー概要を含め、Data Web Services の理解に役立つ理論的背景を説明しています。また、セキュリティーをはじめとした Data Web Services のさまざまな側面についても取り上げています。
- 「Using industry standard data formats with WebSphere ESB and DB2 Version 9 pureXML」(Mohab El-Hilaly、Andre Tost、Alaa Youssef 共著、developerWorks、2007年6月): この記事では、製薬会社がその法的義務を履行するために WebSphere Enterprise Service Bus および DB2 9 pureXML を利用するというシナリオを説明しています。
- IBM XML 認定: XML や関連技術の IBM 認定技術者になる方法について調べてください。
- XML Technical library: 広範な技術に関する記事とヒント、チュートリアル、標準、そして IBM Redbooks については、developerWorks XML ゾーンを参照してください。
- developerWorks の Technical events and webcasts: これらのセッションで最新情報を入手してください。
- developerWorks podcasts: ソフトウェア開発者向けの興味深いインタビューとディスカッションを聞いてください。
製品や技術を入手するために
- DB2 Express-C: DB2 データ・サーバーの無料コミュニティー・エディションをダウンロードしてください。
- IBM 製品の評価版: DB2®、Lotus®、Rational®、Tivoli®、および WebSphere® のアプリケーション開発ツールとミドルウェア製品を体験するには、評価版をダウンロードするか、IBM SOA Sandbox のオンライン試用版を試してみてください。
議論するために
- ディスカッション・フォーラムに参加してください。
- XML ゾーンのディスカッション・フォーラム: XML 関連のフォーラムに参加してください。
- developerWorks blogs: developerWorks blogs から developerWorks コミュニティーに加わってください。

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

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

Michael 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 技術には今でも興味を持っています。