13 Webサービス・ジョブの作成と使用

この章では、Oracle Enterprise Schedulerを使用してWebサービス・ジョブを作成する方法および次の項について説明します。

13.1 概要

Webサービスは、Web上でサービスを公開するスタンドアロンの手段を提供します。WebサービスはURLからアクセス可能であり、SOAPおよびXMLをペイロードとして使用します。Webサービスは、WebサービスのインタフェースおよびURLを定義するWSDL標準によって説明されています。

Webサービスの例は次のとおりです。

  • SOA Suiteコンポジット

  • Oracle Service Busプロキシ・サービス

  • ADFビジネス・コンポーネントWebサービス

Webサービスは、一方向、同期または非同期操作を公開できます。一方向のWebサービス操作は、Webサービスによりレスポンスが返されないファイア・アンド・フォーゲット操作です。同期Webサービス・操作は、同じWebサービスの起動の一部としてレスポンスを返します。通常、Webサービス・クライアントは、同期操作レスポンスが受信されるまでブロックされます。非同期Webサービス操作には2つの一方向メッセージが含まれますが、1つはWebサービス操作リクエスト用、もう1つはレスポンス用です。通常、非同期Web操作は長時間実行される操作を表します。Webサービス・クライアントは非同期Webサービス操作を起動しますが、レスポンスを待機しません。かわりに、クライアントはWebサービスからレスポンスを受信するコールバックURLを指定します。Webサービスは、リクエストをバックグラウンドで処理し、コールバック操作を使用してレスポンスをクライアント指定のコールバックURLに返します。

Oracle Enterprise Schedulerは、同期インタフェース、一方向インタフェースおよび非同期インタフェースを使用するWebサービス・ジョブをサポートします。Webサービス・ジョブ定義は(ホスティング・アプリケーションまたはクライアント・アプリケーションの一部として)JDeveloperを使用して、またはOracle Enterprise Manager Fusion Middleware Controlを使用して定義できます。Webサービス・ジョブ・タイプを選択する場合、ユーザーは、ウィザードで誘導される簡単な一連のステップを進みWebサービス・ジョブを定義します(「Oracle Enterprise Manager Fusion Middleware Controlを使用したジョブ定義の作成」の例を参照)。このウィザードは、WSDL URLを取得し、WSDLサービス、ポート・タイプおよび操作の選択をユーザーに要求します。次に、WSDLに基づいてペイロードのサンプルXMLを作成し、ユーザーにその更新を許可します。非同期および同期Webサービスは、オプションで、取消し用に指定された操作を実行できます。取消し操作があった場合、この操作が選択され、取消し操作用のサンプルXMLコードが変更されます。このウィザードは、ウィザードでユーザーが入力した値または入力した値から導かれた値をジョブ定義の事前定義済のシステム・プロパティのセットに入力します。

ノート:

Webサービス・ジョブ・タイプのWSDL URLは、具体的なWSDL URLである必要があります。抽象的なWSDL URLにはできません。

ジョブ定義には、ユーザー定義パラメータを設定できます。起動またはcancelペイロードXMLコード内の要素または属性は、トークン置換手順を指定することで、プラグインされるこれらのパラメータのいずれかを要素値として指定できます。たとえば、トークン置換コマンド${ESS_REQ:customerID}でパラメータcustomerIDをプラグインします。これにより、ジョブの発行者はパラメータ値のみを入力して、それらからXMLペイロードを構築できます。トークン置換は、WSDLベースURLおよびWSDL相対URLシステム・プロパティにも指定できます。トークンの置換の詳細は、「トークンおよび論理クラスタの使用」を参照してください。

Webサービス・ジョブは、Oracle Web Services Manager (OWSM)ポリシーによって保護されます。Oracle Enterprise Manager Fusion Middleware ControlまたはJDeveloperでは、OWSMの直接アタッチされるポリシーを起動(クライアント・ポリシー)およびコールバック(サービス・ポリシー)アクションのジョブ定義にアタッチできます。グローバルにアタッチされたポリシーを使用してポリシーをグローバルに定義したり、直接アタッチされたポリシーを使用して個別のジョブ定義を保護したりできます。

ノート:

