再試行可能とのSOAPフォルトの分類

12c以降、外部サービスから返されたフォルト・コードに基づいて、すべてのWebサービスSOAPフォルトは自動的に再試行されません。フォルト・コードがサーバー関連(受信者関連とも呼ばれます)と分類された場合のみ、SOAPフォルトは再試行されます。クライアント関連と分類されたフォルト・コードでは、再試行が行われません。これは11gリリース1 (11.1.1.x)と異なります。そのリリースのOracle SOA Suiteではフォルト・コードに関係なくすべてのSOAPフォルトが再試行されました(返されるフォルトのすべてがbpelx:remoteFaultにBPELで変換され、再試行可能でした)。

12cでは、参照バインディング・コンポーネントでフォルトが発生すると、フォルト・コードがBPELプロセスに返されます。フォルト・コードの設定に基づいてフォルトが再試行されます。フォルトを特定の状況(システム停止時間問題など)でのみ再試行する場合があるので、これはメリットがあります。他のすべてのフォルト発生(正しくない入力など)では、再試行を行わない場合があります。実際、すべてのSOAPフォルトにおける再試行では、正当なメッセージの処理を遅らせることができます。

Simple Object Access Protocol (SOAP) 1.1仕様(http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383510)に記載されているように、フォルトにはサーバー(受信者とも呼ばれます)またはクライアントのコードを持たせることができます。フォルトの分類により、フォルトが再試行できるかどうかが判別されます。

  • サーバー

    メッセージの処理ではなくメッセージの内容に直接関連していない理由により、メッセージを処理できないことをサーバーのエラーが示します。たとえば、応答しなかったサーバーとの通信を処理に含めることができます。メッセージは後で成功する場合があります。これは再試行可能フォルトと定義されます。

  • クライアント

    メッセージが適切に形成されていなかったり、成功するために適切な情報が格納されていなかったことをクライアントのエラーが示します。たとえば、メッセージに適切な認証や支払い情報が欠落している場合があります。これは一般的に、メッセージ再送前に最初に変更する必要があることを示します。これは再試行不能フォルトと定義されます。

このフォルト分類情報は、FabricInvocationExceptionエラーに伝播されます。クライアント関連と分類されたフォルト・コードでは、この例外内のretryTypeフラグがNO_RETRYに設定されます。

必要に応じて、再試行をすべてのフォルトで起動できます。composite.xmlファイルでbinding.wsプロパティのoracle.soa.always.retry.on.faulttrueに設定します。これによって、フォルト・コードに関係なく、Oracle SOA SuiteではSOAPフォルトで必ず再試行できます。

<reference name="myreference"
. . . 
<binding.ws port=". . . ."
location=". . ."
<property name="oracle.soa.always.retry.on.fault">true</property>
</binding.ws>

composite.xmlの次のコード・スニペットを使用して、SOAで定義されたカスタム・ヘッダーを有効にしてOSB Webサービスにアクセスします。

<reference name="RecHttpOSB" ...>
	...      
		<binding.ws ... soapVersion="1.1"> 
			<property name="oracle.webservices.http.headers">OSBCustomHttp</property>
		</binding.ws>
</reference>