この章では、Oracle Enterprise Schedulerを使用して、スクリプトまたはバイナリ・コマンドを分岐プロセスで実行するプロセス・ジョブを作成する方法について説明します。
この章では、次の項目について説明します。
ランタイム・サービスの使用方法の詳細は、第14章「ランタイム・サービスの使用」を参照してください。
Oracle Enterprise Schedulerを使用すると、Javaクラス、PL/SQLストアド・プロシージャ、生成されたジョブとして実行されるプロセス・ジョブなど、様々なタイプのジョブ・リクエストを実行できます。Oracle Enterprise Schedulerを使用してプロセス・タイプのジョブを実行するには、特定のメタデータを指定して、実行するプロセス・タイプのジョブの特性を定義する必要があります。また、実行時間のスケジュールなどの、ジョブ・リクエストのプロパティを指定する場合もあります。
Oracle Enterprise Schedulerを使用してプロセス・タイプのジョブ・リクエストを指定するには、次の3つのステップ・プロセスを実行します。
Oracle Enterprise Schedulerを使用して実行するスクリプトまたはバイナリ・コマンドを、作成または取得します。生成されたプロセスのためのスクリプトまたはコマンドは以前に作成済であると想定しているため、このステップについては説明しません。
Oracle Enterprise Scheduler APIをアプリケーションで使用して、ジョブ・タイプとジョブ定義のオブジェクトを作成し、これらのオブジェクトをメタデータ・リポジトリに格納します。
Oracle Enterprise Scheduler APIを使用して、ジョブ・リクエストを発行します。リクエストの発行方法の詳細は、第14章「ランタイム・サービスの使用」を参照してください。
Oracle Enterprise Scheduler APIを使用したアプリケーションを作成した後、このアプリケーションをパッケージ化してデプロイする必要があります。
実行時に、ジョブ・リクエストを発行した後、ジョブ・リクエストを監視および管理できるようになります。ジョブ・リクエストの監視および管理の詳細は、第14章「ランタイム・サービスの使用」を参照してください。
Oracle Enterprise Schedulerでプロセス・タイプのジョブを使用するには、メタデータ・サービスを特定してジョブ定義を作成する必要があります。ジョブ定義は、名前とジョブ・タイプを指定して作成します。ジョブ定義を作成するときには、特定のシステム・プロパティも設定する必要があります。ジョブ定義は、メタデータ・サービスを使用してメタデータ・リポジトリに格納できます。
メタデータ・サービスの使用方法の詳細は、第6章「メタデータ・サービスの使用」を参照してください。
Oracle Enterprise SchedulerのJobTypeオブジェクトでは、実行タイプを指定し、ジョブ・リクエストの共通プロパティ・セットを定義します。1つのジョブ・タイプを定義して、1つ以上のジョブ定義で共有できます。Oracle Enterprise Schedulerでは、次の3つの実行タイプがサポートされています。
JAVA_TYPE: Javaで実装され、コンテナ内で実行されるジョブ定義に使用します。
SQL_TYPE: データベース・サーバーでPL/SQLストアド・プロシージャとして実行されるジョブ定義に使用します。
PROCESS_TYPE: ホスト・オペレーティング・システムの制御下で個別のプロセスとして実行される、バイナリおよびスクリプトのジョブ定義に使用します。
JobTypeを指定する場合、JobTypeに関連付けられる特性を定義するSystemPropertiesを指定することもできます。表9-1に、リクエストによってプロセス・ジョブ・タイプに対するプロセスが生成された場合の、リクエストの処理方法を指定するプロパティを示します。
表9-1 プロセス・タイプのジョブのためのシステム・プロパティ
| システム・プロパティ | 説明 |
|---|---|
|
|
実行ビジネス・エラーを示すプロセス・ジョブ・リクエストのプロセス終了コードを指定します。このプロパティが指定されていない場合、プロセス終了コード4は実行ビジネス・エラーとして処理されます。 |
|
|
外部プログラムを起動するために必要なコマンドライン。 |
|
|
生成されたプロセスに対して設定される環境編集を表す名前/値ペア(name=value)のカンマ区切りリスト。 |
|
|
プロセス・ジョブ・リクエストに対して標準出力およびエラー・ストリームがリダイレクトされるファイルを指定します。 |
|
|
生成されたジョブが実行されるOracle WebLogic Serverノード。 |
|
|
プロセス・ジョブ・リクエストの正常実行を示すプロセス終了コード。このプロパティが指定されていない場合、プロセス終了コード0は正常完了として処理されます。 |
|
|
生成されたジョブの正常実行を示すプロセス終了コード。このプロパティが指定されていない場合、プロセス終了コード3は警告終了として処理されます。 |
|
|
生成されたプロセスの作業ディレクトリ。 |
システム・プロパティの詳細は、第7章「パラメータとシステム・プロパティの使用」を参照してください。
例9-1に、PROCESS_TYPEを使用したジョブ・タイプ定義のサンプルを示します。
例9-1 Oracle Enterprise SchedulerのJobTypeの作成およびJobTypeプロパティの設定
import oracle.as.scheduler.ConcurrentUpdateException;
import oracle.as.scheduler.JobType;
import oracle.as.scheduler.JobDefinition;
import oracle.as.scheduler.MetadataService;
import oracle.as.scheduler.MetadataServiceHandle;
import oracle.as.scheduler.MetadataObjectId;
import oracle.as.scheduler.MetadataServiceException;
import oracle.as.scheduler.ParameterInfo;
import oracle.as.scheduler.ParameterInfo.DataType;
import oracle.as.scheduler.ParameterList;
import oracle.as.scheduler.SystemProperty;
import oracle.as.scheduler.ValidationException;
void createDefinition( )
throws MetadataServiceException,ConcurrentUpdateException,
ValidationException
{
MetadataService metadata = ...
MetadataServiceHandle mshandle = null;
try
{
ParameterInfo pinfo;
ParameterList plist;
mshandle = metadata.open();
// Define and add a PL/SQL job type for the application metadata.
String jobTypeName = "ProcessJobDefType";
JobType jobType = null;
MetadataObjectId jobTypeId = null;
jobType = new JobType(jobTypeName, JobType.ExecutionType.
PROCESS_TYPE);
plist = new ParameterList();
pinfo = SystemProperty.getSysPropInfo(SystemProperty.CMDLINE);
plist.add(pinfo.getName(), pinfo.getDataType(), "/bin/myprogram
arg1 arg2", false);
pinfo = SystemProperty.getSysPropInfo(SystemProperty.
ENVIRONMENT_VARIABLES);
plist.add(pinfo.getName(), pinfo.getDataType(),
"LD_LIBRARY_PATH=/usr/lib", false);
pinfo = SystemProperty.getSysPropInfo(SystemProperty.PRODUCT);
plist.add(pinfo.getName(), pinfo.getDataType(), "HOW_TO_PROD", false);
jobType.setParameters(plist);
jobTypeId = metadata.addJobType(mshandle, jobType, "HOW_TO_PROD");
// Define and add a job definition for the application metadata.
String jobDefName = "ProcessJobDef";
JobDefinition jobDef = null;
MetadataObjectId jobDefId = null;
jobDef = new JobDefinition(jobDefName, jobTypeId);
jobDef.setDescription("Demo Process Type Job Definition " +
jobDefName);
plist = new ParameterList();
plist.add("myJobdefProp", DataType.STRING, "myJobdefVal", false);
pinfo = SystemProperty.getSysPropInfo(SystemProperty.
REDIRECTED_OUTPUT_FILE);
plist.add(pinfo.getName(), pinfo.getDataType(), "/tmp/" + jobDefName
+ ".out", false);
jobDef.setParameters(plist);
jobDefId = metadata.addJobDefinition(mshandle, jobDef, "HOW_TO_PROD");
}
catch (Exception e)
{
[...]
}
finally
{
// Close metadata service handle in finally block.
if (null != mshandle)
{
metadata.close(mshandle);
mshandle = null;
}
}
}
例9-1に示すように、プロセス・ジョブ・タイプを作成して格納する場合は、次を実行します:
JobTypeコンストラクタを使用して、String名とJobType.ExecutionType.PROCESS_TYPE引数を指定します。
第6.2項「メタデータ・サービスへのアクセス」に示されているように、メタデータ・ポインタを取得します。メタデータ・サービスのaddJobType()メソッドを使用して、JobTypeをメタデータに格納します。
addJobType()によって返されるMedatdataObjectIdでは、一意の識別子を使用して、メタデータ・リポジトリ内のメタデータ・オブジェクトを一意に識別します。
プロセス・タイプのジョブを使用するには、ジョブ定義を作成して格納する必要があります。
|
注意: ジョブ・タイプを指定してジョブ定義を作成した後で、タイプやジョブ定義名を変更することはできません。ジョブ・タイプやジョブ定義名を変更するには、新しいジョブ定義を作成する必要があります。 |
例9-1に、ジョブ定義コンストラクタおよびジョブ・タイプを使用してジョブ定義を作成する方法を示します。表9-1に、ジョブ定義に関連付けられる一部のシステム・プロパティを示します。
例9-1に示すように、ジョブ定義を作成して格納する場合は、次を実行します:
JobDefinitionコンストラクタを使用して、String名およびメタデータに格納されているジョブ・タイプを指すMetadataObjectIDを指定します。
新しいジョブ定義に対して適切なプロパティを設定します。
第6.2項「メタデータ・サービスへのアクセス」に示されているように、メタデータ・ポインタを取得します。次に、メタデータ・サービスaddJobDefinition()メソッドを使用して、ジョブ定義をメタデータ・リポジトリに格納し、MetadataObjectIDを返します。
Oracle Enterprise Schedulerで個別のプロセス・ジョブを管理するには、Perlエージェントが必要です。Perlエージェントは、プロセス・ジョブ実行の検証、生成、監視および制御を行う以外に、Oracle Enterprise Schedulerにプロセス・ジョブの終了ステータスを返します。Perlエージェントにより、Oracle Enterprise Schedulerの可用性の監視やジョブ取消しリクエストの処理も行われます。ジョブが異常終了した(またはジョブの取消しリクエストが発行された)場合、Perlエージェントは生成されたプロセスを(その子とともに)終了し、Perlエージェントも終了します。これにより、オペレーティング・システム・タイプが検出され、適切なシステム・コールを使用して、プロセス・ジョブが起動、管理および終了されます。
Oracle Enterprise SchedulerのPerlエージェントを使用して、そのログを/tmpフォルダに生成できます。これは、Oracle Enterprise Schedulerのログ・レベルをFINE、FINERまたはFINESTに設定して、/tmpフォルダへの読取り権限および書込み権限を確保することによって有効化する必要があります。プロセス・ジョブの起動ごとにログ・ファイルが1つ生成されます。ログ・ファイルには、プロセス・ジョブの起動ログがリストされ、ここには、環境変数のリスト、プロセス・ジョブに対して指定されたコマンドラインとリダイレクトされた出力ファイル、プロセス・ジョブのプロセスIDと終了コード、プロセスの生成中に検出されたエラーなどが含まれます。
Oracle Enterprise SchedulerのPerlエージェントには、Oracle Perlバージョン5.10以上が必要です。