Skip to content

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)に変換される

ロールバックしたいときは、例外をスローする(例外処理方式)。

トランザクション制御機能(TCDefinition.xml)

接続文字列と分離レベルを、コードではなく定義ファイルに書く。定義ファイルのパスは設定 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 を一括でコミット/ロールバックする
}

2 層 C/S(Windows Forms)

BaseLogic2CS はコネクションがグローバルで、コミットは手動(CommitAndClose / RollbackAndClose)。業務例外でロールバックしない。
キー付きの SetDam は無く、Dam は 1 つだけ持つ。

コーディング・エージェントに任せる場合

  • スキル opentouryo-transaction-control と opentouryo-layer-b、2 層 C/S は opentouryo-p-call-business を使わせる。
  • エージェントは TransactionScope や BeginTransaction を自分で書きがちなので、レビューで確認する。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally