14 スケジュール済タスクの開発
Oracle Identity Managerには、ジョブ実行としてスケジュールできる一連のスケジュール済タスクが含まれています。例として、パスワードの期限切れをユーザーに電子メールで送信するパスワード警告タスクをあげることができます。Oracle Identity Managerには、独自のスケジュール済タスクを作成する機能もあります。事前定義されたスケジュール済タスクがニーズに適合しない場合は、要件に合せてスケジュール済タスクを作成できます。たとえば、ターゲット・システムで定期的に新しい情報をチェックしてOracle Identity Managerに同じデータを複製するスケジュール済タスクを使用して、リコンシリエーション実行を構成できます。
次の各項では、カスタム・スケジュール済タスクを作成および実装する方法について説明します。
14.1 タスク作成の概要
Oracle Identity Managerの事前定義されたスケジュール済タスクを確認して、カスタム・タスクが必要かどうかを決定します。
この項では、スケジュール済タスクの作成における重要なステップを概説し、プロセスを示す例を紹介します。次の項目が含まれます。
14.1.1 タスク作成のステップ
スケジュール済タスクを作成するには、スケジュール済タスクXMLファイルをタスク・メタデータで更新し、スケジュール済タスクJavaクラスを開発し、スケジュール済タスクをプラグインとしてパッケージ化し、タスク・ファイルをパッケージ化します。
新しいスケジュール済タスクを作成する基本ステップは、次のとおりです。
14.2 スケジュール済タスクのメタデータの定義
スケジュール済タスクのメタデータには、タスクに関する必須の情報およびタスクが受け入れるオプションのパラメータが含まれています。
各スケジュール済タスクは、次のメタデータ情報を含みます。
-
スケジュール済タスクの名前
-
スケジュール済タスクを実装するJavaクラスの名前
-
説明
-
再試行間隔
-
(オプション)スケジュール済タスクを受け入れるパラメータ。各パラメータには次の追加情報が含まれます。
-
パラメータ名
-
パラメータのデータ型
-
必須/オプション・パラメータ
-
ヘルプ・テキスト
-
14.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ファイルのエクスポートおよびインポートの詳細は、ユーザーが修正可能なメタデータ・ファイルの移行を参照してください。
14.4 スケジュール済タスク・クラスの開発
スケジュール済タスクを実装するJavaクラスは、スケジュール済タスク・クラスと呼ばれます。
次のステップでは、Javaクラスを作成して、メタデータがXMLファイルで定義されたタスクを実行します。スケジュール済タスクを実装するJavaクラスは、スケジュール済タスク・クラスと呼ばれます。
スケジュール済タスクのJavaクラスを開発するには:
14.5 プラグインXMLファイルの構成
スケジュール済タスクをプラグインとして宣言するには、plugin.xmlファイルを構成する必要があります。
プラグインの詳細は、プラグインの開発を参照してください。
ノート:
1つのスケジュール済タスクに対して1つのplugin.xmlファイルを作成することをお薦めします。これは、プラグインが登録解除されると、対応するパッケージが削除されるためです。
plugin.xmlファイルを構成するには:
14.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ファイルのみが含まれていることを確認してください。
14.7 スケジュール済タスクの構成ファイル
スケジュール済タスク定義は、スケジュール済タスク構成ファイルと呼ばれるXMLファイルに含まれています。
この項では、スケジューラ・タスクの定義を含むXMLファイルの構造および構成要素について説明します。次の項目が含まれます。
14.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>
14.7.2 scheduledTasks要素
scheduledTasks要素は、スケジュール済タスクの定義に使用されるXMLのルート要素です。
表14-1に、scheduledTasks要素のプロパティの概要を示します。
表14-1 scheduledTasks要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
該当なし |
属性 |
次のように、XML名前空間をscheduledTasks要素の属性として指定します。 <scheduledTasks xmlns="http://xmlns.oracle.com/oim/scheduler"> ノート: xmlnsパラメータは必須です。 |
子要素 |
task |
出現回数 |
作成するスケジュール済タスクXMLファイルごとに1つ |
要素値 |
該当なし |
必須かオプションか |
必須 |
14.7.3 task要素
task要素は、scheduledTasks要素の子要素です。
task要素は、スケジュール済タスクを定義するために使用します。task要素には、スケジュール済タスクの名前、クラス、説明、再試行回数などの情報が含まれます。
表14-2に、task要素のプロパティの概要を示します。
表14-2 task要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
scheduledTasks |
属性 |
なし |
子要素 |
name、class、description、retryおよびparameters |
出現回数 |
作成するタスクごとに1つ ノート: 単一のスケジュール済タスクXMLファイルに複数のタスクを定義する場合は、定義するスケジュール済タスクごとに1つのtask要素を使用する必要があります。 |
要素値 |
該当なし |
必須かオプションか |
必須 |
14.7.4 name要素
name要素は、task要素の子要素です。name要素は、作成するスケジュール済タスクの名前を指定するために使用します。
表14-3に、name要素のプロパティの概要を示します。
表14-3 name要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
task |
属性 |
なし |
子要素 |
なし |
出現回数 |
1 |
要素値 |
作成するスケジュール済タスクの名前。 ノート: スケジュール済タスクの名前は一意にする必要があります。 |
必須かオプションか |
必須 |
14.7.5 class要素
class要素(必須)は、task要素の子要素です。class要素は、スケジュール済タスクを実行するJavaクラスの名前を指定するために使用します。
表14-4に、class要素のプロパティの概要を示します。
表14-4 class要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
task |
属性 |
なし |
子要素 |
なし |
出現回数 |
1 |
要素値 |
スケジュール済タスクを実行するJavaクラスの名前。スケジュール済タスクのクラスを開発する方法の詳細は、スケジュール済タスク・クラスの開発を参照してください。 |
必須かオプションか |
必須 |
14.7.6 description要素
description要素(必須)は、task要素の子要素です。description要素は、作成するタスクの説明を追加するために使用します。
表14-5に、description要素のプロパティの概要を示します。
表14-5 description要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
task |
属性 |
なし |
子要素 |
なし |
出現回数 |
1 |
要素値 |
作成するタスクの説明 |
必須かオプションか |
必須 |
14.7.7 retry要素
retry要素を使用すると、スケジューラがタスクを再度スケジュールするまでに待機する必要がある秒数を指定できます。
表14-6に、retry要素のプロパティの概要を示します。
表14-6 retry要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
task |
属性 |
なし |
子要素 |
なし |
出現回数 |
1 |
要素値 |
スケジューラによってタスクが再スケジュールされるまでの待機時間(秒数) |
必須かオプションか |
必須 |
14.7.8 parameters要素
スケジュール済タスクでジョブを正常に実行するために必要なパラメータを実行時に指定する場合は、parameters要素を使用する必要があります。たとえば、取得するレコードの数を実行時にユーザーに指定させるスケジュール済タスクを作成できます。
この要素の中で指定するパラメータは、「ジョブの作成」ページの「パラメータ」セクションに表示されます。
表14-7に、parameters要素のプロパティの概要を示します。
表14-7 parameters要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
task |
属性 |
なし |
子要素 |
string-param、number-param、boolean-param |
出現回数 |
1 |
要素値 |
該当なし |
必須かオプションか |
オプション |
14.7.9 string-param要素
string-param要素は、文字列データ型の値をとるフィールドの名前を指定するために使用します。言い換えると、string-param要素では、文字列データ型の値を保持できるフィールドのラベルを指定します。
表14-8に、string-param要素のプロパティの概要を示します。
表14-8 string-param要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
パラメータ |
属性 |
required、helpText、encrypted |
子要素 |
なし |
出現回数 |
Stringデータ型のパラメータごとに1つ |
要素値 |
文字列パラメータの名前 |
必須かオプションか |
オプション |
表14-8に示すように、string-param要素には次の属性が含まれています。
-
required
これは必須の属性で、値は
true
またはfalse
のいずれかです。required属性の値が
true
の場合は、パラメータの値を実行時に必ず入力する必要があります。required属性の値が
false
の場合は、パラメータの値を実行時に入力することは必須ではありません。 -
helpText
この属性では、フィールドへの入力内容をユーザーが把握できるように、実行時に表示するテキストを指定します。通常は、パラメータによって作成されるフィールドの説明を指定します。
-
encrypted
デフォルトでは、値は
false
になりますが、true
またはfalse
のどちらも指定できます。encrypted属性の値が
true
の場合は、実行時に入力されるパラメータ値は暗号化された形式で格納されます。required属性の値が
false
の場合は、実行時に入力されるパラメータ値はプレーン・テキストで格納されます。
14.7.10 number-param要素
number-param要素は、longデータ型の値をとるフィールドの名前を指定するために使用します。
表14-9に、number-param要素のプロパティの概要を示します。
表14-9 number-param要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
パラメータ |
属性 |
required、helpText |
子要素 |
なし |
出現回数 |
longデータ型のパラメータごとに1つ |
要素値 |
longデータ型を保持できるフィールドの名前 |
必須かオプションか |
オプション |
require属性とhelpText属性の動作および説明は、number-param要素とstring-param要素で同じです。require属性とhelpText属性の詳細は、string-param要素を参照してください。
14.7.11 boolean-param要素
boolean-param要素は、ブール・データ型の値をとるフィールドの名前を指定するために使用します。
表14-10に、boolean-param要素のプロパティの概要を示します。
表14-10 boolean-param要素のプロパティ
プロパティ | 値 |
---|---|
親要素 |
パラメータ |
属性 |
required、helpText |
子要素 |
なし |
出現回数 |
ブール・データ型のパラメータごとに1つ |
要素値 |
ブール・データ型を保持できるフィールドの名前 |
必須かオプションか |
オプション |
required属性とhelpText属性の動作および説明は、boolean-param要素とstring-param要素で同じです。require属性とhelpText属性の詳細は、string-param要素を参照してください。
14.8 カスタムのスケジュール済タスクを作成するためのベスト・プラクティス
変数/定数は、カスタム・スケジュール済タスクを作成するために使用します。
表14-11に、カスタムのスケジュール済タスクの作成に変数/定数を使用するためのガイドラインを示します。
表14-11 カスタムのスケジュール済タスクを作成するための変数および定数
タイプ | 例 | 値の格納/検索元 |
---|---|---|
ターゲット・システム接続の詳細 |
ホスト名、ポート番号、SSL |
ITリソース/アプリケーション・インスタンス |
ターゲット・システムの構成 |
属性マッピング、一意属性、ユーザー・オブジェクト・クラス |
参照 |
スケジュール済ジョブ固有の変数/定数 |
アプリケーション・インスタンス名、ITリソース名、ファイル・パス、検索フィルタ、バッチ・サイズ、再試行 |
スケジュール済ジョブ |
スケジュール済ジョブの詳細構成変数/定数 |
属性マッピング、ターゲット・システムの日付書式、定数、属性トランスフォーメーション・クラス |
参照 |
Oracle Identity Manager固有のシステム・ワイドの非常に静的な構成プロパティ/定数/変数 |
デフォルトの日付書式、ユーザー名生成に関するデフォルト・ポリシー |
システム・プロパティ |
電子メール通知 |
件名、本文、宛先、差出人 |
電子メール・テンプレート |
14.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()メソッドを呼び出します。