[seasar-dotnet:900] [Quill][DBFlute]Transaction属性がないクラスでNullReferenceExceptionが発生
Takeshi Tsuzuki
[E-MAIL ADDRESS DELETED]
2008年 7月 24日 (木) 12:03:58 JST
都築と申します。
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は発生しないようですが、
少し分かりにくいような気がしましたので、ご報告させて頂きます。
以上です。
よろしくお願いいたします。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/seasar-dotnet/attachments/20080724/11ecd0bf/attachment.html>
seasar-dotnet メーリングリストの案内