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

developerWorks Japan  >  Lotus  >

Lotus Notes 8 における Composite Applicationの概要と開発手法

Lotusシリーズ

developerWorks
ページオプション

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

サンプルコード


レベル: 初級

林田 憲昌 (hysd@jp.ibm.com), WPLC開発 / ソフトウェア開発研究所 , IBM

2007年 6月 29日

まもなくリリースが予定されている IBM Lotus Notes 8(Notes 8)には様々な新機能が提供されており、革新的なユーザーインターフェイスや新しいプラットフォーム・アーキテクチャを導入することによって、より最適なコラボレーション・プラットフォームへと進化を遂げています。その概要については IBM Lotus Notes 8 技術概説 を参照してください。本稿では、その中でも最も重要な新機能の1つである Composite Application について、その概要を説明し、そのアプリケーション開発手法について、具体的な例を示しながら解説します。
※なお本稿では、Lotus Notes 8 Beta3、Eclipse 3.2.2、Google Desktop for Enterprise 5.1.0705.14375-ja-pbを使用し、Windows XP上で開発および動作確認を行っています。

Composite Applicationの概要

今日、エンドユーザーが日々の業務を遂行するにあたって、様々な種類の独立したアプリケーションを併用することは珍しくありません。それは Lotus Notes であったり、Java アプリケーションであったり、Web ブラウザであったりするわけですが、各アプリケーションはそれぞれ異なる機能を持ち、様々な種類のデータを扱うため、そのことはやむを得ない部分もあります。しかし、1つのタスクを実行するために、複数のアプリケーションの切り替えを繰り返さなければならないため、目的のデータやアプリケーションを見失ってしまうといったことが頻繁に起こり得ます。また、各アプリケーション間のデータ連携も手動で行う場合が多く、非常に手間がかかります。こういった複雑さや煩わしさが業務の効率を低下させる原因の1つとなっています。

その解決策として考え出されたのが Composite Application というコンセプトです。Composite Application とは、複数のコンポーネントをビジネスの目的に応じて組み合わせた複合アプリケーションのことを指します。ここで言うコンポーネントとは、UI やビジネスロジック、データストレージを含む再利用性を考えて開発されたソフトウェア部品のことであり、例えば Lotus Notes においては NSF アプリケーションがそれに当たります。図1は Composite Application の例で、2つの Notesコンポーネント(NSF アプリケーション)と1つの Eclipse コンポーネントが組み合わされています。このように、あるタスクを完了するために必要とされるすべてのコンポーネントを集めて一つの画面上に表示させるようなアプリケーションを、その目的やユーザーの役割ごとに作成することにより、利用者は、アプリケーションの切り替えに煩わされることなく一度に素早くすべての情報にアクセスすることができるようになります。これにより、ユーザーはタスクの実行そのものに集中することができ、日々の生産性を大幅に向上させることが可能になります。


図1. Composite Application の例
図1. Composite Application の例

また、各コンポーネントは、ただ並べて表示させることができるだけではなく、お互いにデータをやり取りしたり、データを受け取ったときになんらかのロジックを実行したりするといったコンポーネント間通信も可能になっています。これにより、ユーザーは手動によるデータ連係からも解放され、利便性や生産性がさらに向上していくことが期待できます。

このようなコンポーネント間通信を可能にするために、Notes 8 では Property Broker と呼ばれる仕組みを提供しています。Property Broker は一種の Service Bus のような形で Notes 8 プラットフォーム上に存在しており、コンポーネント間のインタラクションは、この Property Broker を介して行われます。ここで、Property Broker の仕組みを用いたコンポーネント間通信の流れを説明する前に、このフレームワークにおいて頻出する用語について簡単に整理します。

Propertyコンポーネント間で受け渡されるデータ。Type や Namespace が厳密に定義されている。
ActionProperty を受け取ったときに、それをトリガーとして実行されるロジック。
SourceProperty (Output Property) をパブリッシュ(送信)するコンポーネント。
TargetProperty (Input Property) を受け取り、Action を実行するコンポーネント。
WireSource側 のProperty と Target 側のAction の接続。 Output Property と Input Property の Type と Namespace が一致しないと Wire することはできない。
Component Interfaces各コンポーネントが使用する Property と Action の定義を WSDL形式で記述したもの。Property Broker への登録の際にこの WSDL が使用される。

これらの用語を用いて、図1の Composite Application で行われるコンポーネント間通信の流れについて、左上の個人アドレス帳が Source である場合について説明します。まず、Source である Notes コンポーネントは、任意の文書が選択されると、その文書のデータ(この例の場合、ユーザー名)を使ってProperty(Output Property)を生成しパブリッシュします。Property Broker はどのコンポーネント同士が Wire されているのかを知っており、この Source と Wire されている Target(この例の場合、下に配置されている Notes ディスカッションアプリケーション)に対して Property を転送します。Property(Input Property)を受け取った Target はそれに対応する Action を実行します(この例の場合、Notes View 上の文章の選択位置を、受信したユーザー名の場所に移動させる)。以上のような流れにより、あるコンポーネント上で操作を行うと、それに応じて他のコンポーネントの状態が変化するといったコンポーネント間通信を行うことができます(図2)。


