Oracle B2Bは、インバウンド・メッセージおよびアウトバウンド・メッセージに対する例外を処理します。この付録では例外処理、エラー・メッセージおよびOracle B2Bの構造体について説明します。
ここでは、次の項目について説明します。
注意: Oracle B2Bは、ebMS 2.0仕様によって指定されている様々なエラー・コードをサポートしていません。例外メッセージでは、エラー・コードが「不明」に設定されます。予想されるエラー・コードには次のものがあります。ValueNotRecognized NotSupported Inconsistent OtherXml DeliveryFailure TimeToLiveExpired SecurityFailure MimeProblem Unknown |
この項では、次のインバウンド・メッセージ・タイプについて説明します。
受信リクエスト・メッセージ、レスポンス・メッセージまたは機能確認メッセージで例外が発生すると、デフォルトのエラー処理設定を使用している場合は、次のアクションが発生します。
例外メッセージがアプリケーションに送信されます。
例外メッセージはIP_IN_QUEUE
にエンキューされ、受信者名はb2berroruser
になります。エンキューされる例外はipException.xsd
に基づいており、エラー・メッセージ(errorText
は簡単な説明、errorDescription
はより詳細な説明)およびエラー・コードなどの情報を含みます。
交換仕様で規定されている場合、例外メッセージは取引パートナに送信されます。
発信取引パートナ・アグリーメントを特定できる十分な情報がある場合にのみ、例外メッセージは取引パートナに送信されます。このために、フラグB2BHeader.sendException
を使用します。例外メッセージを取引パートナに送信するための十分な情報が受信メッセージから抽出されると、フラグがtrueに設定されます。
Oracle B2Bは、交換レイヤーまたはドキュメント・レイヤーからスローされた例外を捕捉します。
B2Bheader.sendException
フラグがtrue
に設定されると、発信取引パートナ・アグリーメントが処理され、例外メッセージが取引パートナに送信されます。
受信例外メッセージでは、デフォルトのエラー処理設定を使用している場合は、次のアクションが発生します。
元のメッセージが更新され、エラー状態になります。受信例外が処理され、正常にアプリケーションに配信されます。
受信例外メッセージ自体で例外が発生すると、例外メッセージがアプリケーションに送信されます。
例外メッセージはIP_IN_QUEUE
にエンキューされ、受信者名はb2berroruser
になります。エンキューされる例外はipException.xsd
に基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。この場合、例外メッセージは取引パートナには送信されません。
例外は、デフォルトのキュー(B2B_IN_QUEUE
またはIP_IN_QUEUE
)または例外メッセージ用に構成したカスタムJMSキューに配信できます。詳細は、D.4項「エラー・メッセージ配信に対するカスタム例外キューの使用」を参照してください。
アウトバウンド・メッセージの送信中に例外(取引パートナの識別に失敗するなど)が発生すると、例外メッセージがアプリケーションに送信されます。デフォルトのエラー処理設定を使用している場合、例外メッセージはIP_IN_QUEUE
にエンキューされ、受信者名はb2berroruser
になります。エンキューされる例外はipException.xsd
に基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。
Oracle B2Bの起動時に例外が発生すると、例外メッセージはIP_IN_QUEUE
にエンキューされ、受信者名はb2berroruser
になります。エンキューされる例外はipException.xsd
に基づいており、エラー・テキストおよびエラー・コードなどの情報を含みます。相関IDはこの場合移入されません。
次に注意事項を記載します。
例外メッセージがアプリケーションに送信されると、ドキュメント・タイプは元のメッセージのドキュメント・タイプではなく、Exception
になります。
例外メッセージがアプリケーションに送信されると、inReplyToMessageId
には相関IDの値が移入されます。
インバウンド例外処理に対しては、ビジネス・メッセージが常に作成され、使用可能な情報が移入されます。また、ビジネス・メッセージは対応するワイヤ・メッセージも指定します。ワイヤ・メッセージが更新され、エラー状態になります。アウトバウンド方向の場合は、ワイヤ・メッセージが存在しないため、ビジネス・メッセージのみが更新されます。ただし、送信エラーが発生すると、ワイヤ・メッセージ・テーブルにエントリが作成されます。
エラー・レポートが更新され、ビジネス・メッセージのみが表示されます。ビジネス・メッセージは、インバウンド方向およびアウトバウンド方向の両方で常に作成されます。
D.1項およびD.2項で説明したように、デフォルトの設定では、例外キューとしてAQキューであるIP_IN_QUEUE
が使用されます。JMSキューを使用するようにB2Bを構成するには、「構成」タブで「JMSキューをデフォルトとして使用」パラメータを「true」に設定します。カスタムのJMS例外キューを構成し、そのキューを「例外キュー」パラメータの値として選択しないかぎり、JMSキューであるB2B_IN_QUEUE
がデフォルトの例外キューになります(D.4項「エラー・メッセージ配信に対するカスタム例外キューの使用」を参照)。B2Bでは通常、インバウンド・メッセージはB2B_IN_QUEUE
に送信され、アウトバウンド・メッセージはB2B_OUT_QUEUE
でポーリングされます。
JMSキューではコンシューマとしてb2berroruserを使用できないため、JMSメッセージ・プロパティを使用して、エラー処理のために例外メッセージをフィルタ処理します。具体的には、MSG_TYPE
の値が3(MSG_TYPE='3'
)の場合は、すべての例外メッセージがJMSレシーバによって受信されます(成功メッセージの場合は、MSG_TYPE='1'
です)。JMSメッセージ・プロパティはすべてstring
型です。
「JMSキューをデフォルトとして使用」パラメータの詳細は、表16-1「構成設定」を参照してください。
カスタムのJMS例外キューを作成できます。作成するには、図D-1に示すように、「パートナ」 > 「チャネル」タブで、ホスト取引パートナに対して、JMS内部デリバリ・チャネル(JMSキューまたはトピック)を構成します。
次に、「構成」タブの「例外キュー」パラメータからキューを選択します。「例外キュー」ドロップダウンに、ホスト取引パートナからのすべてのJMS内部デリバリ・チャネルがリストされます。
このパラメータのデフォルト値はnullです。これは、「JMSキューをデフォルトとして使用」を「true」に設定した場合は、JMSキュー(B2B_IN_QUEUE
)が例外キューであり、「JMSキューをデフォルトとして使用」を「false」に設定した場合は、AQキュー(IP_IN_QUEUE
)が例外キューであることを意味します。
B2Bで、選択したカスタム例外キューへの例外メッセージの配信に失敗すると、例外メッセージはデフォルトの内部デリバリ・チャネルに送信されます。
「例外キュー」パラメータの詳細は、表16-1「構成設定」を参照してください。
表D-1に、インバウンド例外処理のシナリオを示します。
表D-1 インバウンド例外処理のシナリオ
例外発生の原因 . . | Oracle B2Bによる処置 . . |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
次に注意事項を記載します。
例外が取引パートナに送信されるのは、RosettaNet交換の場合のみです。その他の交換の場合は、それぞれの仕様の規定に従って失敗がレポートされます。たとえば、ebMS交換の場合、確認は、定義されているエラー・リストとともに送信されます。AS2交換の場合、エラーを示す確認が送信されますが、例外の詳細は送信されません。
例外は、確認を除くすべてのメッセージ・タイプについて取引パートナに送信されます。
例D-1に、例外ペイロードipException.xsd
の定義を示します。
例D-1 例外ペイロードの定義
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://integration.oracle.com/B2B/Exception" targetNamespace="http://integration.oracle.com/B2B/Exception"> <xs:element name="Exception"> <!--xs:complexType name="Exception"--> <xs:complexType> <xs:sequence> <xs:element ref="correlationId"/> <xs:element ref="b2bMessageId"/> <xs:element ref="errorCode"/> <xs:element ref="errorText"/> <xs:element ref="errorDescription"/> <xs:element ref="errorSeverity"/> <xs:element ref="errorDetails" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="correlationId" type="xs:string"/> <xs:element name="b2bMessageId" type="xs:string"/> <xs:element name="errorCode" type="xs:string"/> <xs:element name="errorText" type="xs:string"/> <xs:element name="errorDescription" type="xs:string"/> <xs:element name="errorSeverity" type="xs:string"/> <xs:element name="errorDetails"> <xs:complexType> <xs:sequence> <xs:element ref="parameter" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="parameter"> <xs:complexType> <xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="value" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema>