16 スケジュール済タスクの開発

事前定義されたスケジュール済タスクがニーズに適合しない場合は、要件に合せてスケジュール済タスクを作成できます。

Oracle Identity Managerには、ジョブ実行としてスケジュールできる一連のスケジュール済タスクが含まれています。例として、パスワードの期限切れをユーザーに電子メールで送信するパスワード警告タスクをあげることができます。Oracle Identity Managerには、独自のスケジュール済タスクを作成する機能もあります。事前定義されたスケジュール済タスクがニーズに適合しない場合は、要件に合せてスケジュール済タスクを作成できます。たとえば、ターゲット・システムで定期的に新しい情報をチェックしてOracle Identity Managerに同じデータを複製するスケジュール済タスクを使用して、リコンシリエーション実行を構成できます。

次の各項では、カスタム・スケジュール済タスクを作成および実装する方法について説明します。

16.1 タスク作成の概要

Oracle Identity Managerの事前定義されたスケジュール済タスクを確認して、カスタム・タスクが必要かどうかを決定します。

この項では、スケジュール済タスクの作成における重要なステップを概説し、プロセスを示す例を紹介します。次の項目が含まれます。

16.1.1 タスク作成のステップ

スケジュール済タスクを作成するには、スケジュール済タスクXMLファイルをタスク・メタデータで更新し、スケジュール済タスクJavaクラスを開発し、スケジュール済タスクをプラグインとしてパッケージ化し、タスク・ファイルをパッケージ化します。

新しいスケジュール済タスクを作成する基本ステップは、次のとおりです。

  1. Oracle Identity Managerの事前定義されたスケジュール済タスクを確認して、カスタム・タスクが必要かどうかを決定します。

    事前定義済のタスクの詳細は、Oracle Identity Governanceの管理スケジューラの管理を参照してください。

  2. タスク名、タスクが実行するアクションを制御するパラメータなど、スケジュール済タスクの主要な機能を決定します。

    詳細は、スケジュール済タスクのメタデータの定義を参照してください。

  3. タスク・メタデータをスケジュール済タスクXMLファイルに追加します。

    詳細は、スケジュール済タスクXMLファイルの構成を参照してください。

  4. スケジュール済タスクJavaクラスを開発します。

    詳細は、スケジュール済タスク・クラスの開発を参照してください。

  5. 新しいスケジュール済タスクをプラグインとして宣言します。

    詳細は、プラグインXMLファイルの構成を参照してください。

  6. Oracle Identity Managerがファイルを検出し、タスクをジョブで使用できるようにするために、タスク・ファイルをパッケージ化します。

    詳細は、スケジュール済タスクのディレクトリ構造の作成を参照してください。

16.1.2 スケジュール済タスクの例

スケジュール済タスクの開発のステップを示すために、特定のITリソースの特定の部門に属する従業員レコードを取得するスケジュール済タスク例を使用します。

また、このスケジュール済タスクでは、ユーザーが取得するレコード数や、無効なレコードを取得に含めるかどうかを指定できる必要があります。

16.2 スケジュール済タスクのメタデータの定義

スケジュール済タスクのメタデータには、タスクに関する必須の情報およびタスクが受け入れるオプションのパラメータが含まれています。

各スケジュール済タスクは、次のメタデータ情報を含みます。

  • スケジュール済タスクの名前

  • スケジュール済タスクを実装するJavaクラスの名前

  • 説明

  • 再試行間隔

  • (オプション)スケジュール済タスクを受け入れるパラメータ。各パラメータには次の追加情報が含まれます。

    • パラメータ名

    • パラメータのデータ型

    • 必須/オプション・パラメータ

    • ヘルプ・テキスト

16.3 スケジュール済タスクXMLファイルの構成

スケジュール済タスクXMLファイルの構成では、カスタム・スケジュール済タスクの定義が含まれたXMLファイルの更新が伴います。

この項では、新しいカスタム・スケジュール済タスクの詳細を使用してタスクXMLファイルを更新する方法について説明します。

