[seasar-dotnet:1115] Re: [Quill]インターフェースに[Transaction]属性を指定しても有効にならない

koyak [E-MAIL ADDRESS DELETED]
2008年 11月 1日 (土) 14:24:29 JST


宮城さん

小谷です。

インターフェースのTransaction属性を設定した場合に
ロールバック等が行われていない問題は
恐らく「EmployeeLogic」の方にTransaction属性を
設定していただければ正常にトランザクションが
行われると思います。

添付していただいたソースコードを拝見したところ、
インターフェースの属性の記述が

>[Implementation(typeof(EmployeeLogic))]
> [Transaction]
> public interface IEmployeeLogic

となっています。
QuillContainerがアスペクトを適用しようとする対象は
この場合インターフェースではなく
Implementation属性の引数に指定されている実装クラスの
「EmployeeLogic」になります。

EmployeeLogicの方にはTransaction属性は
設定されていないためトランザクション設定が行われず、
お知らせいただいた現象が発生しているものと思われます。

そのため、インターフェースに設定したTransaction属性が
使用されるのは以下の条件を満たしている場合のみになります。
・引数なしでImplementation属性を使用
・S2Dao属性、またはinvoke.Proceedを呼び出さないインターセプターを適用

ドキュメントの方には上記の記述が抜けていました。
申し訳ありません。

2008/11/01 3:06 Ryo Miyagi <[E-MAIL ADDRESS DELETED]>:
> コミッタの宮城です。
>
> QuillとS2Daoを使用してDBにデータをINSERTするプログラムを作成したところ
> インターフェースに[Transaction]属性を指定しても
> トランザクションが開始されない現象が発生しております。
> 詳細は、次になります。
> ・ログに「トランザクションを開始しました」のメッセージが表示されない。
> ・[Transaction]属性が適用されている筈のメソッドの途中で例外を発生させても
> DBにInsertしたデータがロールバックされない。
>
> クラスに[Transaction]属性を指定した場合、
> トランザクションは開始されます。
> ・ログに「トランザクションを開始しました」のメッセージが表示される。
> ・ログに「トランザクションをコミットしました」のメッセージが表示される。
> ・[Transaction]属性が適用されている筈のメソッドの途中で例外を発生すると
> DBにInsertしたデータがロールバックされる。
>
> ドキュメントには、
> >Transaction属性はクラス、インターフェース、メソッドに対して付けることができます。
> とあるので、トランザクションが有効になると思ったのですが、
> 何か設定が足りないのでしょうか。
>
> 原因を追い切れていないのですが、
> VisualStudio2008で作成した再現ソースの一式を添付いたしますので、
> 確認していただけないでしょうか。
>
> なお、ファイルサイズ軽減のためQuil関連のDLLを削除しているので
> お手数ですが、「lib」ディレクトリ下に次のQuil関連のDLL一式のコピーをお願いいたします。
> (Castle.DynamicProxy.dll, log4net.dll, Seasar.Dao.dll, Seasar.dll,
> Seasar.DynamicProxy.dll, Seasar.Quill.dll)
>
> また、DBは、
> S2Container.NETのテスト用のDBをそのまま使用しています。
> 動かない場合、App.configのDB接続文字列の修正をお願いいたします。
>
>
> 検証環境は、次になります。
> ・OS:Windows Server 2003 SP2
> ・言語:C# (.NET Framework 3.5SP1)
> ・開発環境:VisualStudio 2008 SP1
> ・DB:SQL Server 2008
> ・S2Container.NET 1.3.12
>
>
> 以上、よろしくお願いいたします。
>
> --
> Ryo Miyagi
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>


seasar-dotnet メーリングリストの案内