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