目次


IBM WebSphere Portlet Factory を使用して IBM Lotus Connections と IBM WebSphere Portal を統合する

Comments

IBM WebSphere Portlet Factory は、開発者によるポートレットの迅速な作成、構築、カスタマイズ、および IBM WebSphere Portal へのデプロイを可能にする強力で柔軟な開発ツールです。ソーシャル・ソフトウェア製品である IBM Lotus Connections は、REST APIを使った拡張および既存のアプリケーションへの統合が容易であり、IBM WebSphere Portlet Factory によって提供される迅速な開発パラダイムによく適合します。

Lotus Connections には WebSphere Portal との統合を可能にするポートレットが含まれていますが、標準製品を超える機能が必要になることもあるでしょう。

この記事を読むことにより、ポートレット間通信やLotus Connections の各種サービスへの詳細なアクセス制御といった高度な機能を使用して、カスタム・ソリューションを作成できるようになります。この記事では、ポートレットを作成して Lotus Connections を WebSphere Portal に統合するシンプルな方法について説明します。また、記事内で扱う例では Lotus Connections のドッグイア・サービスに焦点を当てています。ドッグイア・サービスはソーシャル・ブックマーク・ツールです。

この記事は、WebSphere Portal でポートレットをデプロイした経験があり、WebSphere Portlet Factory wiki および Lotus Connections の例をすでに参照されていることを前提として書かれています。

REST、Builder、そして REST Builder とは ?

REST とは何でしょうか。REST (Representational State Transfer) は、開発者が自身のカスタム・アプリケーションから任意の REST 対応アプリケーション (Lotus Connections など) の情報を作成、更新、照会、および管理することを可能にする本質的に軽量でわかりやすい環境です。この API のシンプルさは、REST API が HTTP ベースであることに由来します。開発者は、POST、PUT、および DELETE の各メソッドを用いる単純で明快な URL を通じ、サービス・データを HTML フォームまたは XML Atom 文書にカプセル化して、Lotus Connections の 5 つのサービスへの要求を容易に作成できます。

では、Builder とは何でしょうか。IBM WebSphere Portlet Factory Designerの中心にはソフトウェア自動化コンポーネントのセットがあり、これらが Builder と呼ばれています。Builder は、ウィザード形式の使いやすいユーザー・インターフェースを通じて設計情報を取得し、コードを自動生成します。Builder を使用すると開発プロセスの速度が大幅に向上するため、基礎となる API の複雑さを隠蔽し、SOA に正しく準拠するアプリケーションを作成できます。

この概念に基づいてREST Builder が提供されています。REST Service Call Builder (正式名称です) は REST サービスを呼び出し、このサービスは Atom フィードを返します。これにより、Builder は結果フィードのイントロスペクトに基づいてデフォルトの XML Schema Definition (XSD) を生成します。

ドッグイア連携ポートレットの作成

連携ポートレットとは、同じページ上、または同じ WebSphere Portal インスタンスの異なるページ上にある別のポートレットと対話するポートレットです。この記事の例では、2 つのポートレットを作成します。1 つは検索ウィンドウを表示するポートレットです。ユーザーは検索条件を入力して、それに一致するドッグイア・サービスのブックマーク・タグを検索できます。もう 1 つは、結果として得られたブックマーク・リンクのリストを表示するポートレットです。この操作は WebSphere Portlet Factory を使用して行います。WebSphere Portlet Factory に用意されているポートレットの作成方法を示すサンプル・チュートリアルをまだ試していない場合は、先にそちらを実行してください。

このセクションでは、WebSphere Portlet Factory を使用し、REST API を通じて Lotus Connections からデータを取り出す 2 つのポートレットの作成方法を説明します。

メモ:以下の例は、WebSphere Portlet Factory v6.0.2.3 および Lotus Connections 2.0 を使用して作成されています。

ソース・ポートレットの作成

まず、この連携ポートレットのシナリオでソースとなるポートレットを作成します。ソース・ポートレットは、「Submit」ボタンのある検索ウィンドウをユーザーに表示します。ユーザーが「Submit」ボタンをクリックすると、検索照会がプロパティー・ブローカーのワイヤーを通じてターゲット・ポートレットに送信されます。プロパティー・ブローカーは WebSphere Portal に存在するサービスであり、ポートレットどうしをリンクし、ポートレット間のメッセージ送信を可能にします。ワイヤーは、このリンクを確立するためにポータル管理者によって構成されます。

始める前に、WebSphere Portlet Factory パースペクティブが表示されていること確認します。このパースペクティブが表示されていない場合は、「ウィンドウ」->「パースペクティブを開く」->「その他」->「WebSphere Portlet Factory」を選択してください。

WebSphere Portlet Factory プロジェクトを作成するには、以下の手順を実行します。

  1. 「ファイル」->「新規」->「WebSphere Portlet Factory プロジェクト」をクリックします。
  2. プロジェクトに「Dogear」という名前を付け、「次へ」をクリックします。
  3. 「機能セットの追加」ウィンドウで「次へ」をクリックします。
  4. 「Java 設定」ウィンドウで「次へ」をクリックします。
  5. 「デプロイメント構成」ウィンドウで、デプロイ先の Application Server と Portal Server の両方を選択します。どちらかを作成しなければならない場合は、必要に応じて「追加」ボタンをクリックしてください。「完了」をクリックします。
    メモ:指定したサーバーは稼働中であることが必要です。
  6. 「プロジェクトをただちにデプロイしますか?」と問われたときは「はい」をクリックします。

