プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Identity Managerのためのアプリケーションの開発とカスタマイズ
11gリリース2 (11.1.2.3.0)
E61958-10
  目次へ移動
目次

前
 
次
 

17 プラグインの開発

この章では、プラグインに関連する概念、プラグインを開発および使用する方法について、次の各項で説明します。

17.1 プラグインおよびプラグイン・ポイント

プラグインは、Oracle Identity Managerによって提供される機能の機能性を拡張する論理的なコンポーネントです。プラグイン・フレームワークにより、各機能によって提供される機能性を拡張するプラグインを定義、登録および構成できます。プラグインは、事前定義またはカスタム開発でき、プラグイン・ポイントで使用できます。プラグイン・ポイントは、拡張性を追加できる、ビジネス・ロジック内の特定のポイントです。そのようなポイントには、プラグイン・インタフェースと呼ばれるインタフェース定義が付随しています。ビジネス要件に基づいてプラグイン・インタフェースを拡張し、プラグインとして登録できます。これを行うには、プラグインJavaクラスを開発し、JARファイルへのアーカイブ、XMLファイルでのプラグイン・メタデータの定義およびデプロイの準備ができたプラグイン・パッケージとしてのこれらのアーティファクトの圧縮を行う前にコンパイルします。

たとえば、ユーザーの作成は、Oracle Identity Managerのビジネス操作です。ただし、この操作はユーザー名の生成のプラグイン・ポイントを公開します。ユーザー名生成のカスタム・ロジックをモデル化する場合、プラグイン・ポイントの仕様を識別し、プラグインを適宜開発する必要があります。

プラグインに関連する概念は、次の項で説明されています。

17.1.1 プラグインおよびイベント・ハンドラ

ユーザー作成、ユーザーへのロールの割当て、ユーザーのアクティブ化などOracle Identity Managerのビジネス操作のほとんどは、編成として実行されます。そのため、これらの操作または編成のカスタム・ロジックに起因する要件がある場合、カスタマイズがサポートされている検証、前処理および後処理などのステージのイベント・ハンドラとしてそのロジックをモデル化できます。ただし、そのような操作でカスタム・ロジックに起因するプラグインを公開するかどうかも分析できます。プラグイン・ポイントが使用可能な場合、基礎となる編成を操作するのではなく、プラグイン・ポイントを利用できます。たとえば、ユーザー作成編成でイベント・ハンドラとして記述せずに、公開されたプラグインを使用することで、ユーザー名生成を実装することができます。

図17-1は、プラグインおよびイベント・ハンドラをダイアグラムで表しています。

図17-1 プラグインおよびイベント・ハンドラ

図17-1の説明が続きます
「図17-1 プラグインおよびイベント・ハンドラ」の説明

17.1.2 プラグイン・ストア

プラグイン・フレームワークでは、次の2つのタイプのストアにプラグインを格納できます。

  • ファイル・システム

  • Oracle Identity Managerデータベース

プラグインを検索する場合は、フレームワークによって、データベースに登録されているプラグインが最初に調べられてから、ファイル・システムが調べられます。

17.1.2.1 ファイル・ストア

ファイル・ストアは、Oracle Identity Managerホスト上の1つ以上のディレクトリで構成されており、主に開発環境で使用されます。このタイプのストアは、本番環境には適していません。ファイル記憶域は、開発したプラグインをファイル・ストアに明示的に登録する必要がないため、開発者にとって便利です。ユーザーは、プラグインzipまたは展開されたプラグイン・ディレクトリを指定の場所にドロップインするだけです。

デフォルトでは、プラグインはプラグイン・フレームワークによってOIM_HOME/pluginsディレクトリで検索されます。プラグイン・ディレクトリを追加指定することもできます。

監視スレッドが有効な場合は、プラグイン・フレームワークによって、ファイル・システム内の登録済プラグイン・ディレクトリでプラグインzipファイルのすべての追加、変更および削除が監視され、プラグインは自動的にリロードされます。名前、バージョン、IDなどのプラグイン・メタデータがプラグインzipから読み取られ、メモリー内で維持されます。このメタデータは、ファイルの変更に基づいて更新されます。最新のプラグインzipファイルが、現行バージョンのプラグインとみなされます。ファイル・ストアの構成方法の詳細は、「プラグインの構成」を参照してください。


