「Open棟梁 wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
主に、コネクション管理、トランザクション管理の範囲。
詳細 †
コネクション管理 †
コネクション管理の実装はどのようになっていますか? †
と言う方式が基本になります。
- 複数のDBMS接続のOpen、Closeもサポートしています。
トランザクション管理 †
トランザクション管理の実装はどのようになっていますか? †
と言う方式が基本になります。
- トランザクションは、例外(Exception)が発生した場合にのみロールバックされます。
- 2層C/S方式ではトランザクションの開始だけ自動化してあり、コミット・ロールバックは手動で行う必要があります。ただし、例外発生時は自動ロールバックになります。
- 余談になりますが、B層ベースクラス2のUOC_ConnectionOpenメソッドの作り込みによって、クラス属性やメソッド属性を用いた属性ベースのトランザクション管理も可能になります。
手動のトランザクション管理は可能か? †
上記と同様に、Dam(データアクセス制御クラス)を直接生成してデータアクセスすることで、
- 手動のトランザクション管理が可能になります。
- また、2層C/S用フレームワークでは2本目の接続が可能になります。
しかし、標準化の観点から、その例外を認めるべきかどうかは、個別に検討下さい。
分割コミットなどは可能か? †
以下のAPIをB層から呼び出す事で、B層内でのトランザクション分割コミットが可能です。
SAVEPOINTを利用可能か? †
- 例えばOracleでSAVEPOINTを利用する場合、
以下の様に書けばOracleTransaction?を取得でき、
プロバイダ固有のI/FであるSaveメソッドを利用できます。
OracleTransaction tx = ((DamManagedOdp)this.GetDam()).DamOracleTransaction
// Create a savepoint
tx.Save("MySavePoint");
// ...
// Rollback to the savepoint
txn.Rollback("MySavePoint");
2フェーズコミットのサポート †
- 現状サポートしていませんがTransactionScope?に対応したB層ベースクラス1を開発すれば実現は可能です。
- 現時点では、意外なほど需要が無かったので、開発を見送っています。
B、D層を設けるのが面倒なことがある。 †
規模の小さなツール開発などではよくやる、
コードビハインドにベタ書きするパターン。
- P層でDam(データアクセス制御クラス)を直接生成して
データアクセスしてもらうことも可能です(P層のみ or P、D層の構成)。
- また、D層に共通Daoや、自動生成Daoを使用する場合、
- 自作Daoの開発を割愛できます(P・B層のみの構成)。
- その場合、自作Daoは特別なケースに開発するなどプロジェクトでルールを策定して下さい。
(インテリジェントなデータアクセスをラップするケース.etc)
しかし、標準化の観点から、上記の例外を認めるべきかどうかは、個別に検討下さい。
参考 †
API †
doc †
- 3章:「B層に関するトピック」も参考にして下さい。
- 7章:「FAQ」> 7.2節:「B層フレームワーク」も参考にして下さい。