[Seasar-user:21053] [tutorial][S2JDBC]挿入をコミットしたいのですが

鈴木正則 [E-MAIL ADDRESS DELETED]
2011年 10月 7日 (金) 16:47:47 JST


お世話になります。鈴木です。

Seasar2入門の本を見ながら
s2jdbc-tutorial のエンティティ挿入のサンプルについて、実行しています。
InsertMain.javaを実行すると、最後にロールバックされます。

この挿入をコミットしようと、rollback ⇒ commit に変更しました。下記★。

コンソールには、下記のように、コミットしましたのメッセージが出るのですが
2回、3回と繰返し実行しても、idは15のままです。
15、16、17と増えていく期待をしたのですが。

また、GetResultListMain.javaで、一覧を見ると、追加したはずの"test"はありません。

初歩的な質問ですが、コミットについて勘違いをしているでしょうか?

【コンソール】
DEBUG 2011-10-07 16:12:09,703 [main] トランザクションを開始しました。tx=[FormatId=4360, GlobalId=1317971529703/0, BranchId=]
DEBUG 2011-10-07 16:12:10,125 [main] 物理的なコネクションを取得しました
DEBUG 2011-10-07 16:12:10,125 [main] 論理的なコネクションを取得しました。tx=[FormatId=4360, GlobalId=1317971529703/0, BranchId=]
DEBUG 2011-10-07 16:12:10,125 [main] insert into EMPLOYEE (ID, NAME, SALARY, DEPARTMENT_ID, ADDRESS_ID, VERSION) values (null, 'test', null, null, null, 1)
DEBUG 2011-10-07 16:12:10,156 [main] call identity()
15
DEBUG 2011-10-07 16:12:10,171 [main] トランザクションをコミットしました。tx=[FormatId=4360, GlobalId=1317971529703/0, BranchId=]
DEBUG 2011-10-07 16:12:10,171 [main] 論理的なコネクションを閉じました。tx=[FormatId=4360, GlobalId=1317971529703/0, BranchId=]
DEBUG 2011-10-07 16:12:10,171 [main] 物理的なコネクションを閉じました


【修正したソース】
package tutorial.main;

import javax.transaction.UserTransaction;

import org.seasar.extension.jdbc.JdbcManager;
import org.seasar.framework.container.SingletonS2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;

import tutorial.entity.Employee;

public class InsertMain {

    public static void main(String[] args) throws Exception {
        SingletonS2ContainerFactory.init();
        try {
            JdbcManager jdbcManager = SingletonS2Container
                .getComponent(JdbcManager.class);
            UserTransaction ut = SingletonS2Container
                .getComponent(UserTransaction.class);
            ut.begin();
            try {
                test(jdbcManager);
            } finally {
                //ut.rollback();
                ut.commit(); //★修正箇所
            }
        } finally {
            SingletonS2ContainerFactory.destroy();
        }
    }

    public static void test(JdbcManager jdbcManager) {
        Employee emp = new Employee();
        emp.name = "test";
        jdbcManager.insert(emp).execute();
        System.out.println(emp.id);
    }
}


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