図2. Property Broker Programming Model
図2. Property Broker Programming Model

このような Property Broker という仕組みを使うことにより、疎結合によるコンポーネント間通信を実現することができます。各コンポーネントは互いに独立しており、その実装に依存しないため、様々な 種類のコンポーネント(Notes コンポーネントや Eclipse コンポーネント、Webコンポーネントなど)を自由に組み合わせ、連携させることができます。また、既存のアプリケーションもこの Property Broker に対するインターフェイスを用意するだけで、Composite Application のコンポーネントとして再利用することができます。以上のようなことから、ソフトウェア資産の再利用や機能拡張を容易に行うことができ、効率のよいソフトウェア開発を行うことが期待できます。このような特徴が、Composite Application はフロントエンドにおける SOA である、と言われる所以です。




上に戻る


Notes 8 における Composite Application

Composite Application という考え方は Notes 8 で初めて導入されたものではなく、元々は WebSphere Portal が提供している仕組みの一つでした。 WebSphere Portal においては、Portlet と呼ばれる Web コンポーネントを、目的に応じて組み合わせながら1つのページ内に複数配置し、Click-to-Action と呼ばれる仕組みを使って Portlet 間通信を行うことで Composite Application を実現しています。この Click-to-Action を実現するために考え出されたのが Property Broker と呼ばれるフレームワークです。このようなコンポーネント間通信をリッチクライアント上でも利用可能にするために、Property Broker の Eclipse プラットフォーム上への移植を行ったのが Lotus Expeditor です。Lotus Expeditor は、Eclipse RCP をベースとしたリッチクライアント・アプリケーションのためのプラットフォームであり、Notes 8 もこの Lotus Expeditor 上に構築されています。Property Broker が Lotus Expeditor に移植されたことにより、Eclipse コンポーネントも Composite Application の部品として利用できるようになりました。そして、Notes 8 もこの Lotus Expeditor 版 Property Broker の機能を引き継いでいるのはもちろんのこと、さらなる拡張により、Notes コンポーネントをも部品として利用可能にしています。これにより、Notes 8 においては、Notes コンポーネント、Web コンポーネントおよびEclipse コンポーネントを、 Lotus Expeditor 上の Property Broker を介して連携させることが可能となっています(図3)。


図3. Notes 8 High Level Programming Model
図3. Notes 8 High Level Programming Model

Notes 8 は Composite Application をより利用しやすくするために、Composite Application Editor(CAE) と呼ばれるComposite Application を組み立てるための新しいツールも提供しています。従来、WebSphere Portal や Lotus Expeditor において Composite Application を作成する場合に、コンポーネントのレイアウトや接続の設定をエンドユーザーが行うためには、WebSphere Portal 上で動作する Application Template Editor と呼ばれる Web アプリケーションを利用するのが一般的でした。Notes 8 ではこれに加えて、リッチクライアントベースの CAE を提供することにより、ドラッグ & ドロップによるコンポーネントのレイアウトや接続(Wire)といった直感的な操作を可能としており、エンドユーザーがより容易に Composite Application を組み立てることができるようになっています(図4)。

また、Composite Application を配信する際に、従来はWebSphere Portal の Template Library にレイアウト情報などを保存していましたが、Notes 8 では、Composite Application の定義をNSF ファイルに格納し、Lotus Domino 上やローカルディスクに保存できるようになっています(図4)。

これにより、Notes 8 があれば、WebSphere Portalを利用することなく Notes/Domino のみで Composite Application の開発を行うことも可能です。本稿で作成するサンプルもまた Notes/Domino のみを用いています。


図4. Composite Application System Diagram
図4. Composite Application System Diagram



上に戻る


Composite Applicationの開発

実際にどのようにして Composite Application を開発していくのかについて、具体的な例を示しながら説明していきます。本稿では、Notes 8 のメールコンポーネントと Eclipse コンポーネントとを連携させるような Composite Application をサンプルとして作成します。ここで用いる Eclipse コンポーネントは、図5のような、キーワードを入力すると Google Desktop for Enterprise を使ってローカルに置かれたNotes メーアプリケーションを検索し、その結果を SWT View 上に表示するという単純なものです。このサンプル Eclipse コンポーネントはこちらからダウンロードできます。このような Notes 8 上で動作する Eclipse コンポーネントの開発方法はLotus Expeditor アプリケーションを開発する場合と同様です。詳細な手順については Lotus Expeditor 6.1入門 (2): Toolkitによるアプリケーション開発手順の紹介 を参照してください。


