[seasar-dotnet:901] Re: [Quill][DBFlute]Transaction属性がないクラスでNullReferenceExceptionが発生

koyak [E-MAIL ADDRESS DELETED]
2008年 7月 24日 (木) 18:13:09 JST


都筑さん

小谷です。

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

おっしゃる通り、現在はデータソースにTxDataSource、またはそれを継承したクラスを
使用し、かつQuillContainerに登録されているコンポーネントの中に
Transaction属性を使っているクラスがなければ
TransactionContextの設定などが行われないままになってしまっています。

次バージョン(1.3.10)ではこの問題について対応し、
Transaction属性が使われていない場合は既定の設定を行うように
修正されます。

次バージョンは数日以内のリリースとなるかと思いますが、
お急ぎの場合はお手数ですが
svn(https://www.seasar.org/svn/s2container.net/)上の
ソースコードをコンパイルしてご使用下さい。

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

2008/07/24 12:03 Takeshi Tsuzuki <[E-MAIL ADDRESS DELETED]>:
> 都築と申します。
> Quill(S2Container.NET 1.3.9)とDBFlute 0.7.6を利用させて頂き、
> データベースアクセスを行う作成しております。
>
> アプリケーション構成ファイルに、以下のようにデータソースの
> 設定を行い、データベースアクセス処理を行おうとしたところ、NullReferenceExceptionがthrowされました。
>
> -- アプリケーション構成ファイルの設定 --
>   <quill>
>     <dataSources>
>       <dataSource name="データソース名">
>         <provider>PostgreSQL</provider>
>         <connectionString>"接続文字列"</connectionString>
>         <class>Seasar.Extension.Tx.Impl.TxDataSource</class>
>       </dataSource>
>     </dataSources>
>   </quill>
> 原因は、TxDataSourceのGetConnection()が呼ばれた際、Contextがnullになっているため、
> Context.CurrentプロパティによりITransactionContextを取得しているためです。
>
> Contextを設定しているのは、クラスまたはメソッドにTransactionAttributeが付与されている
> 場合に、
> ・AspectBuilderのGetMethodInterceptor(TransactionAttribute)メソッドが呼び出される
> ・この中でDataSourceのSetupメソッドが呼ばれる
> ・SelectableDataSourceProxyWithDictionaryクラスのSetTransactionContextメソッドにおいて
>  DataSourceがTxDataSourceであればトランザクションコンテキストを設定する
> という処理になっておりました。
>
> そのため、どこかのクラスでTransaction属性が設定されていれば対象のクラスに
> Transaction属性がついていなくてもこのExceptionは発生しないようですが、
> 少し分かりにくいような気がしましたので、ご報告させて頂きます。
>
> 以上です。
> よろしくお願いいたします。
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
>


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