「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>FAQ]] --[[P層フレームワーク>FAQ - P層フレームワーク]] --B層フレームワーク --[[D層フレームワーク>FAQ - D層フレームワーク]] --[[大規模案件導入>FAQ - 大規模案件導入]] --[[その他>FAQ - その他]] *目次 [#uf367a6a] #contents *概要 [#e1d4d13b] 主に、[[コネクション管理>#d5d3ef14]]、[[トランザクション管理>#m12931af]]の範囲。 *詳細 [#n98adc6b] **コネクション管理 [#d5d3ef14] ***コネクション管理の実装はどのようになっていますか? [#y7c4d898] -マニュアルに記述されているとおり、 --B層[[ベースクラス2]]の[[UOC_ConnectionOpen]]メソッドでDBMS接続をOpenし、 --B層処理の完了時にフレームワーク側で自動的にDBMS接続をCloseされる >と言う方式が基本になります。 -複数のDBMS接続のOpen、Closeもサポートしています。 **トランザクション管理 [#m12931af] ***トランザクション管理の実装はどのようになっていますか? [#k525856b] -マニュアルに記述されているとおり、 --B層[[ベースクラス2]]の[[UOC_ConnectionOpen]]メソッドでトランザクションを開始し、 --B層処理の完了時にフレームワーク側で自動的に「コミット or ロールバック」される >と言う方式が基本になります。 -トランザクションは、例外(Exception)が発生した場合にのみロールバックされます。 -2層C/S方式ではトランザクションの開始だけ自動化してあり、コミット・ロールバックは手動で行う必要があります。ただし、例外発生時は自動ロールバックになります。 -余談になりますが、B層ベースクラス2の[[UOC_ConnectionOpen]]メソッドの作り込みによって、クラス属性やメソッド属性を用いた属性ベースのトランザクション管理も可能になります。 ***手動のトランザクション管理は可能か? [#tbd150f2] 上記と同様に、[[Dam(データアクセス制御クラス)を直接生成>データアクセス#q7358e77]]してデータアクセスすることで、 -手動のトランザクション管理が可能になります。 -また、2層C/S用フレームワークでは2本目の接続が可能になります。 しかし、標準化の観点から、その例外を認めるべきかどうかは、個別に検討下さい。 ***分割コミットなどは可能か? [#nb4e23fd] 以下のAPIをB層から呼び出す事で、B層内でのトランザクション分割コミットが可能です。 -this.GetDam().CommitTransaction() -this.GetDam().BeginTransaction() ***SAVEPOINTを利用可能か? [#gbf5edbb] -例えばOracleでSAVEPOINTを利用する場合、~ 以下の様に書けばOracleTransactionを取得し、~ プロバイダ固有のI/FであるSaveを利用できます。 以下の様に書けばOracleTransactionを取得でき、~ プロバイダ固有のI/FであるSaveメソッドを利用できます。 OracleTransaction tx = ((DamManagedOdp)this.GetDam()).DamOracleTransaction // Create a savepoint tx.Save("MySavePoint"); // ... // Rollback to the savepoint txn.Rollback("MySavePoint"); -参考 --OracleTransactionクラス~ https://docs.oracle.com/cd/E16338_01/win.112/b66456/OracleTransactionClass.htm ***2フェーズコミットのサポート [#s4891a92] -現状サポートしていませんがTransactionScopeに対応したB層[[ベースクラス1]]を開発すれば実現は可能です。 -現時点では、意外なほど需要が無かったので、開発を見送っています。 **B、D層を設けるのが面倒なことがある。 [#idd9290e] 規模の小さなツール開発などではよくやる、~ コードビハインドにベタ書きするパターン。 -P層でDam(データアクセス制御クラス)を直接生成して~ データアクセスしてもらうことも可能です(P層のみ or P、D層の構成)。 -また、D層に共通Daoや、自動生成Daoを使用する場合、 --自作Daoの開発を割愛できます(P・B層のみの構成)。 --その場合、自作Daoは特別なケースに開発するなどプロジェクトでルールを策定して下さい。~ (インテリジェントなデータアクセスをラップするケース.etc)~ しかし、標準化の観点から、上記の例外を認めるべきかどうかは、個別に検討下さい。 *参考 [#c03f88d3] **API [#c419aef9] -[[UOC_ConnectionOpen]] --接続 ---ConnectionOpen ---ConnectionClose --トランザクション ---BeginTransaction ---CommitTransaction ---RollbackTransaction --Dam ---SetDam ---GetDam **doc [#t1ea3d27] -.NET用アプリケーション フレームワーク ”棟梁” 利用ガイド(ベターユース、FAQ編)~ https://github.com/OpenTouryoProject/OpenTouryoDocuments/blob/master/documents/1_User_Guide/ja-JP/7_User_Guide(BetterUse_and_FAQ).doc --3章:「B層に関するトピック」も参考にして下さい。 --7章:「FAQ」> 7.2節:「B層フレームワーク」も参考にして下さい。 IP:202.246.252.103 TIME:"2020-07-09 (木) 11:12:45" REFERER:"https://opentouryo.osscons.jp/index.php?cmd=edit&page=FAQ%20-%20B%E5%B1%A4%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF" USER_AGENT:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"