iSeriesC 向けのプログラムの開発時に、プログラム内でコミットメント制御を明示的に指定できます。ただし、プログラム実行時に IBM® Rational® EGL Server for IBM i が暗黙的なコミットメント制御を実行します。
EGL でプログラムを定義する際に、IBM i ネイティブ・データベース・ファイル (相対レコード、シリアル・レコード、および索引付きレコードが含まれているファイル) と SQL 表の両方のコミットとロールバックを発行する明示的なロジックを指定できます。このロジックは、sysLib.commit() および sysLib.rollback() システム関数の呼び出しで構成されています。converseVar.commitOnConverse システム変数に 1 を設定すると、converse ステートメントによってユーザーに対して書式が表示されるときに変更がコミットされます。
コミットメント制御を明示的に使用すると、現行リカバリー単位が終了し、新しいリカバリー単位が開始されます。変更がコミットまたはロールバックされると、保持されているすべてのレコード・ロックとファイル・ロックがコミットメント制御サービスによって解放されます。
EGL は特定の時点でコミットメント制御を自動的に実行します。この暗黙的なコミットメント制御は、明示的なコミットメント制御のインスタンスから独立しています。 プログラムを設計する際に、暗黙的なコミットメント制御を使用して、明示的なコミットメント制御を使用しないようにできます。下の表に、EGL による暗黙的なコミットメント制御処理の要約を示します。
| プログラム出口の原因 | 暗黙処置 | 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 |