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

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2011年 10月 7日 (金) 17:01:39 JST


小林 (koichik) です.

s2jdbc-tutorial では HSQLDB の初期データが src/test/resources/data/
以下に用意されていて、S2Container の初期化時に毎回それを読み込んで
いるので、次に実行したときは前にインサートしたデータが存在しない
だけだと思います。

HSQLDB の終了時にデータを保存するように設定を変更するか、
別プロセスとして実行 (他の DBMS でも構いません) すれば、
インサートしたデータも見えると思います。


Date: Fri, 7 Oct 2011 16:47:47 +0900
From: 鈴木正則 <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:21053] [tutorial][S2JDBC]挿入をコミットしたいのですが

> お世話になります。鈴木です。
> 
> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user

--
{
  name: "Koichi Kobayashi",
  mail: "[E-MAIL ADDRESS DELETED]",
  blog: "http://d.hatena.ne.jp/koichik/",
  twitter: "@koichik"
 }



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