161 DBMS_SAGA
DBMS_SAGA
パッケージは、sagaを開始およびファイナライズするためのsagaファンクションおよびプロシージャのコレクションを提供します。
この章のトピックは、次のとおりです:
161.1 DBMS_SAGAの概要
DBMS_SAGA
パッケージを使用すると、(開発者は)中間層を必要とせずに、PL/SQLを使用してデータベース内のパッケージ化されたマイクロサービス・アプリケーションを開発できます。
DBMS_SAGA
パッケージは、クライアント・プログラムがデータベースsagaと対話できるようにするためのPL/SQLインタフェースを提供します。
中間層を使用してデータベースと通信するマイクロサービスを実装する場合は、AQJMS拡張を使用してsaga機能を実装することをお薦めします。
参照:
AQJMS拡張の詳細は、「JMSインタフェースを使用したSagaの管理」を参照してください。161.3 DBMS_SAGAサブプログラムの要約
この表では、DBMS_SAGAパッケージのサブプログラムをリストし、簡単に説明します。
表161-1 DBMS_SAGAパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
新しい |
|
GET_SAGA_IDファンクション | データベース・セッションに関連付けられたSagaのSaga IDを取得します。 |
SET_SAGA_IDプロシージャ | データベース・セッションのSaga IDを、指定されたsaga_id に設定します。
|
COMMIT_SAGAプロシージャ | saga_id パラメータで識別されるSagaをコミットします。
|
ROLLBACK_SAGAプロシージャ | saga_id パラメータで識別されるSagaをロールバックします。
|
IS_INCOMPLETEファンクション | 指定されたsaga_id に対応するSagaが未完了とみなされた場合にTRUE を戻します。
|
SET_INCOMPLETEプロシージャ | 指定されたsaga_id で識別されるSagaを未完了としてマークします。
|
SEND_REQUESTプロシージャ | 開始されたSagaへの参加者を登録します。 |
161.3.1 BEGIN_SAGAファンクション
このファンクションは、新しいsaga GUID: saga_id_t
を作成して戻します。新しいsaga IDは、saga$
ディクショナリ表に挿入されます。
構文
function begin_saga(initiator_name IN varchar2, timeout IN number default NULL, version IN number default 1) return saga_id_t;
パラメータ
表161-2 BEGIN_SAGAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
sagaイニシエータの名前。 |
timeout |
タイムアウト値を秒数で指定します。この値は、 |
161.3.2 GET_SAGA_IDファンクション
このファンクションは、現在のデータベース・セッションに関連付けられているsaga (ある場合)を戻します。
構文
function get_saga_id() return saga_id_t;
161.3.3 SET_SAGA_IDプロシージャ
このプロシージャは、データベース・セッションのsaga IDを指定されたsaga_id
に設定します。
構文
procedure set_saga_id(saga_id IN saga_id_t);
パラメータ
表161-3 SET_SAGAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
タイプ |
161.3.4 COMMIT_SAGAプロシージャ
このプロシージャは、saga_id
パラメータで識別されるsagaをコミットします。
force
オプションは、保留中または未完了のsagaに対してsaga参加者トランザクションを強制的にコミットするために使用されます。参加者データベースに対するCOMMIT_SAGA()
コールの場合、force=TRUE
は参加者データベースのsagaブランチ操作をコミットするのみです。force
のデフォルト値はTRUE
です。
構文
procedure commit_saga(saga_participant IN VARCHAR2, saga_id IN saga_id_t, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表161-4 COMMIT_SAGAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
saga参加者( |
|
タイプ |
force |
sagaのコミット操作がsagaブランチに対して開始されるかどうかを示すフラグ。 |
161.3.5 ROLLBACK_SAGAプロシージャ
このプロシージャは、saga_id
パラメータに対応するsagaを中断します。
force
オプションを使用すると、保留中または未完了のsagaに対してsaga参加者トランザクションを強制的にロールバックできます。参加者データベースに対するROLLBACK_SAGA()
コールの場合、force=TRUE
は参加者データベースのsagaブランチ操作をロールバックするのみです。force
のデフォルト値はTRUE
です。
構文
procedure rollback_saga (saga_participant IN VARCHAR2, saga_id IN saga_id_t, force IN BOOLEAN DEFAULT FALSE);
パラメータ
表161-5 ROLLBACK_SAGAプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
saga参加者( |
|
タイプ |
force |
ロールバックsaga操作が参加者データベースに対して開始されるかどうかを示すフラグ。デフォルト値は |
161.3.6 IS_INCOMPLETEファンクション
このファンクションは、指定されたsaga_id
に対応するsagaが未完了とみなされた場合にTRUE
を戻します。
sagaは、次の理由により未完了とみなされます。
- sagaが
max_saga_duration
パラメータで識別される期間またはbegin_saga()
コールによって設定された期間を超える場合。 - sagaの参加者がsaga (コミットまたはロールバック)をファイナライズできない場合。
構文
function is_incomplete (saga_id IN saga_id_t) returns boolean;
パラメータ
表161-6 IS_COMPLETEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
タイプ |
161.3.7 SET_INCOMPLETEプロシージャ
このプロシージャは、指定されたsaga_id
パラメータに対応するsagaを未完了としてマークします。
これは、特定のsagaを未完了としてマークして、これらのsagaに手動操作のフラグを付けることができるようにする管理インタフェースです。
構文
procedure set_incomplete (saga_id IN saga_id_t);
パラメータ
表161-7 SET_INCOMPLETEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
タイプ |
161.3.8 SEND_REQUESTプロシージャ
このプロシージャは、開始されたsagaへの参加者を登録するためにクライアントが使用できます。
このプロシージャは、sagaメッセージの作成、JSONペイロードの変換および参加者へのメッセージのエンキューを抽象化します。アプリケーション開発者はこのステップも手動で実行することもできます。
構文
procedure send_request(saga_id IN saga_id_t, recipient IN VARCHAR2, payload IN JSON DEFAULT NULL, saga_version IN NUMBER DEFAULT 1, saga_spare IN VARCHAR2 DEFAULT NULL);
パラメータ
表161-8 SEND_REQUESTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
recipient |
このsagaに登録する参加者。 |
payload |
登録する参加者のrequest()をコールするJSONペイロード。 |
saga_version |
sagaフレームワークのバージョン(デフォルトは1)。 |
saga_spare |
現在使用されていないフィールド。 |