[seasar-dotnet:518] Re: 複数テーブルのDaoで自動生成した Insert、Update、Delete文のトランザクション制御

KIYOSUE Minoru [E-MAIL ADDRESS DELETED]
2007年 6月 26日 (火) 21:51:47 JST


馬塚様、早々のご回答大変ありがとうございます。

> S2AOPのサイトに
>  「pointcutを指定しない場合は、 コンポーネントが実装している
>  インターフェースのすべてのメソッドが対象になります」
> とあります。
> http://s2container.net.seasar.org/ja/aop.html#AOPExplanationFile
>
> トランザクションの対象としたいメソッドのみをaspectに指定する必要が
> あると思います。

と思い 「pointcut」を指定してみましたが、結果はトランザクションがまったく起
動されなく
なります。

Seasar.Framework.Aop.Impl.AspectImpクラスには、Pointcutのセッタが用意されて
います
が、一方、Seasar.Extension.Tx.Impl.LocalRequiredTxHandlerクラスには、
Pointcutのセッタ
がありません。

全体を見たわけではないのですが、LocalRequiredTxHandlerクラスにもPointcutの利
用が
可能なのでしょうか?

S2Container.net-1.2.9を使用しております。


> 条件に応じてINSERTやUPDATEを行うメソッドを1つ作り、
> 該当メソッドのみをaspectに指定すれば良いと思います。
> -----------------------------
> [IS2daotestServiceImpl.cs]
> public void Exec()
> {
>   xxxDao.Insert();
>   xxxDao.Update();
> }
> -----------------------------
> [dicon]
> <aspect pointcut="Exec">LocalTx.RequiredTx</aspect>
> -----------------------------
> Execメソッド内で例外が発生すれば自動的にロールバックされます。

ご指摘の通りの作りをしているんですが・・・・
残念ながら、先のメールの結果なんです。


> log4netの設定で、<root>と<logger name="Seasar.Extension.ADO">など
> それぞれでappenderの記述をしていませんでしょうか?
> 下記のようになっていると2件ずつ出力されます。

おっしゃる通りでした。
定義を移動(先日の別の質問でDaoのDLLがロードできないの際)、復活させて
おりました。

思い込みがあって自身で仕込んでいたとは・・・・
お手数をお掛けし恐縮です。



----- Original Message ----- 
From: "Yusuke Mazuka" <[E-MAIL ADDRESS DELETED]>
To: <[E-MAIL ADDRESS DELETED]>
Sent: Tuesday, June 26, 2007 7:42 PM
Subject: [seasar-dotnet:517] Re:複数テーブルのDaoで自動生成した Insert、
Update、Delete文のトランザクション制御


> お世話になっております。
> 馬塚と申します。
>
> いつも質問してばかりなのでたまには分かる範囲で回答してみます(^^)
>
> >1.SELECT文に対してもトランザクション・コミットが適用されているのはなぜか
>
> diconファイルの指定で、
>  <aspect>LocalTx.RequiredTx</aspect>
> としているためではないでしょうか?
>
> S2AOPのサイトに
>  「pointcutを指定しない場合は、 コンポーネントが実装している
>  インターフェースのすべてのメソッドが対象になります」
> とあります。
> http://s2container.net.seasar.org/ja/aop.html#AOPExplanationFile
>
> トランザクションの対象としたいメソッドのみをaspectに指定する必要が
> あると思います。
>
> >2.IS2daotestServiceImpl実装クラスで1トランザクションとしたいが、DAOの
> > メソッド単位にコネクションの取得→トランザクション・スタート→自動生成
> > SQLの実行(または、外部SQLの実行)→トランザクション・コミット→論理コネ
> > クションのクローズとなってしまう。
>
> 条件に応じてINSERTやUPDATEを行うメソッドを1つ作り、
> 該当メソッドのみをaspectに指定すれば良いと思います。
> -----------------------------
> [IS2daotestServiceImpl.cs]
> public void Exec()
> {
>   xxxDao.Insert();
>   xxxDao.Update();
> }
> -----------------------------
> [dicon]
> <aspect pointcut="Exec">LocalTx.RequiredTx</aspect>
> -----------------------------
> Execメソッド内で例外が発生すれば自動的にロールバックされます。
>
> >すみません、表題とは異なるのですが、ログが2行づつでるのはなぜでしょうか
>
> log4netの設定で、<root>と<logger name="Seasar.Extension.ADO">など
> それぞれでappenderの記述をしていませんでしょうか?
> 下記のようになっていると2件ずつ出力されます。
> -----------------------------
> <root>
>   <level value="DEBUG" />
>   <appender-ref ref="TraceAppender" />
> </root>
> <logger name="Seasar.Extension.ADO">
>   <level value="DEBUG" />
>   <appender-ref ref="TraceAppender" />
> </logger>
> -----------------------------
>
>
> もし外していたらすいません。
>
> 以上よろしくお願い致します。
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>



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