注意:

本番状態のファイル・ストアを使用することは推奨されていません。ファイル・ストアは、プラグインの変更が簡単で、ファイル・システムのファイルのみを変更するため、プラグインの開発に適しています。登録する必要はありません。ただし、本番では、プラグインは頻繁に変更されず、特定のデメリットがあるため、ファイル・ストアの使用は避けてください。ファイル・ストアの監視のオーバーヘッドを追加します。また、プラグインは、Oracle Identity Managerのクラスタ化されたデプロイメントのクラスタのすべてのノードでレプリケートする必要があります。

17.1.2.2 データベース・ストア

プラグインはOracle Identity Managerデータベースに格納できるため、クラスタ内の任意のノードからアクセスできます。プラグイン・フレームワークでは、データベース・ストアとして業務系DBが使用されます。このタイプのストアは、本番環境に適しています。

データベースに格納されるプラグインは、明示的に登録する必要があります。コマンド行ツールであるプラグイン登録ユーティリティを使用して、プラグインを登録および登録解除できます。また、registerPlugin APIをこの用途に使用することもできます。プラグインの登録の詳細は、「APIを使用したプラグインの登録および登録解除」を参照してください。


注意:

プラグインを登録した後で、サーバーを再起動する必要があります。ただし、サーバーの再起動は、プラグイン・ポイントを定義する機能に依存する場合もあります。

17.2 デプロイメントでのプラグインの使用

このドキュメントで前述したように、プラグインは、Oracle Identity Managerデプロイメントのデフォルト機能のカスタマイズに使用されます。サポートされるプラグイン・ポイントの数は、定義済で、制限されています。そのため、プラグイン・ポイントを使用して、サポートされるプラグイン・ポイントのリストに関してのみ、機能を拡張することができます。サポートされるプラグイン・ポイントのリストは、「プラグイン・ポイント」を参照してください。

17.3 プラグイン・ポイント

表17-1に、Oracle Identity Managerでプラグイン・ポイントとして機能するJavaインタフェースを示します。

表17-1 プラグイン・ポイント

プラグイン・ポイント 説明

oracle.iam.ldapsync.LDAPContainerMapper

これは、LDAPでユーザーまたはロールを作成するために使用する必要があるユーザー・コンテナまたはロール・コンテナを決定するために、LDAP同期によって使用されます。

oracle.iam.platform.kernel.spi.EventHandler

これは、カーネル・イベント・ハンドラです。カーネル・イベント・ハンドラの詳細は、第18章「イベント・ハンドラの開発」を参照してください。

oracle.iam.platform.auth.api.LoginMapper

これは、JAASユーザー・プリンシパル名を対応するOracle Identity Managerユーザー名にマップするLoginMapperの実装です。このプラグイン・ポイントは、SSOシナリオのJAASユーザー・プリンシパル名からOracle Identity Managerユーザー名へのデフォルトのマッピングをオーバーライドするために使用されます。デフォルトの実装では、JAASユーザー・プリンシパル名と同じ値が返されます。このプラグイン・ポイントは、通常、JAASユーザー・プリンシパル名とOracle Identity Managerユーザー名が異なる場合があるSSOシナリオで使用されます。たとえば、SSOシステムで電子メールがJAASユーザー名として設定される場合がありますが、そのユーザー名を持つユーザーはOracle Identity Managerには存在しません。Oracle Identity Managerでそのユーザーが認識されるには、JAASユーザー・プリンシパル名をOracle Identity Managerユーザー名にマップする必要があります。これを実行するには、次に示すように、LoginMapperのプラグインを実装します。

public class CustomLoginMapper implements LoginMapper{
public String getOIMUserID(String jaasPrincipal) throws MappingException {
               return getUserName(jassPrincipal);
  }

private String getUserName(String emailID){
               String userName = null;

               //Use usermgmt APIs to get the username corresponding to this email id
               return userName;
 }
}

oracle.iam.identity.usermgmt.api.PasswordVerifier

これは、ユーザーのパスワード変更時に古いパスワードを検証するために使用されます。この検証に使用されるクラスは、OIM.OldPasswordValidatorシステム・プロパティで構成します。デフォルトでは、古いパスワードの検証にはコンテナ・ベースの認証を使用します。