これで、空のプロジェクトが作成されました。次に、新規モデルを作成する必要があります。モデルとは WebSphere Portlet Factory の用語であり、作成するアプリケーションのことを意味すると考えてよいでしょう。このモデルにより、ポートレット・アプリケーションの動作、構造、および表示用のアプリケーション・コードを生成する役割を持つ Builder 群が設定されます。

モデルを作成するには、次の手順を実行します。

  1. 新規作成したプロジェクトを右クリックし、「新規」->「WebSphere Portlet Factory モデル」を選択します。
  2. 「プロジェクトの選択」ウィンドウで「Dogear」を選択し、「次へ」をクリックします。
  3. 「モデルの選択」ウィンドウで「メインおよびページ」を選択し、「次へ」をクリックします。Main and Page Builder によって、ユーザーをすぐにデフォルト・ページに移動する単純な main() メソッドが作成されます。
  4. 「ページ設定値」ウィンドウで「単純なページ」を選択し、「次へ」をクリックします。
  5. 「新規モデルの保管」ウィンドウでモデルに「DogearSource」という名前を付け、「完了」をクリックします。

これで、非常に単純なデフォルト・ページを持つモデルが作成されました。次に、このページを変更して検索フォームを作成します。

  1. 「プロジェクト・エクスプローラー」ビュー (図 1 参照) で「DogearSource.model」をダブルクリックします。次に、「アウトライン」で「page1」をダブルクリックし、ユーザーにレンダリングされるページを開きます。
    図 1. 「プロジェクト・エクスプローラー」ビュー
    「プロジェクト・エクスプローラー」ビュー
    「プロジェクト・エクスプローラー」ビュー
  2. 「ページ・コンテンツ」セクションに、リスト 1 に示すコードを貼り付けます。
    リスト 1. 検索ページ用の HTML
    <html>
         <body>
            <!-- As a best practice, change the form name to a unique name -->
            <form name="searchForm" method="post">
                <div align="center">
         <span name="searchTag"></span>
         <span name="searchButton" class="searchButton"></span>
                </div>
            </form>
        </body>
    </html>
  3. モデルを保管します。これで、デフォルト・ページに検索フィールドと「検索」ボタンが配置されました。

次に、簡単な作業を行い、このアプリケーションをポートレット・アプリケーションへと変換します。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ポータル統合」を選択し、「Builder タイプ」で「Portlet Adapter」を選択します。
  3. ポートレットに「WPFDogearSource」という名前を付けます。
  4. ポートレットの「タイトル」に「WPF Dogear Source」を設定します。
  5. モデルを保管します。

この時点で、このポートレットを連携シナリオにおけるソースとして構成します。最初に、次の手順に従って、検索ストリングを表す変数を追加する必要があります。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「変数」を選択し、「Builder タイプ」で「Variable」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「searchQuery」を設定します。
  5. 「タイプ」に「ストリング」を設定します。
  6. 「初期値」に「Portal」を設定します。
  7. モデルを保管します。

次に、以下の手順に従って、プロパティー・ブローカー・イベントを送信するためのサポートを追加します (図 2 参照)。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ポータル統合」を選択し、「Builder タイプ」で「Cooperative Source Portlet」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「ProcessProperty」を設定します。
  5. 「タイプ」に「プロパティー・ブローカーのアクション」を設定します。この設定は、ボタンのクリックなどのアクションが実行されると、ポートレット間通信が発生することを意味します。
  6. 「出力タイプ名」に「linkTextType」を設定します。
  7. 「キャプション」に「linkText」を設定します。
  8. 「出力定義」で「名前」に「linkText」を設定します。
  9. モデルを保管します。
図 2. 「Cooperative Portlet Source」ウィンドウ
「Cooperative Portlet Source」ウィンドウ
「Cooperative Portlet Source」ウィンドウ

次に、page1 の名前付きタグ searchTag にテキスト入力コントロールを追加します。このテキスト・フィールドの値は、前の手順で作成した変数です。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ページ・コントロール」を選択し、「Builder タイプ」で「Text Input」を選択します。
  3. 「OK」をクリックします。
  4. このテキスト・フィールドに searchTag という名前を付けます。
  5. 「ページ」に「page1」を設定します。
  6. 「タグ」に「searchTag」を設定します。
  7. 「テキスト」に「${Variables/searchQuery}」を設定します。メモ:省略符号 (...) のボタンをクリックし、ユーザー・インターフェースを通じて変数名を見つけることもできます。
  8. モデルを保管します。

「Submit」ボタンがクリックされたときに何を実行するのかを定義します。まず、ユーザーが検索ウィンドウに入力した値を取得し、searchQuery という名前の変数に格納します。次に、この値をプロパティー・ブローカーに送信し、後でワイヤリング機能を通じてこの値をターゲット・ポートレットで利用できるようにします。図 3 を参照してください。

次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「フロー制御」を選択し、「Builder タイプ」で「Action List」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「dogearSearch」を設定します。
  5. 「Action List」で、最初のアクションとして
    Assignment!Variables/searchQuery=${Inputs/searchTag}
    を設定します。
  6. 2 番目のアクションとして
    pbAction_ProcessProperty (pbAction_ProcessProperty,${Variables/searchQuery})
    を設定します。
  7. モデルを保管します。
図 3. 「Submit」ボタンのアクションの定義
「Submit」ボタンのアクションの定義
「Submit」ボタンのアクションの定義

