[Seasar-user:4117] Re: SQL Server2000のトランザクションロールバックについて → 解決

Tada Hideaki [E-MAIL ADDRESS DELETED]
2006年 7月 18日 (火) 20:04:22 JST


小林 (koichik) 様

早速の返信、ありがとうございます。
結果から申しますと、頂いた助言を元にdicon設定を見直したら解決しました!

SQL Server特有の問題とかでなくて良かったです。

一応、誰かの参考までに確認・修正内容を記述しておきます。

////////////////////////////////////////

1.設定の確認

データベース設定は
j2ee.diconではなく、jdbc.diconというdiconを作成してそちらに記述していました。
そして、j2ee.diconからjdbc.diconをincludeしていました。
かつ、jdbc.diconの方でtransactionManagerを定義していました。
(定義しないとエラーになってしまうから)

見事なまでに小林さんの予想通りです。

#いずれSeasar2.4にバージョンアップすべく
#予防線を張ってみたのがアダになったようです・・・

2.allowLocalTx プロパティの値を false にして実行

Exception in thread "main"
org.seasar.framework.exception.SIllegalStateException:
[ESSR0311]トランザクションが開始されていません

の例外が発生 → JTAトランザクションが開始されていない事が判明

3.jdbc.diconからj2ee.diconをincludeするように変更

j2ee.diconをincludeしていた他のdiconファイルも修正。

4.再テスト

SIllegalStateExceptionが発生しなくなった。
きちんとロールバックされるようになった。

→ 解決!

////////////////////////////////////////

diconに対する理解が足らなかったようで恐縮です。
ありがとうございました。


On 7/18/06, Koichi Kobayashi <[E-MAIL ADDRESS DELETED]> wrote:
>
> 小林 (koichik) です.
>
> Date:    Tue, 18 Jul 2006 17:22:12 +0900
> From:    "Tada Hideaki" <[E-MAIL ADDRESS DELETED]>
> To:      [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:4112] SQL Server2000のトランザクションロールバックについて
>
> > 上記環境にて、
> > Seasarのトランザクション(j2ee.requiredTx)をうまく適用できませんでした。
> >
> > 内容としては、テスト的に同じテーブルに連続で同じデータを挿入して
> >
> > PRIMARY KEY 違反 → ロールバック → データ残らない
> >
> > というようなもので、
> > ログ上は「トランザクションをロールバックしました」と出るのですが、
> > DB上にはデータが残ってしまいます。
>
> 掲載して頂いた情報には問題があるように見えませんし,
> ログを見る限り正しく動作しているように見えるのに不思議ですね.
>
> 気になる点といえば,コネクションプールの設定が
>
> > /// データベース設定(抜粋) /////////////////////
>
> となっているのですが,これは j2ee.dicon に記述していますか?
> # ここだけ「j2ee.dicon」となっていなかったので.
>
> もし j2ee.dicon とは別のファイルに記述しているのであれば,
> その dicon ファイルの中で j2ee.dicon をインクルード
> しているでしょうか?
>
> もし,コネクションプールの設定が j2ee.dicon とは別の
> dicon ファイルに記述されていて,それが j2ee.dicon を
> インクルードしておらず,そこでも TransactionManager を
> 定義している場合,j2ee.requiredTx によって開始される
> トランザクションとは連携しなくなってしまうため,
> 文単位トランザクションになってしまいます.
>
> > <component name="connectionPool"
> >     class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
> >     <property name="timeout">600</property>
> >     <property name="maxPoolSize">3</property>
> >     <property name="allowLocalTx">true</property>
> >     <destroyMethod name="close"/>
> > </component>
>
> 上の設定の allowLocalTx プロパティの値を false に
> 設定すると,JTA トランザクションが開始されていない
> (文単位トランザクションになる) 状況ではコネクションを
> 取得できずに例外がスローされるので,試して頂けないでしょうか.
>
>
> --
> <component name="koichik">
>     <property name="fullName">"Koichi Kobayashi"</property>
>     <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
>     <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
> </component>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://www.seasar.org/mailman/listinfo/seasar-user
>

-- 
」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」
多田秀章
[E-MAIL ADDRESS DELETED]
」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20060718/4c453d36/attachment.html 


Seasar-user メーリングリストの案内