前へ 目次 索引 DocHome 次へ |
iPlanet Calendar Server 5.1 プログラマーズマニュアル |
第 1 章 Calendar Server API (CSAPI) の概要
この章では、Calendar Server API (CSAPI) の概要について説明します。CSAPI は高性能なプログラミングインタフェースで、iPlanet Calendar Serverの機能セットの変更および拡張を可能にします。CSAPI により、速度、メモリ使用量、および負荷の面で、システムの実行可能ファイルやあらゆる言語のスクリプトを上回る、非常に高速な実行時共有オブジェクト (ライブラリ) を作成できます。これらはすべて、ハイエンドシステムのスケーラビリティを実現する大切な要素です。
CSAPI アーキテクチャ
スレッドセーフ (Thread Safe) の条件
CSAPI の使用方法
CSAPI モジュールのロード
CSAPI のサンプル
CSAPI アーキテクチャ
CSAPI はCalendar Server の機能に対する共有オブジェクト実行時インタフェースのグループです。プラグイン CSAPI モジュールを使用して、受信リクエストおよび応答用のサーバデータを操作できます。このアーキテクチャは、サーバを未知のデータへの単なるゲートウェイとして動作することを可能にします。また、動的なログ記録や統計情報の追跡、外部認証スキーム、ユーザ属性の操作、およびその他の機能の実現を可能にします。図 1-1 に、iPlanet Calendar Server における CSAPI モジュールと他のサブシステムとの関係を示します。CSAPI モジュールはサポートする関数グループに基づいて、 iPlanet Calendar Server 機能 (データのフォーマット、認証、ディレクトリサービスなど) の 1 つ以上の領域に作用することができます。
モジュールは、Unix の共有オブジェクト (.so ファイル)、または Windows NT のダイナミックリンクライブラリ (.dll ファイル) です。ユーザが提供する各モジュールは、このマニュアルで定義されている 1 つ以上の CSAPI インタフェース (または純粋な仮想基底クラス) を実装します。第 2 章「CSAPI リファレンス」を参照してください。クライアント側の各インタフェースは、iPlanet Calendar Server の 1 つの機能領域に対応します。モジュールに含まれる実装により、モジュールの領域にある iPlanet Calendar Server のネイティブ機能を拡張するか、オーバーライドすることができます。
サーバ側の API セットにより、CSAPI モジュールは、サーバのバージョン情報を取得したり、サーバの高速メモリ割り当てメカニズムを使用したりできます。
このシステムには、各 CSAPI インタフェースのプラグインがデフォルトのコードとともに含まれています。これらのプラグインは、独自のプラグインを作成するためのテンプレートとして、サポートされているすべてのライブラリやヘッダーとともに使用できます。
図 1-1    CSAPI と他のサブシステムとの関係
スレッドセーフ (Thread Safe) の条件
何千ものスレッドがいつでもモジュールにアクセスできるように、CSAPI モジュールのプラグインはスレッド・セーフである必要があります。スレッドを認識できないプラグインの場合は、プラグイン内の関数呼び出しレベルで簡単なモニタを使用します。NSPR (Netscape Portable Runtime) スレッドの詳細は、mozilla.org の NSPR リファレンスマニュアルを参照してください。URL については、この章の「依存性」の節を参照してください。
依存性
CSAPI は、Unix および Windows NT システム用の C および C++ のインタフェースです。CSAPI は、NSPR (Netscape Portable Runtime) と、インタフェースディスパッチ用の XPCOM を使用します。NSPR は、オペレーティングシステムのサービスに対してプラットフォームに依存しない API である mozilla.org ソースコードの一部です。NSPR のマニュアルについては、次の MozillaTM の技術マニュアルの Web サイトを参照してください。
http://www.mozilla.org/docs/refList/refNSPR
XPCOM のマニュアルについては、次の Web サイトを参照してください。
http://www.mozilla.org/projects/xpcom
様々なプラットフォームで実行する必要のある実装において、プラットフォームに依存しない C データ型と実行時関数として、NSPR を使用する必要があります。iPlanet Calendar Server は XPCOM C++ API (QueryInterface) を使用して、特定のモジュールが実装する正確なインタフェースを検出します。
CSAPI の使用方法
ここでは、ユーザが提供するプラグインをシステムがどのようにロードし、使用するかを説明します。システムにはデフォルトのプラグインが用意されています。デフォルトのプラグインのいずれか、またはすべてを拡張あるいはオーバーライドできます。
CSAPI モジュールのロード
iPlanet Calendar Server は起動時に CSAPI モジュールを cal/bin/plugins ディレクトリからロードし、停止時にアンロードします。すべてのプラグインモジュールはこのディレクトリ内に常駐し、ファイル名は cs_. で始まる必要があります。サーバは、起動時にモジュールを動的にロードするため ics.conf をチェックします。csapi.plugin.loadall の設定値が y の場合、サーバは、cal/bin/plugins ディレクトリ内の名前が接頭辞 cs_.で始まるすべての共有オブジェクトをロードします。設定値が n の場合は、設定はプラグインによって異なります。ics.conf の設定の詳細は、『iPlanet Calendar Server 管理者ガイド』を参照してください。
特定のプラグインのロードを指定するには、csapi.plugin.loadall に n を設定する必要があります。さらに、2 つの設定を行います。具体的には、csapi.plugin.plugin name の値に y を設定し、csapi.plugin.plugin name.name にプラグインの名前を設定します。たとえば、カレンダー検索プラグインの場合は、設定は次のようになります。
csapi.plugin.calendarlookup = "n"
csapi.plugin.calendarlookup.name = " "
設定の plugin name の部分は、両方の設定で一致している必要がありますが、.name 設定の値とは同じでなくてもかまいません。したがって、cs_myown_plugin というプラグインを作成する場合は、設定を csapi.plugin.anyname, および csapi.plugin.anyname.name と呼ぶことができます。csapi.plugin.anyname.name の値は「cs_myown_plugin」になります。
iPlanet Calendar Server は NSPR 関数 PR_LoadLibrary() を使用して起動時に共有オブジェクトをロードし、関数 PR_UnloadLibrary を使用して停止時に共有イメージをアンロードします。共有オブジェクトがいったんメモリへロードされると、iPlanet Calendar Server は関数 PR_FindSymbol を使用して既知の API の実装へのエントリポイントを探します。
プラグインインタフェース
すべての CSAPI プラグインは、エクスポートされた唯一のシンボル NSGetFactory を、XPCOM の仕様で定義されているとおりにサポートします。Calendar Server はこのエントリポイントから XPCOM メソッド QueryInterface を呼び出して、csIPlugin インタフェースを実装するオブジェクトを検索します。これによって、サーバはプラグインのバージョン、説明、およびベンダー情報を照会できます。このインタフェースはオプションです。ただし、サーバがバージョンを管理できるように、このインタフェースを実装することをお勧めします。
クライアントおよびサーバの API
CSAPI は、クライアント API とサーバ API の 2 つに分けることができます。表 1-1 に、1 つまたは複数のプラグインに実装される CSAPI クライアントインタフェースについて示します。
これらのインタフェースの詳細は、第 2 章「CSAPI リファレンス」を参照してください。
すべてのインタフェースには次の初期化メソッドがあり、これは実装する必要があります。
サーバは、新しくロードしたモジュールのインタフェースを登録すると、すぐにこのメソッドを呼び出します。モジュール内では、サーバが返すパラメータ aServer をバインドし、このパラメータを使用してサーバインスタンスを参照できます。カスタムプラグインでは、QueryInterface メソッドを使用して、表 1-2 に記載されているサーバインタフェースを見つけることができます。
サーバへの照会の例
次の例では、Calendar Server のバージョンをチェックします。この中で、次の処理方法を示します。
Init メソッドから返された参照をバインドする
NS_IMETHODIMP csDataTranslator :: Init(nsISupports * aServer)
{
nsresult res = NS_COMFALSE ;
PRUint32 min, maj;
csICalendarServer * cs;
/* CalendarServer の QueryInterface。呼び出しが成功したら、サーバは
リファレンスカウントを増やします。
*/ if (aServer)
res = aServer->QueryInterface(kICalendarServerIID,(void**)&cs);
/* サーバへの参照が正常に取得できたら、バージョンをチェックします。*/
if (NS_SUCCEEDED(res)) {
cs->GetVersion(maj,min);
if (min > 0 && maj >= 1)
res = NS_OK;
else
res = NS_COMFALSE;
/* サーバインタフェースに対するこの参照を解放します。*/
CSAPI のサンプル
製品には、csapi/samples ディレクトリに 3 つの CSAPI インタフェースのためのコーディング例が含まれています。独自の CSAPI モジュールを作成する場合は、これらのファイルをテンプレートとして使用できます。次のサンプルモジュールが用意されています。
前へ 目次 索引 DocHome 次へ
Copyright © 2002 Sun Microsystems, Inc. All rights reserved.
最終更新日: 2002 年 1 月 30 日