Oracle Web Services Manager (OWSM)ポリシーの使用の詳細は、Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理の次の各項を参照してください。

進捗状況メッセージは、非同期Webサービス・ジョブに対してサポートされています。これらのメッセージは、ジョブ・ログに書き込まれます。コールバック操作で、ジョブが成功したか失敗したかをジョブは示すことができます。コールバック・メッセージは、ジョブの出力で構成されます。

13.2 事前定義済Webサービス・ジョブ・タイプ

Oracle Enterprise Schedulerでは、次の3つの事前定義済Webサービス・ジョブ・タイプがサポートされています。Webサービス・ジョブ定義で指定するジョブ・タイプにより、構成済Webサービス操作が非同期、同期または一方向(ファイア・アンド・フォーゲット)のいずれで起動されているかどうかが暗黙的に判別されます。

「概要」で説明したように、Oracle Enterprise Schedulerでは、3つの事前定義されたWebサービス・ジョブ・タイプがサポートされています。Webサービスの事前定義済ジョブ・タイプを表13-1に示します。

表13-1 事前定義済Webサービス・ジョブ・タイプ

事前定義済ジョブ・タイプ 説明

/oracle/as/ess/core/JobType/AsyncWebserviceJobType

(非同期)コール元がWebサービスを起動すると、Webサービスがバックグラウンドで非同期に実行され、WebサービスはコールバックURLのコール元にコールバックします

/oracle/as/ess/core/JobType/SyncWebserviceJobType

(同期)コール元は、レスポンスが返されるまでブロックされます(リクエスト/レスポンス)

/oracle/as/ess/core/JobType/OnewayWebserviceJobType

(一方向)コール元はレスポンスを想定しません。Webサービスはバックグラウンドで実行されます(ファイア・アンド・フォーゲット)。

13.3 取消しおよびフォルトのサポート

Webサービス・ジョブの取消し操作のサポートはオプションです。Webサービスは、実行中のWebサービスの起動を取り消す取消し操作をサポートできます。

取消し操作は中断操作ではありません。中断操作ではコンポジットが終了し、元の操作を完了するためのコールバックが行われません。Webサービス・プロバイダにより正常に動作する取消しを実装することで、元のWebサービス操作により、SOAPレスポンス・ヘッダーで事前定義済のwsa:Actionコードを使用して「操作取消しレスポンス」が返されます(表13-2を参照)。取消しWebサービス操作は、同期Webサービス操作である必要があります。

同期と非同期のWebサービス・ジョブのいずれも、wsa:Action SOAPレスポンス・メッセージ・ヘッダーで適切な値を指定して、Webサービス操作が取り消されたかフォルト(エラー)になったかを示すことができます。コールバック・レスポンスSOAPメッセージが「取消済」または「フォルト」レスポンスに一致しない場合(後述するメカニズムのいずれかを使用)、ジョブの状態は「成功」となります。

表13-2に、SOAP wsa:Actionヘッダーを使用して指定できる様々なWebサービス操作ステータスを示します。

表13-2 SOAP Webサービス操作ステータス

アクション・コード名 アクションURI

取消済

"http://xmlns.oracle.com/schedulercallback/wsOperationCancelled"

フォルト

  • 標準Webサービス・アドレス指定: "http://schemas.xmlsoap.org/ws/2004/08/addressing/fault"

  • Oracle Application Server: "http://xmlns.oracle.com/oracleas/schema/oracle-fault-11_0/Fault"

Oracle SOA Suiteは、wsa:Actionメッセージ・ヘッダーの設定をサポートします。かわりに、表13-3にリストされている文字列の1つを、コールバック・メッセージのSOAP body要素に追加できます。

表13-3 Oracle SOA Suiteステータス操作

操作 文字列

取消済

"wsOperationCancelled"

フォルト

"wsOperationFault"

13.4 Webサービス・ジョブの構成プロパティ

Oracle Enterprise Schedulerは、Webサービス・ジョブの特定の構成プロパティを使用します。

表13-4に、Webサービス・ジョブ・タイプに関連付けられているプロパティをリストします。

表13-4 Webサービス・ジョブの構成プロパティ

プロパティ名 説明

SYS_EXT_wsWsdlBaseUrl脚注1

WSDL URLのベースURLの一部。