図5. Google Desktop for Enterprise で Notes メールアプリケーションを検索する Eclipse plug-in
図5. Google Desktop for Enterprise で Notes メールアプリケーションを検索する Eclipse plug-in

本稿では、以下のような連携をする Composite Application を作成します。

  1. Notes コンポーネント-> Eclipse コンポーネントの連携
    Notes メールコンポーネントの Notes View 上でメール文章が選択された際に、その送信者名を Property としてパブリッシュする。Eclipse コンポーネントはその Property を受け取ると、その値をキーワードとして検索を行うという Action を実行する。
  2. Eclipse コンポーネント -> Notes コンポーネントの連携
    Eclipse コンポーネントの SWT View 上でメール検索結果が選択された際に、その送信者名を Property としてパブリッシュする。Notes メールコンポーネントはその Property を受け取ると、新規メール作成画面を開き、その送信者名をToフィールドに入れる。



上に戻る


1. Notes コンポーネント -> Eclipse コンポーネントの連携

1-A. Notes コンポーネントの設定

Notes コンポーネントが外部のコンポーネントと送受信できるデータ(Property)や、Property を受け取ったときにどのような動作(Action)を実行するかは、WSDL形式で定義され、Wiring Properties というデザイン要素としてテンプレートに格納されます。Notes コンポーネントを Domino Designer 8 で開くと、新たに Composite Applications という項目が追加されており、WSDLファイルを Wiring Properties として格納可能なことが確認できます(図6)。Notes コンポーネントは、ここに WSDL ファイルを格納することで、他のコンポーネントとの連携が可能となります。


図6. Notes 8 でデザイン要素として追加された Wiring Properties
図6. Notes 8 でデザイン要素として追加された Wiring Properties

Notes 8 のメールテンプレートには、デフォルトでいくつかの Property や Action が事前に定義されています。具体的にどのような Property や Action が利用できるのかについては、Property Broker Editor で確認することができます。メールアプリケーションを Domino Designer 8 で開き、「Composite Applications」 -> 「Wiring Properties」 を開いて 「MailComponent.wsdl」 を選択し、「Open File」 をクリックすると(図6)、Property Broker Editor が起動します。この画面上に WSDL ファイルの内容がグラフィカルに表示されます(図7)。これにより、例えば、メールの送信者の名前やメールアドレスを Property として外部のコンポーネントとやり取りできるようになっていることがわかります。本稿で作成するサンプルでは、メールの送信者名を外部の Eclipseコンポーネントに渡せればよいので、デフォルトのまま使用することにしますが、ここに定義されていない Property や Action を使いたい場合などは、この Property Broker Editor 上で、新規作成や値の編集などを行うことができます。Property Broker Editorを利用することにより、直接 テキストエディタなどを使う場合よりも、容易かつ安全に WSDL ファイルを編集することができます。


図7. Property Broker Editor
図7. Property Broker Editor

このようにして定義された Property を Notes コンポーネントから他のコンポーネントにパブリッシュする方法はいくつか用意されていますが、その一つに、Notes View 上で文章が選択された際に、その View 上に表示されている情報をパブリッシュする方法があります。その方法を利用するためには Notes View のデザインを少々変更する必要があります。本稿で作成するサンプルで行いたいメールの送信者名のパブリッシュは、Notes 8 のメールテンプレートではデフォルトで利用可能な設定となっていますが、実際にどのような変更が必要なのかを知るために、ここではその内容を確認していくことにします。

Notes メールアプリケーションを Domino Designer 8 で開き、「Folders」 -> 「($Inbox)」 を選択します(図8)。


図8. ($Inbox) フォルダ
図8. ($Inbox) フォルダ

「Sender」 カラム(左から5番目)を選択し、右クリックメニューで 「Column Properties」 を選択します(図9)。


図9. Sender Column のプロパティボックスを表示させる
図9. Sender Column のプロパティボックスを表示させる

プロパティボックスの 「Advanced」 タブ(一番右)を選択し、「Composite Settings」 の 「Property」 として 「commonName」 が選択されていることを確認してください(図10)。ここで選択肢としてリストされるのは WSDL ファイルに定義されている Property の一覧です。この設定により、「($Inbox)」 ビュー上で文章が選択された際に、「Sender」 カラムに表示されている値が 「commonName」 という Property としてパブリッシュされるようになります。


図10. Sender Column の Advanced 設定
図10. Sender Column の Advanced 設定

以上で Notes コンポーネント側の準備は完了です。今回作成するサンプルのために必要となる変更はありません。

1-B. Eclipse コンポーネントの設定

次に、Notes コンポーネントからパブリッシュされた Property を受けとり、それをトリガーとして何らかの Action を起動する拡張の追加を Eclipseコンポーネント側に行います。事前準備として、Eclipse から Notes 8 を起動できるように設定してください。詳細な設定手順については IBM Lotus Notes 8 アプリケーション開発環境 を参照してください。

