iSeriesC 向け開発時のコミットメント制御

iSeriesC 向けのプログラムの開発時に、プログラム内でコミットメント制御を明示的に指定できます。ただし、プログラム実行時に IBM® Rational® EGL Server for IBM i が暗黙的なコミットメント制御を実行します。

明示的なコミットメント制御

EGL でプログラムを定義する際に、IBM i ネイティブ・データベース・ファイル (相対レコード、シリアル・レコード、および索引付きレコードが含まれているファイル) と SQL 表の両方のコミットとロールバックを発行する明示的なロジックを指定できます。このロジックは、sysLib.commit() および sysLib.rollback() システム関数の呼び出しで構成されています。converseVar.commitOnConverse システム変数に 1 を設定すると、converse ステートメントによってユーザーに対して書式が表示されるときに変更がコミットされます。

コミットメント制御を明示的に使用すると、現行リカバリー単位が終了し、新しいリカバリー単位が開始されます。変更がコミットまたはロールバックされると、保持されているすべてのレコード・ロックとファイル・ロックがコミットメント制御サービスによって解放されます。

暗黙的なコミットメント制御

EGL は特定の時点でコミットメント制御を自動的に実行します。この暗黙的なコミットメント制御は、明示的なコミットメント制御のインスタンスから独立しています。 プログラムを設計する際に、暗黙的なコミットメント制御を使用して、明示的なコミットメント制御を使用しないようにできます。下の表に、EGL による暗黙的なコミットメント制御処理の要約を示します。

表 1. 暗黙的なコミット、ロールバック、および SQL CLOSE CURSOR 処理
プログラム出口の原因 暗黙処置 Main program 呼び出し先プログラム
transfer to transaction または show sysLib.commit() yes N/A
SQL CLOSE CURSOR yes N/A
transfer to program sysLib.commit() no N/A
SQL CLOSE CURSOR yes N/A
exit program sysLib.commit() yes no
SQL CLOSE CURSOR yes プログラムにより実行単位が開始された場合は yes
エラー sysLib.rollback() yes no
SQL CLOSE CURSOR yes プログラムにより実行単位が開始された場合は yes

フィードバック