この章では、作業(Java、PL/SQLおよびバイナリ・プロセス・コードの実行など)の負荷を軽減するジョブを開発するためのサービスとして、Oracle Enterprise Schedulerの概要について説明します。
この章では、次の項目について説明します。
注意: Oracle Enterprise Schedulerのサンプル・コードについては、サンプル・サイト( |
エンタープライズ・アプリケーションには、オンライン・ユーザーやWebサービスによってリクエストされた多数のリアルタイム・トランザクションに応答する機能が必要です。ただし、将来実行される、より大規模なトランザクションの負荷を軽減したり、定義されたスケジュールに基づいたアプリケーション・メンテナンス作業の実行を自動化する機能も必要となります。
Oracle Enterprise Schedulerでは、Oracle WebLogic Server clusterクラスタのノード全体に分散された様々なジョブ・タイプ(Java、PL/SQL、バイナリ・スクリプトなど)を実行する機能が提供されています。Oracle Enterprise Schedulerは、これらのジョブを安全に実行すると同時に、高可用性とスケーラビリティを実現し、ロード・バランシングを行い、Fusion Middleware Controlを使用した監視と管理を提供します。
Oracle Enterprise Schedulerでは、次の目的のためにスケジューリング・サービスが提供されています。
アプリケーション・サーバーのグリッド全体にジョブ・リクエストの処理を分散するため
Java、PL/SQLおよびバイナリ・プロセスのジョブを実行するため
ジョブ・リクエストをジョブ・セットにグループ化するため
繰返し式に基づいたジョブ・リクエストをスケジュールするため
Fusion Middleware Controlを使用してジョブ・リクエストを管理するため
Oracle Enterprise Schedulerでは、スケジュールに基づいて繰り返す必要があるプロセスを自動化したり、負荷の大きい処理を特定の時間ウィンドウに遅延させるための、サービス指向環境における重要な要件が提供されています。Oracle Enterprise Schedulerを使用すると、次を実行できます。
高度なスケジュールおよびワークロード管理のサポート
管理ジョブの実行の自動化
レポートの作成および配布のスケジュール
ビジネス・プロセス管理のためのビジネス・フローにおける手順の将来のスケジュール
Oracle Enterprise Schedulerでは、ジョブ定義の完全なライフ・サイクル(開発、分散、スケジュールおよび監視)を管理する機能が提供されています。Oracle JDeveloperを使用すると、アプリケーション開発者は、開発環境でジョブ・リクエストを簡単に作成できます。アプリケーション管理者および他のユーザーは、ジョブ・リクエストの実行時間および実行場所を指定できます。ユーザーおよび管理者はジョブがどのように実行されたかを監視して、これらのジョブの終了結果にアクセスできます。
大規模なシステムを実装するカスタマは、通常、多数の様々なマシンを管理して、それらのユーザーのワークロードを処理する必要があります。Oracle Enterprise Schedulerでは、個別のマシンやマシンのグループへの作業の分散方法を制御する機能が提供されています。
Oracle Enterprise Schedulerは、主としてJava EEアプリケーションであり、このアプリケーションでは、ジョブを実行するための時間ベースおよびスケジュールベースのコールバックを他のアプリケーションに対して使用できます。Oracle Enterprise Schedulerは、電話やOracle Calendarで使用することがあるCalendarアプリケーションと似ています。Calendarアプリケーションでは、ユーザーがイベントや会議を作成して時間と繰返しの詳細を設定し、特定のイベントにとって適切な時間に、アプリケーションによって警告または通知が送信されます。同様に、Oracle Enterprise Schedulerアプリケーションではジョブが定義され、これらのジョブを実行する必要がある時間が指定されて、指定した時間または特定のイベントを受信したときに、Oracle Enterprise Schedulerによってこれらのアプリケーションに対するコールバックが行われます。これは、特定のアプリケーションがOracle Enterprise Schedulerのインスタンスと相互作用できる方法を簡略化したモデルです。Oracle Enterprise Schedulerではジョブそのものを実行するのではなく、アプリケーションに対してコールバックを行い、これにより、アプリケーションでジョブ・リクエストが実際に実行されます。これは、Oracle Enterprise Schedulerではジョブ・リクエストの詳細が認識されず、すべてのジョブ・リクエストの詳細はアプリケーションによって所有および使用されることを意味します。ジョブを実行するリクエストを発行するアプリケーションは、クライアント・アプリケーションを呼ばれます。
開発目的のために、Oracle Enterprise SchedulerとOracle Enterprise Schedulerクライアント・アプリケーションは両方とも、同じOracle WebLogic Server上にデプロイされます。Fusion Middleware Controlでは、Oracle Enterprise Schedulerと相互作用するためのインタフェースを提供できます。ただし、通常は、クライアント・アプリケーションでエンド・ユーザーがジョブ・リクエストを設定したり、ジョブ・リクエストを実行する時間のスケジュールを指定できるようにし、その後、指定した時間になるか、またはイベントを受信したときにOracle Enterprise Schedulerからコールバックされるようにします。
アプリケーション開発者は、設計時にOracle JDeveloperを使用して、Oracle Enterprise Schedulerの実行可能クラスと、この実行可能クラスのためのOracle Enterprise Scheduler固有のメタデータを含むJava EEアプリケーションを作成します。Oracle Enterprise Schedulerのメタデータは、ジョブ定義で構成されており、ここには実行可能クラスとパラメータ、スケジュールが含まれています。スケジュールでは、ジョブ・リクエストを実行するために送信できる時間を取得します。スケジュールはジョブ・リクエストとは無関係に定義され、実行時、ジョブ・リクエストが実行のために発行されるときにジョブ・リクエストに関連付けられます。図1-1に、Oracle Enterprise Schedulerアプリケーションの設計時の概念を示します。
図1-1では、Oracle Enterprise Scheduler APIを使用してメタデータがMDSストアに書き込まれていますが、クライアント・アプリケーションがメタデータを所有しており、メタデータはOracle Enterprise Schedulerアプリケーションに属していません。このメタデータはジョブ実装とともにOAR(アプリケーション用のEARやメタデータを含むMARなど)にパッケージ化されており、これがランタイム環境にデプロイされます。
設計時に、次のタイプのメタデータを作成できます。
ジョブ・タイプ: ジョブの構成要素の基本的な定義であり、次のことを定義します。
Java、PL/SQL、バイナリ・スクリプトなどの実行されるジョブのタイプ
ジョブのタイプがJavaの場合にはJavaの実行可能クラス、ジョブのタイプがPL/SQLの場合にはPL/SQL機能、またはジョブのタイプがスクリプトの場合にはスクリプト
ジョブとそのデータ・タイプに対するパラメータ定義、およびデフォルト値
ジョブ定義: ジョブ定義(またはジョブ)は、クライアント・アプリケーションのコンテキストで実行される作業の最小単位です。これは基礎となるジョブ・タイプ、およびジョブ・タイプで定義されたパラメータへの追加となる任意のパラメータによって定義されます。
ジョブ・セット: ジョブ・セットは連続またはパラレルのジョブ・ステップのセットであり、ジョブ・ステップは単一ジョブまたは別のジョブ・セットにすることができます。ジョブ・セットおよびその各ジョブ・セット・ステップには追加パラメータを設定でき、その値は、ジョブまたはジョブ・セットがジョブ・リクエストとして発行されるときに指定されます。
スケジュール: ジョブ・スケジュールは事前定義された時間や期間の繰返しであるか、または無期限です。スケジュールはジョブとは無関係に定義されますが、ジョブ・リクエストが発行されて実行されるとき、1つ以上のジョブと関連付けられます。
非互換性: 非互換性を使用すると、同時に実行できないジョブ定義およびジョブ・セットを指定できます。
実行時には、アプリケーション・ユーザーはスケジュールと発行されるジョブを関連付け、ジョブ・パラメータの値を指定します。次に、この情報はジョブ・リクエストとして発行されます。Oracle Enterprise Schedulerでジョブ・リクエストが受信されると、ジョブ・リクエストを実行する適切な時間が決定され、その時間になると、所有するクライアント・アプリケーションにメッセージが送信されます。その後、クライアント・アプリケーションにより、ジョブ・メタデータおよびパラメータのランタイム値に基づいてジョブが実行されます。
図1-2に、Oracle Enterprise Schedulerを使用したアプリケーションの実行に関する順序、および次の手順を示します。
ユーザーがクライアント・アプリケーションを使用してリクエストを発行します。
クライアント・アプリケーションにより、リクエストがOracle Enterprise Schedulerに送信されます。
Oracle Enterprise Schedulerによって、リクエストのメタデータが読み取られます。
Oracle Enterprise Schedulerによって、リクエストがメタデータとともにOracle Enterprise Schedulerデータ・ストアの待機キューに置かれます。
リクエストの仕様に基づく適切なタイミングで、Oracle Enterprise Schedulerによって、クライアント・アプリケーションにメッセージ、すべてのリクエスト・パラメータおよび発行時に取得されたメタデータが送信されます。
クライアント・アプリケーションによってジョブが実行され、ステータスが返されます。
Oracle Enterprise Schedulerによって、ジョブ・リクエストのステータスで履歴が更新されます。
図1-3に、次を含む重要なOracle Enterprise Schedulerコンポーネントを示します。
スケジューラ・コンポーネント自体(ランタイム・モジュール、リクエスト・ディスパッチャ、リクエスト・プロセッサなど)
クライアント・アプリケーション(ランタイムEJB、コールするエンド・ポイントMessage-Driven-Bean (MDB)、実行がリクエストされるジョブなど)
Oracle Metadata Storeおよびクライアント・アプリケーション・メタデータ
Oracle Enterprise Schedulerスキーマ(待機キュー、準備完了キュー、ジョブ履歴など)
図1-3に示すように、クライアント・アプリケーションは次のように構成されて実行されます。
ユーザーがクライアント・アプリケーションを操作して、ジョブ・リクエストを発行します。
クライアント・アプリケーションでは、そのejb-jar.xmlに2つのEJBとエンドポイントMDBを指定します。次に、これらのBeanはクライアント・アプリケーション・コンテキストでインスタンス化されます。
アプリケーション・コンテキストのBeanが、基礎となるOracle Enterprise Schedulerモジュールに接続します。ランタイムEJBによって、Oracle Enterprise Schedulerの基礎となるランタイム・モジュールにジョブ・リクエストが送信されます。
ランタイム・モジュールがOracle MDSのクライアント・アプリケーション・メタデータにアクセスします。
ランタイム・モジュールでは、Oracle Enterprise Schedulerスキーマ内の待機キューに、リクエストとそのメタデータおよびスケジュールを維持します。
Oracle Enterprise Schedulerのリクエスト・ディスパッチャにより、ジョブ・リクエストを実行する適正な時間が、その対応するスケジュールに基づいて決定されます。このとき、リクエスト・ディスパッチャにより、リクエストがOracle Enterprise Schedulerスキーマの準備完了キューに移動されます。
Oracle Enterprise Schedulerリクエスト・プロセッサにより、処理されるジョブ・リクエストが準備完了キューから取得されます。
リクエスト・プロセッサにより、メッセージがエンドポイントMDBを使用したアプリケーションに送信されます。
Oracle Enterprise Schedulerにより、スケジュールされたジョブが実行されます。
ほとんどの場合、または少なくとも簡略化されたケースでは、このアプリケーションはリクエストを発行したアプリケーションと同じです。
基本的なOracle WebLogic Serverインスタンスをインストールしたら、次の手順を実行して、Oracle Enterprise Schedulerを設定します。
Oracle Enterprise Schedulerを構成します。
ジョブ定義および他の必要なメタデータを含むクライアント・アプリケーションを開発します。
クライアント・アプリケーションをデプロイします。
クライアント・アプリケーションを起動してジョブ・リクエストを発行します。これにより、Oracle Enterprise Schedulerがコールされます。
クライアント・アプリケーションを起動してジョブ・リクエストのステータスまたは他の履歴を確認します。これにより、Oracle Enterprise Schedulerがコールされます。または、Fusion Middleware Controlを使用して、指定されたジョブ・リクエストのステータスを確認します。
Oracle Enterprise Schedulerでは、繰返しジョブ・リクエストのインスタンスが、スケジュールされた最初の実行時間から開始して、定率で実行される定率スケジューリングがサポートされています。各ジョブ・リクエストは、スケジュールの絶対時間にできるかぎり近くなるよう実行されます。Oracle Enterprise Schedulerでは、繰返しリクエストの実行中のジョブ・リクエストは、どの時点においても必ず1つのみとなります。ジョブ・リクエストが、次のジョブ・リクエストのスケジュールされた実行時間を超過して実行されると、次のジョブ・リクエストは遅延し、前のジョブ・リクエストが完了するとすぐにディスパッチされます。
ジョブ・リクエストがディスパッチされると、次のリクエストは待機キューに置かれます。次のジョブ・リクエストの実行時間は、スケジュール内の現在の時間以降の次の時間となります。Oracle Enterprise Schedulerは、過去の時間帯をスキップします。
実行される時間およびリクエストされた日付や繰返し終了日付に関係なく、繰返しリクエストのすべてのインスタンスを実行することが望ましい場合、リクエストによって、システム・プロパティEXECUTE_PAST
を設定する必要があります。
Oracle Enterprise Schedulerでは、固定遅延スケジューリングはサポートされていません。固定遅延スケジューリングを使用すると、各リクエストは、前のリクエストが完了した後で、固定の遅延期間に実行されます。これは、1つのリクエストが遅延すると、すべての後続リクエストが同様に遅れることを意味します。それに対して、定率スケジューリングでは、リクエストが遅れた後、正しいスケジュールに戻るよう試みます。