用途別トランザクション使用方法
キーワード:トランザクション,コミット,ロールバック
概要
後続処理でエラーが発生した際にファイルやデータベースの更新処理をロールバックしたい(処理以前の状態に戻す)場合、トランザクションの設定を使用します。トランザクション設定について
DataSpider Servistaのトランザクション設定は以下の2種類があります。- スクリプトのプロパティを使用した、スクリプト単位での設定
- トランザクションコンポーネントを使用した、指定した処理単位での設定



サンプルプロジェクトについて
用途別ケースの設定を実装したサンプルプロジェクトを用意しています。サンプルプロジェクトを使用する場合の手順は、以下の通りです。サンプルプロジェクトのダウンロード | 逆引きリファレンス シナリオ103のサンプルプロジェクト |
---|
- サンプルプロジェクトの展開
サンプルプロジェクトファイル「rl_reference_103.zip」を展開します。 - プロジェクトのアップロード
「rl_reference_103.zip」を展開後に作成される「rl_reference_103プロジェクト」ディレクトリがプロジェクトファイルとなります。
DataSpider Studioを起動し、マイプロジェクトの画面から[ファイル]-[ローカルからアップロード]で展開したディレクトリ「rl_reference_103プロジェクト」をアップロードしてください。 - サンプルデータの準備
「rl_reference_103.zip」を展開後に作成される「samples」ディレクトリがサンプルデータとなります。
$DATASPIDER_HOME/server/samplesディレクトリに上書きしてください。

トランザクション使用用途
- ケースA:更新が完了した処理は随時コミットしたい。(後続処理でエラーが発生してもロールバックしない。)
- ケースB:複数の更新処理を行い、すべての処理が完了した場合のみコミットしたい。(いずれかの処理でエラーが発生した場合、すべての更新処理をロールバックしたい。)
- ケースC:複数の更新処理を行い、指定した処理単位でコミットしたい。(エラーが発生した場合、指定した処理単位でロールバックしたい。)
- ケースD:メインスクリプトから複数のサブスクリプトを呼び出し、すべてのサブスクリプトが正常終了した場合のみコミットしたい。(エラーが発生した場合、すべてのサブスクリプトの処理をロールバックしたい。)
- ケースE:メインスクリプトから複数のサブスクリプトを呼び出し、サブスクリプトごとにコミットしたい。(エラーが発生した場合、完了しているサブスクリプトの処理はロールバックしない。)
ケースA
概要
更新が完了した処理は随時コミットします。後続処理でエラーが発生しても、完了した更新処理はロールバックされません。
サンプルプロジェクトの説明
「csv_read(2)」でエラーが発生し、異常終了します。「csv_write(1)」の結果はコミットされており、ロールバックされません。

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

設定例

ケースB
概要
複数の更新処理を行い、すべての処理が完了した場合のみコミットします。いずれかの処理でエラーが発生した場合、すべての更新処理をロールバックします。
サンプルプロジェクトの説明
「csv_read(2)」でエラーが発生し、異常終了します。「csv_write(1)」の結果はロールバックされ、処理前の状態に戻ります。

トランザクション設定
- スクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]に以下のいずれかを選択します。
- [REQUIRED]
- [REQUIRES_NEW]


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

ケースC
概要
複数の更新処理を行い、指定した処理単位でコミットします。エラーが発生した場合、指定した処理単位でロールバックします。
サンプルプロジェクトの説明
「csv_read(3)」でエラーが発生し、異常終了します。「csv_write(1)」の結果はコミットされており、ロールバックされません。
「csv_write(2)」の結果はロールバックされ、処理前の状態に戻ります。

トランザクション設定
- スクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]にトランザクションを開始しないトランザクション属性を選択します。
- トランザクションに参加させたい処理をトランザクションコンポーネント内に配置します。
![]()
|
ケースD
概要
メインスクリプトから複数のサブスクリプトを呼び出し、すべてのサブスクリプトが正常終了した場合のみコミットします。エラーが発生した場合、すべてのサブスクリプトの処理をロールバックします。
サンプルプロジェクトの説明
サブスクリプト2の「csv_read」でエラーが発生し、異常終了します。サブスクリプト1の「csv_write」の結果はロールバックされ、処理前の状態に戻ります。
メインスクリプト

サブスクリプト1

サブスクリプト2

トランザクション設定
- メインスクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]に以下のいずれかを選択します。
- [REQUIRED]
- [REQUIRES_NEW]
- サブスクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]に以下のいずれかを選択します。
- [SUPPORTS]
- [REQUIRED]
- [MANDATORY]

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

ケースE
概要
メインスクリプトから複数のサブスクリプトを呼び出し、サブスクリプトごとにコミットします。エラーが発生した場合、完了しているサブスクリプトの処理はロールバックしません。
サンプルプロジェクトの説明
サブスクリプト2の「csv_read」でエラーが発生し、異常終了します。サブスクリプト1の「csv_write」の結果はコミットされており、ロールバックされません。
メインスクリプト

サブスクリプト1

サブスクリプト2

トランザクション設定
- サブスクリプトのプロパティで[トランザクション]タブの[トランザクション属性の設定]に以下のいずれかを選択します。
- [REQUIRED]
- [REQUIRES_NEW]
![]()
|

設定例(トランザクションコンポーネントを使用した場合)
サブスクリプト1

サブスクリプト2
