[Seasar-user:12536] Seasar2トランザクションロールバックについて

Tidever Chenglong Tian [E-MAIL ADDRESS DELETED]
2008年 1月 17日 (木) 10:41:39 JST


seasar-userのメーリングリストを使うことができませんので、改めて一通を送信します。

tomcat6.0
Seasar2.3.19
SqlServer2005
JDK1.6

Seasar2 はtomcatサーバーでSqlServerを接続する時、一つのServiceで2件のUpdate文を実行すると、一番目は成功するが、2番目は失敗する。
ログで、「トランザクションをロールバックしました」というメッセージを出したが、DBで一番目のUpdate文は更新した内容が依然として存在
していて、正常にロールバックしない。これは何故か

グは下記の通り。
2008/01/10 09:26:27.812 [DEBUG] トランザクションを開始しました
2008/01/10 09:26:27.984 [DEBUG] UPDATE dbo.test
SET USER_PWD = 'tcl'
WHERE USER_NO = '15'
2008/01/10 09:26:28.375 [DEBUG] 物理的なコネクションを取得しました
2008/01/10 09:26:28.375 [DEBUG] 論理的なコネクションを取得しました
2008/01/10 09:26:28.531 [DEBUG] 論理的なコネクションを閉じました
2008/01/10 09:26:28.531 [DEBUG] 物理的なコネクションを閉じました
2008/01/10 09:26:28.609 [DEBUG] UPDATE dbo.test1
SET USER_PWD = 'abc'
WHERE USER_NO = '16'
2008/01/10 09:26:28.625 [DEBUG] 物理的なコネクションを取得しました
2008/01/10 09:26:28.625 [DEBUG] 論理的なコネクションを取得しました
2008/01/10 09:26:28.625 [DEBUG] 論理的なコネクションを閉じました
2008/01/10 09:26:28.625 [DEBUG] 物理的なコネクションを閉じました
2008/01/10 09:26:28.625 [DEBUG] トランザクションをロールバックしました
2008/01/10 09:26:28.671 [ERROR] 
org.seasar.framework.exception.SQLRuntimeException:
[ESSR0071]SQLで例外(ErrorCode=208, SQLState=42S02)が発生しました。理由は
org.seasar.framework.exception.SSQLException: [ESSR0072]SQLで例外(SQL=[UPDATE 
dbo.test
....

j2ee.dicon
--------------------------------
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
<components namespace="j2ee">
<!-- Seasar2トランザクションマネージャ -->
<component name="transactionManager"
class="org.seasar.extension.jta.TransactionManagerImpl"/>
<!-- トランザクション属性 -->
<component name="requiredTx" 
class="org.seasar.extension.tx.RequiredInterceptor">
<initMethod name="addRollbackRule">
<arg>@[E-MAIL ADDRESS DELETED]</arg>
</initMethod>
</component>
<component name="basicResultSetFactory"
class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/>
<component name="basicStatementFactory"
class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/>
<!-- SQL Server 2005 -->
<component name="sqlConnection" 
class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
<property 
name="driverClassName">"com.microsoft.jdbc.sqlserver.SQLServerDriver"</property>
<property 
name="URL">"jdbc:microsoft:sqlserver://192.168.1.216:1433;DatabaseName=test"</property>
<property name="user">"sa"</property>
<property name="password">"sa"</property>
</component>
<component name="sqlConnectionPool" 
class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
<property name="timeout">600</property>
<property name="maxPoolSize">5</property>
<property name="allowLocalTx">true</property>
<property name="XADataSource">sqlConnection</property>
<destroyMethod name="close"/>
</component>
<component name="dataSource" 
class="org.seasar.extension.dbcp.impl.DataSourceImpl">
<arg>sqlConnectionPool</arg>
</component>
</components>


test.dicon
--------------------------------
<components>
<!--Aspect auto regist. -->
<component class="jp.co.business.service.impl.testServiceImpl">
<aspect>j2ee.requiredTx</aspect>
</component>
</components>


testServiceImpl.java
--------------------------------
public class testServiceImpl extends PagerService implements testService {
private testDao dao;
public void setTestDao(testDao dao) {
this.dao = dao;
}
public int updatePassWord(String strNo, String strPwd) {
int iRtnValue = -1;
iRtnValue = dao.updatePassWord("15", "tcl");
iRtnValue = dao.updatePassWord1("16", "abc");
return iRtnValue;
}

================================
小林さん

ご回答大変ありがとうございました。
「jdbc.dicon」ファイルが既に削除しましたが、現在も二つの「コネクションプール」が作成されなく、
正常にロールバックできない状態です。
「物理的なコネクションを閉じました」と言う原因でしょうか。どのように解決するほうがいいでしょうか。 
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20080117/f73bb53a/attachment-0001.html 


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