用途別トランザクション使用方法

Avatar
dstn

用途別トランザクション使用方法

キーワード:トランザクション,コミット,ロールバック

概要

後続処理でエラーが発生した際にファイルやデータベースの更新処理をロールバックしたい(処理以前の状態に戻す)場合、トランザクションの設定を使用します。

トランザクション設定について

DataSpider Servistaのトランザクション設定は以下の2種類があります。
  • スクリプトのプロパティを使用した、スクリプト単位での設定
  • トランザクションコンポーネントを使用した、指定した処理単位での設定
トランザクションの詳細については、「 トランザクション」を参照してください。
ファイル系アダプタの書き込み処理でトランザクション処理を行うにはトランザクションに参加する必要があります。
ファイル系アダプタのトランザクションの詳細については、「 ファイル系アダプタのトランザクション」を参照してください。

サンプルプロジェクトについて

用途別ケースの設定を実装したサンプルプロジェクトを用意しています。サンプルプロジェクトを使用する場合の手順は、以下の通りです。

サンプルプロジェクトのダウンロード 逆引きリファレンス シナリオ103のサンプルプロジェクト
  1. サンプルプロジェクトの展開
    サンプルプロジェクトファイル「rl_reference_103.zip」を展開します。

  2. プロジェクトのアップロード
    「rl_reference_103.zip」を展開後に作成される「rl_reference_103プロジェクト」ディレクトリがプロジェクトファイルとなります。
    DataSpider Studioを起動し、マイプロジェクトの画面から[ファイル]-[ローカルからアップロード]で展開したディレクトリ「rl_reference_103プロジェクト」をアップロードしてください。

  3. サンプルデータの準備
    「rl_reference_103.zip」を展開後に作成される「samples」ディレクトリがサンプルデータとなります。
    $DATASPIDER_HOME/server/samplesディレクトリに上書きしてください。
本シナリオのサンプルスクリプトはトランザクションの確認をするため、実行時にエラーが発生する構成となっています。

トランザクション使用用途

  • ケースA:更新が完了した処理は随時コミットしたい。(後続処理でエラーが発生してもロールバックしない。)
  • ケースB:複数の更新処理を行い、すべての処理が完了した場合のみコミットしたい。(いずれかの処理でエラーが発生した場合、すべての更新処理をロールバックしたい。)
  • ケースC:複数の更新処理を行い、指定した処理単位でコミットしたい。(エラーが発生した場合、指定した処理単位でロールバックしたい。)
  • ケースD:メインスクリプトから複数のサブスクリプトを呼び出し、すべてのサブスクリプトが正常終了した場合のみコミットしたい。(エラーが発生した場合、すべてのサブスクリプトの処理をロールバックしたい。)
  • ケースE:メインスクリプトから複数のサブスクリプトを呼び出し、サブスクリプトごとにコミットしたい。(エラーが発生した場合、完了しているサブスクリプトの処理はロールバックしない。)

ケースA

概要

更新が完了した処理は随時コミットします。
後続処理でエラーが発生しても、完了した更新処理はロールバックされません。

サンプルプロジェクトの説明

「csv_read(2)」でエラーが発生し、異常終了します。
「csv_write(1)」の結果はコミットされており、ロールバックされません。

トランザクション設定

  1. スクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]に以下のいずれかを選択します。
    • [NEVER]
    • [NOT_SUPPORTED]
    • [SUPPORTS]
[トランザクション属性の設定]のデフォルト値は [SUPPORTS]です。

設定例

ケースB

概要

複数の更新処理を行い、すべての処理が完了した場合のみコミットします。
いずれかの処理でエラーが発生した場合、すべての更新処理をロールバックします。

サンプルプロジェクトの説明

「csv_read(2)」でエラーが発生し、異常終了します。
「csv_write(1)」の結果はロールバックされ、処理前の状態に戻ります。

トランザクション設定

  1. スクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]に以下のいずれかを選択します。
    • [REQUIRED]
    • [REQUIRES_NEW]
スクリプトを単独で実行する場合、 [REQUIRED][REQUIRES_NEW]の動作に差異はありません。
トランザクションコンポーネントを使用しても、同様の結果を得ることができます。この場合、スクリプトの [トランザクション属性の設定]の設定値には影響されません。

設定例(トランザクションコンポーネントを使用した場合)

ケースC

概要

複数の更新処理を行い、指定した処理単位でコミットします。
エラーが発生した場合、指定した処理単位でロールバックします。

サンプルプロジェクトの説明

「csv_read(3)」でエラーが発生し、異常終了します。
「csv_write(1)」の結果はコミットされており、ロールバックされません。
「csv_write(2)」の結果はロールバックされ、処理前の状態に戻ります。

トランザクション設定

  1. スクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]にトランザクションを開始しないトランザクション属性を選択します。
  2. トランザクションに参加させたい処理をトランザクションコンポーネント内に配置します。
処理のポイント
  • スクリプト全体ではトランザクションを開始しないため、トランザクションを開始しないトランザクション属性を選択します。
  • トランザクションコンポーネント外でエラーが発生しても、トランザクションコンポーネント内の処理はロールバックされません。

ケースD

概要

メインスクリプトから複数のサブスクリプトを呼び出し、すべてのサブスクリプトが正常終了した場合のみコミットします。
エラーが発生した場合、すべてのサブスクリプトの処理をロールバックします。

サンプルプロジェクトの説明

サブスクリプト2の「csv_read」でエラーが発生し、異常終了します。
サブスクリプト1の「csv_write」の結果はロールバックされ、処理前の状態に戻ります。

メインスクリプト

サブスクリプト1

サブスクリプト2

トランザクション設定

  1. メインスクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]に以下のいずれかを選択します。
    • [REQUIRED]
    • [REQUIRES_NEW]
  2. サブスクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]に以下のいずれかを選択します。
    • [SUPPORTS]
    • [REQUIRED]
    • [MANDATORY]
メインスクリプトでトランザクションコンポーネントを使用しても、同様の結果を得ることができます。この場合、メインスクリプトの [トランザクション属性の設定]の設定値には影響されません。

設定例(トランザクションコンポーネントを使用した場合)

ケースE

概要

メインスクリプトから複数のサブスクリプトを呼び出し、サブスクリプトごとにコミットします。
エラーが発生した場合、完了しているサブスクリプトの処理はロールバックしません。

サンプルプロジェクトの説明

サブスクリプト2の「csv_read」でエラーが発生し、異常終了します。
サブスクリプト1の「csv_write」の結果はコミットされており、ロールバックされません。

メインスクリプト

サブスクリプト1

サブスクリプト2

トランザクション設定

  1. サブスクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]に以下のいずれかを選択します。
    • [REQUIRED]
    • [REQUIRES_NEW]
処理のポイント
  • [REQUIRED]は呼び出し元のトランザクションに参加する属性であるため、サブスクリプトの[トランザクション属性の設定][REQUIRED]を選択した場合、メインスクリプトの[トランザクション属性の設定]にはトランザクションを開始しない属性([NEVER][NOT_SUPPORTED][SUPPORTS])を選択してください。

サブスクリプトでトランザクションコンポーネントを使用しても、同様の結果を得ることができます。この場合、メインスクリプトの [トランザクション属性の設定]の設定値には影響されません。

設定例(トランザクションコンポーネントを使用した場合)

サブスクリプト1
サブスクリプト2

コメント

ログインしてコメントを残してください。

Powered by Zendesk