[Seasar-user:5156] [S2Dao] 別スレッドトランザクションのデータの読み込み

小林正和 [E-MAIL ADDRESS DELETED]
2006年 11月 16日 (木) 17:47:45 JST


masapon1967です。

java.util.TimerTaskを使用して、データベースにデータを書き込むプログラムをテストしているのですが、
テーブルからデータを読み込むことができません。

TimerTaskで実行されるのがテストケースとは別のスレッドのためだとは思うのですが、どうすればよいかが
分かりません。解決方法がお分かりの方がいらっしゃれば、お教え願います。

-S2 2.3.14
-S2Dao 1.0.37
-S2Dao tiger 1.0.35
-MySQL Connection/J 5.0.3
-MySQL Server 5.0.24a

table FooTable
- id int
- name varchar

//エンティティクラス
@Bean(table = "FooTable")
public class Foo{
  private int id;
  private String name;
  @Id(value = IdType.IDENTITY)
  public void setId(int id){
    this.id = id;
  }
  //以下id, nameのsetter, getter
}

//DAOクラス
@S2Dao(bean = Foo.class)
public interface FooDao{
  @Arguments("id")
  Foo get(int id);
}

//タスククラス
public class FooTask extends TimerTask{
  private FooDao fooDao;
  public FooTask(FooDao fooDao){
    this.fooDao = fooDao;
  }
  public void run(){
    Foo foo = fooDao.get(1);  //←ここで、fooにnullがセットされる。
    if(foo == null){
      throw new Exception();
    }
  }
}

public interface Bar{
  void execute();
}

//タスク設定のクラス
public class BarImpl implements Bar{
  private FooDao fooDao;
  public BarImpl(FooDao fooDao){
    this.fooDao = fooDao;
  }
  public void execute(){
    FooTask task = new FooTask(fooDao);
    Timer timer = new Timer();
    timer.schedule(task, 1000); //1秒後にFooTaskのrunが実行される。
  }
}

//テストクラス
public class BarImplTest extends S2TestCase{
  private Bar bar;
  protected void setUp() throws Exception{
    super.setUp();
    include("test.dicon");
  }
  public final void testExecuteTx(){
    // UT0001Prepare.xlsにはFooTableのワークシートにid = 1, name = "ABC"という行が登録されている
    readXlsWriteDb(" UT0001Prepare.xls");
    bar.execute(); //FooTask.run()でFooオブジェクトが取得できないため、例外が発生する。
}

test.diconにはBarDaoとBarImplが登録されていて、BarDaoにはdao.interceptorを、
BarImplにはj2ee.requiredTxが
織り込まれています。
testExecute(Tx)としているため、ここで開始されたトランザクションと、FooTaskが実行されるスレッドの
トランザクションが異なるのだと思います。
実際、testExecuteとTxを外して実行したところ、FooTaskのrunメソッドで、Fooオブジェクトが読み込まれます。
解決方法が分かる方、よろしく御願いします。


-- 
----------------------------------------------
Masakazu Kobayashi ( [E-MAIL ADDRESS DELETED])
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: http://ml.seasar.org/archives/seasar-user/attachments/20061116/d954fd98/attachment.html 


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