多重トランザクションの実現方法

67 views
Skip to first unread message

masatakashibuya

unread,
Jul 26, 2018, 5:52:42 AM7/26/18
to OpenTouryoProject
西野様

お世話になっております。渋谷です。

表題の件についてですが、

MyFcBaseLogicを継承したクラスで
以下のようなトランザクション処理を実現したいのですが
どのように実装すればよいでしょうか。ご教授よろしくお願いいたします。

☆トランザクション1開始
  処理A
   ☆トランザクション2開始
     処理B
   ★2コミット
   ☆トランザクション3開始
     処理C
   ★3コミット
★1コミット

です。

トランザクション1開始と、1コミットは
MyFcBaseLogicが保持しているBaseDamで
MyFcBaseLogicが行っているのですが

トランザクション2、トランザクション3については
BaseDamの新規インスタンスを作成して行うのでしょうか。

よろしくお願いいたします。

daisukenishino

unread,
Jul 26, 2018, 10:37:43 PM7/26/18
to OpenTouryoProject
渋谷さん

要件次第ですが、Connectionが複数必要なのかTransactionが複数必要なのか、
Connectionが複数必要ということなら、その数分、Damインスタンスを生成すればイイと思います。
Transactionについては、分割が必要ならTransactionを平行に実行する分、
Damインスタンスを生成すればイイと思います。

あと、Damインスタンスを何処で生成するかですが、Transaction管理に委ねるなら、
UOC_ConnectionOpenで生成して、インデックスを指定できるSetDamを使用すればイイと思います。
SetDamしたものを、業務のサブクラスでGetDamして手動でコミットすることも可能です。

完全手動でやるなら、業務のサブクラス内でDamを生成して、
ConnectionOpen、BeginTransaction、Commit or RollbackTransactionで良いと思います。

なお、手動管理のADO.NETのConnectionオブジェクトは
例外発生などで未コミット状態で放置されGCされると、Rollback扱いになります。

西野

2018年7月26日木曜日 18時52分42秒 UTC+9 masatakashibuya:

masatakashibuya

unread,
Jul 27, 2018, 1:31:55 AM7/27/18
to OpenTouryoProject
西野様

ありがとうございます。

今回の要件ではTransactionが複数必要です。

DictionaryでDamを管理することもできたのですね。
UOC_ConnectionOpenでは SetDam(dam)を使用しているので

インデックスを指定できるSetDamを使用するConnectionOpenを作成しようと思います。
Commit or RollbackTransactionは手動でしようと思います。

トランザクション分離レベルは、Serializableを使用していますが問題ないでしょうか。 

2018年7月27日金曜日 11時37分43秒 UTC+9 daisukenishino:

daisukenishino

unread,
Jul 27, 2018, 3:08:46 AM7/27/18
to OpenTouryoProject
渋谷さん

>トランザクション分離レベルは、Serializableを使用していますが問題ないでしょうか。 

DBMSのロック・分離戦略と同時実行制御 - マイクロソフト系技術情報 Wiki
https://techinfoofmicrosofttech.osscons.jp/index.php?DBMSのロック・分離戦略と同時実行制御#ma87eb92

この辺ご存知でしょうか?

基本は、
コミット読み取りができればイイので、
Read Committedの分離レベルでOKです。

繰り返し可能読み取りが必要であれば、Repeatable Read
直列可能が必要であれば、Serializable

の分離レベルを使用します。

西野

2018年7月27日金曜日 14時31分55秒 UTC+9 masatakashibuya:

masatakashibuya

unread,
Jul 31, 2018, 2:13:05 AM7/31/18
to OpenTouryoProject
西野様

ありがとうございます。
勉強不足でした。。。

どちらを使うかは、検討していきます。


2018年7月27日金曜日 16時08分46秒 UTC+9 daisukenishino:
Reply all
Reply to author
Forward
0 new messages