289.7. トランザクションサポート
BAPI トランザクションモデル
SAP コンポーネントは、SAP とのアウトバウンド通信用に BAPI トランザクションモデルをサポートしています。true
に設定されたトランザクションオプションを含む URL を持つ宛先エンドポイントは、必要に応じて、エンドポイントのアウトバウンド接続でステートフルセッションを開始し、Camel Synchronization オブジェクトをエクスチェンジに登録します。この Synchronization オブジェクトは、BAPI サービスメソッド BAPI_TRANSACTION_COMMIT
を呼び出し、メッセージエクスチェンジの処理が完了するとステートフルセッションを終了します。メッセージエクスチェンジの処理が失敗した場合、Synchronization オブジェクトは BAPI サーバーメソッド BAPI_TRANSACTION_ROLLBACK
を呼び出し、ステートフルセッションを終了します。
RFC トランザクションモデル
tRFC プロトコルは、一意のトランザクション識別子 (TID) で各トランザクション要求を識別することにより、AT-MOST-ONCE の配信と処理の保証を実現します。TID は、プロトコルで送信される各要求に付随します。tRFC プロトコルを使用する送信側アプリケーションは、要求を送信するときに、要求の各インスタンスを一意の TID で識別する必要があります。アプリケーションは、特定の TID を持つリクエストを複数回送信できますが、プロトコルは、リクエストが受信側システムで配信され、処理されるのは多くても 1 回であることを保証します。アプリケーションは、要求の送信時に通信エラーまたはシステムエラーが発生した場合に、指定された TID を使用してリクエストを再送信することを選択できます。したがって、そのリクエストが受信側システムで配信および処理されたかどうかは不明です。通信エラーが発生したときにリクエストを再送信することにより、tRFC プロトコルを使用するクライアントアプリケーションは、そのリクエストの配信と処理を確実に 1 回だけ保証できます。
どのトランザクションモデルを使用するか?
BAPI トランザクションは、SAP データベースで BAPI メソッドまたは RFC 関数によって実行される永続的なデータ変更に ACID 保証を課すという意味で、アプリケーションレベルのトランザクションです。RFC トランザクションは、BAPI メソッドや RFC 機能への要求に対して配信保証 (AT-MOST-ONCE、EXACTLY-ONCE、EXACTLY-ONCE-IN-ORDER) を課すという意味で、通信トランザクションです。
トランザクション RFC 宛先エンドポイント
次の宛先エンドポイントは、RFC トランザクションをサポートしています。
-
sap-trfc-destination
-
sap-qrfc-destination
単一の Camel ルートには、複数のトランザクション RFC 宛先エンドポイントを含めることができ、複数の RFC 宛先にメッセージを送信したり、同じ RFC 宛先に複数回メッセージを送信したりすることもできます。これは、Camel SAP コンポーネントが、ルートを通過する各 Exchange
オブジェクトの 多くの トランザクション ID (TID) を追跡する必要がある可能性があることを意味します。ルート処理が失敗し、再試行する必要がある場合、状況は非常に複雑になります。RFC トランザクションセマンティクスでは、ルートに沿った各 RFC 宛先が、最初に使用されたのと 同じ TID を使用して呼び出される必要があります (各宛先の TID は互いに異なる場合)。つまり、Camel SAP コンポーネントは、ルート上のどのポイントでどの TID が使用されたかを追跡し、この情報を記憶して、TID を正しい順序で再生できるようにする必要があります。
デフォルトでは、Camel は Exchange
がルートのどこにいるかを知ることができるメカニズムを提供しません。このようなメカニズムを提供するには、CurrentProcessorDefinitionInterceptStrategy
インターセプターを Camel ランタイムにインストールする必要があります。Camel SAP コンポーネントがルート内の TID を追跡するには、このインターセプターを Camel ランタイムにインストールする必要があります。インターセプターの設定方法の詳細については、「tRFC および qRFC 宛先のインターセプター」 を参照してください。
トランザクション RFC サーバーエンドポイント
次のサーバーエンドポイントは、RFC トランザクションをサポートしています。
-
sap-trfc-server
トランザクションリクエストを処理する Camel エクスチェンジで処理エラーが発生すると、Camel は標準のエラー処理メカニズムを通じて処理エラーを処理します。エクスチェンジを処理する Camel ルートがエラーを呼び出し元に伝播するように設定されている場合、エクスチェンジを開始した SAP サーバーエンドポイントは失敗を記録し、送信側の SAP システムにエラーが通知されます。送信側の SAP システムは、同じ TID を持つ別のトランザクションリクエストを送信して応答し、リクエストを再度処理できます。