Oracle Identity Manager MDSスキーマの/dbネームスペースにあるtask.xmlファイルを変更するか、またはカスタム・スケジュール済タスク・ファイルを作成できます。カスタム・ファイルを作成する場合、そのファイル名はスケジュール済タスク名と同じで、拡張子が.xmlである必要があります。Oracle Identity Manager MDSスキーマの/dbネームスペースに、カスタム・スケジュール済タスク・ファイルをインポートする必要があります。

関連項目:

プラグインの例は、プラグインの開発を参照してください。

ノート:

Oracle Enterprise Managerを使用して、スケジュール済タスクXMLファイルをMDSにインポートできます。クラスタ環境では、MDSにファイルを含めることで、クラスタの各ノード上のファイルをコピーする必要がなくなります。

MDSへのファイルのインポートの詳細は、ユーザーが修正可能なメタデータ・ファイルの移行を参照してください。

XMLファイル内の要素は、スケジュール済タスクのメタデータの定義で説明したタスク・パラメータを反映します。

次の例に、前述の段落で説明したスケジュール済タスクのサンプルXMLコードを示します。この例では、すべてのパラメータが必須パラメータとして宣言されていることに注意してください。

<scheduledTasks xmlns="http://xmlns.oracle.com/oim/scheduler">
    <task>
        <name>Test_scheduled_task</name>
        <class>oracle.iam.scheduler.TestScheduler</class>
        <description>Retrieve Employee Records For Given Department</description>
        <retry>5</retry>
        <parameters>
            <string-param required="true" encrypted="false" helpText="Name of the department">Department Name</string-param>
            <number-param required="true" helpText="Number of Records to Be Retrieved">Number of Records</number-param>
            <boolean-param required="false" helpText="Retrieve disabled employee records?">Get Disabled Employees</boolean-param>
        </parameters>
    </task>
</scheduledTasks>

関連項目:

スケジュール済タスクの構成ファイル内の要素の詳細は、スケジュール済タスクの構成ファイルを参照してください。

これは、基本的に、MDSからtask.xmlをエクスポートし、それに必須タグを追加して、MDSにインポートして戻す作業となります。

ノート:

プラグインで定義されたタスクでは、MDSへシードするためにメタデータXMLは必要ありません。これは、プラグインZIPファイルのMETA-INFフォルダに含めることができます。詳細は、スケジュール済タスクのディレクトリ構造の作成を参照してください。

MDSからtask.xmlファイルをエクスポートし、このファイルに必須タグを追加した後、MDSにインポートして戻す必要があります。MDSファイルのエクスポートおよびインポートの詳細は、ユーザーが修正可能なメタデータ・ファイルの移行を参照してください。

16.4 スケジュール済タスク・クラスの開発

スケジュール済タスクを実装するJavaクラスは、スケジュール済タスク・クラスと呼ばれます。

次のステップでは、Javaクラスを作成して、メタデータがXMLファイルで定義されたタスクを実行します。スケジュール済タスクを実装するJavaクラスは、スケジュール済タスク・クラスと呼ばれます。

スケジュール済タスクのJavaクラスを開発するには:

  1. oracle.iam.scheduler.vo.TaskSupportクラスを拡張したJavaクラス・ファイルを作成し、要件に基づいた処理ロジックでexecute()メソッドをオーバーライドします。このJavaクラスで、他の抽象メソッドもオーバーライドする必要があります。
    public HashMap getAttributes();
    public void setAttributes();
    
  2. 作成したJavaクラスのJARファイルを作成します。JARをカスタム・スケジュール済タスクに簡単に関連付けできる名前をJARに付けます。

    JARファイルには、Javaクラスの依存クラスを含めることができます。依存クラスに対して個別のJARファイルを作成し、それをlib/ディレクトリに配置することもできます。

  3. JARファイルをlib/ディレクトリにコピーします。
  4. 作成する各Javaクラスに対してステップ1から3を繰り返します。

16.5 プラグインXMLファイルの構成

スケジュール済タスクをプラグインとして宣言するには、plugin.xmlファイルを構成する必要があります。

プラグインの詳細は、プラグインの開発を参照してください。

ノート:

1つのスケジュール済タスクに対して1つのplugin.xmlファイルを作成することをお薦めします。これは、プラグインが登録解除されると、対応するパッケージが削除されるためです。

plugin.xmlファイルを構成するには:

  1. 任意のテキスト・エディタを使用して、plugin.xmlファイルを作成します。

    ノート:

    plugin.xmlファイルは、そのようなファイルがない場合にのみ作成します。既存のプラグインがある場合は、新しいプラグイン用の新しいプラグイン要素を追加します。

  2. プラグイン要素のpluginpoint属性の値をoracle.iam.scheduler.vo.TaskSupportに変更して、スケジュール済タスクのプラグイン・ポイントを指定します。

    plugin.xmlファイルの次のXMLコード・ブロックは、プラグイン要素内に入力された値を示しています。

    <plugins pluginpoint="oracle.iam.scheduler.vo.TaskSupport">
    

    ノート:

    スケジュール済タスクの場合、<plugins>要素は、すべてのスケジュール済タスクで同じままです。

  3. <plugin>要素を、追加する各スケジュール済タスクに追加します。

    プラグイン(この場合はスケジュール済タスク)を実装するクラスを指定するには、プラグイン要素のpluginclass属性の値を、スケジュール済タスクを実装するJavaクラスの名前に変更します。plugin.xmlファイルの次のXMLコード・ブロックは、プラグイン要素内に入力されたサンプル値を示しています。

    <plugin pluginclass= "oracle.iam.scheduler.TestScheduler" version="1.0.1" name="scheduler element"/>
    

    変更後、plugin.xmlファイルは次のようになります。

    <?xml version="1.0" encoding="UTF-8"?>
    <oimplugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <plugins pluginpoint="oracle.iam.scheduler.vo.TaskSupport">
    <plugin pluginclass= "oracle.iam.scheduler.TestScheduler"
    version="1.0.1" name="scheduler element">
    </plugin>
    </plugins>
    </oimplugins>
    
  4. plugin.xmlファイルを保存して閉じます。

16.6 スケジュール済タスクのディレクトリ構造の作成

作成するplugin.zipファイルには、特定のディレクトリ構造が含まれている必要があります。

スケジュール済タスクの構成の最後のステップは、次に示すディレクトリ構造のplugin.zipファイルを作成することです。

plugin/
      lib/
      PLUGIN.JAR
      plugin.xml
      META-INF (optional)
            METADATA.xml

この例では単一のプラグインが追加されますが、複数のプラグインをplugin.zipファイルに含めることができます。スケジューラでは、ファイルが、特定の構造で圧縮され、特定の命名規則に従って命名されている必要があります。これにより、Oracle Identity Managerがカスタム・スケジュール済タスクを識別し、ジョブの作成中にOracle Identity System Administrationで使用可能になることを確認できます。

次の点に注意してください。

  • プラグインのXMLファイルは、plugin.xmlという名前である必要があります。

  • lib/ディレクトリには.JARファイルのみが含まれている必要があります。lib/ディレクトリは、プラグイン・ロジックを実装するクラスが含まれたJARファイル、および依存ライブラリのJARファイルで構成されています。ほとんどの場合、このディレクトリは、plugin.xmlに指定されたすべてのプラグインの実装を含む1つのJARファイルで構成されます。ディレクトリ構造の詳細は、プラグインの開発を参照してください。

  • スケジュール済タスクのディレクトリには、次のファイルが格納されている必要があります。

    • プラグイン用のXML

    • JARファイル

  • 作成するすべてのプラグインに対して1つのplugin.zipファイルが存在します。

  • META-INFフォルダは、メタデータ(タスク定義)ファイルを格納できるオプションのフォルダです。このファイルがMETA-INFフォルダに配置されている場合、MDSにシードする必要はありません。

    ノート:

    タスク定義XMLファイルがMDSにシードされるのではなくMETA-INFディレクトリに格納される場合には、デプロイメント・マネージャを使用してスケジュール済タスクをエクスポートするという制限があります。
  • META-INFフォルダが存在しない場合、またはメタデータ・ファイルがMETA-INFフォルダに配置されていない場合は、ファイルをMDSにシードします。

