|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LDAPディレクトリー検索プラグインによるLotus Sametimeクライアントの拡張 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Mark Talbot (talbotm@us.ibm.com), Developer, Industry Solutions, IBM Kulvir Singh Bhogal (kbhogal@us.ibm.com), Consultant, Software Services for WebSphere, IBM レベル:中級 原文の掲載:2006年7月27日
[編集者のメモ: この記事は、IBM Lotus Sametime Connect 7.5の最終バージョン情報を反映するために更新されました。IBM Lotus Sametime SDK 7.5で使用できる新しいサンプル・コードのダウンロードが追加されています。] IBM Lotus Sametime 7.5が提供する数多くの機能の1つに、本質的な拡張性があります。Lotus SametimeクライアントはEclipseベースであるため、ユーザーは独自に開発するEclipseプラグインによって新機能を追加することができます。この記事では、Lotus Sametimeクライアントのユーザー・インターフェースを拡張するEclipseプラグインの構築方法について紹介します。ここでは、単純なHello Worldプラグインではなく、多くの企業が自社のLotus Sametimeクライアントへの追加を望んでいる、ディレクトリー・サービスからSametimeパートナーの情報を検索するPartner Lookupプラグインを紹介します。 この記事では、Partner Lookupプラグインの作成時にIBMが実施した一連の開発プロセスを見ていきます。また、無料で入手できるプラグイン開発用のEclipse Software Development Kit (SDK)の使用方法について説明します。このSDKにはプラグイン開発環境(PDE)が含まれています。この記事を読むことにより、独自のEclipseプラグインを作成してLotus Sametime 7.5クライアントを拡張できるようになります。 Eclipse WebサイトからEclipse SDK※をダウンロードできます。また、この記事のダウンロードのセクションから、Partner Lookupプラグインをダウンロードできます。
Partner Lookupプラグインのプレビューと準備多くの組織では、ディレクトリー・サービスを使用して組織のメンバーに関するデータを保存しています。こうしたディレクトリー・サービス により、組織を構成する個人について、電子メール・アドレスや電話番号など、組織のメンバーが互いに連絡を取るための重要な連絡先情報が保管されます。Microsoft Active DirectoryやOpenLDAPなど、多数のディレクトリー・サービス製品が市販されています。この記事では、LDAPサーバーとしてIBM Tivoli Directory Serverを使用します。IBM Software Trials and BetaのWebサイトからTivoli Directory Serverの体験版(US)をダウンロードできます。ここでは、読者がTivoli Directory Serverを既にインストールして稼働していることを前提としています。Tivoli Directory Serverについて詳しくは、developerWorksの記事の『Introduction to LDAP: Part 1: Installation and simple Java LDAP Programming(US)』を参照してください。 Tivoli Directory Serverを使用する場合、次のように接尾辞を追加します。『Introduction to LDAP(US)』の記事で説明されているように、LDAPスキーマに対して、図1に示すように「IBM Tivoli Directory Server Configuration Tool(IBM Tivoli Directory Server構成ツール)」の「Manage suffixes(接尾辞の管理)」機能で、接尾辞dc=ibm, dc=comを追加します。 図1. IBM Tivoli Directory Server Configuration Tool (IBM Tivoli Directory Server構成ツール)![]() Partner Lookupプラグイン機能のデモンストレーションを行うには、LDAPディレクトリーにサンプル・データを入力する必要があります。コマンド・ラインからldapaddコマンドを使用し、Lightweight Data Interchange Format (LDIF)ファイルからLDAPサーバーにエントリーを追加します。この方法については、『Introduction to LDAP(US)』の記事で説明しています。LDIFファイルの内容は、次のとおりです。 注: LDAPディレクトリーに入力を行う前に、ファイルの内容を修正する必要があります。Partner Lookupプラグインで特定のSametimeパートナーに関する情報を収集するには、LDAPディレクトリーにそのパートナーが存在している必要があります。 パートナー情報を検索する際に、そのパートナーの電子メール・アドレスを使用します。そのため、そのパートナーの電子メール・アドレスがLDAPディレクトリーに格納され、LDIFの内容に含まれている必要があります。次のLDIFの内容を変更して、パートナー検索の対象となる電子メール・アドレスを含めます。例えば、下記で使用するLDIFファイルには、電子メール・アドレスkbhogal@us.ibm.comとtalbotm@us.ibm.comに関連するエントリーのサンプル・データが含まれています。
![]() Tivoli Directory Serverに加えて、Lotus Sametime 7.5クライアントもインストール済みであることを前提としています。この例の場合、Tivoli Directory ServerとLotus Sametime 7.5が物理的に同じマシン上にインストールされています。もちろん、実稼働環境では、クライアントとディレクトリー・サーバーは物理的に別のマシンに存在することになります。さらに、プラグインの開発では、Eclipse 3.2 SDKもインストールする必要があります。これは EclipseのWebサイト※から無料で入手できます。既に述べたように、Eclipse SDKにはプラグイン環境(PDE)と統合開発環境(IDE)が組み込まれています。すぐに使用可能なLotus Sametimeクライアント製品を拡張するEclipseプラグインの作成には、これらのツールが必要となります。
EclipseをベースとするLotus Sametime 7.5ここで説明するPartner LookupプラグインのようなEclipseプラグインの開発について理解するには、Eclipseに関する詳細な知識は必要ありません。ただし、Eclipse IDEの基本概念を理解しておく必要があります(詳細については、『リソース』のセクションを参照してください)。Eclipseプラグインの開発を開始する前に、Eclipseの基本用語について確認します。Eclipseプラグインは、Eclipseプラットフォームに役立つコンポーネントです。プラグインを設定し、Eclipseプラットフォームのユーザー・インターフェース機能を高めたり、Eclipseプラットフォーム上で非ユーザー・インターフェース・ベースのサービスを使用することができます。Eclipseプラグインは、拡張ポイント・スキーマを使用して拡張ポイントを定義します。拡張ポイント・スキーマは、拡張プラグインと呼ばれるプラグインが拡張を宣言することにより、ホスト・プラグインを変更する方法を定義します。拡張ポイントはホスト・プラグインで定義されますが、拡張は拡張プラグインによって宣言されます。 例えば、拡張ポイントにより、ホスト・プラグインのメニュー項目を変更する方法を定義できます。Lotus Sametime 7.5クライアントは、com.ibm.collaboration.realtime.people.personActionというIDを持つ拡張ポイントを定義するプラグインを備えています。ここでは、この拡張ポイントの機能を拡張する拡張プラグインを作成します。具体的には、図2にグラフィックで示されるPartner Lookup機能を追加します。 プラグイン開発環境(PDE)の準備 これ以降の説明で出てくる「Eclipse」とは、「Eclipse 3.2 SDK」を意味します。Eclipseをインストールして開いてください。Eclipseプラグインを作成するには、「ウィンドウ」-「パースペクティブのオープン」-「その他」を選択して、「プラグイン開発」パースペクティブに変更します。図3に示すように、「パースペクティブの選択」ダイアログ・ボックスが表示されます。「プラグイン開発」を選択して「OK」をクリックします。 図3.「パースペクティブの選択」ダイアログ・ボックス![]() デフォルトでは、Eclipseプラットフォームを拡張するようにPDEが設定されています。ただしここでの目的は、Sametimeクライアント・アプリケーションを拡張するプラグインを作成することです。そのためには、EclipseではなくLotus Sametimeを拡張するようにPDEを設定する必要があります。これを、ターゲット・プラットフォームの変更といいます。PDEのターゲット・プラットフォームを変更するには、「ウィンドウ」-「設定」を選択します。「設定」ダイアログ・ボックスが表示されます。左側のペインで、「プラグイン開発」項目を展開します。次に、図4に示すように、「ターゲット・プラットフォーム」プリファレンスを選択します。 図4. 「ターゲット・プラットフォーム」プリファレンスの選択![]() 次に、「参照」ボタンを使用して、ターゲット・プラットフォームの場所をSametimeクライアント・ディレクトリーに変更します。「再ロード」ボタンをクリックします。この操作により、Sametimeプラグインが読み込まれます。Sametimeプラグインが表示されない場合は、入力したSametimeクライアント・ディレクトリーのパスが正しいかどうかを確認してください。このパスは、プラグイン・ディレクトリーを格納するフォルダーのパスでなければなりません。「適用」をクリックして「OK」をクリックします。
Partner LookupプラグインによるSametimeユーザー・インターフェースの拡張PDEの準備ができたので、次は実際のプラグイン作成に取りかかります。Eclipseで、「ファイル」-「新規プロジェクト」を選択します。図5に示すように、表示された「新規プロジェクト」ダイアログ・ボックスで「プラグイン開発」-「プラグイン・プロジェクト」を選択し、「次へ」をクリックします。 図5. 「新規プロジェクト」ダイアログ・ボックス![]() その結果、「新規プラグイン・プロジェクト」ウィザードが表示されます。プロジェクトにcom.devWorks.example.ldaplookupという名前を付けてデフォルト設定を受け入れ、「次へ」をクリックします。「このプラグインをUIに追加」オプションの選択を解除します。このオプションを選択すると、ActivatorクラスによってAbstractUIPluginが拡張されます。このオプションの選択を解除すると、ActivatorクラスによってPluginクラスが拡張されます(ここでの目的のとおり)。 Activatorクラスは、ユーザーに代わってプラグインのライフ・サイクルを指定します。AbstractUIPluginによってPluginが拡張されます。AbstractUIPluginによっていくつかのメソッドが追加され、EclipseのGUIに直接アクセスできるようになります。ユーザー・インターフェースに直接機能を追加するわけではないため、AbstractUIPluginクラスを拡張する必要はありません。拡張ポイントを介してEclipseユーザー・インターフェースの機能を拡張します。このオプションの選択を解除してから、「終了」をクリックします。図6に示すように、「パッケージ・エクスプローラ」ペインが表示されます。 図6. パッケージ・エクスプローラ![]() 次に、プラグインのマニフェスト・ファイルを編集します。具体的には、マニフェスト・ファイルを編集して追加のプラグインを指定します。この追加のプラグインは、Partner LookupプラグインがLotus Sametimeクライアントのユーザー・インターフェースを拡張する際に必要となります。META-INF/MANIFEST.MFファイルをダブルクリックします。Plug-in Manifest Editorが開きます。Plug-in Manifest Editorが開かない場合は、MANIFEST.MFファイルを右クリックして「アプリケーションから開く」-「プラグインのマニフェスト・エディター」を選択します。Manifest Editorで「依存関係」タブを選択します。図7に示すように、「追加」ボタンをクリックします。 図7. 「プラグインのマニフェスト・エディター」の「依存関係」タブ![]() Plug-In Manifest Editorは、build.xml、plugin.xml、MANIFEST.MFのGUI形式です。「追加」ボタンをクリックすると、使用可能なプラグインの一覧を示すダイアログ・ボックスが表示されます。該当するプラグイン・リストに、com.ibm.collaboration.realtime.people、com.ibm.rcp.realtime.livenames plug-in、org.eclipse.jfaceの各プラグインを追加します。 既にorg.eclipse.uiプラグインとの依存関係が存在する場合、org.eclipse.jfaceへの依存は必要ありません。ダイアログ・ボックスにいずれのプラグインも表示されない場合は、ターゲット・プラットフォームが正しいかどうかを確認してください。終了したら、Plug-in Manifest Editorを保存して閉じます。 次に、Sametimeユーザーがパートナー名を右クリックし、コンテキスト・メニューからPartner Lookup項目を PartnerLookupDelegateクラスを作成した後、org.eclipse.uiプラグインによって表示される拡張ポイントを使用してPartnerLookupDelegateクラスとLotus Sametime UIを結合します。 PartnerLookupDelegateという名前のJavaクラス(パッケージ名はcom.devWorks.example.ldaplookup)を作成します。このクラスにより、com.ibm.rcp.realtime.livenames.LiveNameActionDelegateクラスを拡張します。 アクションに対するコードの追加 拡張ポイントのラベルで定義したメニュー名が呼び出されると、LiveNameActionDelegateクラスを拡張するオブジェクトのpublic void run(IAction arg0)メソッドが起動します。ここでは、runWithEventメソッドをコードで上書きしてLDAPサーバーに接続し、パートナーに関連付けられている連絡先情報を表示します。 ここまでに、com.devWorks.example.ldaplookup.LDAPConfigと呼ばれるクラスを定義しました。LDAPサーバーの構成情報を外部化するには、プロパティ・ファイルを使ってLDAPサーバーに接続する必要があります。実稼働環境では、設定項目である文字列はEclipseプリファレンスとして外部化する必要があります。また、ユーザーに表示される文字列は国際化する必要があります。EclipseプリファレンスとEclipseの国際化処理の詳細については、『リソース』のセクションを参照してください。ここでは説明を簡単なものにするため、Eclipseプリファレンスを使用した外部化と国際化を使用した外部化は行いません。 LDAPサーバーへの接続 Lotus Sametimeクライアントの起動時に、Partner LookupプラグインによってLDAPサーバーへの接続が確立されます。ユーザーによるSametimeセッションの間、この接続は使用されます。具体的には、Activatorクラスの開始メソッドが起動し、この開始メソッドによりActivatorクラスのinitializeLDAPメソッドが呼び出されます。 注: プラグインごとに1つのActivatorインスタンスが存在します。そのため、Partner Lookupのコンテキスト・メニューを使用するたびにLDAP接続を確立するのではなく、Activatorインスタンスの一部としてLDAP接続をキャッシュします。 次のコードでは、javax.naming.directory.DirContextオブジェクトへのハンドルが取得されます。
既に説明したように、上記のコードではLDAPConfigという補助クラスを使用します。このクラスにより、LDAPサーバーへの接続方法が指定されます。
LDAPConfigクラスでは、LDAPサーバー設定情報を格納するリソース・バンドルが(ldapconfig.propertiesという名前のファイル形式で)存在することが前提となります。次のように、ldapconfig.propertiesファイルを更新して、LDAPサーバーのロケーションとプロパティーならびにサーバーへアクセスするための認証クレデンシャルを反映する必要があります。
実行メソッドの上書き 特定のSametimeパートナーに関連するLDAPエントリーの検索ロジックは、実行メソッドで実行されます。これについて、順を追って詳しく見ていきましょう。既に説明したように、runWithEventメソッドは、拡張ポイントのラベルで定義したメニュー名が呼び出されたときに起動します。 実行メソッドで最初に行うことは、参照対象であるSametimeパートナーの電子メール・アドレスの抽出です。 Sametimeパートナーは、com.ibm.collaboration.realtime.people.Personオブジェクトとして認識されます。getContactIdメソッドを呼び出し、そのユーザー・オブジェクトの電子メール・アドレスを取得します。この電子メール・アドレスの文字列は、LDAP検索を実行するための基準(LDAP用語の場合は検索フィルター)として使用されます。
次に、ActivatorクラスのinitializeLDAPメソッドで既に確立されているLDAP接続へのハンドルを取得します。これは、LDAPサーバーに接続されているjavax.naming.directory.DirContextオブジェクトにより実行されます。
次に、SearchControlsオブジェクトを使用し、LDAP検索の範囲と検索結果として戻される値を設定します。
フィルター基準は、ユーザーの電子メール・アドレスです。ここでの検索対象は、姓(sn)、説明(description)、自宅の電話番号(homephone)、共通名(cn)です。 次に、今設定した制限とフィルターを使用して、次のコールによりLDAPサーバーのクエリーが実行されます。その結果、javax.naming.NamingEnumerationオブジェクトの形式で値が戻されます。
次に、戻された結果を確認して、プラグインが応答として提供した文字列(ldapMessage)を連結します。
最後に、org.eclipse.swt.widgets.MessageBoxウィジェットを使用して、LDAPクエリーの結果が表示されます。
プラグインの組み込み これで、PartnerLookupDelegateクラスが作成されました。次に、Lotus Sametime GUIからPartner LookupプラグインにアクセスするPartner Lookupメニュー項目を作成します。Lotus Sametime GUIのコンテキスト・メニュー項目を作成するには、org.eclipse.uiプラグインによって表示される拡張ポイントを拡張する必要があります。 plugin.xmlタブを開いてplugin.xmlを編集し、次の拡張ポイント宣言によって表示されるようにします。
org.eclipse.ui.popupMenus拡張ポイントに対して、複数の設定項目を定義します。最初に、LiveNameActionDelegateクラスを拡張するクラスを定義します。このクラスには、既に作成したクラス(com.devWorks.example.ldaplookup.PartnerLookupDelegate)を定義します。idには、Lotus Sametime 7.5クライアントに対して固有となるIDを定義します。ラベルには、ユーザーへのメニューの表示方法を記述します。ここでは、Partner Lookupというメニュー項目を作成します。
Eclipse内でのSametimeプラグインのテストEclipseの「実行」メニューで「実行」を選択します。「実行」ダイアログ・ボックスの左側のペインで、「Eclipseアプリケーション」を右クリックして「New_configuration」を選択します。図8に示すように、この画面からアプリケーションを設定することができます。 図8. 「実行」ダイアログ・ボックス![]() 図9に示すように、Eclipseの外部で実行する場合と同じようにLotus Sametimeクライアントが表示されます。 図9. EclipseでのLotus Sametime 7.5クライアント![]()
テストベッド用の公開Sametimeサーバーテストを行うために、IBMの公開Lotus Sametimeサーバーmessaging.ngi.ibm.comにログインしました。公開Lotus Sametimeサーバーの詳細については、IBM Community ToolsのWebサイトを参照してください。IBMの公開Lotus Sametimeサーバーとの対話を行う場合、ユーザー名とパスワードはIBMのユーザー名とパスワードと同じになります。IBMのユーザー名およびパスワードは、IBMのWebサイトからユーザー登録することにより取得できます。ここでは、リストに少なくとも1人以上のSametimeパートナーが記載されていることを前提としています。このパートナーは、前のステップでLDAPサーバーにディレクトリー情報を追加したパートナーです(『Partner Lookupプラグインのプレビューと準備』を参照)。 ログインすると、図10に示すようにLotus Sametime 7.5が表示されます。パートナー名を右クリックします。既に説明したように、このSametimeパートナーに関して、電子メール・アドレスに基づいたディレクトリー情報がLDAPサーバーに保存されています。「Partner Lookup(パートナー検索)」コンテキスト・メニュー項目が表示されます。「Partner Lookup(パートナー検索)」コンテキスト・メニュー項目を選択します。 図10. Lotus Sametime 7.5クライアント![]() 作成したプラグインが呼び出され、LDAPサーバーが検索されます。すべて正しく設定されていれば、次に示すようなダイアログ・ボックスが表示され(図11を参照)、LDAPサーバーに保存されているSametimeパートナーの情報が表示されます。 図11. 「LDAP lookup(LDAP検索)」ダイアログ・ボックス ![]()
Lotus Sametimeへのデプロイ新しいプラグインをデプロイしてLotus Sametimeクライアント・アプリケーション内で(Eclipse内ではなく)実際に使用する方法は簡単です。EclipseからプラグインのJARファイルをエクスポートします。次に、エクスポートされたプラグインJARファイルを<sametime-root>/eclipse/plug-inディレクトリーにコピーします。この<sametime-root>は、Lotus Sametimeクライアントがインストールされているディレクトリーです。現在Lotus Sametimeを実行中の場合は、再起動してプラグインを検出します。検出後、EclipseプラグインはLotus Sametimeクライアントに組み込まれます。開発者の場合は、上記に説明したデプロイ方法を使用してプラグインをLotus Sametimeに追加するだけです。ただし、利用者数が数百または数千規模の企業環境へプラグインをプロビジョニングする場合は、この方法は当てはまりません。このような環境でプラグインをプロビジョニングする場合は、企業独自の更新サイトを作成し、そのサイトからEclipseベースのクライアントが更新を受信できるようにします。プラグインのプロビジョニングと更新サイトの使用方法の詳細については、『リソース』のセクションを参照してください。
まとめこの記事では、Lotus Sametime 7.5クライアントの機能を拡張する方法について説明しました。こうしたLotus Sametimeクライアントの拡張性は、Eclipseベースのクライアントだからこそ実現できる利点です。Lotus Sametimeクライアントにより表示される拡張ポイントは、カスタム・プラグインを作成することにより組み込むことができます。このカスタム・プラグインは、拡張を宣言することによってホスト・プラグインを変更することができます。この記事では、LDAPサーバーにアクセスしてSametimeパートナーに関する情報を取得するカスタム・プラグインの作成方法について、デモンストレーション形式で紹介しました。
ダウンロード
参考資料学ぶ
製品と技術情報を入手する
議論する
筆者について(原文のまま)
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||