Composite Application において、Eclipseコンポーネントが他のコンポーネントと連携するためには、Notes コンポーネントの場合と同様に、Property や Action を定義した WSDL ファイルを作成し、Plug-in 内部に格納する必要があります。ここでは、Notesメールコンポーネントがパブリッシュする Property と同じ Type および Namespace をもつ Property を定義し、その Property を受信したときにどの Java Class を呼び出して Action を実行するのかを設定します。

ここでは以下のような WSDL ファイルを 「Sample.wsdl」 として作成し、Plug-in プロジェクト内の 「wsdl」 フォルダ内に配置します(図11)。WSDLファイル作成の際には、上述の Property Broker Editor を使って編集し、Export させると便利です。

      
 <definitions name="PropertyBrokerWSDL"
   targetNamespace="http://www.ibm.com/wps/c2a/testwsdl"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:portlet="http://www.ibm.com/wps/c2a"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:tns="http://www.ibm.com/wps/c2a/testwsdl"
   xmlns:ibmst="http://com.ibm.propertybroker.standardtypes">
   
   <types>
      <xsd:schema targetNamespace="http://com.ibm.propertybroker.standardtypes">
         <xsd:simpleType name="commonName">
	   <xsd:restriction base="xsd:string"/>
         </xsd:simpleType>
      </xsd:schema>
   </types>

   <message  name="setCommonName_Message">
      <part name="setCommonName_Part" type="ibmst:commonName"/>
   </message>
	    
   <portType name="Operations">
      <operation  name="setCommonName_Operation">
         <input message="tns:setCommonName_Message"/>
      </operation>
   </portType>

   <binding name="Binding" type="tns:Operations">
      <portlet:binding/>
      <operation  name="setCommonName_Operation">
         <portlet:action  name="SetCommonNameInputProperty" 
caption="Set common name" description="Set common name"/>
         <input>
	   <portlet:param name="setCommonName" partname="setCommonName_Part" 
caption="Set common name" description="Set common name "/>
         </input>
      </operation>
   </binding>
</definitions>


図11. Sample.wsdl の配置
図11. Sample.wsdl の配置

配置した WSDL ファイルに定義されている Property や Actionの定義を読み取り、PropertyBroker に登録して利用可能にするためには、拡張ポイント 「com.ibm.rcp.propertybroker.PropertyBrokerDefinitions」 を使用する必要があります。この拡張ポイントを利用するためには、まず、「plugin.xml」 を開いて 「Dependencies」 タブを選択し、「Required Plug-ins」 セクションの 「Add...」 で 「com.ibm.rcp.propertybroker」 を追加する必要があります。また、「com.ibm.rcp.propertybroker.swt」 には、Eclipseコンポーネント上でPropertyBrokerを使用する際によく利用される API が含まれているので、ここで追加しておくと便利です(図12)。


図12. Required Plug-ins の追加
図12. Required Plug-ins の追加

次に、拡張ポイントを追加します。「Extensions」 タブを選択し、「Add...」 をクリックしてダイアログを開きます。拡張ポイント一覧の中から 「com.ibm.rcp.propertybroker.PropertyBrokerDefinitions」 を選択し、「Finish」 をクリックしてください(図13)。


図13. 新規拡張ポイントの追加
図13. 新規拡張ポイントの追加

追加された拡張ポイントを選択し、コンテキストメニューから 「New」 -> 「handler」 を選択します(図14)。


図14. 新規 handler の作成
図14. 新規 handler の作成

「file」 として先ほど配置した WSDL ファイルを指定し、「type」 として 「SWT_ACTION」 を選択します。入力が完了したら 「class:」 ラベルをクリックしてください(図15)。


図15. 新規 handler のプロパティ
図15. 新規 handler のプロパティ

任意のクラス名やパッケージ名を入力し、「Interfaces」 として 「org..eclipse.core.commands.IHandler」 が選択されていることを確認して 「Finish」 をクリックしてください(図16)。


図16. 新規 ActionHandler クラスの作成
図16. 新規 ActionHandler クラスの作成

ここで作成されたJava Class が、Property を受信したときに実行される Action として使用されます。具体的には、Property を受信したときに IHandler#execute(ExecutionEvent) が呼び出されます。受信した Property のデータは ExcecutionEvent の中に格納されており、例えば、以下のようなコードで取り出すことができます。

                
import org.eclipse.core.commands.ExecutionEvent;
import com.ibm.rcp.propertybroker.event.PropertyChangeEvent; 
import com.ibm.rcp.propertybroker.property.PropertyValue;
…
…
public
 Object execute(ExecutionEvent event) 