前述の例では、CLASS_NAME.JARが、スケジュール済タスク・クラスの開発で作成したJARファイルです。

plugin.zipファイルを作成した後でクラスタ環境にデプロイする場合は、適切なAPIを使用して、そのプラグインをデータベースに登録します。APIを使用してOracle Identity Managerにプラグインを登録する方法の詳細は、APIを使用したプラグインの登録および登録解除を参照してください。

ノート:

プラグインのXMLは、plugin.xmlという名前である必要があります。libディレクトリにJARファイルのみが含まれていることを確認してください。

16.7 スケジュール済タスクの構成ファイル

スケジュール済タスク定義は、スケジュール済タスク構成ファイルと呼ばれるXMLファイルに含まれています。

この項では、スケジューラ・タスクの定義を含むXMLファイルの構造および構成要素について説明します。次の項目が含まれます。

16.7.1 スケジューラXMLファイルの構造

スケジュール済タスク構成XMLファイル内の要素として、<name>、<class>、<description>、<retry>、<parameters>などがあります。

次に、構成XMLファイル内の要素のリストを示します。

<scheduledTasks xmlns="http://xmlns.oracle.com/oim/scheduler">
    <task>
        <name>
        <class>
        <description>
        <retry>
        <parameters>
            <string-param>
            .....
            </string-param>
            
            <number-param>
            .......
            </number-param>
            
            <boolean-param>
            .......
            </boolean-param>
        </parameters>
    </task>
</scheduledTasks>

16.7.2 scheduledTasks要素

scheduledTasks要素は、スケジュール済タスクの定義に使用されるXMLのルート要素です。

表16-1に、scheduledTasks要素のプロパティの概要を示します。

表16-1 scheduledTasks要素のプロパティ

プロパティ

親要素

該当なし

属性

次のように、XML名前空間をscheduledTasks要素の属性として指定します。

<scheduledTasks xmlns="http://xmlns.oracle.com/oim/scheduler">

ノート: xmlnsパラメータは必須です。

子要素

task

出現回数

作成するスケジュール済タスクXMLファイルごとに1つ

要素値

該当なし

必須かオプションか

必須

16.7.3 task要素

task要素は、scheduledTasks要素の子要素です。

task要素は、スケジュール済タスクを定義するために使用します。task要素には、スケジュール済タスクの名前、クラス、説明、再試行回数などの情報が含まれます。

表16-2に、task要素のプロパティの概要を示します。

表16-2 task要素のプロパティ

プロパティ

親要素

scheduledTasks

属性

なし

子要素

name、class、description、retryおよびparameters

出現回数

作成するタスクごとに1つ

ノート: 単一のスケジュール済タスクXMLファイルに複数のタスクを定義する場合は、定義するスケジュール済タスクごとに1つのtask要素を使用する必要があります。

要素値

該当なし

必須かオプションか

必須

16.7.4 name要素

name要素は、task要素の子要素です。name要素は、作成するスケジュール済タスクの名前を指定するために使用します。

表16-3に、name要素のプロパティの概要を示します。

表16-3 name要素のプロパティ

プロパティ

親要素

task

属性

なし

子要素

なし

出現回数

1

要素値

作成するスケジュール済タスクの名前。

ノート: スケジュール済タスクの名前は一意にする必要があります。

必須かオプションか

必須

16.7.5 class要素

class要素(必須)は、task要素の子要素です。class要素は、スケジュール済タスクを実行するJavaクラスの名前を指定するために使用します。

