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

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2006年 7月 18日 (火) 18:30:25 JST


小林 (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 メーリングリストの案内