最後に、前のステップで定義したアクションを開始するように「Submit」ボタンを構成します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ページ・コントロール」を選択し、「Builder タイプ」で「Button」を選択します。
  3. 「OK」をクリックします。
  4. このボタンに「searchButton」という名前を付けます。
  5. 「ページ」に「page1」を設定します。
  6. 「ラベル」に「Submit」を設定します。
  7. 「アクション」に「dogearSearch」を設定します。
  8. 「入力マッピング」で、「名前」に「ACTION_NAME」を、「値」に「pbAction_ProcessProperty」を設定した 1 つのマッピングを追加します。
  9. モデルを保管します。

この時点で、ソース・ポートレットを正しく作成することができました。このポートレットをテストするには、WebSphere Portlet Factory モデルで「DogearSource.model」を右クリックし、「実行ユーザー」->「実行」を選択します。すべてが正しく設定されていると、ブラウザーが開かれ、検索ウィンドウと検索ボタンが表示されます。

次のセクションでは、ターゲット・ポートレットの作成プロセスについて説明します。ターゲット・ポートレットは、Lotus Connections のドッグイア・サービスの REST API を使用して検索を実行し、結果を解析してその内容を表示する役割を持ちます。

データ・プロバイダーの作成

ターゲット・ポートレットを作成する前に、Lotus Connections API の呼び出し方を WebSphere Portlet Factory に指示する必要があります。このセクションでは、データ・プロバイダーの作成方法について説明します。

データ・プロバイダーは、ドッグイアからのデータの取得方法を抽象化します。この例では、Lotus Connections Dogear REST API を使用してデータを取得します。この抽象化により、開発者はアプリケーションのプレゼンテーション層に影響を与えることなく、データの取得メカニズムを後で変更することができます。

以下の手順は、Lotus Connections Dogear REST API を呼び出すよう WebSphere Portlet Factory を構成するために使用されるプロセスの概要を示しています。

データ・プロバイダー・モデルを作成するには、次の手順を実行します。

  1. プロジェクトを右クリックし、「新規」->「WebSphere Portlet Factory モデル」を選択します。
  2. 「プロジェクトの選択」ウィンドウで「Dogear」を選択し、「次へ」をクリックします。
  3. 「モデルの選択」ウィンドウで「空」を選択し、「次へ」をクリックします。
  4. 「新規モデルの保管」ウィンドウでモデルに「DogearSource」という名前を付け、「完了」をクリックします。

次に、Dogear REST API との対話を定義します。次の手順により、他のモデルおよびアプリケーションによって消費されるドッグイア・サービスを定義できます。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「サービス」を選択し、「Builder タイプ」で「Service Definition」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「dogearSearch」を設定します。
  5. 「サービスを公開」が選択されていることを確認します。
  6. モデルを保管します。

次の手順を実行し、REST Service Call Builder を追加します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「データ統合」を選択し、「Builder タイプ」で「REST Service Call」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「dogear」を設定します。
  5. 「URL」に「http://connections.acme.com/dogear/atom」(または適切な URL) を設定します。
  6. 「パラメーター」セクションで、図 4 に示すパラメーターを追加します。それぞれの「値」は空にしておきます。
    • search
    • page
    • ps
    • lang(値を en に設定)
    図 4. Builder 用のパラメーター
    Builder 用のパラメーター
    Builder 用のパラメーター
  7. 「結果スキーマ」で、次の作業を実行します。
    • 「スキーマの自動生成」、「フィード・データの再構築」、および「スキーマのキャッシュ」が選択されていることを確認します。
    • 「サンプル・データ URL」に「http://connections.acme.com/dogear/atom」(または適切な URL) を設定します。lang という名前のサンプル・データ・パラメーターを 1 つ作成し、その値を en に設定します。
  8. 「適用」をクリックします。この手順により、ドッグイア・サーバーが呼び出され、結果の XML のサンプルが取得されます。WebSphere Portlet Factory は、このサンプルを使用して自動的に結果のスキーマを生成します。
  9. モデルを保管します。

REST 呼び出しを抽象化するサービス操作を追加するには、以下の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「サービス」を選択し、「Builder タイプ」で「Service Operation」を選択します。
  3. 「OK」をクリックします。
  4. 「データ・サービス」に「dogearSearch」を設定します。
  5. この操作に「doSearch」という名前を付けます。
  6. 呼び出すアクションとして「DataServices/dogear/execute」を指定します。
  7. 呼び出したアクションからの構造を使用するように、「入力構造処理」および「結果構造処理」の両方を設定します。
  8. 「適用」をクリックします。
  9. モデルを保管します。

ドッグイア・サービスから取得したフィールドを詳細に記述するリッチ・データ定義を追加します。この定義により、開発者は特定のフィールドをビューから容易に隠すことができます。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「サービス」を選択し、「Builder タイプ」で「Service Operation」を選択します。
  3. 「OK」をクリックします。
  4. オプションのリストから、ドッグイアをスキーマとして選択します。
  5. 「データ定義エディター」で、「コンテナー・エレメント」に「項目」が設定されていることを確認します。
  6. リスト内の author および category 以外の各フィールドで、「データ・タイプ」が「ストリング」に設定されていることを確認します。
  7. 「データ定義ファイルの作成」ボタンをクリックし、ファイルを
    /WEB-INF/data_definitions/dogear.xml
    に保管します。
  8. モデルを保管します。

ターゲット・ポートレットの作成

このセクションでは、他のポートレットから情報を受信し、前のセクションで作成したデータ・プロバイダーを使用して Lotus Connections ドッグイアの REST API を呼び出すポートレットの作成方法を説明します。

