16 Oracle Enterprise Scheduler Webサービスの使用
この章では、Oracle Enterprise Scheduler Webサービスを使用して、Oracle Enterprise Schedulerランタイム機能のサブセットにアクセスする方法について説明します。
この章の内容は次のとおりです。
16.1 Oracle Enterprise Scheduler Webサービスの概要
Oracle Enterprise Schedulerでは、エンタープライズ・レベルのスケジューリング用の豊富な機能セットを提供します。
機能には、次の操作のサポートが含まれます。
-
Oracle Enterprise Schedulerメタデータの作成および管理
-
Oracle Enterprise Schedulerジョブ・リクエストの発行および管理
-
Oracle Enterprise Schedulerの構成および管理
クライアント・アプリケーションは、Oracle Enterprise Scheduler Webサービス(ESSWebservice)を使用して、Oracle Enterprise Schedulerランタイム機能のサブセットにアクセスできます。ESSWebserviceは、主に、BPELプロセスからOracle Enterprise Schedulerを呼び出すなど、SOA統合をサポートするために提供されています。ただし、Webサービスを使用してOracle Enterprise Schedulerと相互作用する必要があるすべてのクライアントでは、ESSWebserviceを使用できます。ESSWebserviceでは、リクエスト発行およびリクエスト管理用のジョブ・スケジューリングおよび管理機能を公開しています。
ESSWebserviceは、Oracle Enterprise Schedulerランタイム・フレームワークにおけるJava EEアプリケーションであるOracle Enterprise Schedulerアプリケーション内でデプロイされます。このため、ESSWebserviceは、Oracle Enterprise Schedulerがインストールおよびデプロイされているすべてのノードで使用できます。
ESSWebserviceは同期Webサービスであり、たとえば、呼び出された操作はすべて同期操作となります。Oracle Enterprise Scheduler内部ジョブの実行モデルは非同期ですが、ESSWebservice APIは非同期である必要はありません。ただし、Oracle Enterprise Scheduler Webサービスは、ジョブ完了イベントを(コアAPIレイヤーでのOracle Enterprise Scheduler EventListener規定の実装と同様の方法で)非同期で取得する機能も提供します。
ESSWebservice WSDLでは、ESSWebserviceの完全な機能を記述します。表16-1に、ESSWebserviceで使用可能な操作の要約を示します。
表16-1 ESSWebserviceで使用可能な操作の要約
操作 | 通信タイプ | 説明 |
---|---|---|
|
同期 |
後処理アクションをジョブ・セット・リクエスト内のステップに追加します。このメソッドは、リクエストの発行前にコールされます。このメソッドでは、同時処理においてadd_printer、add_notification、add_layoutによって以前サポートされていたアクションのサポートを提供します。これらのレガシー・ルーチンへのパラメータは、addPPActionへの引数として、元のルーチンで宣言されていた順序で渡されます。 |
|
同期 |
リクエスト内の複数のアクションをパッケージ化できる点を除き、 |
|
同期 |
終了状態にないリクエストの処理を取り消します。 |
Oracle Enterprise SchedulerOracle Enterprise SchedulerOracle Enterprise Scheduler Oracle Enterprise SchedulerOracle Enterprise Scheduler |
同期 |
終了状態にあるリクエストを削除対象としてマークします。リクエストがほとんどのメソッドでアクセスできなくなりますが、データは物理的に削除されません。 親リクエストの場合、この操作はすべての子にカスケードされます。 |
|
非同期 |
リクエストの完了時に非同期ステータス更新に登録します。個別の非同期レスポンスでの一方向操作です。 |
|
同期 |
|
|
同期 |
指定したリクエストのランタイム詳細を取得します。 |
|
同期 |
指定したリクエストの現在の状態を取得します。 |
|
同期 |
|
|
同期 |
リクエストの |
|
同期 |
非同期Javaジョブのステータスを設定します。 |
|
同期 |
リクエストのNLS環境オプションを設定します。 |
|
同期 |
以前の同時処理スタイルでの引数を、ジョブ・セット・リクエスト内のステップ用のOracle Enterprise Schedulerプロパティにマーシャリングします。この操作は、リクエストの発行前に呼び出されます。 |
|
同期 |
以前の同時処理スタイルでの引数をOracle Enterprise Schedulerプロパティにマーシャリングします。この操作は、リクエストの発行前に呼び出されます。各引数のキーはARGUMENT_PREFIX#であり、#は引数の元の値です。たとえば、ARGUMENT_PREFIX1="firstArg"およびARGUMENT_PREFIX2="secondArg"です。 |
|
同期 |
新しい再帰ジョブ・リクエスト(スケジュールが設定されたリクエスト)を発行します。 |
|
同期 |
新しいジョブ・リクエストを発行します。詳細は、「ユースケース: BPELプロセスでのOracle Enterprise Scheduler ESSWebserviceの使用」を参照してください |
16.2 ESSWebserviceアプリケーションの開発および使用
Oracle Enterprise Schedulerは、ジョブ・リクエスト(Javaタイプのジョブ・リクエストなど)をそのジョブを発行したアプリケーションのコンテキストで実行します。
開発目的の場合は、通常、Oracle Enterprise Schedulerがターゲット・アプリケーションのコンテキストでジョブを実行できる任意のノード上にローカルに、Oracle Enterprise Schedulerとクライアント・アプリケーションを共存させます。目的が本番である場合は、一般的に、クライアント・アプリケーションとOracle Enterprise Schedulerは異なるサーバーに常駐します。
Oracle Enterprise Schedulerを使用するJava EEアプリケーションには、すべてのOracle Enterprise Schedulerアーティファクトが含まれており、この中には次のものがあります。
-
ジョブ・タイプ、ジョブ定義、スケジュール、およびジョブ・セットなどのその他の必須メタデータを含むメタデータ
-
ジョブ実装クラス(Javaジョブ用)
-
必要なOracle Enterprise Schedulerエンドポイント記述(
ejb-jar.xml
でのMDB記述)
ESSWebserviceを使用してOracle Enterprise Schedulerと相互作用するクライアントでは、Oracle Enterprise Schedulerが適切なターゲット・アプリケーションのコンテキストでジョブを実行できるように、このタイプのJava EEアプリケーションを提供する必要があります。このようなすべてのWebサービス・クライアントでは、対応するJava EEホスティング・アプリケーションの名前を認識し、その名前をOracle Enterprise Schedulerに渡し、必要に応じて(WSDLで定義されます)その名前をOracle Enterprise Scheduler Webサービス・コールに渡す必要があります。
このようなアプリケーションは標準的なOracle Enterprise Schedulerクライアント・アプリケーションであり、このアプリケーションではジョブ・リクエストの発行および管理がESSWebservice操作を使用して実行されます。
16.2.1 ESSWebservice Java EEアプリケーションの開発および使用方法
ESSWebservice Webサービスを使用してOracle Enterprise Scheduler機能にアクセスする場合、対応するホスティングJava EEアプリケーションがOracle Enterprise Schedulerで使用できる必要があります。クライアントが、Oracle Enterprise Scheduler Webサービスを使用してOracle Enterprise Schedulerとリモートで相互作用できる場合も、関連付けられているJava EEホスティング・アプリケーションはOracle Enterprise Schedulerと同じ場所に配置されている必要があります。これにより、Oracle Enterprise Schedulerは正しいアプリケーション・コンテキストでジョブ・リクエストを実行できます。このため、ESSWebserviceクライアントでは、必要なすべてのOracle Enterprise Schedulerアーティファクトが含まれた、対応するJava EEホスティング・アプリケーションを依然として開発、パッケージ化およびデプロイする必要があります。
16.2.2 BPELによるESSWebservice SOAアプリケーションの開発および使用方法
SOAクライアントの場合、BPELプロセスなどのすべてのSOAコンポーネントは、SOAコンポジットとしてデプロイされます。SOAコンポジットはJava EEアプリケーションではありません。このコンポジットは、(SOAインフラ内の)SOAファブリック・ランタイム・フレームワークを使用して実行されます。
SOAコンポーネントの場合、コンポジットとOracle Enterprise Schedulerとの間のプロキシとして機能する個別のJava EEホスティング・アプリケーションを作成します。このホスティング・アプリケーションは、デプロイされたコンポジットごとに1つのOracle Enterprise Schedulerアプリケーションという1対1のアソシエーションで作成したり、複数のコンポジットによって単一のJava EEホスティング・アプリケーションが共有されるようにできます。Java EEホスティング・アプリケーションには、必要なすべてのOracle Enterprise Schedulerアーティファクトが含まれています。
16.2.3 getCompletionStatus()操作のWebサービスAddressingヘッダーの設定
ESSWebservice WSDLで示されているように、クライアントは、ジョブ完了に関して非同期に通知される必要がある場合、getCompletionStatus()
操作を呼び出すことができます。ジョブ完了時に、Oracle Enterprise Schedulerは、ESSWebserviceが着信コール内のコール元アドレスを取得するws-addressingに続いてコールバック操作onJobCompletion()
を呼び出します。クライアントは、このコールバックを今後いつでも受信できる必要があります。このようなコールバックは、ジョブの完了に必要な時間に完全に依存します。これは、ジョブ完了時に(Oracle Enterprise Scheduler EventListener規約を実装する)クライアントのリスナーを呼び出すためのOracle Enterprise Scheduler機能に似ています。
getCompletionStatus()
を使用する場合、クライアントには、特定の必須WebサービスAddressingヘッダー(特に、wsa:MessageID
ヘッダーとwsa:ReplyTo
ヘッダー)が含まれている必要があります。これにより、Oracle Enterprise Schedulerランタイムは、ジョブ完了ステータスが適切なReplyTo
アドレスに送信されたことを非同期で通知できます。BPELプロセスでgetCompletionStatus()
を使用すると、SOAランタイムは必須ヘッダーを自動的に追加します。クライアント側でWebサービス・プロキシを使用している場合にgetCompletionStatus()
をプログラムで使用するには、これらのAddressingヘッダーをWebサービス・クライアントで設定する必要があります。
16.2.4 ESSWebserviceの使用上の制限
ESSWebserviceは、次のOracle Enterprise Scheduler機能をサポートしていません。
-
非定型リクエストの発行: ESSWebserviceでは、非定型のジョブ・リクエストの発行がサポートされていません(非定型リクエストの発行を使用するには、EJB APIを使用します)。このため、ESSWebserviceを使用して発行されるすべてのジョブに、対応する定義(関連プロキシ・アプリケーションでメタデータ・オブジェクトとして作成されたジョブ・タイプ、ジョブ定義、スケジュール定義など)が存在する必要があります。Webサービス操作は、そのようなメタデータ・オブジェクトを、WSDLで指定されたそれらのオブジェクトの識別子引数を使用して参照できるようになります。
-
問合せAPI: ESSWebserviceでは問合せAPIを公開しません。Webサービス・クライアントでは、Oracle Enterprise Schedulerリクエストに関する問合せ情報を取得する必要はありません。ESSWebservice Webサービス・クライアントは、問合せAPIを使用する必要がある汎用のモニタリングおよび管理機能は提供していません。
16.2.5 ESSWebserviceの実装
Oracle Enterprise Scheduler機能は、JAX-WS注釈付きサービス・エンドポイント・インタフェース(SEI)を使用するWebサービスとして公開されます。このSEI WebサービスのWebサービス実装によって、共通のOracle Enterprise Scheduler実装レイヤーが呼び出されます。ESSWebserviceは、最大限の互換性を得るためにドキュメント/リテラル/ラップ・モードで公開されます。
ESSWebserviceで使用される一部のデータ型は、Webサービスで直接使用することには適していません。このようなデータ型は、対応するXML表現に簡単に変換できません。このため、Oracle Enterprise Scheduler Webサービス・レイヤーでは、ESSWebserviceで公開され、WSDLで表示されるこれらのデータ型に適用するラッパー・クラスを定義します。一般的に、Webサービス・レイヤーでは、可能な場合には既存のデータ型を再利用します。
16.3 ESSWebservice WSDLファイル
Oracle Enterprise Schedulerがインストールされ、実行されている場合、Webサービス・ページからWSDL定義ファイルを取得できます。
Oracle Enterprise Schedulerがインストールされ、実行されている場合、次のタイプのURLにあるWebサービス・ページからWSDL定義ファイルを取得できます。
http://host:port/ess/esswebservice?WSDL
次に例を示します。
http://system1:7001/ess/esswebservice?WSDL
ブラウザからESSWebservice URLに直接アクセスすることによってWebサービス操作を起動することはできません。
16.4 ユースケース: BPELプロセスでのOracle Enterprise Scheduler ESSWebserviceの使用
この例で、BPELプロセスからESSWebServiceを使用する方法を示します(つまり、BPELプロセスで、ESSWebServiceを使用してジョブ・リクエストを発行します)。
このユースケースでは、BPELおよびSOAユーザーがOracle Enterprise Schedulerを使用する場合の1つの方法を示しています。経験豊富なSOAユーザーおよび設計者は、Webサービスを使用するOracle Enterprise Schedulerで作業する方法として、他に案がある場合があります。
Oracle JDeveloperは、アプリケーションおよびそのアプリケーション内のプロジェクト(アプリケーション用のコードとサポート・ファイルが含まれている)の作成に使用されます。
JDeveloperには、スクリーン・リーダー、スクリーン拡大鏡、キーボード・ナビゲーション用の標準ショートカット・キーのサポートなどのアクセシビリティ・オプションが用意されています。フォントのサイズや色、オブジェクトの色や形などを変えて、判読性を高めるためにJDeveloperをカスタマイズすることもできます。JDeveloperでのアクセシビリティについて、およびこれを構成する手順は、『Oracle JDeveloperによるアプリケーションの開発』のOracle JDeveloperのアクセシビリティ情報に関する項を参照してください。
ESSWebServiceサンプル・アプリケーションを作成するには、次のステップに従います。
-
Oracle JDeveloperを起動します。
-
「新規アプリケーション」ボタンをクリックします。
-
「新規ギャラリ」 - 「アイテム」領域で、「SOAアプリケーション」を選択します。
-
「OK」をクリックします。
-
「アプリケーションの名前付け」ウィンドウを使用して、新しいアプリケーションの名前と場所を入力し、アプリケーション・テンプレートを指定します。
-
「アプリケーション名」フィールドで、アプリケーション名を入力します。この例では、
EssWebApplication
と入力します。 -
「ディレクトリ」フィールドで、デフォルトをそのまま使用するか、作成するアプリケーションの場所を指定します。
-
アプリケーション・パッケージ接頭辞を入力するか、またはデフォルトである接頭辞なしを受け入れます。
接頭辞に続いてピリオドが、アプリケーションの初期プロジェクト内に作成されたオブジェクトに付加されます。
-
「次」をクリックします。
-
-
「プロジェクトの名前付け」ダイアログで、SOAプロジェクトのオプションを選択します。
-
「プロジェクト名」フィールドで、プロジェクト名を入力するか、またはデフォルトの
Project1
を受け入れます。 -
「プロジェクトの機能」タブで、「SOAスイート」を選択します。
-
「次」をクリックします。
-
-
「SOA設定の構成」ダイアログで、「BPELプロセスを使用するコンポジット」を選択し、「終了」をクリックします。
-
図16-1に示すように、2つのBPEL仕様のうち1つを選択します。
-
図16-2に示すようにサービス・タイプを「テンプレート」ドロップダウン・メニューから選択し、「OK」をクリックします。
-
「エディタ」ペイン(
BPELProcess1.bpel
)で、「コンポーネント」パレットのOracle拡張機能セクションから「ジョブのスケジュール」コンポーネントをreceiveInputおよびcallBackClientコンポーネントの間にドラッグします(図16-3を参照)。 -
メタデータ・サーバーへの接続を作成します(図16-4を参照)。
-
リソース・ウィンドウ内の「新規」ボタンをクリックします。
-
ドロップダウン・メニューで、IDE接続→SOA-MDSを選択します。「SOA-MDS接続の作成」ダイアログで、MDSサーバーに関する適切な情報を入力します。
ノート:
また、「ファイル」→「新規ギャラリ」→「一般」→「接続」→SOA-MDS接続を選択して、接続を作成することもできます。
-
-
Schedulejob1コンポーネントを右クリックして、「編集」項目を選択します。図16-5に示す「スケジュール・ジョブの編集」ダイアログが表示されます。
-
「ジョブ」参照ボタンをクリックし、MDS接続を介してジョブ定義を選択します。図16-6に例を示します。
-
Sys_effectiveApplicationプロパティが、選択したジョブ定義で定義されていない場合、一般タブの「アプリケーション」フィールドでこれを指定することが要求されます。Sys_effectiveApplicationプロパティが、選択したジョブ定義で定義されている場合、「アプリケーション」フィールドに表示され編集できません。図16-7を参照してください。
図16-7 Sys_effectiveApplicationプロパティの定義(定義されていない場合)
「図16-7 Sys_effectiveApplicationプロパティの定義(定義されていない場合)」の説明 -
システム・プロパティを追加します。
-
「システム・プロパティ」タブを選択します。
-
「ジョブ・プロパティ」ペインには、ジョブ定義からMDS接続を介して取得されたシステム・プロパティを移入する必要があります。
-
「追加」ボタンを使用して、「ユーザー定義プロパティ」ペインで追加システム・プロパティを追加します。
-
-
アプリケーション・プロパティを追加します。
-
「アプリケーションのプロパティ」タブを選択します。
-
「ジョブ・プロパティ」ペインには、ジョブ定義からMDS接続を介して取得されたプロパティを移入する必要があります。
-
「追加」ボタンを使用して、「ユーザー定義プロパティ」ペインで追加プロパティを追加します。
-
-
WSDL URLをアタッチします。
-
セキュリティ・ポリシーをサービスに追加します。
-
プロジェクト・エディタ・タブで、Oracle Enterprise Scheduler Webサービスを右クリックし、「SOA WSポリシーの構成」→「リクエスト用」を選択し、「SOA WSポリシーの構成」ダイアログを開きます(図16-12を参照)。
-
「SOA WSポリシーの構成」の「セキュリティ」領域で、「追加」ボタンをクリックし必要なセキュリティ・ポリシーをアタッチします。たとえば、図16-13および図16-14に示すようにoracle
/wss_http_token_client_policy
となります。非同期BPELプロセスを作成している場合、このプロセスを使用してサービス・ポリシーをコールバックにアタッチする必要もあります。
-
-
getCompletionStatus
操作のInvokeアクティビティを追加します。-
「設計」タブをクリックして、表示をソース・ビューからデザイン・ビューに切り替えます。
-
「コンポーネント・パレット」のBPEL構成セクションから、InvokeコンポーネントをSchedulejob1とcallbackClientの間にドラッグ・アンド・ドロップします(図16-15を参照)。
図16-15 Schedulejob1とcallbackClientの間へのInvokeコンポーネントのドラッグ・アンド・ドロップ
「図16-15 Schedulejob1とcallbackClientの間へのInvokeコンポーネントのドラッグ・アンド・ドロップ」の説明 -
Invoke1ボタンを右クリックして、「Invokeの編集」ダイアログを開きます。コンポーネントgetStatusAsyncの名前を変更します。
-
「パートナ・リンク」領域で、矢印をgetStatusAsyncコンポーネントからEssServiceコンポーネントにドラッグします。図16-16に示すように、「Invokeの編集」ダイアログが開きます。
-
「Invokeの編集」ダイアログの「操作」ドロップダウンからgetCompletionStatusを選択します(図16-16を参照)。
-
x
という名前の入力変数を作成し、「OK」をクリックして「Invokeの編集」」ダイアログを閉じます。 -
Assignコンポーネントを「コンポーネント・パレット」のBPEL構成領域から、ScheduleJob1コンポーネントとgetStatusAsyncコンポーネントの間にドラッグ・アンド・ドロップします。
-
Assignコンポーネントをダブルクリックし「Assignの編集」ダイアログを開き、ScheduleJob1出力パラメータの
requestID
をgetStatusAsync入力パラメータのrequestID
にマップします(図16-17を参照)。「OK」をクリックします。図16-17 「Assignの編集」ダイアログを使用したScheduleJob1出力パラメータrequestIDのgetStatusAsync入力パラメータrequestIDへのマップ
「図16-17 「Assignの編集」ダイアログを使用したScheduleJob1出力パラメータrequestIDのgetStatusAsync入力パラメータrequestIDへのマップ」の説明
-
-
ジョブ完了ステータスを受信します。
-
「コンポーネント・パレット」のBPEL構成セクションから、ReceiveコンポーネントをgetStatusAsyncコンポーネントとcallbackClientコンポーネントの間にドラッグ・アンド・ドロップします(図16-18を参照)。
図16-15 getStatusAsyncコンポーネントとcallbackClientコンポーネントの間へのReceiveコンポーネントのドラッグ・アンド・ドロップ
「図16-15 getStatusAsyncコンポーネントとcallbackClientコンポーネントの間へのReceiveコンポーネントのドラッグ・アンド・ドロップ」の説明 -
Receive1コンポーネントからESSServiceコンポーネントに矢印をドラッグして、Receive1コンポーネントを「パートナ・リンク」領域内のESSServiceにアタッチします。このアクションにより、「Receiveの編集」ダイアログも開きます。Receive1コンポーネントの名前をOnJobCompletionに変更します(図16-19を参照)。
-
OnJobCompletion操作を選択し、
y
という名前の変数を追加します(図16-19を参照)。「OK」をクリックし、「Receiveの編集」ダイアログを閉じます。 -
Assignコンポーネントを「コンポーネント・パレット」のBPEL構成領域から、onJobCompletionコンポーネントとcallbackClientコンポーネントの間にドラッグ・アンド・ドロップします。
-
AssignコンポーネントをダブルクリックしてAssignの編集ダイアログを開き、onJobCompletionコンポーネントの出力パラメータ
resultMessage
を、callbackClientコンポーネントの入力パラメータresult
変数にマップします(図16-20を参照)。「OK」をクリックします。図16-20 onJobCompletionコンポーネントの出力パラメータresultMessageのcallbackClientコンポーネントの入力パラメータresult変数へのマップ
「図16-20 onJobCompletionコンポーネントの出力パラメータresultMessageのcallbackClientコンポーネントの入力パラメータresult変数へのマップ」の説明
-