表16-4に、class要素のプロパティの概要を示します。

表16-4 class要素のプロパティ

プロパティ

親要素

task

属性

なし

子要素

なし

出現回数

1

要素値

スケジュール済タスクを実行するJavaクラスの名前。スケジュール済タスクのクラスを開発する方法の詳細は、スケジュール済タスク・クラスの開発を参照してください。

必須かオプションか

必須

16.7.6 description要素

description要素(必須)は、task要素の子要素です。description要素は、作成するタスクの説明を追加するために使用します。

表16-5に、description要素のプロパティの概要を示します。

表16-5 description要素のプロパティ

プロパティ

親要素

task

属性

なし

子要素

なし

出現回数

1

要素値

作成するタスクの説明

必須かオプションか

必須

16.7.7 retry要素

retry要素を使用すると、スケジューラがタスクを再度スケジュールするまでに待機する必要がある秒数を指定できます。

表16-6に、retry要素のプロパティの概要を示します。

表16-6 retry要素のプロパティ

プロパティ

親要素

task

属性

なし

子要素

なし

出現回数

1

要素値

スケジューラによってタスクが再スケジュールされるまでの待機時間(秒数)

必須かオプションか

必須

16.7.8 parameters要素

スケジュール済タスクでジョブを正常に実行するために必要なパラメータを実行時に指定する場合は、parameters要素を使用する必要があります。たとえば、取得するレコードの数を実行時にユーザーに指定させるスケジュール済タスクを作成できます。

この要素の中で指定するパラメータは、「ジョブの作成」ページの「パラメータ」セクションに表示されます。

表16-7に、parameters要素のプロパティの概要を示します。

表16-7 parameters要素のプロパティ

プロパティ

親要素

task

属性

なし

子要素

string-param、number-param、boolean-param

出現回数

1

要素値

該当なし

必須かオプションか

オプション

16.7.9 string-param要素

string-param要素は、文字列データ型の値をとるフィールドの名前を指定するために使用します。言い換えると、string-param要素では、文字列データ型の値を保持できるフィールドのラベルを指定します。

表16-8に、string-param要素のプロパティの概要を示します。

表16-8 string-param要素のプロパティ

プロパティ

親要素

パラメータ

属性

required、helpText、encrypted

子要素

なし

出現回数

Stringデータ型のパラメータごとに1つ

要素値

文字列パラメータの名前

必須かオプションか

オプション

表16-8に示すように、string-param要素には次の属性が含まれています。

  • required

    これは必須の属性で、値はtrueまたはfalseのいずれかです。

    required属性の値がtrueの場合は、パラメータの値を実行時に必ず入力する必要があります。

    required属性の値がfalseの場合は、パラメータの値を実行時に入力することは必須ではありません。

  • helpText

    この属性では、フィールドへの入力内容をユーザーが把握できるように、実行時に表示するテキストを指定します。通常は、パラメータによって作成されるフィールドの説明を指定します。

  • encrypted

    デフォルトでは、値はfalseになりますが、trueまたはfalseのどちらも指定できます。

    encrypted属性の値がtrueの場合は、実行時に入力されるパラメータ値は暗号化された形式で格納されます。

    required属性の値がfalseの場合は、実行時に入力されるパラメータ値はプレーン・テキストで格納されます。

16.7.10 number-param要素

number-param要素は、longデータ型の値をとるフィールドの名前を指定するために使用します。

表16-9に、number-param要素のプロパティの概要を示します。

表16-9 number-param要素のプロパティ

プロパティ

親要素

パラメータ

属性

required、helpText

子要素

なし

出現回数

longデータ型のパラメータごとに1つ

要素値

longデータ型を保持できるフィールドの名前

必須かオプションか

オプション

require属性とhelpText属性の動作および説明は、number-param要素とstring-param要素で同じです。require属性とhelpText属性の詳細は、string-param要素を参照してください。

16.7.11 boolean-param要素

