[Seasar-user:11364] Re: requiresNewTxにてcommit時に例外が発生した場合にRollbackされない

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 10月 31日 (水) 21:30:26 JST


小林 (koichik) です.

Date:    Wed, 31 Oct 2007 20:31:02 +0900
From:    鈴木 順 <[E-MAIL ADDRESS DELETED]>
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:11363] Re: requiresNewTxにてcommit時に例外が発生した場合にRollbackされない

> 環境はTOMCATでDataSourceはweb.xmlに定義してあります。

これが原因でしょう.
トランザクションマネージャと連携するには,
単なる DataSource ではなく XADataSource が
必要です.

対応としては,

1.Tomcat 側で XADataSource を設定する.
2.S2DBCP を使用する.
3.S2DBCP で Tomcat の DataSource を使用する.

などの方法が考えられます.

1.の場合は XADataSource に加えて JTA 実装も
Tomcat 側に定義することになります.
JOTM を使うことが多いようですが,自分は詳しく
ありません.

2.は Seasar2 の一般的な利用方法です.

3.は jdbc.dicon に Tomcat 側の DataSource を
利用する DataSourceXADataSource を定義します.
# XADataSourceImpl は不要になります.
ConnectionPoolImpl の maxPoolSize を 0 にすることで,
S2DBCP としてはコネクションプールを行わなくなります
(トランザクションマネージャとの連携のために使用する).

<component name="xaDataSource"
    class="org.seasar.extension.dbcp.impl.DataSourceXADataSource">
  <property name="dataSourceName">"java:comp/env/jdbc/DataSource"</property>
</component>
<component name="connectionPool"
    class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
  <property name="maxPoolSize">0</property>
  ...
</component>


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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