Lotus Connections からのデータ取得を抽象化したので、理論的には、ポートレット側で何も変更せずに、REST API 呼び出しの代わりに JDBC 接続を使用して Lotus Connections ドッグイアからデータを取得するようプロバイダーを変更できます。

ターゲット・ポートレット・モデルを作成するには、次の手順を実行します。

  1. プロジェクトを右クリックし、「新規」->「WebSphere Portlet Factory モデル」を選択します。
  2. 「プロジェクトの選択」ウィンドウで「Dogear」を選択し、「次へ」をクリックします。
  3. 「モデルの選択」ウィンドウで「メインおよびページ」を選択し、「次へ」をクリックします。
  4. 「ページ設定値」ウィンドウで「単純なページ」を選択し、「次へ」をクリックします。
  5. 「新規モデルの保管」ウィンドウでモデルに「DogearTarget」という名前を付け、「完了」をクリックします。

次に、このアプリケーションをポートレット・アプリケーションへと変換するために、以下の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ポータル統合」を選択し、「Builder タイプ」で「Portlet Adapter」を選択します。
  3. ポートレットに「WPFDogearTarget」という名前を付けます。
  4. ポートレットの「タイトル」に「WPF Dogear Target」を設定します。
  5. モデルを保管します。

これで、ポートレットを連携シナリオにおけるターゲットとして構成できます。

ソース・ポートレットからの入力ストリングを保持する変数を追加するには、次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「変数」を選択し、「Builder タイプ」で「Variable」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「receivedProperty」を設定します。
  5. 「タイプ」に「ストリング」を設定します。
  6. モデルを保管します。

ポートレット・アプリケーションに、プロパティー・ブローカーのターゲット連携機能を追加します。この追加により、2 つのポートレット間にワイヤーが作成されていると、ソース・ポートレットから送信された照会文字列に対し応答するようになります。

次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ポータル統合」を選択し、「Builder タイプ」で「Cooperative Target Portlet」を選択します。
  3. 「OK」をクリックします。
  4. 「イベント名」に「ProcessProperty」を設定します。
  5. 「入力名」に「linkText」を設定します。
  6. 「入力タイプ名」に「linkTextType」を設定します。
  7. 「キャプション」に「Link Text」を設定します。
  8. 「出力定義」で「キャプション」に「Received Text」を設定します。
  9. モデルを保管します。

次に、Lotus Connections からの結果をレンダリングするページを作成します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ページ」を選択し、「Builder タイプ」で「Page」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「TargetPage」を設定します。
  5. 「ページ・コンテンツ」に、リスト 2 に示すコードを設定します。
    リスト 2. ターゲット・ポートレット用の HTML コード・テンプレート
    <html>
      <body>
          <!-- As a best practice, change the form name to a unique name -->
          <div align="center" class="bookmarks">
             <span name="allTags"/>
    	   <div class="bookmarkList"  >
    	     <span name="searchResults"></span>
               </div>
               <div>
    	     <span name="pagingTag"></span>
               </div>
          </div>
      </body>
    </html>
  6. モデルを保管します。

Data Page Builder を使用して、前の手順で作成した名前付きの HTML タグにデータをマッピングすることにより、結果をページ上の正しい位置にレンダリングします。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ページ修飾子」を選択し、「Builder タイプ」で「Data Page」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「search」を設定します。
  5. 「変数」に「DataServices/dogear/doSearch/results/feed/entries」を設定します。
  6. 「モデル内のページ」に「TargetPage」を設定します。
  7. 「ページ・タイプ」に「表示のみ」を設定します。
  8. 「新規タグの場所」に「searchResults」を設定します。
  9. モデルを保管します。

次に、Lotus Connections API を呼び出す Builder を作成します。まず、プロパティー・ブローカー・ワイヤーで新規プロパティーを受信したときにアクションを実行するハンドラーを作成します。このアクションでは、ワイヤーから検索照会を取得し、これを一時変数に代入して Lotus Connections API を呼び出します。そして、結果をレンダリングするターゲット・ページにユーザーをリダイレクトします。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「フロー制御」を選択し、「Builder タイプ」で「Event Handler」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「handleNewProperty」を設定します。
  5. 「イベント名」に「ProcessProperty」を設定します。
  6. 「引数」で、「名前」に「linkText」を設定し、「データ・タイプ」に「ストリング」を設定します。
  7. 「アクション」で、次の 3 つのアクションを作成します。
    メモ:SystemOut のアクションはデバッグ目的でのみ使用されるため省略可能です。

    Assignment!Variables/receivedProperty=${Arguments/linkText}
    DataServices/dogear/doSearch
    TargetPage
  8. モデルを保管します。

次に、前のセクションで定義されたサービス (DogearProvider) を呼び出すサービス・コンシューマーを作成します。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「サービス」を選択し、「Builder タイプ」で「Service Consumer」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「dogear」を設定します。
  5. 「プロバイダー・モデル」に「DogearProvider」を設定します。
  6. 「入力をオーバーライド」が選択されていることを確認します。
  7. 「入力値」を次のように設定します (page と ps の値により、後でページ・サポートを追加できます)。
    dogearRestInputs.Parameters.search to ${Variables/receivedProperty}
    dogearRestInputs.Parameters.page to 1
    dogearRestInputs.Parameters.ps to 10
  8. 「リッチ・データ定義ファイル」に
    /WEB-INF/data_definitions/dogear.xml
    を設定します。
  9. モデルを保管します。