SYS_EXT_wsWsdlUrl1

WebサービスのWSDL URLの相対的な部分(具体的なWSDL URLである必要があります)。SYS_EXT_wsEndpointUrlプロパティまたはSYS_EXT_wsWsdlUrlプロパティのいずれかを、完全に指定する必要があります。たとえば、SYS_EXT_wsWsdlBaseUrlSYS_EXT_wsWsdlUrlの両方が構成されているか、SYS_EXT_wsEndpointBaseUrlSYS_EXT_wsEndpointUrlの両方が構成されています。

SYS_EXT_wsEndpointBaseUrl1

エンドポイントURLのベースURLの一部。

SYS_EXT_wsEndpointUrl1

Webサービス・エンドポイントURLの相対部分(具体的なWSDL URLである必要があります)。SYS_EXT_wsEndpointUrlプロパティまたはSYS_EXT_wsWsdlUrlプロパティのいずれかを、完全に指定する必要があります。たとえば、SYS_EXT_wsWsdlBaseUrlSYS_EXT_wsWsdlUrlの両方が構成されているか、SYS_EXT_wsEndpointBaseUrlSYS_EXT_wsEndpointUrlの両方が構成されています。

SYS_EXT_wsTargetNamespace

ターゲットのネームスペース。

SYS_EXT_wsServiceName

サービス名。

SYS_EXT_wsPortName

ポート名。

SYS_EXT_wsOperationName

操作名。

SYS_EXT_invokeMessage1

Webサービスの呼出しに使用されるXMLの発行メッセージ

SYS_EXT_wsCancelOperationName

オプション。取消操作名。

SYS_EXT_wsCancelMessage1

オプション。Webサービスの取消操作のためのXMLメッセージ。

SYS_externalJobType

オプション。サポートされている値は、ADFBC、OSBまたはSOAです。その他の値は無効です。

脚注1

このプロパティは、トークン置換を使用して指定できます。詳細は、「トークンおよび論理クラスタの使用」を参照してください。

SYS_EXT_wsEndpointBaseUrlプロパティおよびSYS_EXT_wsEndpointUrlプロパティがジョブ定義で指定されている場合、Oracle Enterprise SchedulerにはWebサービスを起動するための十分な情報があります。SYS_EXT_wsEndpointBaseUrlSYS_EXT_wsEndpointUrlプロパティがジョブ定義で指定されておらず、SYS_EXT_wsWsdlBaseUrlSYS_EXT_wsWsdlUrlプロパティが指定されている場合、Oracle Enterprise Schedulerは実行時に(ジョブを起動する前)WSDLを取得し、WSDLからEndpointUrlTargetNamespaceプロパティ値を取得し、Webサービスを起動します。

SYS_EXT_wsServiceNameSYS_EXT_wsPortNameおよびSYS_EXT_wsOperationNameプロパティを指定して、起動する特定のWebサービス操作を識別する必要があります。

SYS_EXT_invokeMessageプロパティには、起動するためのXMLメッセージ(SOAP bodyペイロード)が含まれます。これは、XMLテンプレートまたは完全なXMLのいずれかです。

XMLテンプレートには、実行時に置換されるトークンが含まれます。ジョブ発行者は、テンプレートのトークンと置換されるパラメータ値を指定します。完全なXMLがトークンなしで使用される場合、置換は必要なく、ジョブ定義内で指定されたXMLはジョブ起動でそのまま使用されます。

ノート:

XML文内の山カッコ(<および>)はエスケープする必要があります。

起動後、リモートWebサービスは、進捗状況メッセージをログに記録してそのステータスを更新できます。これらのメッセージは、Webサービス・ジョブによってログに記録され、リクエスト・ログで使用できます。Webサービス・レスポンスXMLは、ジョブ出力として取得されます。

SYS_EXT_wsCancelMessageおよびSYS_EXT_wsCancelOperationNameプロパティが取消しメッセージで構成されている場合、メッセージは取消し操作が実行中のWebサービス・ジョブで開始されたときに起動されます。取消し操作は、同期Webサービス操作として常に起動されます。

