[seasar-dotnet:508] 自動生成 Insert、Update、Delete文のトランザクションが効かない

KIYOSUE Minoru [E-MAIL ADDRESS DELETED]
2007年 6月 16日 (土) 02:26:04 JST


いつもお世話になっております、清末と申します。

先日、S2Dao.dllがロードされない件は無事解消し、実装を進めておりましたが、
今度は、自動生成のSQL(Insert/Update/Delete)で、トランザクションが効かな
い状況となってしまいました。

----- ado.diconの定義 --------->>
<components namespace="ado">

  <!--  
====================================================================== -->
  <!-- .NET Framework Data Provider for SQL Server を使用する場合に必要です。 
 -->
  <!--  
====================================================================== -->

  <component name="SqlClient" class="Seasar.Extension.ADO.DataProvider">
    <property 
name="ConnectionType">"System.Data.SqlClient.SqlConnection"</property>
    <property 
name="CommandType">"System.Data.SqlClient.SqlCommand"</property>
    <property 
name="ParameterType">"System.Data.SqlClient.SqlParameter"</property>
    <property 
name="DataAdapterType">"System.Data.SqlClient.SqlDataAdapter"</property>
  </component>
  <component name="DataSource" 
class="Seasar.Extension.Tx.Impl.TxDataSource">
    <property name="DataProvider">SqlClient</property>
    <property 
name="ConnectionString">"Server=naga\\SQLEXPRESS;database=NTKDB;Integrated 
Security=SSPI"</property>
  </component>

  <!-- ローカルトランザクション用のインターセプターで使用します。 -->
  <component class="Seasar.Extension.Tx.Impl.TransactionContext" />

</components>

----- ado.diconの定義 ---------<<

----- Tx.diconの定義 --------->>

<components namespace="Tx">
  <include path="dicon/ado.dicon" />

  <component name="TransactionStateHandler" 
class="Seasar.Extension.Tx.Impl.TransactionStateHandler" />

  <component name="RequiredTx" 
class="Seasar.Extension.Tx.TransactionInterceptor">
    <arg><component class="Seasar.Extension.Tx.Impl.RequiredTxHandler" 
/></arg>
  </component>

</components>


----- Tx.diconの定義 ---------<<

利用しているDiconの定義

  <include path="dicon/aop.dicon"     />
  <include path="dicon/ado.dicon"     />
  <include path="dicon/s2dao.dicon"   />
  <include path="dicon/dao.dicon"     />
  <include path="dicon/daoex.dicon"   />
  <include path="dicon/LocalTx.dicon" />
  <include path="dicon/Tx.dicon"      />

  <!--  
===================================================================== -->
  <!--                           s2daotestサービ -->
  <!--  
===================================================================== -->
  <component name="IS2daotestService"
            class="NtkProjectCore.bl.winapp.s2daotest.impl.IS2daotestServiceImpl">
    <aspect>Tx.RequiredTx</aspect>
    <aspect>aop.traceInterceptor</aspect>
    <!-- 担当者マスタDAO(基本) -->
    <arg>dao.INttb01ChargePersonDao</arg>
    <!--コンスタントマスタDAO(基本)-->
    <arg>dao.INttb09ConstantDao</arg>
  </component>

Daoの定義

    <Bean(GetType(Nttb09ConstantEntity))> _
    Public Interface INttb09ConstantDao

        ''' <summary>
        '''    INSERT
        ''' </summary>
        ''' <param name="vo">バリューオブジェクト。 </param>
        ''' <returns> 処理対象件数。 </returns>
        Function Insert(ByVal vo As Nttb09ConstantEntity) As Integer

        ''' <summary>
        '''    UPDATE
        ''' </summary>
        ''' <param name="vo">バリューオブジェクト。 </param>
        ''' <returns> 処理対象件数。 </returns>
        Function Update(ByVal vo As Nttb09ConstantEntity) As Integer

        ''' <summary>
        '''    DELETE
        ''' </summary>
        ''' <param name="vo">バリューオブジェクト。 </param>
        ''' <returns> 処理対象件数。 </returns>
        Function delete(ByVal vo As Nttb09ConstantEntity) As Integer


s2daotestサービス 側での実行

            For Each objEntity In list

                                 ~~~~ *1
                Dim intCount As Integer

                intCount = _Nttb09ConstantDao.Insert(objEntity)
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *2

                If intCount <> 1 Then
                    'エラー
                    strMsgID = "EEE"
                End If
                intRtnCount += intCount
            Next

テストで、list(*1)に同じプライマリ・キー値を持つEntityをセットし、呼び出しております。
2重登録エラーが *2 で発生しますが、1件目は登録されてしまいます。

トランザクションが効いていれば、1件目もロールバックされるものと思いますが
何の指定に誤りがあるのでしょうか。

また、トランザクションの状態を知る方法(トランザクションがスタートしているかなど)が
ございますでしょうか。

長文になり大変申し訳ございません。
どうぞご教授下さいますようお願い申し上げます。



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