• R/O
  • HTTP
  • SSH
  • HTTPS

コミット

タグ
未設定

よく使われているワード(クリックで追加)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

コミットメタ情報

リビジョンa62016050ef8f95981a88a15ef4b6eba1d5cccab (tree)
日時2022-05-27 23:07:55
作者yoshy <yoshy.org.bitbucket@gz.j...>
コミッターyoshy

ログメッセージ

[ADD] 手動でトランザクションを終端できる機能を追加

変更サマリ

差分

--- a/Adaptor/Controller/Handler/Tx/AbstractAsyncDbTransactionHandler.cs
+++ b/Adaptor/Controller/Handler/Tx/AbstractAsyncDbTransactionHandler.cs
@@ -39,13 +39,27 @@ namespace CleanAuLait48.Adaptor.Controller.Handler.tx
3939 {
4040 UseCaseResponse res = await context.HandleNextAsync(req, context);
4141
42- tx.Commit(false);
42+ if (!tx.IsTerminated)
43+ {
44+ tx.Commit(false);
45+ }
46+ else
47+ {
48+ logger.Trace("トランザクション境界 [{0}] は手動で終端されているためコミットをスキップします。", name);
49+ }
4350
4451 return res;
4552 }
4653 catch (Exception)
4754 {
48- tx.Rollback(false);
55+ if (!tx.IsTerminated)
56+ {
57+ tx.Rollback(false);
58+ }
59+ else
60+ {
61+ logger.Trace("トランザクション境界 [{0}] は手動で終端されているためロールバックをスキップします。", name);
62+ }
4963
5064 throw;
5165 }
--- a/Adaptor/Controller/Handler/Tx/AbstractDbTransactionHandler.cs
+++ b/Adaptor/Controller/Handler/Tx/AbstractDbTransactionHandler.cs
@@ -38,15 +38,27 @@ namespace CleanAuLait48.Adaptor.Controller.Handler.tx
3838 {
3939 UseCaseResponse res = context.HandleNext(req, context);
4040
41- tx.Commit(false);
41+ if (!tx.IsTerminated)
42+ {
43+ tx.Commit(false);
44+ }
45+ else
46+ {
47+ logger.Trace("トランザクション境界 [{0}] は手動で終端されているためコミットをスキップします。", name);
48+ }
4249
4350 return res;
4451 }
45- catch (Exception e)
52+ catch (Exception)
4653 {
47- logger.Error(e, "例外がスローされたためロールバックします");
48-
49- tx.Rollback(false);
54+ if (!tx.IsTerminated)
55+ {
56+ tx.Rollback(false);
57+ }
58+ else
59+ {
60+ logger.Trace("トランザクション境界 [{0}] は手動で終端されているためロールバックをスキップします。", name);
61+ }
5062
5163 throw;
5264 }
--- a/OuterEdge/Repository/Db/Tx/DbTransactionWrapper.cs
+++ b/OuterEdge/Repository/Db/Tx/DbTransactionWrapper.cs
@@ -9,13 +9,14 @@ namespace CleanAuLait48.OuterEdge.Repository.Db.Tx
99 {
1010 private static readonly ILogger logger = LogManager.GetCurrentClassLogger();
1111
12+ public bool IsTerminated { get; private set; }
13+
14+ private readonly string name;
15+
1216 private readonly ITransactionManager txMan;
1317 private IDbConnectionWrapper conn;
1418 private IDbTransaction tx;
1519
16- private readonly string name;
17-
18- private bool terminatedValue;
1920 private bool disposedValue;
2021
2122 public IDbConnection Connection => this.tx.Connection;
@@ -36,7 +37,15 @@ namespace CleanAuLait48.OuterEdge.Repository.Db.Tx
3637 name, ToRawConnID(), ToTransactionID());
3738 }
3839
39- private void SwitchTransaction(bool needNewTx)
40+ public void TerminateTransaction()
41+ {
42+ logger.Trace("DB接続 [{0}] {1}: トランザクションを手動で終端します",
43+ name, ToRawConnID());
44+
45+ TerminateTransaction(false);
46+ }
47+
48+ private void TerminateTransaction(bool needNewTx)
4049 {
4150 if (this.tx != null)
4251 {
@@ -49,9 +58,18 @@ namespace CleanAuLait48.OuterEdge.Repository.Db.Tx
4958 if (!needNewTx)
5059 {
5160 this.tx = null;
52- this.terminatedValue = true;
61+ this.IsTerminated = true;
5362 logger.Trace("DB接続 [{0}] {1}: トランザクションを終端しました",
5463 name, ToRawConnID());
64+ }
65+ }
66+
67+ private void SwitchTransaction(bool needNewTx)
68+ {
69+ TerminateTransaction(needNewTx);
70+
71+ if (!needNewTx)
72+ {
5573 return;
5674 }
5775
@@ -81,7 +99,7 @@ namespace CleanAuLait48.OuterEdge.Repository.Db.Tx
8199
82100 public void Commit(bool needNewTx)
83101 {
84- if (this.terminatedValue)
102+ if (this.IsTerminated)
85103 {
86104 logger.Trace("DB接続 [{0}]: トランザクションは終端されているため、コミットできません", name);
87105 return;
@@ -105,7 +123,7 @@ namespace CleanAuLait48.OuterEdge.Repository.Db.Tx
105123
106124 public void Rollback(bool needNewTx)
107125 {
108- if (this.terminatedValue)
126+ if (this.IsTerminated)
109127 {
110128 logger.Trace("DB接続 [{0}]: トランザクションは終端されているため、ロールバックできません", name);
111129 return;
@@ -130,7 +148,7 @@ namespace CleanAuLait48.OuterEdge.Repository.Db.Tx
130148 {
131149 // TODO: マネージド状態を破棄します (マネージド オブジェクト)
132150
133- if (!this.terminatedValue)
151+ if (!this.IsTerminated)
134152 {
135153 logger.Trace("DB接続 [{0}] {1}: トランザクション {2} の破棄が開始されました",
136154 name, ToRawConnID(), ToTransactionID());
--- a/OuterEdge/Repository/Db/Tx/IDbTransactionWrapper.cs
+++ b/OuterEdge/Repository/Db/Tx/IDbTransactionWrapper.cs
@@ -4,6 +4,8 @@ namespace CleanAuLait48.OuterEdge.Repository.Db.Tx
44 {
55 public interface IDbTransactionWrapper : IDbTransaction
66 {
7+ bool IsTerminated { get; }
8+ void TerminateTransaction();
79 void Commit(bool needNewTx);
810 void Rollback(bool needNewTx);
911 }