取消しメッセージSOAPヘッダーには、起動Webサービス操作に関連付けられているwsa:messageIdに設定されているWS-Addressing relatesToIdプロパティが自動的に移入されます。取消し操作では、起動操作と同じOWSMポリシーが使用されます。SYS_EXT_wsCancelMessageプロパティが構成されていない場合、Webサービスでは取消しがサポートされないため取消しできません。

SYS_externalJobTypeプロパティでは、Webサービス・ジョブ定義によりWebサービス・タイプ(ADFBC、Service BusまたはSOA)を指定できます将来カスタマイズされるWebサービス・ジョブ実装用のものです。

13.5 Oracle Web Services Managerポリシー構成

Webサービス・ジョブ・タイプでは、分離されたOracle Web Services Manager (OWSM)ポリシー・サブジェクト(Job-Invoke、Job-Callback)、およびWebサービス起動とコールバック操作に対して関連付けられているグローバルにアタッチされたポリシーおよび直接アタッチされたポリシーが使用されます。

Job-Invokeポリシー・サブジェクトは、すべてのWebサービス・ジョブ・タイプ(一方向、同期および非同期)に関連付けられていますが、一方Job-Callbackポリシー・サブジェクトは同期Webサービス・ジョブ・タイプにのみ使用できます。Job-InvokeおよびJob-Callbackのグローバルにアタッチされたポリシーはドメイン・レベルで指定でき、EMまたはWLSTを使用して構成できます。

Job-Invokeのグローバルにアタッチされたポリシーまたは直接アタッチされたポリシーがWebサービス・ジョブ定義に指定されていない場合、Webサービスは非同期で起動されます。匿名コールバックは非同期Webサービス・ジョブ・タイプにサポートされていないため、これは一方向および同期ジョブ・タイプにのみ機能します。

Job-InvokeおよびJob-Callbackの直接アタッチされたポリシーは個別のWebサービス・ジョブ定義に固有であり、Webサービス・ジョブ定義に関連付けられているポリシー・アセンブリ・ディスクリプタで取得されます。これらの直接アタッチされたポリシーは、JDeveloperを使用して設計時に指定するか、実行時にOracle Enterprise Manager Fusion Middleware ControlまたはWLSTコマンドを使用して指定できます。

Webサービス・ジョブ・ポリシー・サブジェクトに対するグローバルにアタッチされたポリシーは、Oracle Enterprise Manager Fusion Middleware ControlまたはWLSTスクリプトを使用して、Webサービス・ジョブ・ポリシー・サブジェクトに対するドメイン・レベルのグローバルにアタッチされたポリシーを構成できます。例13-1に、このようなスクリプトの例を示します。

例13-1 グローバルにアタッチされたポリシーを構成するWLSTスクリプト

connect(adminuser, adminpassword, adminurl)

beginRepositorySession()
deletePolicySet('domain-default-job-invoke-client-policies')
describeRepositorySession()
commitRepositorySession()

beginRepositorySession()
deletePolicySet('domain-default-job-callback-service-policies')
describeRepositorySession()
commitRepositorySession()

print "-- create domain-default-job-invoke-client-policies --"
beginRepositorySession()
describeRepositorySession()
createPolicySet('domain-default-job-invoke-client-policies', 'job-invoke',  'Domain("*")')
attachPolicySetPolicy("oracle/wss11_saml_token_with_message_protection_client_policy")
describeRepositorySession()
commitRepositorySession()

print "-- create domain-default-job-callback-service-policies --"
beginRepositorySession()
describeRepositorySession()
createPolicySet('domain-default-job-callback-service-policies', 'job-callback',  'Domain("*")')
attachPolicySetPolicy("oracle/wss11_saml_or_username_token_with_message_protection_service_policy")
describeRepositorySession()
commitRepositorySession()

13.6 Webサービス・ジョブ定義の作成

Oracle JDeveloperとOracle Enterprise Manager Fusion Middleware Controlの両方に便利なグラフィカル・ユーザー・インタフェースが用意されていて、Webサービスのジョブ定義の作成に役立ちます。

「Oracle JDeveloperを使用したジョブ定義の作成」では、Oracle JDeveloperを使用してジョブ定義を作成する方法を説明し、「Oracle Enterprise Manager Fusion Middleware Controlを使用したジョブ定義の作成」では、Oracle Enterprise Manager Fusion Middleware Controlを使用して同様の作業を行う方法を説明します。