oracle.iam.request.plugins.StatusChangeEvent

これにより、リクエスト・ステータス変更中にカスタム・コードを実行できます。

oracle.iam.request.plugins.RequestDataValidator

これは、送信後のリクエスト・データのカスタム検証に使用されます。

oracle.iam.request.plugins.PrePopulationAdapter

これは、リクエスト作成中にカスタム・コードを実行することで属性値を事前移入するために使用されます。

oracle.iam.scheduler.vo.TaskSupport

これは、コンテキストでジョブを実行するために使用されます。タスクの実行メソッドがプラグインによって取得され、ロードされます。

oracle.iam.identity.usermgmt.api.UserNamePolicy

これは、ユーザー名の生成および検証に使用されるユーザー名ポリシーの実装です。

oracle.iam.identity.usermgmt.api.ReservationInLDAP

これは、LDAPでのユーザー属性の予約の実装です。


17.4 プラグインの構成

MDS内のoim-config.xmlファイルを使用して、次のものを構成します。


関連項目:

oim-config.xmlファイルの構成の詳細は、Oracle Fusion Middleware Oracle Identity Manager管理者ガイドのoim-config.xmlファイルの構成に関する説明を参照してください。

  • ファイル・ストアによってプラグインが検索されるディレクトリ。

  • ファイル・ストアに変更があるかどうかを監視するスレッドをアクティブにするかどうか(このスレッドによって、すべてのプラグイン・ディレクトリ内のzipファイルまたは展開されたファイルが確認されます)。

    監視スレッドは、動的開発環境ではプラグインが追加または変更されているため通常はアクティブ化されており、一連のプラグインが含まれている本番システムでは非アクティブにすることができます。これは、reloadingEnabled属性を使用して追跡できます。

  • 監視スレッドがウェイクアップして変更を検索する間隔。

次に、oim-config.xmlファイルのコード・スニペットを示します。

<pluginConfig storeType="common">
 
    <storeConfig reloadingEnabled="true"
 
      reloadingInterval="20">
 
      <!--
 
        Plugins present in the OIM_HOME/plugins directory are added by default.
 
        For adding more plugins, specify the plugin directory as below:
 
        <registeredDirs>/scratch/oimplugins</registeredDirs>
 
        <registeredDirs>/scratch/custom</registeredDirs>
 
      -->
 
    </storeConfig>
 
  </pluginConfig>

この例の内容は次のとおりです。

  • commonストア指定によって、フレームワークはデータベースとファイル・ストアの両方を監視するように指定されます。


    注意:

    commonはすべての環境で適切であるため、Store値は変更しないでください。

  • 1つのディレクトリが構成されますが、<registeredDirs>タグを追加することによって追加ディレクトリを構成できます。

  • デフォルトで、監視スレッドがアクティブであり、プラグインの変更が20秒ごとに検索されます。

    監視は、通常は開発環境のみでアクティブです。アクティブと非アクティブを切り替える場合は、アプリケーション・サーバーを再起動して変更を有効にする必要があります。


    注意:

    oim-config.xmlファイルのプラグイン・データのあらゆる変更に、アプリケーション・サーバーの再起動が必要です。

17.5 カスタム・プラグインの開発

この項では、カスタム・プラグインの開発方法について説明します。この章には次の項目があります。

17.5.1 プラグインの開発

