[seasar-dotnet:1438] Re: System.Transaction TransactionScopeの入れ子について

KIYOSUE Minoru [E-MAIL ADDRESS DELETED]
2009年 8月 31日 (月) 03:50:31 JST


小谷 様

お世話になります、清末@JMIです。

以下、インラインでご質問に回答申し上げます。

>>2の各メソッドにも同様に、<asspect pointcut="MethodB1">のように指定しています。
>
> この2の各メソッドにTransactionInterceptorを適用しない場合
> (aspectの指定をせず、入れ子にしない場合)も
> 同様にロールバックされないでしょうか?

ロールバックされませんでした。
メソッドにトランザクションをAOPしない場合のトランザクションは何が適応されますか?

> また、ファサードのメソッドを抜けた後、ログの方には
> 「トランザクションをコミットしました」と出ていたでしょうか。
> 「トランザクションをロールバックしました」と出ていたでしょうか。

ファサードのメソッド内で強制的にExceptionを発生させテストしております。
このため、ログには

Seasar.Extension.Tx.Impl.RequiredTxHandler [(null)] - トランザクションをロールバックしました

が表示されています。

また、RequiredTxHandler内で、System.Transaction.Current を取得し、Status,LocalIdentifier
等を確認いたしましたが、AOPでトランザクションを適用している場合は、同じトランザクションを
使用しています。


お手数をお掛けし大変恐縮に存じますが、よろしくお願い申し上げます。


--------------------------------------------------
From: "koyak" <[E-MAIL ADDRESS DELETED]>
Sent: Sunday, August 30, 2009 12:05 PM
To: <[E-MAIL ADDRESS DELETED]>
Subject: [seasar-dotnet:1437] Re:System.Transaction TransactionScopeの入れ子について

> 清末さん
>
> 小谷と申します。
>
> TransactonScopeについてあまり詳しくはないため
> 回答ではなく質問を返す形になってしまい、恐縮なのですが、
>
>>2の各メソッドにも同様に、<asspect pointcut="MethodB1">のように指定しています。
>
> この2の各メソッドにTransactionInterceptorを適用しない場合
> (aspectの指定をせず、入れ子にしない場合)も
> 同様にロールバックされないでしょうか?
>
> また、ファサードのメソッドを抜けた後、ログの方には
> 「トランザクションをコミットしました」と出ていたでしょうか。
> 「トランザクションをロールバックしました」と出ていたでしょうか。
>
>
> 2009年8月29日14:15 KIYOSUE Minoru <[E-MAIL ADDRESS DELETED]>:
>> いつも大変お世話になっております、清末@JMIです。
>> 先ほど、メーリングリスト登録外のアドレスから誤って送信してしまい大変申し訳ござい
>> ません。 再度投稿いたしますのでよろしくお願いいたします。
>>
>> 今回、ウェブサービスの構築をしております。
>> その中で、Tx.RequiredTxトランザクションを使用したトランザクション制御を以下の用に
>> 行おうとしておりますが、設定が悪いためかトランザクションが効きません。
>>
>> 1.ファサード層のメソッドにトランザクションを設定、
>> 2.ファサード層から、GetComponent()を使用して、ビジネスロジック層のクラスを
>>   呼び出す。
>> 3.2を必要なだけクラスを変えて呼び出す。
>> 4.3が全て正常終了の場合は、コミットがかかる用にする。
>>   (TransactionScopeを使用しているため、1つでもComplete()を通過していなければ
>>    ロールバックされると思うのですが。)
>>
>>
>> 1のファサード層のメソッドには、DICONで、<aspect pointcut="MethodA">のように
>> 指定しています。
>> 2の各メソッドにも同様に、<asspect pointcut="MethodB1">のように指定しています。
>>
>>
>> 実行時のログを見ると、「トランザクションを開始しました」のメッセージが出力されて
>> います。
>>
>>
>> しかしながら、何個目かの2のメソッドで例外が発生しても、その前に実行したメソッド
>> のDB更新がロールバックされません。
>> TransactionScopeを使用している場合、メソッド内から他のメソッドを呼び出し、その
>> 中にTransactionScopeがあれば、自動で入れ子になると思うのですが、AOPでトラン 
>> 
>> ザクションを取り込んだ場合には、入れ子にできないのでしょうか?
>>
>> ご多忙中大変恐縮に存じますが、入れ子にする方法があればご教示ください。
>>
>>
>> _______________________________________________
>> seasar-dotnet mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
> 


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