この時点で、2 つのポートレットの開発が完了しました。一方のポートレットにより、ユーザーは検索ストリングを入力できます。もう一方のポートレットはこの検索ストリングを受け取り、REST API を使用してドッグイアですべての公開ブックマークを検索します。ここまで Java™ コードを 1 行も書いていないことは注目に値します。これは WebSphere Portlet Factory の優れた特長です。この方式に沿って作業する限り、Java、XML、REST、またはポートレット開発を学習しなくても、Lotus Connections API を活用するポートレットを作成できます。

ポートレット WAR が構築およびデプロイされると、特定のページでポートレットを構成し、ポートレット相互をワイヤリングできるようになります。ポートレットをワイヤリングするには、次の手順を実行します。

  1. ポータル管理者として WebSphere Portal Server にログインします。
  2. ポートレットを構成したページに移動します。
  3. ページ・タイトルの横にある「ページ・レイアウトの編集」をクリックします。
  4. 「ワイヤー」タブをクリックします。
  5. 次の項目を設定します。
    • 「ソース・ポートレット」フィールドに、「WPF Dogear Source」と入力します。
    • 「送信中」フィールドに、「linkText」と入力します。
    • 「ターゲット・ページ」フィールドに、「<ページ名>」を入力します。
    • 「ターゲット・ポートレット」フィールドに、「WPF Dogear Target」と入力します。
    • 「受信中」フィールドに、「Received Text,Link Text」と入力します。
    • 「ワイヤー・タイプ」フィールドに、「Public」と入力します。
  6. プラス符号 (+) ボタンをクリックして、ワイヤーを追加します。
  7. 「完了」をクリックします。

WebSphere Portal ページに戻り、ソース・ポートレットに検索ストリングを入力します。「Submit」ボタンをクリックすると、ドッグイア・サービスにアクションが呼び出され、Lotus Connections REST API を使用して結果の Atom フィードが解析されます。そして、図 5 に示すような見栄えのよいポートレットに結果が返されます。

図 5. 結果のポートレット
結果のポートレット
結果のポートレット

メモ:このポートレットは、匿名アクセスを許可するようドッグイアを構成できる Lotus Connections 2.0 以降でのみ機能します。ユーザーのクレデンシャルを使用するポートレットの例については、WebSphere Portlet Factory Wiki およびその Lotus Connections 統合の例を参照してください。

この例では、より高度な開発の基本について説明しています。結果の Atom フィードを受け取り、次のようなことができるようになりました。

  • ユーザーの役割に応じてフィードをフィルターする (たとえば、同じ部署や地域のユーザーからのリンクのみ表示するなど)
  • ブックマークをハイパーリンク対応にする
  • 一度に 10 個を超えるブックマークを表示するために、ページングのサポートを追加する
  • 変換サポートを追加する
  • 社内の検索エンジンと統合する

Lotus Connections はさまざまなサービスの上に構築されているため、WebSphere Portlet Factory を使用することで、ニーズに一致するユーザー・インターフェースを再作成し、ユーザー独自の既存の環境に統合することができます。WebSphere Portlet Factory により、可能性が無限に広がるだけでなく、最小限のコーディングですべてを行うことができます。

ドッグイアでの詳細なアクセス制御の実施

Lotus Connections は、本質的に最小限のアクセス制御を持つよう設計されています。このため、5 つのサービスで情報を共有することを選択したユーザーは、ブログ、コメント、ブックマークとして作成した内容がすぐにソーシャル・ネットワーク全体に表示されることに気付いています。オープンなコミュニケーションと境界のないコラボレーションの促進を唯一の目標とするツールにとって、制限を課すことは実用的でないでしょう。

構造化されていないコンテンツを構造化する試みは容認されませんが、以下で説明するようなビジネス・ユース・ケースの解決を支援することの必要性は認識されています。

架空の例として、IBM のお客様であり、多数のベンダーをサポートするベンダー・ポータルを運営している大規模な小売組織 XYZ 社を取り上げます。XYZ 社は、新しいベンダーを誘致し既存のベンダーをつなぎ止めておくために、ソーシャル・ネットワーキング機能、特にブックマークとタグのサービスをポータル環境に追加することを決めました。しかし、このケースで Lotus Connections を使用すると、あるベンダーが作成したブックマークを他のベンダーから見られないようにしなければならない課題が生じます。ドッグイアは標準のアクセス制御を持たないオープン・システムとしてデプロイするよう設計されているため、Lotus Connections の標準インストールをそのまま使用する方法は、このケースには適しません。WebSphere Portlet Factory を使用するカスタム・ポートレットを開発する必要があります。

次のセクションでは、プロファイルまたはパーソナライズが可能で、ログインしたベンダーに基づいて、その特定のベンダーのブックマークだけを表示するカスタム・ドッグイア・ポートレットの作成方法を説明します。これにより、ベンダー間でブックマークが混在するリスクがなくなります。

メモ:以下の例は、WebSphere Portlet Factory v6.0.2.3 および Lotus Connections 2.0 を使用して作成されています。

コミュニティーの作成

開発プロセスの手順を説明する前に、まず、アクセス制御の要件をどのように実現できるのかを理解する必要があります。この理解の鍵を握るのが Lotus Connections のコミュニティー・サービスです。コミュニティー・サービスは、プライベートなリスト、つまり制限されたメンバーによるリストを作成できるという点で、他のサービスとは異なります。コミュニティーにはブックマーク・コンポーネントがあり、メンバー間でブックマークを共有できるため、このサービスはこの例にとって重要な意味を持つドッグイアの実装といえます。

