IBM Mashup Center は、データとサービスを迅速かつ容易に「マッシュアップ」して Web ページ上に情報を組み立てる手段を提供します。IBM Mashup Center の InfoSphere MashupHub に含まれるデフォルトのプラグインを通じて、様々なエンタープライズ・データが利用可能になります。しかし、固有の新しいデータ・ソースを活用したいケースもあります。InfoSphere MashupHub は、開発者やパートナーがデータとサービスの対象範囲を広げることができる拡張可能なプラグイン・モデルです。
この記事を十分に活用するには、IBM Mashup Center にある程度慣れており、かつJava および JSP の経験があることが必要です。IBM Mashup Center の詳細については、IBM Mashup Center Web ページ を参照ください。
この記事では、HelloWorld (hellodemo) サンプル・プラグインを取り上げ、これを調整して基本的な言語変換サービスを実装しながら、IBM Mashup Center の拡張に関する主な特徴について説明します。また、この記事では、長さが 500 バイトまでの軽量のテキスト変換に、Google が提供している変換サービスを利用します。変換サービスの詳細については、「Google AJAX Language API Developer's Guide」を参照してください。この記事では、このサービスを呼び出すために次の 3 つのパラメーターを使用します。
- 変換するテキスト
- ソース言語
- 変換後の言語
変換サービスは、結果を Javascript Object Notation (JSON) 形式で返します。InfoSphere MashupHub サンプル・プラグインは、これを Atom フィードに変換します。
InfoSphere MashupHub は、フィードの提供方法、プラグイン・メタデータへのアクセス方法、およびサーバー・サイドのプラグイン・インスタンスをそのクライアント・サイドの Javascript に接続するリンクを定義するプラグイン・インターフェースです。詳細な仕様については、インストール済み製品の <installation_path>\Hub\installedApps\Mashup Hub.ear\mashuphub-enterprise.war\client\doc\userdoc\MashupHubAPIRef.pdf を参照するか、IBM MashupHub API Referenceからオンラインでダウンロードしてください。
この記事ではプラグイン API についてはあまり詳しく説明しませんが、参考として、上記の仕様ファイルに含まれる関係モデルを図 1 に示します。
図 1. プラグイン API の関係 (参考)
多くの場合、プラグイン・モデルは、新しいタイプのフィード・データ・ソースをリストに追加するために使用されます。このリストは、ユーザーが新規フィードを作成するときに提供されるものです。新たにインストールされた IBM Mashup Center (図 2 参照) には、「Translation」というラベルの選択肢は含まれていません。そこで、そのような変換サービスをフィード・データ・ソースとして追加する方法をここで説明します。
図 2. 結果として得られる新規フィード・ソース・ダイアログ
概要として、プラグインは次の 2 つのタスクを処理する必要があります。
- フィードの作成: フィードを定義するコードです。
- フィードの生成: 呼び出されたときに、実際にデータと形式を生成するために必要なコードです。
まず、hellodemo サンプルを <installation_path>\Hub\installedApps\Mashup Hub.ear\mashuphubenterprise. war\client\doc\pluginsamples で見つけます。HelloWorld サンプルには、次のファイルが含まれていることがわかります。
- HelloViewBean.java
- HelloEditor.java
- HelloGenerator.java
- AtomGenerator.java
- hello.zip
InfoSphere MashupHub のどのプラグインにも 2 つの主要オペレーションがあります。1 つはフィードの作成で、もう 1 つはフィードの生成です。AtomGenerator.java と HelloGenerator.java はフィードの生成をインプリメントし、他のファイル (プラグイン全体のメタデータである package.xml を保存) はフィードの作成をインプリメントします。
hello.zip ファイルには特定のディレクトリー構造が必要で、hello.zip を <installation_path>\Hub\installedApps\Mashup Hub.ear\mashuphub-enterprise.war\WEB-INF\plugins にコピーし、Web アプリケーション・サーバーを再起動することによってデプロイされます。InfoSphere MashupHub 用のすべてのサード・パーティー・プラグインは、このディレクトリー構造を使用する必要があります。hello.zip ファイルには、次のファイルが含まれています。
- package.xml
- hello.jsp
- 上記の Java ソース・ファイルからコンパイルされた .class ファイル
- アイコン・ファイル
package.xml ファイルを調べることから始め、プラグイン・コードの実装へと進みましょう。
図 3. Hello サンプルの package.xml ファイル
package.xml ファイルの主な要素は次のとおりです。
- Name: ユーザーが「New Feed」を選択した後、オプションのリストで使用されます。
- Author: プラグインの作成者の名前。
- Version: このプラグインのバージョン番号。使用しているプラグインの最新のバージョンを知ることができます。
- Category: このプラグインをどのサブリストに表示するのかを指定します。現在有効なカテゴリーは departmental と enterprise です。
- Editor: プラグインのエディター・インターフェース用にロードするクラスを示します。
- Generator: プラグインのジェネレーター・インターフェース用にロードするクラスを示します。
- Description: このプラグインの要約です。
- アイコン・パスは、プラグインのアイコンのロード先を示します。
変換サービス用の package.xml ファイルの例を図 4 に示します。
図 4. 変換プラグイン用の package.xml ファイル
HelloEditor は、renderEditor のインプリメントを必要とする基本クラス BaseEditorPlugin を拡張します。これはフレームワークへの重要なフックで、フィードのインスタンスの作成およびカスタマイズに使用される任意の入力パラメーター用のユーザー・インターフェースの定義を可能にします。
今回のケースでは、フィードに含める単純なテキスト・ストリングを示す入力パラメーターが 1 つあります。しかし、ユーザーにプロンプトを表示するために、ViewBean をセットアップしてフォームに追加し、次にフレームに追加する必要があります。そして、ユーザー・インターフェースでの表示のために、これをフレームワークに渡します。ユーザー用の簡単なダイアログを構築するので、いくつかの標準的なラベルとタイトルも設定します。
ここで注意したいのは、「saveParam」というコールバック関数をフォームでセットアップしている点です。このコールバックにより、ユーザーが「送信」をクリックした後にユーザー入力を処理できます。このトピックについては、後でもう一度触れることにします。
図 5. Hello プラグイン内での renderEditor メソッドの定義
HelloViewBean.java のコードを図 6 に示します。
図 6. Hello プラグイン内で定義された HelloViewBean メソッド
ViewBean は、フレームワークが実際の入力フィールドをレンダリングするために使用する JSP ファイル (この例では、hello.jsp) へのパスを提供する役割を持ちます。また、ViewBean は JSP によって使用される追加データ (利用可能な選択肢の動的なリストなど) を渡すこともできます。ただし、この簡単な例では、これ以上のデータを渡す必要はありません。マルチ画面のウィザードのようなインターフェースで接尾辞を使用し、各画面に固有の ID を提供できます。残念ながら、この HelloWorld サンプルでは画面は 1 つしかないので、あまり説明にはなりません。
この記事では、2 つのコードについてのみ考察します。最初のコードは getJSPath メソッドで、2 番目は新しい名前を反映する suffix 属性です (これがより複雑なウィザードであるとして)。JSPPath は、エディター用に使用する JSP ファイルを示します。この JSP ファイルは、プラグインを作成するときに、HTML ユーザー・インターフェースを提供するファイルです。たとえば、「Hello World」ファイルのプラグインの JSP ファイルの最終結果を図 7 に示します。
図 7. Hello プラグインのエディター
変換ルーチンのために、このファイルに 2 つの変更だけを加えます。つまり、変換用に呼び出される JSP ファイルを反映するように、suffix と JSP ファイル名を変更します。
図 8. Translate プラグインでの ViewBean クラスの定義
この JSP ファイルは、図 9 に示したものよりも大幅に洗練することができますが、注意が必要な点もいくつかあります。このユーザー・インターフェースは、1 つのラベルと 2 つのフォーム・コントロール (チェック・ボックスとテキスト・ボックス) で構成される非常に基本的なものです。コントロールで使用された HTML ID (hellotext と prompt) は、処理のために saveParams メソッドに戻されます。チェック・ボックスは、フィードを実行するたびにユーザーに hellotext ストリングのプロンプトを示すかどうかを決めるために使用されます。
図 9. Hello プラグインでの Hello.jsp クラスの定義
変換サービスでは 3 つのパラメーターを使用するため、変換するテキスト用のテキスト・ボックスと、ユーザーがソース言語とターゲット言語を選択するための 2 つの選択リストをセットアップします。読者の方は、テキストを要求する部分にのみ関心を持つでしょう。このテキストは変換され、作成済みフィードとして後で使用されます。この点を留意して、変換サービス用の次の JSP ファイルを見ていきましょう。フォームの input が「transtext」、「languagein」、「languageout」という名前であることに注目してください。これらは、フォームを処理する際に参照されます。
サイド・ファイルに含まれる「リスト 1. Translate プラグインでの translate.jsp クラスの定義」を参照してください。
変換サービス用のエディターがどのように表示されるのかを図 10 に示します。
図 10. Translate プラグイン・エディター
このフィードのパラメーターは、後ほどジェネレーターで使用できるように保存する必要があります。ユーザーによる「送信」のクリック後、saveParam コールバック・メソッドを使用し、ユーザー入力を読み取って保存できます。では、もう一度 HelloEditor クラスに戻りましょう。Hello サンプルからの saveParam コールバックが単純なストリングを保存するコードを図 11 に示します。
図 11. Hello プラグイン内での saveParam メソッドの定義
入力は、RequestData オブジェクト (hello.jsp フォームでは「hellotext」という名前) を通じて取り込まれます。ユーザー入力をデフォルト値として設定し、パラメーター・オブジェクトが作成されます。パラメーター・オブジェクトのメソッドについては、製品に含まれる Java 文書に記載されています。このオブジェクトは、情報を保存するエントリー・オブジェクトに追加されます。また、フィード固有の URL も生成し、このフィードと URL を IBM InfoSphere Mashup に公開します。
HelloEditor クラスを基本クラスとする TranslateEditor クラスを見ていきましょう。renderEditor は、「Hello」参照をユーザー・インターフェース用の変換テキストに単に変更しているだけで驚くことはありません。saveParam メソッドの方が、パラメーターを追加するのでより複雑です。3 つのパラメーター「transtext」、「languagein」、「languageout」を追加します。これらのパラメーターは、この順番で JSP ファイルの入力に直接対応し、すべて非オプションのストリングとして扱われます。リスト 2 に示したように、transtext パラメーターのみ、値が入力されなかったときにプロンプトを表示するよう設計されています。各パラメーターのデフォルト値は、すべて変換 JSP ファイルからのユーザー入力に基づいています。各パラメーターについて、表示名とヘルプ・テキストの個々の設定を表 1 に示します。
表 1. Translate プラグインのパラメーター
| Parameter name | Display name | Help text |
| Transtext | Text to Translate | Enter text to Translate |
| Langaugein | Language In | Select language |
| Languageout | Language Out | Select language to translate |
サイド・ファイルに含まれる「リスト 2. Translate プラグインでの SaveParam メソッドの定義」を参照してください。
もちろん、3 つのパラメーターをエントリーに追加し、フィード・ソース固有の URL を生成し、フィード・ソースを InfoSphere MashupHub 内で公開する必要があります。これがどのような表示になり、ページ内のどこにテキストが表示されるのかを確認するために、結果画面のスナップショットを図 12 に示します。この図では、Translation プラグイン用のパラメーターの入力が求められています。
図 12. Translate プラグインのプロンプト
これで、フィード作成用のユーザー・インターフェースの生成に必要なコードが完成しました。次に、実際のフィードを生成するコードが必要となります。
このセクションでは、Hello サンプルの最後の 2 つの Java ファイルである AtomGenerator.java と HelloGenerator.java を取り上げます。これらのファイルは、ユーザー入力に基づいて Atom フィードを生成します。
HelloGenerator クラスは BaseGeneratorPlugin を拡張し、generateFeed メソッドを使用して FeedContent オブジェクトの新しいインスタンスを生成します。
図 13. Hello プラグイン内での HelloGenerator クラスの定義
AtomGenerator クラスは、実際のフィードの生成という難しい処理を行います。しかし、このサンプルでは、以下に示すようにそれほどたいへんではありません。以下のコードでは、IETF Atom Syndication Format 標準および Atom Publishing Protocol 標準 (RFC 4287 および 5023) のインプリメンテーションを提供する Abdera ライブラリーが使用されています。Abdera のドキュメントについては、Apache Wiki または Apache Web サイトの JavaDoc を参照してください。 以下のコードは、ユーザー、タイトル、サブタイトル、URL、および hellotext 用の基本的なストリングをセットアップします。実行時には、フィードへのパラメーターを受け取る可能性があります。この例では、「Hello World」フィードの結果に含める hellotext パラメーターを取得します。次に、Abdera クラスのインスタンスの生成に進みます。このインスタンスにより、フィードの ID、タイトル、サブタイトル、およびジェネレーターの設定が容易になります。この後、abdera.getFactory.newEntry を使用してエントリーをフィードに追加し、エントリーのタイトル、ID、更新済みの作成者フィールドと要約フィールドを確立します。タイトルは、サンプルによってパラメーター・データが構築される場所です。これで、エントリーを追加し、フィードを返せるようになりました。
図 14. Hello プラグイン内での generateAtomDocument メソッド
TranslateGenerator クラスは、簡単なインプリメンテーションを行います。図 15 に示すように、すべてのコードは HelloGenerator のコードと同じです。
図 15. Translate プラグイン内での TranslateGenerator の定義
それでは、変換サービス用に AtomGenerator をどのように変更するのかを見ていきましょう。ソース・サービスによって JSON が提供され、ここから XML を作成する必要があります。これには、InfoSphere MashupHub に含まれている JSON4J サポートを活用します。JSON4J.jar のドキュメントについては、IBM Information Center を参照してください。プラグインを構築する際は、MashupHub 内のライブラリーの内容を参照すると役に立つでしょう。作成したコードが依存関係を持つ場合は <installation_path>\Hub\installedApps\Mashup Hub.ear\mashuphub-enterprise.war\WEB-INF\lib, 内のライブラリー・フォルダーに jar を追加できます。リスト 3 を順に見ていきます。ソースはこの文書に添付されているダウンロードとして含まれているので、お気に入りのエディターで AtomGenerator ファイルを表示すると理解しやすいでしょう。
サイド・ファイルに含まれる「リスト 3. Translate プラグインでの generateAtomDocument メソッドの定義」を参照してください。
generateAtomDocument メソッドから始めます。このメソッドは、hellodemo の例と非常によく似ています。hellodemo の例では、ユーザー、タイトル、サブタイトル、URL、およびパラメーター (transtext、languagein、languageout) 用のストリングにために、いくつかのストリングのインスタンスが生成されます。そして、パラメーターがこれらのストリングに取得されます。変換サービスは、ソース言語と変換先の言語の形式として「|」文字で連結されていることを前提とするため、この処理が必要です。行 106 で、ストリング resultingtext に、getTranslation メソッドの結果を代入します。このメソッドは、languagepair と transtext というストリングを使用して、結果を生成します (変換が成功すると仮定しています)。次に、フィードの唯一のエントリーである最初のエントリーのタイトルに結果が組み込まれて、フィードが生成されます。
以下のコードでは、getTranslation メソッドは、前述のパラメーターへのストリングを受け取ります。これらのパラメーターを使用して URL をエンコードします。そして、HTTP の GET メソッドを通じてこの URL を使用し、ajax.googleapis.com に接続します。google サービスでは、参照者ヘッダーがこのサービス用に設定されている必要があります。これを実行しているのが行 50 です。この記事の執筆時点では、このサービスでは GET メソッドのみサポートされています。GET メソッドの結果を StringBuffer strBuff に代入します。
サイド・ファイルに含まれる「リスト 4. Translate プラグインでの getTranslation メソッドの定義」を参照してください。
JSON4J のメソッドを採用し、JSON 結果をテキストへと解析します。リスト 5 に示すように、期待されている結果は JSON 形式です (「Hello, World」のイタリア語のフォームを要求)。また、結果は実際にはネストされているため、解析メソッドを 2 回実行する必要があります。そして、responseData オブジェクト内のテキストを generateAtomDocument メソッドに返し、このメソッドがフィードを実行します。
リスト 5. Google 変換サービスの応答例
{"responseData": {
"translatedText":"Ciao mondo"
},
"responseDetails": null, "responseStatus": 200}
|
これで、ファイルをビルドし、InfoSphere MashupHub および IBM Mashup Center にデプロイする準備が整いました。
サンプルをビルドするには、マシンに Java 5 JDK がインストールされていて、InfoSphere MashupHub ライブラリーが含まれるようにクラスパスをセットアップする必要があります。デフォルトとは異なる場所に IBM Mashup Center をインストールした場合、その場所を反映するために最初の行の変更が必要になる場合があります。hellodemo サンプル・プラグインのビルドを補助するスクリプトをリスト 6 に示します。
サイド・ファイルに含まれる「リスト 6. Hello プラグイン用のビルド・コマンド」を参照してください。
リスト 7 では、作成した変換サービス・プラグインがビルドされます。
サイド・ファイルに含まれる「リスト 7. Translate プラグイン用のビルド・コマンド」を参照してください。
プラグインのビルドが完了したので、今度はプラグインをデプロイします。hellodemo の下に表示されているディレクトリー構造に従って ZIP ファイルを作成します。
図 16. Hello プラグインの ZIP ファイルの表示
同様に、Translate プラグインも同じことを行います。
図 17. Translate プラグインの ZIP ファイルの表示
プラグインを IBM Mashup Center にデプロイするには、translate_deploy.zip (または hello_deploy.zip) <installation_path>\Hub\installedApps\Mashup Hub.ear\mashuphub-enterprise.war\WEB-INF\plugins, にコピーし、Web アプリケーション・サーバーを再起動します。また、これらの変更を表示するために、IBM Mashup Center アプリケーション・サーバーの再起動も必要です。
これはお勧めの方法です。別の方法として、ファイルを特定の場所にコピーすることもできます。バッチ方法を使用する場合は、付録 A にバッチ・スクリプトが含まれています。
この記事では、サンプル・コードを順番に見ていき、このコードから非常に役に立つ変換サービスを作成しました。比較的迅速に作成できたのは、主に IBM Mashup Center に含まれるコードを使用したからです。これらのフィードとサービスは、軽量の変換などを行うマッシュアップの構築に使用できます。変換サービスを使用する際は、「ダウンロード」セクションにあるデモを参照するとよいでしょう。これで、IBM Mashup Center の範囲を拡張し、必要に応じてカスタマイズするための基本的なツールが得られました。
リスト 8 のスクリプトを使用して hellodemo プラグインをデプロイできます。
サイド・ファイルに含まれる「リスト 8. Hello プラグイン用のデプロイ・コマンド」を参照してください。
リスト 9 のスクリプトを使用して translation プラグインをデプロイできます。
サイド・ファイルに含まれる「リスト 9. Translate プラグイン用のデプロイ・コマンド」を参照してください。
| 内容 | ファイル名 | サイズ | ダウンロード形式 |
|---|---|---|---|
| サンプル・コード | translate.zip | 16KB | HTTP |
| 「hello world」サンプルのデプロイメント・ファイル | hello_deploy.zip | 11KB | HTTP |
| 変換サンプルのデプロイメント・ファイル | translate_deploy.zip | 12KB | HTTP |
| 変換サービスの使い方のデモ | 5.7MB | HTTP |
学ぶために
- IBM Mashup Center Web ページ: 使いやすいビジネス・マッシュアップ・ソリューションを検索できます。これらのソリューションは、IT に必要なセキュリティーとガバナンス機能を持つ動的な状況アプリケーションを集めた事業アセンブリーをサポートします。
- IBM Mashup Center wiki: IBM Mashup Center について学習し、その知識ベースに寄与することができます。また、他のユーザーと共同作業ができます。
- Lotus Greenhouse: Lotus コラボレーション製品を無料で使用できるライブ・コミュニティー Web サイトを探索できます。コミュニティーに参加すると、意見の交換、他のユーザーとのコラボレーション、画期的な製品やコラボレーション製品についての情報共有などが可能です。
- Google AJAX Language API
Developer's Guide: Javascript だけを使用して、Web ページ内のテキスト・ブロックの言語を変換および検出できます。
- Apache Wiki: Abdera のドキュメントを入手できます。
- Apache Web site: Abdera JavaDoc を入手できます。
- Application Programming Interface Reference: MashupHub プラグイン API に関する PDF ドキュメントを入手できます。
-
developerWorks Information Management zone: DB2 の詳細について学習できます。技術文書、使い方を示す記事、教材、ダウンロード・ファイル、製品情報などがあります。
-
developerWorks の「technical events and webcasts」を参照し、最新情報を得られます。
製品や技術を入手するために
-
IBM トライアル・ソフトウェア で次の開発プロジェクトを構築しましょう。developerWorks から直接ダウンロードできます。
議論するために
-
developerWorks のブログにアクセスし、developerWorks のコミュニティーに参加しましょう。

Chris Gruber は 13 年以上の業界経験を持ち、IBM Information Management 部門の Developer Initiatives の技術マネージャーとして、業界をリードするデータ・サーバー製品群を扱っています。以前は、Sybase iAnywhere Solutions のシニア製品マネージャーとして働いていました。彼は技術や開発のパートナーと非常に密接に協力しながら、彼らの製品を市場導入するための時間短縮に貢献してきました。

Jim の IBM での勤務は 10 年を超えています。MIT で電気工学とコンピューター・サイエンスの学士号および修士号を取得。現在幅広い影響力のある技術に興味を持ち、マッシュアップ、Web 2.0、Web サービス、Eclipse、セマンティック Web、および e-ビジネスなどの領域で Web ベースの Java ソフトウェア技術に従事しています。多数の技術記事を発表し、十数件を超える米国および国際的な特許を保有しています。また、IBM の Emerging Technologies Group 内の先進的なチーム jStart のメンバーでもあり、実際のお客様とユーザーのために、最先端の技術を活用して実社会での問題解決に取り組んでいます。最先端の技術を使用した実際のビジネス・ニーズの解決に興味のある方は、jStart (jstart@us.ibm.com) までご連絡いただくか、http://www.ibm.com/software/jstart を参照してください。