この章では、次の内容を説明します。
Oracle Unified Directory (OUD)プラグインAPIは、既存のディレクトリ・サーバー機能を拡張する手段を提供しています。非常に特有なディレクトリ・サーバー要件があってOUDではそのままでは対応できない場合、プラグインを開発することもできます。たとえば、OUDプラグインを使用して次のことを正常に実現できました。
LDAPエラー・コードおよびエラー・メッセージの書込み
オンデマンドのパスワード移行
複数のパスワード・タイプを使用した認証
ユーザー・エントリの基準に基づいた操作ルーティング
これらのプラグインのいくつかは、Oracle顧客のOUDへのシームレスな移行を支援する役割を果たしました。これらは、LDAP操作をカスタマイズして結果をプログラムにより操作することでディレクトリ・サーバー機能をどのように拡張できるかの例にすぎません。
独自のOUDプラグインを開発することの利点と費用を分析する際には、次の点を考慮してください。
ディレクトリのデプロイメントにおける潜在的な障害ポイントを最小にするために、独自のOUDプラグインの開発は、既存のOUD機能やその組合せでも希望する結果を実現できない場合にのみ行う必要があります。
新しいリリースにアップグレードする際は、進化している可能性がある新しいOUD機能を踏まえて、使用中のカスタム・プラグインにまだ意味があるかどうかを判断する必要があります。さらに、使用中のプラグインがOUDの新しいリリースとの下位または上位互換性を確保できるようにアップグレードする必要があります。
OUDプラグインは新しいタイプのOUDワークフロー要素と考えることができます。ワークフローおよびワークフロー要素はOUDディレクトリにおける基礎的なビルディング・ブロックです。ワークフローおよびワークフロー要素がOracle Unified Directoryアーキテクチャでどのように機能するかの詳細は、『Oracle Fusion Middleware Oracle Unified Directory管理者ガイド』を参照してください。
OUDプラグインは任意のワークフロー要素ツリーに挿入できます。OUDプラグインがワークフロー要素ツリー内で実行できる代表的なタスクは次のとおりです。
チェーン内の前のワークフロー要素からのLDAPリクエストをインターセプトし、それらを変更するか拡張するかの選択肢を確保します。
LDAPエントリおよびチェーン内の次のワークフロー要素からの結果をインターセプトします。
OUDとともに提供される即時利用可能なその他のワークフロー要素を保管し活用します。
LDAPリクエストを受け取ったときおよびワークフローによるルーティング決定後にプラグインを起動します。
次の図に、ネーミング・コンテキスト・ワークフローおよびDNリネーム・ワークフロー要素を含む代表的なOUDワークフローを示します。OUDプラグインがこれらのビルディング・ブロックの下流、およびリモート・バックエンド・ワークフロー要素の上流に挿入されます。
いくつかのOUDプラグインを開発した後に、OUDワークフロー内にプラグイン・チェーンを形成できます。
OUDプラグインは次の実装ポイント・セットを経由してOUDコア・サーバーと対話します。
管理プラグイン管理: 起動、停止、ステータスおよび構成の変更
LDAP操作処理
リクエストのログ記録、およびプラグインAPIにより操作されるオブジェクトのインスタンス作成に使用される、プラグインとコア・ディレクトリ・サーバー間のメイン・インタフェースであるコンテキスト
プラグインを管理するための実装ポイントはoracle.oud.plugin.ManagedPlugin
インタフェースに定義されています。
initializePlugin()
メソッドはプラグインがサーバー起動時に初期化される際に起動されます。
finalizePlugin()
メソッドはプラグインが停止される際に起動されます。
handleConfigurationChange()
メソッドはプラグイン構成が変更される際に常に起動されます。第3.1.4項「OUDプラグイン構成の動的変更」も参照してください。
LDAP操作をインターセプトするための実装ポイントは、oracle.oud.plugin.RequestManager
インタフェースに定義されています。第3.6項「内部操作」も参照してください。
Oracle Unified Directoryプラグインが、次の3つのJavaインタフェース: oracle.oud.RequestManager
、oracle.oud.plugin.Plugin
およびoracle.oud.plugin.ManagedPlugin
から形成されるoracle.oud.plugin.ManagedPlugin
の実装です。
LDAPプロトコルで定義されている各タイプの操作のメソッドを定義します。handleAdd
という名前のメソッドは、プラグインがLDAPのadd
操作に含まれるたびに呼び出されます。bind
、compare
、delete
、modify
、modifyDN
およびsearch
操作には、同様のメソッドが存在します。例外は、abandon
およびunbind
操作で、これらの2つのタイプのリクエストはインターセプトできません。
名前をインスタンスごとに一意のプラグインに関連付けます。プラグインを識別すると、受け取ったリクエストをプラグインが複数のプラグインの中の特定のプラグインにルーティングする際に役立ちます。
プラグインのライフ・サイクルを定義します。ライフ・サイクルは、サーバーが起動したときまたはプラグインが作成されたときのプラグインの初期化から始まります。初期化後、プラグインは構成変更を受け取ることができます。サーバーが停止したときまたはプラグインがサーバー構成から削除されたときに、プラグインはファイナライズされます。
OUDプラグインの後にプロセス・チェーンの1つ以上のプラグインを続けることができます。最も一般的なケースは、後にプラグインが1つのみ続いているOUDプラグインです。このタイプのプラグインは、リクエストを受け取り、受け取ったリクエストのロギングまたは変更などの追加アクションを実行した後、そのリクエストを次のプラグインに転送できます。LDAP操作で応答が返されたときに、同様のアクションを実行できます。
プロセス・チェーンに後続のプラグインがないプラグインが、LDAPリクエストで操作されるエントリの格納を受け持ちます。格納はローカルでもリモートでも可能です。どちらの場合も、プラグインは受け取ったLDAPリクエストの結果の割当てを受け持ちます。
プロセス・チェーンで複数のプラグインが続いているプラグインが最も難しいケースです。このタイプのプラグインは、分散またはロード・バランシングを含む複雑なアーキテクチャにのみ使用されます。たとえば、このタイプのプラグインは専用プラグイン上のバインド・リクエストをルーティングしたり、他のプラグイン上の他のLDAP操作をルーティングするために使用される場合があります。
OUDプラグインAPIには、抽象クラスoracle.oud.plugin.AbstractPlugin
であるoracle.oud.plugin.ManagedPlugin
Javaインタフェースのデフォルトの実装が提供されています。このクラスでは、受け取ったリクエストを処理チェーン内のその次のプラグインに転送する以外に何もアクションを実行しないプラグインの実装が提供されています。デフォルトの実装では、プラグインに少なくとも1つ後続プラグインがあることを前提としています。ただし、必要であれば適切なメソッドを上書きしてデフォルトの動作を変更できます。oracle.oud.plugin.AbstractPlugin
クラスから派生したプラグイン実装を作成する必要があります。これにより、実装されたJavaインタフェースが変更された場合の下位互換性が最適化されます。