throws ExecutionException {
   if
 (event.getTrigger() 
instanceof PropertyChangeEvent) {	
      PropertyChangeEvent pce = (PropertyChangeEvent) event.getTrigger();

      PropertyValue propertyValue = pce.getPropertyValue();			
   …
      …
  }
}

本稿で作成するサンプルにおいては、この Action のなかで、受け取ったデータ(メールの送信者名)を取り出し、それをキーワードとして検索を行って SWT View 上に検索結果を表示するというロジックを実行しています。

以上で、Eclipse コンポーネント側の準備は完了です。

1-C. Composite Application の作成

ここまでの手順で、各コンポーネントは他のコンポーネントと連携可能となりました。今度は、それらのコンポーネントをレイアウトし、接続(Wire)することで、Composite Application を組み立てていきます。前述したように、Notes 8 はその組み立てを行うためのツールとして CAE を提供しています。ここでは、Notes コンポーネントと Eclipse コンポーネントが連携するような Composite Application を、CAE を用いて作成する手順について示していきます。

まず、先ほど拡張を行ったサンプル Eclipseコンポーネントが Workspace に読み込まれている Eclipse を使って Notes 8 を起動します(図17)。


図17. Eclipse から Notes 8 を起動
図17. Eclipse から Notes 8 を起動

Notes のメニューから 「File」 -> 「Application」 -> 「New...」を 選択して 「New Application」 作成ダイアログを表示します。「Template」 として 「-Blank Composite Application-」 を選択し、任意の 「Title」 や 「File name」 などを入力して、「OK」 をクリックしてください(図18)。


図18. 新規 Notes Application 作成画面
図18. 新規 Notes Application 作成画面

新規 Composite Application が作成され、自動的にオープンされますが、まだ中身は空の状態なので警告文が表示されます。ここにコンポーネントを配置するために、CAE を起動させます。Notes のメニューから 「Actions」 -> 「Edit Application」 を選択してください(図19)。


図19. Edit Application メニュー
図19. Edit Application メニュー

図20が CAE の初期状態です。コンテンツが空の状態なので、まずは、コンポーネントの配置を行う必要があります。基本的な手順としては、右側の 「Component Palette」 に Notes コンポーネントや Eclipse コンポーネントを読み込み、使用するコンポーネントを選択して、真ん中のページにドラッグ & ドロップで配置していくといった操作となります。よく利用される Notes の PIM (Personal Information Management) コンポーネントは、あらかじめ 「Component Palette」 に登録されおり、今回は 「Notes Mail View」 コンポーネントを利用するので、まずはこれを配置します。


図20. CAE の初期状態
図20. CAE の初期状態

「Component Palette」 上の 「Notes Mail View」 コンポーネントを選択し、真ん中のページにドラッグ&ドロップで配置します(図21)。


図21. Notes Mail View コンポーネントの配置
図21. Notes Mail View コンポーネントの配置

次に Eclipse コンポーネントを 「Component Palette」 に読み込みます。ここでは、サンプルEclipse コンポーネントが Workspace に読み込まれた Eclipse から起動しているので、それらはローカルにインストールされたコンポーネントとして読み込むことができます。「Component Palette」 上でコンテキストメニューから 「Add Components」 -> 「Add Locally Installed Components」を 選択してください(図22)。


図22. コンポーネントの追加メニュー
図22. コンポーネントの追加メニュー

ローカルにインストールされているコンポーネントの一覧が表示されるので、作成したサンプルEclipse コンポーネントを選択し、 「OK」 をクリック してください(図23)。


図23. ローカルにインストールされているコンポーネントの一覧
図23. ローカルにインストールされているコンポーネントの一覧

ここで、開発中の Eclipse コンポーネントが一覧に表示されない場合は、コンポーネント側の設定が不足している可能性があります。Notes 8 において CAE で読み込むことができる Eclipse コンポーネントは、UI として Eclipse View を持ち、その View のオプションとして 「allowMultiple」 オプションが true になっているコンポーネントのみです(図24)。うまく読み込むことができない場合は、plugin.xml を開いてこの設定を確認してみてください。


図24. Eclipse View の allowMultiple オプション
図24. Eclipse View の allowMultiple オプション

読み込まれた Eclipse コンポーネント(SampleView)を選択し、真ん中のページにドラッグ & ドロップで配置します。図 25 のように、「Notes Mail View」 コンポーネントと縦並びになるように配置してください。縦並びに配置するためには、ドラッグする先を表示エリアの下のほうにもって行きます。ドロップ位置がグレーの四角として表示されますので、縦並びとなるような配置が行われることを確認して、ドロップしてください。


図25. Eclipse コンポーネントの配置
図25. Eclipse コンポーネントの配置

コンポーネントの配置が完了したので、今度はコンポーネント間の連携を可能にするために接続(Wire)を行います。左側のNavigator 上で 「Notes Mail View」 を選択し、コンテキストメニューから 「Wiring」 を選択してください(図26)。


