[Seasar-user:17728] [S2JDBC]JNDIで設定されたDataSourceを利用した場合の挙動

IZUNO Tadashi [E-MAIL ADDRESS DELETED]
2009年 6月 12日 (金) 13:42:10 JST


いづのです。

JNDIで設定されたDataSourceを利用した場合と、jdbc.diconで設定したDataSourceを利用する場合で挙動が異なるので教えてください。


データベースのトランザクションはAction単位に設定しています。
Actionでデータベースを更新する2つのServiceを呼んでるんですが、Aサービスで処理した後、Bサービスで例外が発生したとき、ログには、ロールバックしたというログが出力されていますが、Aサービスで更新したAテーブルがロールバックされない状況です。

jdcb.diconにデータベース情報を記載した場合は、正しくAテーブルもロールバックされています。


何か設定等に問題があるのでしょうか。
(データベース情報をサーバで設定したいのは、アプリケーションサーバ毎にデータベースが異なる為です。)

------------------------
ロールバックログ内容
------------------------
2009-06-12 10:47:39,406 [DEBUG][http-8080-1]
トランザクションをロールバックしました。tx=[FormatId=4360, GlobalId=1244771239609/8,
BranchId=]

------------------------
jdbc.dicon
------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR2.1//DTD S2Container//EN"
	"http://www.seasar.org/dtd/components21.dtd">
<components namespace="jdbc">
	<include path="jta.dicon"/>

	<component name="DataSource"
		class="javax.sql.DataSource">
		@[E-MAIL ADDRESS DELETED]("java:comp/env/jdbc/test")
	</component>
</components>

------------------------
server.xml(一部)
------------------------
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
          type="org.apache.catalina.UserDatabase"
          description="User database that can be updated and saved"
          factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml" />

<Resource
  name="jdbc/test"
  type="javax.sql.DataSource"
  password="test"
  driverClassName="oracle.jdbc.driver.OracleDriver"
  maxIdle="2"
  maxWait="5000"
  validationQuery="select 1 from dual"
  username="test"
  url="jdbc:oracle:thin:@192.168.0.xxx:1521:test"
  maxActive="4"/>
</GlobalNamingResources>

<Context path="/test" docBase="/opt/data/test">
<ResourceLink global="jdbc/test" name="jdbc/test" type="javax.sql.DataSource"/>
</Context>


環境は以下の通りです。
seasar:2.4.28
tomcat:6.0.18
oracle:11g


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