プラグインを開発するには:

  1. 拡張するプラグイン・ポイントを識別します。

  2. プラグイン・ポイント・インタフェースを実装するJavaクラスを識別します。Javaクラスおよびその他の依存クラスをJARファイルにパッケージ化します。JARファイルをlib/ディレクトリに置きます。

  3. plugin.xmlファイルを作成します。詳細は、「プラグインの宣言」を参照してください。

  4. プラグインに必要なリソース・ファイル(プロパティ・ファイル、リソース・バンドル、画像ファイルなど)を識別します。

  5. パッケージ全体をZipに圧縮します。

    Oracle Identity Managerプラグインは、指定されたディレクトリ構造でZIPファイルとして配布されます。そのディレクトリ構造は次のとおりです。

    • plugin.xmlファイル: XMLファイルには、すべてのプラグインに関連付けられたメタデータ(拡張されるプラグイン・ポイント、プラグインを実装するクラス、名前、バージョン番号など)が含まれています。XML内のすべてのフィールドは、名前を除いて必須です。名前を指定しない場合は、プラグイン・クラス名が名前として使用されます。

    • lib/ディレクトリ: lib/ディレクトリは、プラグイン・ロジックを実装するクラスを含むJARファイルおよび依存ライブラリJARファイルで構成されています。ほとんどの場合、このディレクトリは、plugin.xmlに指定されたすべてのプラグインの実装を含む1つのJARファイルで構成されます。

    • resources/ディレクトリ: プラグインに必要なリソース・ファイル(プロパティ・ファイル、リソース・バンドル、画像ファイルなど)が含まれています。プラグインzipのresourcesディレクトリに指定されたこれらのリソースには、次のようにアクセスできます。

      this.getClass().getClassLoader().getResourceAsStream(<resource_name>);
      
    • META-INF/ディレクトリ: イベント・ハンドラのプラグイン・ポイントを示すXMLファイルが含まれています。通知サービスなどの一部のサービスは、MDSまたはプラグインのMETA-INF/ディレクトリからこのXMLファイルを読み取ります。

    同じプラグイン・ポイントを実装する複数のプラグインを、同じZIPファイルの一部にすることができます。

    プラグインには、プラグイン・ポイント・インタフェースを実装するJavaクラスがあります。プラグイン・ライブラリ(JAR)にその他の依存クラスも含めることができますが、プラグインを実装するクラスは、機能に対して公開される1つのみです。このクラスをplugin.xmlで指定する必要があります。

  6. ZIPファイルをファイル・ストア(OIM_HOME/plugins/ディレクトリ)またはデータベース・ストアに配置します。

  7. ZIPをデータベース・ストアに置く場合は、「プラグインの登録」で説明するように、プラグイン登録ユーティリティを使用してプラグインを登録します。

17.5.2 プラグインの宣言

Oracle Identity Managerで提供される機能を拡張するために、アプリケーションに対してプラグインを宣言できます。

プラグインには、プラグイン・ポイント・インタフェースを実装するJavaクラスがあります。特定のプラグイン・ポイントに関連付けられるすべてのプラグインに、一意の名前を割り当ててください。プラグイン名が一意でないと、プラグインの登録時に例外がスローされます。

プラグインをplugin.xmlファイルで宣言します。例:

<?xml version="1.0" encoding="UTF-8"?>
<oimplugins>
....
<plugins pluginpoint="oracle.iam.sample.passwdmgmt.service.PasswordElement">
        <plugin pluginclass=
        "oracle.iam.sample.passwdmgmt.custom.NumCustomPasswordElement" 
        version="1.0.1" name="num pwd element"/>
        <plugin pluginclass=
        "oracle.iam.sample.passwdmgmt.custom.DictionaryPasswordElement" 
        version="1.0.1" name="Dictionary password element" />        
</plugins>
....
</oimplugins>

注意:

複数のバージョンのプラグインを格納でき、機能によって特定のバージョンのプラグインをプラグイン・フレームワークからリクエストできます。デフォルトでは、現在のすべてのプラグイン・ポイントがプラグインの最新のバージョンをロードします。

このXMLには、2つのプラグイン宣言があります。両方のプラグインが同じプラグイン・ポイントから拡張されます。

17.6 プラグインの登録

APIおよびプラグイン登録ユーティリティを使用して、プラグインを登録できます。

17.6.1 APIを使用したプラグインの登録および登録解除

登録関連のタスクには、次のAPIを使用できます。

  • PlatformService.registerPlugin

  • PlatformService.unRegisterPlugin

次に例を示します。

System.out.println("Creating client....");
String ctxFactory = "weblogic.jndi.WLInitialContextFactory";
String serverURL = "t3://OIM_HOSTNAME:OIM_PORT";
System.setProperty("java.security.auth.login.config", "OIM_CLIENT_HOME/conf/authwl.conf");
String username = "USER_NAME";
char[] password = "PASSWORD".toCharArray();
Hashtable env = new Hashtable();
env.put(OIMClient.JAVA_NAMING_FACTORY_INITIAL,ctxFactory);
env.put(OIMClient.JAVA_NAMING_PROVIDER_URL, serverURL);