図26. Notes Mail View コンポーネントの Wiring メニュー
図26. Notes Mail View コンポーネントの Wiring メニュー

Wiring ページが開き、ページに配置されているコンポーネントと、各コンポーネントが利用できる Property や Action の一覧が表示されます。図27の例では、Propertyをパブリッシュする側である 「Source」 にあたるのが 「Notes Mail View」 コンポーネントであり、この 「Source」 がパブリッシュできる Property の一覧が表示されています。逆に、Property を受け取り、Action を実行する側である 「Target」 にあたるのが 「SampleView」 で、この 「Target」 が実行できる Action の一覧が表示されています。

「Source」 がパブリッシュする Property と、「Target」 が Action を実行するために受け取る Property の Namespace と Type が一致する場合にのみ、コンポーネントを接続(Wire)することができます。「Source」 上で任意の Property を選択した際に、接続可能な Action が存在する場合には、Action の名前の横に アイコンが表示されます。この時、「Target」 の Action に向かってマウスをドラッグして線を引っ張ることで Wire を行うことができます(図27)。本稿で作成するサンプルでは、「NotesMailView」 コンポーネントの 「Common name」 と 「SampleView」 コンポーネントの 「Set common name」 を接続することができます。接続(Wire) が完了すると、図28のように表示されるので、「OK」 をクリックし設定を保存してください。以上で、「Notes Mail View」 コンポーネントと 「SampleView」 コンポーネントが連携可能になりました。


図27. Wiring の開始
図27. Wiring の開始

図28. Wiring 完了
図28. Wiring 完了

CAE を閉じると、作成した Composite Application が自動的にオープンされ、図29のように Composite Application が利用可能になります。

ここまでの手順により、

  1. Notes メールコンポーネント上でメール文章を選択すると、「Sender」 の名前が Property としてパブリッシュされる。
  2. サンプル Eclipse コンポーネントはパブリッシュされた Property を受け取り、それを起点として、「Sender」 の情報を取り出して検索キーワードを作り、Notesメールコンポーネントの検索を行って結果を表示する、という Action を実行する。

という処理が行えるようになりました。


図29. Notes コンポーネント -> Eclipse コンポーネント の連携が行われたサンプル Composite Application
図29. Notes コンポーネント -> Eclipse コンポーネント の連携が行われたサンプル Composite Application



上に戻る


2. Eclipse コンポーネント -> Notes コンポーネントの連携

次に、Eclipse コンポーネントから Property をパブリッシュし、Notes コンポーネントが Action を実行できるようにするための手順を示します。

2-A. Notes コンポーネントの設定

まず、Eclipse コンポーネントから Propertyがパブリッシュされてきたときに、Notes コンポーネント側で Action を実行できるように設定します。そのためには、テンプレート内の WSDL ファイルに Action を定義する必要がありますが、本稿で作成するサンプルには、メールコンポーネントにあらかじめ用意されている Action を利用することにします。どのような Action が利用できるのかは Property Broker Editor で確認することができ(図30)、ここでは、「toField」 という Property を受け取ったときに、そのデータを To フィールドに入れて新規メール作成画面を開くような 「NewMemoUsingToField」 という Action をそのまま使うことにします。


図30. Notes メールコンポーネントで利用できる Action の一覧
図30. Notes メールコンポーネントで利用できる Action の一覧

では、実際に Action を実行できるようにするためにどのような変更が必要なのかについて、ここではその内容を確認していくことにします。WSDL における Action の定義に実際に紐づけることができるのは、図31のような Notes Action です。この Notes Action を表示するために、Domino Designer 8 でメールコンポーネントの 「Folders」 -> 「($Inbox)」 を開き、メニューから 「View」 -> 「Action Pane」 を選択してください。


図31. Action Pane の表示
図31. Action Pane の表示

Notes Action 一覧の中から 「NewMemoUsingToField」 選択し、コンテキストメニューから「Action Properties」を選択してください(図32)。


図32. NewMemoUsingToField のプロパティを表示
図32. NewMemoUsingToField のプロパティを表示

プロパティボックスの 「Advanced」 タブ(一番右)を選択し、「Composite Settings」 のAction Name として 「NewMemoUsingToField」 が選択されていることを確認してください(図33)。ここで選択肢としてリストされるのは WSDL ファイルに定義されている Action の一覧です。この設定により、「NewMemoUsingToField」 Action を実行するトリガーとなる Property(この場合 「toField」)を受け取ったときに、このNotes Action が実行されるようになります。


図33. Notes Action の Advanced 設定
図33. Notes Action の Advanced 設定