13.6.1 Oracle JDeveloperを使用したジョブ定義の作成

アプリケーションの作成時にOracle JDeveloperを使用してWebサービス・ジョブ定義を使用できます。Oracle JDeveloperを使用してOracle Enterprise Schedulerで動作するアプリケーションを作成する方法については、「Oracle JDeveloperを使用したOracle Enterprise Schedulerアプリケーションの生成」の一般情報を参照してください。

JDeveloperには、スクリーン・リーダー、スクリーン拡大鏡、キーボード・ナビゲーション用の標準ショートカット・キーのサポートなどのアクセシビリティ・オプションが用意されています。フォントのサイズや色、オブジェクトの色や形などを変えて、判読性を高めるためにJDeveloperをカスタマイズすることもできます。JDeveloperでのアクセシビリティについて、およびこれを構成する手順は、『Oracle JDeveloperによるアプリケーションの開発』Oracle JDeveloperのアクセシビリティ情報に関する項 を参照してください。

次のステップは、非同期Webサービス・ジョブ・タイプのジョブ定義を作成する方法を示しています。

  1. 「ジョブ定義」タブに移動します。「名前」「表示名」および「説明」フィールドに入力し、図13-1の例に示すように適切なWebサービス・ジョブ・タイプを選択します。ターゲットWebサービスのWSDL URLを使用可能にします。

    図13-1 Oracle JDeveloper: 「ジョブ定義」タブ

    図13-1の説明が続きます
    「図13-1 Oracle JDeveloper: 「ジョブ定義」タブ」の説明
  2. Webサービス・エクスプローラ・ボタンをクリックして、「Web Service」構成ウィザードを起動します(図13-2を参照)。WSDL URL、サービス、ポート、操作を入力し、例に示すようにペイロードXMLを構成し、「OK」をクリックします。

    ノート:

    図13-2に示す例は、値が発行リクエスト時に指定される置換トークンSubmitArgument1を含む起動XMLペイロードを示しています。トークン置換については、「トークンおよび論理クラスタの使用」で説明しています。

    図13-2 Oracle JDeveloper: 「Web Service」ポップアップ

    図13-2の説明が続きます
    「図13-2 Oracle JDeveloper: 「Web Service」ポップアップ」の説明
  3. セキュリティ・ポリシーの指定ボタンをクリックします(図13-3を参照)。「リクエスト用」を選択して、Job-Invokeポリシー・サブジェクトの直接アタッチされるポリシーを構成します。

    図13-3 Oracle JDeveloper: 「ジョブ定義」タブ

    図13-3の説明が続きます
    「図13-3 Oracle JDeveloper: 「ジョブ定義」タブ」の説明
  4. Job-Invokeポリシー・サブジェクトは、すべてのWebサービス・ジョブ定義タイプ(一方向、同期および非同期)に使用できます。Job-Invokeの直接アタッチされるポリシーに必須のOWSMクライアント・ポリシーを選択しアタッチします。図13-4に示すような画面が表示されます。

    図13-4 Oracle JDeveloper: ESS Webサービス・ポリシー・ポップアップ

    図13-4の説明が続きます
    「図13-4 Oracle JDeveloper: ESS Webサービス・ポリシー・ポップアップ」の説明
  5. これで、同期または一方向のWebサービス・ジョブ定義の直接アタッチされるポリシー構成が完了します。非同期ジョブ定義の場合、Job-Callbackポリシー・サブジェクトに対して直接アタッチされるポリシーを構成することもできます。

    非同期ジョブ定義に対してJob-Callbackの直接アタッチされるポリシーを構成するには、この手順のステップ3を繰り返し、「リクエスト用」のかわりに「コールバック用」を選択します。Job-Callbackの直接アタッチされるポリシーに対して必須のOWSMサービス・ポリシーを選択およびアタッチします(図13-4を参照)。

    ノート:

    デプロイメント後、Oracle Enterprise Manager Fusion Middleware Controlを使用して、Webサービス・ジョブ定義に関連付けられているジョブ・ポリシーを変更できます。

    図13-5 Oracle JDeveloper: ESS Webサービス・ポリシー・ポップアップ

    図13-5の説明
    「図13-5 Oracle JDeveloper: ESS Webサービス・ポリシー・ポップアップ」の説明

