[seasar-dotnet:509] Re: 自動生成 Insert、Update、Delete文のトランザクションが効かない
Hiroaki Fujii
[E-MAIL ADDRESS DELETED]
2007年 6月 16日 (土) 02:47:21 JST
コミッタの藤井です。
IS2daotestServiceインターフェイスのメソッドがどうなっているかよく
分かりませんが、無ければ作っていただいて、そのメソッドに対して、
トランザクションをかけてみてください。
そうすれば、そのメソッドを実行中トランザクションがかかります。
例えば、IS2daotestServiceにInsertメソッドがあるとして、
diconファイルの中で
<component
class="NtkProjectCore.bl.winapp.s2daotest.impl.IS2daotestServiceImpl">
<aspect pointcut="Insert">Ex.LocalRequiredTx</aspect>
</component>
という感じで記述します。
私は、Propertyインジェクションを使うので、diconファイルの記述量が
少ないですが。
よければ、WindowsFormのサンプルを見ていただくと参考になるかも
しれません。
KIYOSUE Minoru さんは書きました:
> いつもお世話になっております、清末と申します。
>
> 先日、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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
seasar-dotnet メーリングリストの案内