実際に実行したいロジックは、この Notes Action の 「Click」 メソッドに LotusScript や JavaScript、@関数などを使って実装します。この 「NewMemoUsingToField」 には、以下のような、メール作成画面を開き、PropertyBrokerから受け取ったデータを 「SendTo」 フィールドにセットするようなロジックがLotusScriptで実装されています。Notes 8 では PropertyBroker 関連の Notes API が追加されており、LotusScript を使って Property を送受信したりするなどといったことが可能になっています。API の詳細については Domino Designer 8 のヘルプを参照してください。

細については Domino Designer 8 のヘルプを参

以上で Notes コンポーネント側の準備は完了です。今回作成するサンプルのために必要となる変更はありません。

2-B. Eclipse コンポーネントの設定

Eclipse コンポーネント側は、「NewMemoUsingToField」 Action を実行するトリガーとなる 「toField」 Property をパブリッシュする必要があります。そのためには、まず、「toField」 Property の定義を WSDL ファイルに追加する必要があります。以下のように、1-B節で作成した 「Sample.wsdl」 ファイルを編集し、その定義を追加してください。太字の箇所が新たに追加する部分です。

<definitions name="PropertyBrokerWSDL"
   targetNamespace="http://www.ibm.com/wps/c2a/testwsdl"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:portlet="http://www.ibm.com/wps/c2a"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:tns="http://www.ibm.com/wps/c2a/testwsdl"
   xmlns:ibmst="http://com.ibm.propertybroker.standardtypes">

   <types>
      <xsd:schema targetNamespace="http://com.ibm.propertybroker.standardtypes">
         <xsd:simpleType name="commonName">
            <xsd:restriction base="xsd:string"/>
         </xsd:simpleType>
         <xsd:simpleType name="toField">
            <xsd:restriction base="xsd:string"/>
            </xsd:simpleType>
         </xsd:schema>
   </types>

   <message  name="setCommonName_Message">
      <part name="setCommonName_Part" type="ibmst:commonName"/>
   </message>
   <message  name="ToField_Message">
      <part name="ToField_Part" type="ibmst:toField"/>
   </message>
	    
   <portType name="Operations">
      <operation  name="setCommonName_Operation">
         <input message="tns:setCommonName_Message"/>
      </operation>
      <operation  name="ToField_Operation">
         <output message="tns:ToField_Message"/>
      </operation>		
   </portType>

   <binding name="Binding" type="tns:Operations">
      <portlet:binding/>
         <operation  name="setCommonName_Operation">
            <portlet:action  name="setCommonNameInputProperty" 
caption="Set common name" description="Set common name"/>
            <input>
               <portlet:param name="SetCommonName" partname="setCommonName_Part" 
caption="Set common name" description="Set common name"/>
            </input>
         </operation>
         <operation  name="ToField_Operation">
            <portlet:action  name="toField" caption="to field" description="to field"/>
            <output>
               <portlet:param name="toField" partname="ToField_Part" 
caption="to field" description="to Field"/>
            </output>
         </operation>
   </binding>
</definitions>