コミュニティーのコンポーネント (ブックマーク機能など) は、その特定の communityUuid を知ることにより、REST 呼び出しを通じて取得できます。ポートレットは構成パラメーターを受け取る (そして、パーソナライズする) ことができるため、communityUuid パラメーターをポートレット内に取り込むよう開発して、表示する内容を制御できます。

また、Lotus Connections ドッグイア・ブックマークレット (ブラウザーのブックマークに URL として格納される小さい JavaScript™ プログラム) のカスタマイズにより、コンテンツをコミュニティー・サービスにのみブックマークする機能を得られます。コミュニティーとブックマークレットのどちらもコミュニティーのメンバーを認識するため、ユーザーは自分自身が所属しているコミュニティーにのみコンテンツをブックマークすることができます。その結果、プライベートなコミュニティーがすでにセットアップされている場合、各ベンダーに対し、その所属メンバーによってタグ付けおよびブックマークされたコンテンツだけを見られるよう保証できます。

コミュニティー・データ・プロバイダーの作成

前述のように、データ・プロバイダーはサービスからのデータの取得方法を抽象化します。この場合のサービスとは Lotus Connections コミュニティーです。次のモデルの作成では、Lotus Connections Communities REST API を使用し、communityUuid に基づいて特定のコミュニティーを取得し、そのコミュニティーへのブックマークのアスペクトを返します。そして、communityUuid が、ポートレットの結果をパーソナライズする構成パラメーターとして使用されます。communityUuid の値は、このポートレットをページに配置する際にポータル管理者によって設定されます。(図 6 に示すように、Lotus Connections でコミュニティーにアクセスすると、そのコミュニティーの communityUuid が URL に表示されます)。

図 6. communityUuid の識別
communityUuid の識別
communityUuid の識別

以下の手順は、Lotus Connections Communities REST API を呼び出すよう WebSphere Portlet Factory を構成するプロセスの概要を示しています。最初に、データ・プロバイダー・モデルを作成します。

  1. プロジェクトを右クリックし、「新規」->「WebSphere Portlet Factory モデル」を選択します。
  2. 「プロジェクトの選択」ウィンドウで「Dogear」を選択し、「次へ」をクリックします。
  3. 「モデルの選択」ウィンドウで「空」を選択し、「次へ」をクリックします。
  4. 「新規モデルの保管」ウィンドウでモデルに「CommunitiesProvider」という名前を付け、「完了」をクリックします。

これで、空のモデルが作成されました。

次に、新規データ・サービスを作成する Community Service Definition Builder を定義します。図 7 を参照してください。このデータ・サービスは、サービス・コンシューマー・モデルとして動作する他のモデルによって消費されるよう公開することができます。次の手順を実行します。

  1. ワークベンチの「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、新規 Builder をモデルに追加します。
  2. 「カテゴリー」で「サービス」を選択し、「Builder タイプ」で「Service Definition」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「communities」を設定します。
  5. 「サービスを公開」が選択されていることを確認します。
  6. モデルを保管します。
図 7. Service Definition Builder
Service Definition Builder
Service Definition Builder

次に、Lotus Connections コミュニティー・サービスへの REST スタイルの呼び出しとの統合を可能にする REST Service Call Builder を追加します。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「データ統合」を選択し、「Builder タイプ」で「REST Service Call」を選択します。
  3. 「OK」をクリックします。
  4. 「名前」に「getAllBookmarks」を設定します。
  5. 「URL」に
    http://www.acme.com/communities/service/atom/community/bookmarks
    (または適切な URL) を設定します。
  6. Builder の「パラメーター」セクションで、次のパラメーターを追加します。現時点では、それぞれの値は空にしておきます (図 8 参照)。

    • communityUuid. この値は、消費側のポートレットでプロファイルされます。WebSphere Portlet Factory でのプロファイルは、値に基づいてポートレットの異なるバリエーションを生成するために使用されます。
    • Tag. この値は省略可能です。この値により、特殊なタグ値 communityUuid に基づいてコミュニティーまたはブックマーク結果をフィルターできます。この値は、消費側のポートレットでプロファイルされます。
    図 8. Builder のパラメーター
    Builder のパラメーター
    Builder のパラメーター
  7. Builder の「結果スキーマ」セクションで、次の作業を実行します。
    • 「スキーマの自動生成」、「フィード・データの再構築」、および「スキーマのキャッシュ」が選択されていることを確認します。
    • 「サンプル・データ URL」に:
      http://www.acme.com/communities/service/atom/community/bookmarks
      (または適切な URL) を設定します。
    • 2 つのサンプル・データ・パラメーターを作成します。1 つは communityUuid という名前のパラメーターで、デフォルト値は「35FG091E0E92932F37764EE3F30442000007」です。もう 1 つは tag という名前のパラメーターで、デフォルト値は「vendor_1」です。これらの値はご使用になる環境に応じて異なります。したがって、現在のコミュニティーのデプロイメントに存在する communityUuid と既存の tag を入力する必要があります。
  8. 「適用」をクリックします。この操作により、コミュニティー・サーバーが呼び出され、結果の XML のサンプルが取得されます。WebSphere Portlet Factory は、このサンプルを使用して自動的に結果のスキーマを生成します。
  9. モデルを保管します。

