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

Ryo Miyagi [E-MAIL ADDRESS DELETED]
2008年 11月 3日 (月) 01:09:55 JST


小谷さん

宮城です。

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

説明していただいたおかげで、勘違いしていたことに気づきました。

引数なしでImplementation属性を使用したときに
QuillContainerがアスペクトを適用した後で
DynamicAopProxyがクラスの生成を行うので
てっきり、インターフェースに設定したTransaction属性が
インターフェースを実装したクラスに継承されると勘違いしたのですが、
インターフェースからはクラスに継承されないですね。

質問に回答していただきありがとうございました。

2008/11/01 14:24 koyak <[E-MAIL ADDRESS DELETED]>:
> 宮城さん
>
> 小谷です。
>
> インターフェースの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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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