[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 メーリングリストの案内