次に、任意のデータ・サービスまたはメソッド (この場合は、先ほど作成した REST サービス) を呼び出して結果を変換できるデータ・サービスに操作を追加する Service Operation Builder を追加します。図 9 を参照してください。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「サービス」を選択し、「Builder タイプ」で「Service Operation」を選択します。
  3. 「OK」をクリックします。
  4. 「データ・サービス」に「dogearSearch」を設定します。
  5. この操作に getAllMyBookmarks という名前を付けます。
  6. 「呼び出すアクション」として「DataServices/getAllBookmarks/execute」を指定します。この指定により、前の手順で作成した REST Call Builder のインスタンスが生成されます。
  7. 呼び出したアクションからの構造を使用するように、「入力構造処理」および「結果構造処理」の両方を設定します。
  8. 「適用」をクリックします。
  9. モデルを保管します。
図 9. Service Operation Builder の追加
Service Operation Builder の追加
Service Operation Builder の追加

次に、前のサンプル呼び出しで取得したフィールドを記述するためにリッチ・データ定義を追加します。これを追加することで、結果フィールドの表示と非表示を切り替えられます。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「サービス」を選択し、「Builder タイプ」で「Service Operation」を選択します。
  3. 「OK」をクリックします。
  4. オプションのリストから、コミュニティーをスキーマとして選択します。
  5. 「データ定義エディター」で、「コンテナー・エレメント」に「項目」が設定されていることを確認します。この設定により、返された各ブックマーク項目 (複数存在する場合もあります) に関する情報を操作できるようになります。
  6. リストに含まれている各フィールドで、データ・タイプがストリングに設定されていることを確認します。
  7. 「データ定義ファイルの作成」ボタンをクリックし、ファイルを
    /WEB-INF/data_definitions/communities.xml
    に保管します。
  8. モデルを保管します。

これで、前の例と同様に、「アクティブなモデルの実行」を選択することにより、データ・プロバイダー・モデルの CommunitiesProvider をテストできるようになりました。期待どおりの結果が得られた場合は、次のステップに移動できます。

アクセス制御されたブックマーク・ポートレットの作成

ブックマーク・ポートレットは、ポータル管理者によってポートレット・インスタンスに設定された communityUuid 値に基づき、特定のベンダーのコミュニティー用のすべてのブックマークを表示します。

データ・コンシューマー・モデル (ソース・ポートレット) を作成するには、次の手順を実行します。

  1. プロジェクトを右クリックし、「新規」->「WebSphere Portlet Factory モデル」を選択します。
  2. 「プロジェクトの選択」ウィンドウで「Dogear」を選択し、「次へ」をクリックします。
  3. 「モデルの選択」ウィンドウで「空」を選択し、「次へ」をクリックします。
  4. 「新規モデルの保管」ウィンドウでモデルに「CommunitiesPortlet」という名前を付け、「完了」をクリックします。

次に、プロバイダー・モデルをインポートします。このモデルは、プロバイダーで作成されたサービスをコンシューマーが利用できるようにします。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「モデル構造」を選択し、「Builder タイプ」で「Imported Model」を選択します。
  3. この Builder に「Connections Data」という名前を付け、使用するプロバイダー・モデルを指定します (図 10 参照)。
図 10. モデルのインポート
モデルのインポート
モデルのインポート

では、communityUuid と検索される tags を表す 2 つの変数を作成しましょう。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「変数」を選択し、「Builder タイプ」で「Variable」を選択します。この手順を 2 回繰り返し、tags という名前の変数と communityUuid という名前の変数を作成します。各変数のタイプはストリングです。

communityUuid 変数用の新規プロファイルを作成します。プロファイルは、特定の値に基づいてアプリケーション上で変数を定義できるようにする WebSphere Portlet Factory の概念です。この例では、ポートレット管理者が「共用設定の編集」を選択するときに設定された communityUuid の値に基づいてポートレットに表示する結果を変更します。

communityUuid 用の新規プロファイルを作成するには、次の手順を実行します。

  1. 変数 communityUuid が開かれた状態で、「初期値」用のフィールドの横にあるプロファイル・アイコンをクリックします。
  2. 「プロファイル・セットの作成」オプションを選択します。
  3. プロファイル・セットに「connections.communities.Edit」という名前を付けます。「複写するプロファイル・セット」として <none> を選択します。図 11 を参照してください。
    図 11. 「新規プロファイル・セット」ウィンドウ
    「新規プロファイル・セット」ウィンドウ
    「新規プロファイル・セット」ウィンドウ
  4. デフォルトのプロファイル値として「${Profile/connections.communities.Edit/communityUuid}」を設定します。「OK」をクリックします。これにより、communityUuid の値は「共用設定の編集」によって決定されます。図 12 を参照してください。
    図 12. 「プロファイル入力」ウィンドウ
    「プロファイル入力」ウィンドウ
    「プロファイル入力」ウィンドウ

次に、データ・プロバイダーのサービス操作を消費するために Service Consumer Builder を作成します。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「サービス」を選択し、「Builder タイプ」で「Service Consumer」を選択します。
  3. この Builder に「CommunitiesData」という名前を付け、プロバイダー・モデルを指定します。
  4. プロバイダー・モデルとして「CommunitiesProvider」を選択し、「すべてのプロバイダー操作を追加」と「入力をオーバーライド」を選択します。入力をオーバーライドすることで、communityUuid をこのサービス呼び出しへの入力パラメーターとして指定できます。図 13 を参照してください。
    図 13. 「サービス・コンシューマー」ウィンドウ
    「サービス・コンシューマー」ウィンドウ
    「サービス・コンシューマー」ウィンドウ
  5. 同じ Builder 内で、getAllMyBookmarks 操作を選択します。入力用のセクションで、communityUuid と tag に、先ほど作成した変数が設定されていることを確認します。図 14 を参照してください。
    図 14. 入力名と入力値
    入力名と入力値
    入力名と入力値
  6. リッチ・データ定義ファイルの値として、/WEB- INF/samples/data_definitions/communities.xml で前に作成したスキーマを設定します。
  7. この Builder を保管します。