次に、この Property をパブリッシュするためのロジックを実装します。ここでは、メール検索結果が選択された時に、以下のようなコードが実行されるようにします。API の詳細については Lotus Expeditor Information Center を参照してください。これにより、「toField」 Property を生成し、パブリッシュすることができるようになります。

                
import com.ibm.rcp.propertybroker.property.Action;
import com.ibm.rcp.propertybroker.property.PropertyController;
import com.ibm.rcp.propertybroker.property.PropertyFactory;
import com.ibm.rcp.propertybroker.property.PropertyValue;
import com.ibm.rcp.propertybroker.service.PropertyBroker;
…
…
   searchResultTableViewer.addSelectionChangedListener(new ISelectionChangedListener(){
      public void selectionChanged(SelectionChangedEvent event) {
         …
         …
         PropertyBroker propertyBroker = PropertyBrokerFactory.getBroker();

         PropertyController propertyController = PropertyFactory.createProperty();
         propertyController.setNamespace("http://com.ibm.propertybroker.standardtypes");
         propertyController.setName("toField");
         propertyController.setType("toField");
						
         PropertyValue propertyValue = PropertyFactory.createPropertyValue(propertyContr
oller, sToFieldUserName);
         SWTHelper.changeProperty(new
 PropertyValue[]{propertyValue}, 
this);
         …
         …
      }
…
…

以上で、Eclipse コンポーネント側の準備は完了です。


2-C. Wiring の設定

新たに設定した Property と Action を接続します。1-C節で作成したサンプル Composite Application を CAE で開き、Navigator 上で 「SampleView」 コンポーネントを選択して、コンテキストメニューから 「Wiring」 を選択してください(図34)。


図34. SampleView の Wiring メニュー
図34. SampleView の Wiring メニュー

今度は 「SampleView」 コンポーネントが 「Source」 となり、「Notes Mail View」 コンポーネントが 「Target」 となります。「to field」 Property から 「New memo using to field」 Action に接続が可能になっているので、マウスでドラッグして線を引っ張り、Wiring してください(図35)。以上で、Eclipseコンポーネント -> Notes コンポーネント方向の連携が可能になりました。


図35. Eclipse コンポーネントから Notes コンポーネントへの接続
図35. Eclipse コンポーネントから Notes コンポーネントへの接続

CAE を閉じると、作成した Composite Application がオープンされます(図36)。

この手順により、新たに、

  1. サンプル Eclipse コンポーネント上でメールの検索結果を選択すると、送信者の名前が 「toField」 Property としてパブリッシュされる。
  2. Notes メールコンポーネントは 「toField」 Property を受け取り、それをトリガーとして 「NewMemoUsingToField」 という Notes Action を実行する。

といったことができるようになりました。


図36. Eclipse コンポーネント -> Notes コンポーネント の連携も可能になったサンプル Composite Application
図36. Eclipse コンポーネント -> Notes コンポーネント の連携も可能になったサンプル Composite Application

以上でサンプル Composite Application の作成は完了です。




上に戻る


Composite Application のデバッグ

Composite Application のデバッグを行うために、各コンポーネント間でどのような Property が送受信されているのかを確認することができるコマンドラインツールが提供されています。例えば、Notes 8 を起動している Eclipse のコンソール上で 「pbsh p」 と入力することで、Property Broker に登録されている Property の一覧を表示させたり(図37)、「pbt <Property>」 で特定の Property が送受信された時にその内容をトレースするといったことが可能です。


図37. コマンドラインツールによる Property 一覧の表示
図37. コマンドラインツールによる Property 一覧の表示

コマンドラインツールでは使い勝手が悪いという場合には、Lotus Sandbox で提供されている Composite Application Debug Tools for IBM Lotus Notes 8 Beta 3 を利用すると便利です。コマンドラインツールと同様の操作をUI 上で行うことができます。このツールをインストールすると、図38のような UI 上でProperty の一覧を確認することができます。


図38. Topology Peek を使った Property 一覧の表示
図38. Topology Peek を使った Property 一覧の表示

さらに、特定の Wire を選択し、コンテキストメニューから 「Tracing」 を選択することで、その Wire を使ってやりとりされる Property のトレースを開始することもできます(図39)。


図39. Trace を開始
図39. Trace を開始

トレースの内容は Property Broker Monitor で確認することができます。この Monitor を表示させたい Composite Application を開き、Notes のメニューから から 「Tools」 -> 「CA Debug」 -> 「Show Actions and Properties」 を選択することで、同じ画面上に表示させることができます(図40)。各トレースメッセージのコンテキストメニューから 「Show」 を選択すると、さらに詳細な情報を表示させることができます。図41の例では、パブリッシュされた 「commonName」 Property にどのような値が含まれているのかを表示させています。


図40. Composite Application 内に Property Broker Monitor を表示
図40. Composite Application 内に Property Broker Monitor を表示

図41. パブリッシュされたProperty の内容を表示
図41. パブリッシュされたProperty の内容を表示

このようなツールを用いることにより、コンポーネント間のデータの流れを把握しやすくなり、より効率的なデバッグを行うことができるようになります。




上に戻る


まとめ

本稿では、IBM Lotus Notes 8 から新たに利用可能となった Composite Application の概要とその開発手法について具体的な例を示しながら説明しました。Composite Application の仕組みを利用することで、別々に作られたコンポーネント同士を、目的や用途に応じて、自由に組み合わせたり連携させたりすることができるようになります。これにより、例えば、関連するタスクを処理するコンポーネントを組み合わせた Composite Application を作成することで、一つの画面で同時に複数のタスクを処理するといったことが可能となり、ユーザーの生産性を大きく向上させることができます。各コンポーネントは Property Broker を用いた疎結合によって組み合わせられているため、コンポーネントの機能変更や入れ替えなどが容易な構造となっており、コンポーネントの再利用性を高めることができます。既存の Notes コンポーネントもまた、 Property Broker へのインターフェイスを用意するだけで再利用可能なコンポーネントにすることができるため、既存の資産に大幅な変更を加えることなく、Notes アプリケーションの機能を拡張していくことも可能となっています。このように、今後、Composite Application により、Lotus Notes の可能性はさらに広がっていきますので、興味を持たれた方はぜひ Composite Application の開発にチャレンジしてみてください。





上に戻る


ダウンロード

内容ファイル名サイズダウンロード形式
Facelets source code with jars and warsSampleEclipseComponent.zip67KBHTTP
ダウンロード形式について


参考文献



著者について

林田 憲昌 は YSLのWPLC 開発部門に所属するソフトウェア・エンジニアで、現在は主にLotus Notes の開発に取り組んでいます。仕事でリッチクライアントばかりやっていると、Web が恋しくなって、ついつい Greasemonkey でネタをプロトしてしまう近頃です。




記事の評価


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



はいいいえわからない
 


 


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


上に戻る


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