13.6.2 Oracle Enterprise Manager Fusion Middleware Controlを使用したジョブ定義の作成

この手順では、Oracle Enterprise Mangerを使用してWebサービス・ジョブ定義を作成および構成する方法を説明します。

  1. Oracle Enterprise Manager Fusion Middleware Controlを起動しログインします。
  2. ナビゲーション・ペインで、「スケジューリング・サービス」フォルダを展開し、Oracle Enterprise Schedulerアプリケーションを選択します。
  3. 「スケジューリング・サービス」メニューから、「ジョブ・メタデータ」「ジョブ定義」を選択し、「作成」ボタンをクリックします。
  4. 「名前」「表示名」および「説明」フィールドに入力し、「ジョブ・タイプ」ドロップダウンから図13-6の例に示すように適切なWebサービス・ジョブ・タイプを選択します。

    図13-6 Fusion Middleware Controlコンソール: 「ジョブ定義の作成」ページ

    図13-6の説明が続きます
    「図13-6 Fusion Middleware Controlコンソール: 「ジョブ定義の作成」ページ」の説明
  5. 「Webサービスの選択」ボタンをクリックして、「Webサービスの選択」ポップアップ・ウィンドウでWSDL URLを入力します。URLを入力した後、サービス、ポート・タイプ、操作を選択し、起動操作XMLペイロードを構成します。

    図13-7に示す例は、値が発行リクエスト時に指定される置換トークンSubmitArgument1を含む起動XMLペイロードを示しています。

    ノート:

    トークン置換については、「トークンおよび論理クラスタの使用」で説明しています。

    図13-7 Fusion Middleware Controlコンソール: 「Webサービスの選択」ポップアップ

    図13-7の説明が続きます
    「図13-7 Fusion Middleware Controlコンソール: 「Webサービスの選択」ポップアップ」の説明
  6. ジョブ定義を作成した後、「ジョブ定義」ページに戻り、「結果」表のジョブ定義名(この例ではAsyncWSJob1)を選択します。「ポリシーのアタッチ/デタッチ」ボタンをクリックして、「起動」を選択し(図13-8を参照)、Job-Invokeポリシー・サブジェクトの直接アタッチされるポリシーを構成します。Job-Invokeポリシー・サブジェクトは、すべてのWebサービス・ジョブ・タイプ定義に使用できます。

    図13-8 Fusion Middleware Controlコンソール: 「ジョブ定義」ページ

    図13-8の説明が続きます
    「図13-8 Fusion Middleware Controlコンソール: 「ジョブ定義」ページ」の説明
  7. 「Webサービス・ポリシー」ページで、ポリシーを選択して「アタッチ/デタッチ」ボタンをクリックし、Job-Invokeの直接アタッチされるポリシーの必須のOWSMクライアント・ポリシーをアタッチします。これは、図13-9に示されています。「ポリシーのアタッチ/デタッチ」ポップアップが表示されます。

    図13-9 Fusion Middleware Controlコンソール: 「Webサービス・ポリシー」ページ

    図13-9の説明が続きます
    「図13-9 Fusion Middleware Controlコンソール: 「Webサービス・ポリシー」ページ」の説明
  8. ポリシーを選択し、「OK」をクリックしてアタッチを完了します。

    図13-10 Fusion Middleware Controlコンソール: ポリシーのアタッチ・ポップアップ

    図13-10の説明が続きます
    「図13-10 Fusion Middleware Controlコンソール: ポリシーのアタッチ・ポップアップ」の説明
  9. これで、同期または一方向のWebサービス・ジョブ定義の直接アタッチされるポリシー構成が完了します。非同期ジョブ定義の場合、Job-Callbackポリシー・サブジェクトの直接アタッチされるポリシーを構成することもできます。

    非同期ジョブ定義に対してJob-Callbackの直接アタッチされるポリシーを構成するには、この手順のステップ6を繰り返し、「起動」のかわりに「コールバック」を選択します。Job-Callbackの直接アタッチされるポリシーに必須のOWSMサービス・ポリシーを選択しアタッチします。