次に、以下の手順を実行し、BookmarkPage という名前の新規ページを作成します。

  1. 次に、以下の手順を実行し、BookmarkPage という名前の新規ページを作成します。
  2. 「カテゴリー」で「ページ」を選択し、「Builder タイプ」で「Page」を選択します。
  3. この Builder に「BookmarkPage」という名前を付けます。

次に、サービスまたはデータ・プロバイダー呼び出しからの結果を作成済みのページにマッピングするために、Data Page Builder を作成します。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ページ修飾子」を選択し、「Builder タイプ」で「Data Page」を選択します。この Builder に「searchBookmarks」という名前を付けます。
  3. getAllMyBookmarks サービス呼び出しから返されるフィードを表すために、変数を「Variables/CommunitiesDataGetAllMyBookmarksResults」として設定します。
  4. オプションのリストで、ページ・タイプとして「BookmarkPage」を選択します。
  5. 「新規タグの場所」として「searchResults」を選択します。デフォルトでは、この値は BookmarkPage 内の <span> タグとして存在します。図 15 に示すように、それ以外のすべての項目を設定します。.
    図 15. プロパティーの設定
    プロパティーの設定
    プロパティーの設定

次に、リッチ・データ定義を結果フィールドに追加するために、Rich Data Definition Builder を作成します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「ページ修飾子」を選択し、「Builder タイプ」で「Rich Data Definition」を選択します。この Builder に「CommunitiesDataGetAllBookmarks」という名前を付けます。

結果フィールドを好みの方法でフォーマットできるか確かめることができます。

ここで、main メソッド用の Action Builder を作成します。このメソッドは、ポートレットが最初にロードされるときに呼び出されるメソッドです。次の手順を実行します。

  1. 「アウトライン」セクションでプラス符号 (+) のアイコンをクリックし、Builder をモデルに追加します。
  2. 「カテゴリー」で「フロー制御」を選択し、「Builder タイプ」で「Action List」を選択します。この Builder に「main」という名前を付けます (すべて小文字にします)。
  3. In the ActionList, set the first several actions as shown in figure 16 to make the initial connection.
    図 16. アクションの設定
    アクションの設定
    アクションの設定
  4. 次の ActionList では、コミュニティーから getAllBookmarks を実行するために「DataServices/CommunitiesData/getAllMyBookmarks」アクションを選択します。
  5. 最後のアクションでは、「BookmarkPage」ページを表示します。

最後に、これをポートレットに変換するために Portlet Adapter Builder を追加します。図 17 に示すように、このポートレットには「DogearBookmarks」という名前を付けます。

図 17. Portlet Adapter Builder
Portlet Adapter Builder
Portlet Adapter Builder

ポートレット WAR が構築されると、ポートレットをデプロイし、そのデフォルトの communityUuid を構成できます。次の手順を実行します。

  1. ポータル管理者としてログインし、DogearBookmarks ポートレットをページに配置します。
  2. ポートレットをデプロイしたページに移動し、ポートレットのタイトル (スキン内) の横にある「共用設定の編集」を選択します。
  3. 表示されたウィンドウで、この特定のページまたはポートレットへのアクセス権を持つベンダー・コミュニティーを表すコミュニティーの communityUuid を入力します。
  4. 変更内容を保管します。

この時点で、詳細なアクセス制御が可能なドッグイア・ポートレットの開発が完了しました。ポートレット・ページに戻り、異なるベンダー・アクセス権を持つ別のユーザーとしてログインします。ログインしたユーザーに応じてドッグイアの結果が変わることがわかります。

前述のポイントを繰り返しますが、Java コードは 1 行も書いていません。

また、ブラウザーから「Dogear This!」を選択すると、メンバーになっているコミュニティー内だけで文書をブックマークするオプションが表示されることに注目してください。

この例では、より高度な開発の基本について説明しています。結果の Atom フィードを受け取り、次のようなことができるようになりました。

  • コミュニティーのブックマーク用のタグ・クラウドをリターンおよびフォーマットする
  • タグを選択し、ドッグイアの結果を変更することで、タグ・クラウドに「クリックによってアクションを実行する」機能を持たせる
  • ターゲット・ポートレットに、選択された記事や記事のサムネールを表示できるようにする

まとめ

この記事では、WebSphere Portlet Factory を使用してポートレットを構築する方法について説明しました。Lotus Connections のコミュニティー・サービスおよびドッグイア・サービスからのデータにアクセスするポートレットについては、構築方法を手順ごとに示しました。また、WebSphere Portlet Factory で REST API Builder を活用し、Lotus Connections の 5 つのすべてのサービスからのデータを操作する Data Provider モデルの作成方法についても説明しました。これで、ポートレット間通信および Lotus Connections サービスへの詳細なアクセス制御といった高度な機能が含まれるカスタマイズを構築できるスキルが得られました。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Lotus, WebSphere
ArticleID=377890
ArticleTitle=IBM WebSphere Portlet Factory を使用して IBM Lotus Connections と IBM WebSphere Portal を統合する
publish-date=03272009