Repository navigation
OTR_TransactionControl
nishi_74322014 edited this page Oct 27, 2026
·
1 revision
Open 棟梁のトランザクションは、B 層のフレームワークが制御する。業務コードクラスでコミット・ロールバックを書かない。
- 呼び出し側は、
DoBusinessLogicに分離レベルを渡す。 - 親クラス2 の
UOC_ConnectionOpenが、Dam(DB アクセスの基盤)を生成して接続し、トランザクションを開始する。 - 接続文字列と分離レベルの組み合わせに名前(パターン ID)を付け、定義ファイル(
TCDefinition.xml)で管理できる。
DbEnum.IsolationLevelEnum で指定する。
| 値 | 意味 |
|---|---|
NotConnect |
接続しない(DB を使わない業務処理) |
NoTransaction |
接続するがトランザクションを開始しない |
DefaultTransaction |
DBMS の既定の分離レベル |
ReadUncommitted / ReadCommitted / RepeatableRead / Serializable / Snapshot
|
指定の分離レベル |
User |
プロジェクトの既定に委ねる(親クラス2 が実際の分離レベルに振り替える。既定のテンプレートでは ReadCommitted) |
TestReturnValue rv = (TestReturnValue)layerB.DoBusinessLogic(pv, DbEnum.IsolationLevelEnum.User);-
DefaultTransactionは「DBMS の既定」、Userは「プロジェクトの既定」である。 - 分離レベルの意味(防げる現象、ロック方式か MVCC か)は DBMS ごとに違うので、理解して設定する。
| 結果 | 動作 |
|---|---|
| 業務処理が正常終了 | コミット |
| 例外をスロー(業務例外を含む) | ロールバック。業務例外は正常系の戻り値(ErrorFlag = true)に変換される |
ロールバックしたいときは、例外をスローする(例外処理方式)。
接続文字列と分離レベルを、コードではなく定義ファイルに書く。定義ファイルのパスは設定 FxXMLTCDefinition で指定する。
<TCD>
<TransactionPattern id="SQL_RC" connkey="ConnectionString_SQL" isolevel="rc"/>
<TransactionPattern id="SQL_SZ" connkey="ConnectionString_SQL" isolevel="sz"/>
<TransactionGroup id="SQLSvr" value="SQL_RC,SQL_SZ"/>
</TCD>| 要素・属性 | 内容 |
|---|---|
TransactionPattern の id
|
パターン ID(XML の ID 型なので、先頭に数字を使えない) |
connkey |
接続文字列のキー(connectionStrings のキー名) |
isolevel |
nc / nt / uc / rc(既定) / rr / sz / ss / df
|
TransactionGroup |
パターン ID を束ねる(複数の DB に同時に接続する場合など) |
- 定義ファイルの冒頭には DTD を埋め込む(Open 棟梁の XML 定義ファイルに共通の作法)。
// 親クラス2 の UOC_ConnectionOpen などで
BaseDam dam = new DamSqlSvr();
BaseLogic.InitDam("SQL_RC", dam); // パターン ID だけを渡す
this.SetDam(dam);
// トランザクション・グループで複数の Dam を持つ
string[] patterns;
BaseLogic.GetTransactionPatterns("SQLSvr", out patterns);
foreach (string pattern in patterns)
{
BaseDam damWork = new DamSqlSvr();
BaseLogic.InitDam(pattern, damWork);
this.SetDam(pattern, damWork); // キー付きで保持。全 Dam を一括でコミット/ロールバックする
}BaseLogic2CS はコネクションがグローバルで、コミットは手動(CommitAndClose / RollbackAndClose)。業務例外でロールバックしない。
キー付きの SetDam は無く、Dam は 1 つだけ持つ。
- スキル
opentouryo-transaction-controlとopentouryo-layer-b、2 層 C/S はopentouryo-p-call-businessを使わせる。 - エージェントは
TransactionScopeやBeginTransactionを自分で書きがちなので、レビューで確認する。
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。