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

Tada Hideaki [E-MAIL ADDRESS DELETED]
2006年 7月 18日 (火) 17:22:12 JST


はじめまして。多田と申します。

S2 + S2Dao + SQL Server 2000 でトランザクション処理に困っています。
解決策がありましたらご教授お願いいたします。

環境は
s2-2.3.10
s2dao-1.0.35
SQL Server 2000
SQL ServerのJDBCドライバは、
Microsoft SQL Server 2005 JDBC Driver(sqljdbc.jar)Version 1.0
http://msdn.microsoft.com/data/ref/jdbc/
を使用しています。

上記環境にて、
Seasarのトランザクション(j2ee.requiredTx)をうまく適用できませんでした。

内容としては、テスト的に同じテーブルに連続で同じデータを挿入して

PRIMARY KEY 違反 → ロールバック → データ残らない

というようなもので、
ログ上は「トランザクションをロールバックしました」と出るのですが、
DB上にはデータが残ってしまいます。

コードは以下のようになっております。

//////////////////////////////////////////////////

@S2Dao(bean=User.class)
public interface UserDao {

    int insert(User user);
    int update(User user);
    int delete(User user);
    List<User> getAll();
    List<User> getUser(User user);
}

public interface TransactTestClient {

    void add();

}

public class TransactTestClientImpl implements TransactTestClient {

    private UserDao userDao;

    public TransactTestClientImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    public void add() {
        User user = new User();
        user.setName("testName");
        user.setPassword("testPass");
        user.setFullname("testFullName");
        userDao.insert(user);

        // ★ ↓ここで重複発生 ↑これ(1件目)がロールバックされるようにしたい ★
        userDao.insert(user);

    }

}

public class TransactTestMain {

    private static String PATH = "tranClient.dicon";

    public static void main(String[] args) {

        S2Container container = S2ContainerFactory.create(PATH);
        container.init();
        try {
            TransactTestClient cl =
                (TransactTestClient) container.getComponent(
TransactTestClient.class);
            cl.add();
        } finally {
            container.destroy();
        }
    }

}

/// tranClient.dicon /////////////////////////////

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
    "http://www.seasar.org/dtd/components23.dtd">
<components>
    <include path="tranDao.dicon"/>
    <include path="j2ee.dicon"/>
    <component class="XXX.TransactTestClientImpl">
        <arg>UserDao</arg>
        <aspect>j2ee.requiredTx</aspect>
    </component>
</components>

/// tranDao.dicon ////////////////////////////////

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.3//EN"
    "http://www.seasar.org/dtd/components23.dtd">
<components>
    <include path="dao.dicon"/>
    <component name="UserDao" class="XXX.UserDao">
        <aspect>dao.interceptor</aspect>
    </component>
</components>

/// データベース設定(抜粋) /////////////////////

<component name="xaDataSource"
    class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
    <property name="driverClassName">
        "com.microsoft.sqlserver.jdbc.SQLServerDriver"
    </property>
    <property name="URL">
        "jdbc:sqlserver://IP:Port;DatabaseName=DbName;SelectMethod=cursor"
    </property>
    <property name="user">"xxx"</property>
    <property name="password">"xxx"</property>
</component>

<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>

<component name="dataSource"
    class="org.seasar.extension.dbcp.impl.DataSourceImpl"/>

/// ログ /////////////////////////////////////////

[main] トランザクションを開始しました
[main] 物理的なコネクションを取得しました
[main] 論理的なコネクションを取得しました
[main] 論理的なコネクションを閉じました
[main] 論理的なコネクションを取得しました
[main] INSERT INTO USERS (password, fullname, name) VALUES ('testPass',
'testFullName', 'testName')
[main] 論理的なコネクションを閉じました
[main] 論理的なコネクションを取得しました
[main] INSERT INTO USERS (password, fullname, name) VALUES ('testPass',
'testFullName', 'testName')
[main] 論理的なコネクションを閉じました
[main] トランザクションをロールバックしました
[main] 物理的なコネクションを閉じました

//////////////////////////////////////////////////

何か設定が足りない・間違っている等ありますでしょうか?

アドバイス、よろしくお願いいたします。
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20060718/0b22b28b/attachment.html 


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