oimClient = new OIMClient(env);
System.out.println("Logging in");
oimClient.login(username, password);
PlatformService service = platform.getService(PlatformService.class);
File zipFile = new File(fileName);
FileInputStream fis = new FileInputStream(zipFile);
int size = (int) zipFile.length();
byte[] b = new byte[size];
int bytesRead = fis.read(b, 0, size);
while (bytesRead < size) {
bytesRead += fis.read(b, bytesRead, size - bytesRead);
}
fis.close();
service.registerPlugin(b);
service.unRegisterPlugin(pluginID, version);

注意:

Oracle Identity Managerと統合するためのクライアントの開発におけるOIMClientの使用の詳細は、「OIMClientの使用」を参照してください。

17.6.2 プラグイン登録ユーティリティを使用したプラグインの登録および登録解除

プラグインの登録および登録解除にプラグイン登録ユーティリティを使用できます。このユーティリティでは、次のファイルが使用されます。

  • pluginregistration.xml

  • ant.properties

これらのファイルは、OIM_HOME/plugin_utility/ディレクトリにあります。


注意:

プラグイン登録ユーティリティには、Apache Antバージョン1.7以上が必要です。

このユーティリティを使用する前に、次のことを実行します。

  1. ant.propertiesのwls.homeおよびoim.homeの値を設定します。

    例:

    wls.home =.../middleware/wlserver_10.3
    oim.home =..../middleware/Oracle_IDM1/server
    

    さらに、ant.propertiesファイルにmw.homeのパスを設定します。また、次の行を非コメント化します。

    #login.config=${oim.home}/config/authwl.conf
    
  2. Oracle WebLogic serverでwlfullclient.jarをビルドします。

    1. ディレクトリをWLS_HOME/server/libに変更します。

    2. 次のコマンドを実行します。

      java -jar ../../../modules/com.bea.core.jarbuilder_1.3.0.0.jar
      

      注意:

      JARファイルの正確なバージョンは、WLSによって異なる場合があります。WLS_HOME/../modules/ディレクトリにあるcom.bea.core.jarbuilderという名前の対応するファイルを使用します。

プラグインの登録

プラグインを登録する手順は、次のとおりです。

  1. antターゲットの登録を実行します。

    ant -f  pluginregistration.xml register
    
  2. これにより、Oracle Identity Managerのユーザー名およびパスワードとサーバー情報およびプラグインzipファイルの場所が要求されます。zipファイルの場所の完全なパスを入力します。

プラグインの登録解除

プラグインを登録解除するには、次の手順を実行します。

  1. antターゲットの登録解除を実行します。

    ant -f  pluginregistration.xml unregister
    
  2. これにより、Oracle Identity Managerのユーザー名およびパスワードとサーバー情報およびプラグイン・クラスのクラス名が要求されます。完全なパッケージを含むクラス名を入力します。

古いプラグイン・バージョンの再登録およびアクティブ化

古いバージョンのプラグインを再登録およびアクティブ化するには、次の手順を実行します。

  1. OIM_HOME/plugins/ディレクトリの古いプラグインのZIPファイルをコピーします。

  2. antターゲットの登録を実行します。

    ant -f  pluginregistration.xml register
    
  3. これにより、Oracle Identity Managerのユーザー名およびパスワードとサーバー情報およびプラグインZIPファイルの場所が要求されます。ZIPファイルの完全なパスを入力します。

    プラグインが正常に再登録されたことを示すメッセージが表示されます。

17.7 プラグインの移行

デプロイメント・マネージャでは、Oracle Identity Managerのあるデプロイメントから他のデプロイメントへのプラグインの移行をサポートしています。たとえば、イベント・ハンドラをテスト環境で実装した後、デプロイメント・マネージャを使用して本番環境に移行することができます。図17-2に、デプロイメント・マネージャを使用したプラグインのエクスポートを示します。

図17-2 プラグインのエクスポート

図17-2の説明が続きます
「図17-2 プラグインのエクスポート」の説明


関連項目:

デプロイメント・マネージャの詳細は、『Oracle Identity Managerの管理』の「デプロイメント・マネージャを使用した増分移行」