[seasar-dotnet:823] Re: Quillを使ったときのS2Daoについて

koyak [E-MAIL ADDRESS DELETED]
2008年 5月 6日 (火) 14:51:27 JST


藤井さん

小谷です。

>  で、テストメソッドに[Test, Quill(Tx.Rollback)]属性をつけて実行すると
>  並列トランザクションのエラーになります。
>  QuillTestCase側と対象クラスの両方でTransactionContextが実行されるから
>  だと思います。
>  テストメソッドに[Test, Quill(Tx.NotSupported)]属性をつけるとエラーは
>  起きませんが、それだとテスト実行後にロールバックしません。

ご指摘ありがとうございます。

確かにTransaction属性をもつクラスがインジェクションの対象になっている
テストでTx.Rollbackを使うとトランザクションの管理がおかしくなりますね。
(私の環境(SQLServer2005)ではトランザクションが二つ作られて
ロールバックが行われていないという動きでした)

QuillTestCaseとTransaction属性が指定されているクラスとで
別々のTransactionContextが使われてしまっているようです。

対応を考えさせていただきたいと思います。

2008/05/05 1:47 Hiroaki Fujii <[E-MAIL ADDRESS DELETED]>:
> 藤井です。
>
>  小谷さん、返事が遅くなりました。
>
>  早い話がチョンボをしておりました。
>  [Transaction]属性をつける先を勘違いしてました。
>  インジェクション対象のクラスにつけるのではなく、interfaceの方につけて
>  おり、指摘を受けて、気がつきました。
>  私は馬鹿なことをしてました(w
>
>  ところで、
>  > QuillTestCaseの場合はテストメソッドに標準でトランザクションを
>  > かけるためにQuillTestCase側でTransactionContextなどの設定を行って
>  > います。
>  と、言われて、なるほどと思った点が一つあります。
>  今までQuillTestCase側でテストメソッドに[Test, Quill]属性をつけていて
>  うまくいっていましたが、うまくいっていた理由は対象クラスに[Transaction]
>  属性がついていないからとご指摘の点よりわかりました。
>
>  で、テストメソッドに[Test, Quill(Tx.Rollback)]属性をつけて実行すると
>  並列トランザクションのエラーになります。
>  QuillTestCase側と対象クラスの両方でTransactionContextが実行されるから
>  だと思います。
>  テストメソッドに[Test, Quill(Tx.NotSupported)]属性をつけるとエラーは
>  起きませんが、それだとテスト実行後にロールバックしません。
>  これは仕様上仕方がないことなのでしょうかね。
>
>
>  koyak さんは書きました:
>
>
> > 藤井さん
>  >
>  > 小谷です。
>  >
>  > Quillのインジェクションの対象となっているクラスに[Transaction]属性が
>  > 使われているクラスはありますでしょうか。
>  >
>  > [Transaction]属性がどこか一つでも使われていれば
>  > TransactionContextを生成してTxDataSourceにセットする、ということを
>  > 行っています。
>  >
>  > QuillTestCaseの場合はテストメソッドに標準でトランザクションを
>  > かけるためにQuillTestCase側でTransactionContextなどの設定を行っています。
>  >
>  > [Transaction]属性が必要な理由はトランザクション分離レベルなどの
>  > 設定をメソッドごとなどでも指定できるようにするため、なのですが
>  > TxDataSourceが使われていた場合は予めデフォルトの設定を適用しておいた方が
>  > いいかもしれませんね。
>  >
>  > 2008/05/02 2:33 Hiroaki Fujii <[E-MAIL ADDRESS DELETED]>:
>  >> 藤井です。
>  >>
>  >>  すいません。
>  >>  QuillTestCaseのサブクラスで実行したときは問題ないのですが、WindowsFormの
>  >>  中から実行したときにどうもTransactionContextオブジェクトがnullのようで、
>  >>  コネクションが取得できず、NullReferenceエラーになります。
>  >>
>  >>  つぎのインスタンスが標準では生成されるようなことがマニュアルには記載され
>  >>  ています。
>  >>  ・Seasar.Extension.Tx.Impl.TransactionContext
>  >>  ・Seasar.Extension.Tx.Impl.LocalRequiredTxHandler
>  >>  ・Seasar.Extension.Tx.TransactionInterceptor
>  >>  このTrasactionContextオブジェクトがセットされることはないのでしょうか?
>  >>
>  >>  下記が、設定したapp.configの中身です。何か設定が抜けていたら、教えて
>  >>  ください。
>  >>  この設定ではQuillTestCaseを使ったときは問題ありません。
>  >>  Accessのファイルに、OleDbで接続しています。
>  >>  DataSourceの設定が取得し、設定されていることは確認しました。
>  >>
>  >>   <quill>
>  >>     <dataSources>
>  >>       <dataSource name="ds">
>  >>         <provider>OleDb</provider>
>  >>         <connectionString>"Provider=Microsoft.Jet.OLEDB.4.0;User
>  >>  ID=admin;Data Source=./sample.mdb"</connectionString>
>  >>         <class>Seasar.Extension.Tx.Impl.TxDataSource</class>
>  >>       </dataSource>
>  >>     </dataSources>
>  >>     <assemblys>
>  >>       <assembly>Seasar</assembly>
>  >>       <assembly>Seasar.Dao</assembly>
>  >>       <assembly>Seasar.Windows</assembly>
>  >>
>  >>       <assembly>S2FormExample.Logics</assembly>
>  >>     </assemblys>
>  >>   </quill>
>  >>  _______________________________________________
>  >>  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 mailing list
>  [E-MAIL ADDRESS DELETED]
>  https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


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