boolean-param要素は、ブール・データ型の値をとるフィールドの名前を指定するために使用します。

表16-10に、boolean-param要素のプロパティの概要を示します。

表16-10 boolean-param要素のプロパティ

プロパティ

親要素

パラメータ

属性

required、helpText

子要素

なし

出現回数

ブール・データ型のパラメータごとに1つ

要素値

ブール・データ型を保持できるフィールドの名前

必須かオプションか

オプション

required属性とhelpText属性の動作および説明は、boolean-param要素とstring-param要素で同じです。require属性とhelpText属性の詳細は、string-param要素を参照してください。

16.8 カスタムのスケジュール済タスクを作成するためのベスト・プラクティス

変数/定数は、カスタム・スケジュール済タスクを作成するために使用します。

表16-11に、カスタムのスケジュール済タスクの作成に変数/定数を使用するためのガイドラインを示します。

表16-11 カスタムのスケジュール済タスクを作成するための変数および定数

タイプ 値の格納/検索元

ターゲット・システム接続の詳細

ホスト名、ポート番号、SSL

ITリソース/アプリケーション・インスタンス

ターゲット・システムの構成

属性マッピング、一意属性、ユーザー・オブジェクト・クラス

参照

スケジュール済ジョブ固有の変数/定数

アプリケーション・インスタンス名、ITリソース名、ファイル・パス、検索フィルタ、バッチ・サイズ、再試行

スケジュール済ジョブ

スケジュール済ジョブの詳細構成変数/定数

属性マッピング、ターゲット・システムの日付書式、定数、属性トランスフォーメーション・クラス

参照

Oracle Identity Manager固有のシステム・ワイドの非常に静的な構成プロパティ/定数/変数

デフォルトの日付書式、ユーザー名生成に関するデフォルト・ポリシー

システム・プロパティ

電子メール通知

件名、本文、宛先、差出人

電子メール・テンプレート

16.9 isStop()メソッドの使用

isStopped()メソッドは、ジョブ・ステータスを取得するためのチェックを追加するために呼び出します。

Oracle Identity System Administrationの「スケジューラ」セクションからジョブが停止されても、ジョブは停止されず、そのまま実行されます。スケジュール済タスクを停止するには、次の手順を実行します。

カスタムのスケジュール済タスクを開発すると、実行メソッド内部の様々なステージでisStop()メソッドまたはisStopped()メソッドを呼び出すことができます。このメソッドがtrueを返す場合は、実行メソッドから返されます。実行メソッド内部にループがあれば、ループの反復ごとにisStop()メソッドまたはisStopped()メソッドが必ず呼び出されます。

実行メソッドでは、ジョブ・ステータスを取得するためのチェックを追加します。これは、com.thortech.xl.scheduler.tasks.SchedulerBaseTaskクラスのisStopped()メソッドを呼び出すことで取得できます。isStopped()メソッドによりTRUEが返されると、スケジュール済タスクに対して何も実行せずに実行メソッドが返されます。このコード・スニペットを次に示します。

if(isStopped())
     return;

TaskSupportクラスを拡張してカスタム・スケジュール済タスクを開発する場合は、実行メソッドでisStop()メソッドを呼び出します。

カスタムのスケジュール済タスク・コードがOracle Identity Managerリリース9.xのレガシーcom.thortech.xl.scheduler.tasks.SchedulerBaseTaskクラスを拡張する場合、実行メソッドでisStopped()メソッドを呼び出します。

16.10 DMSを使用したスケジュール済ジョブのパフォーマンスの監視

Dynamic Monitoring Service (DMS)を使用してパフォーマンス・メトリックを表示できます。

OIM_ScheduledJob DMSメトリックは、スケジュール済ジョブのパフォーマンスを監視するために存在します。スケジュール済ジョブの実行回数や、スケジュール済ジョブにかかった平均時間などの詳細を提供します。成功したジョブの詳細はexecute列にあり、失敗したジョブの詳細はFailed_execute列にあります。