[Seasar-user:5143] [S2Dao] 別スレッドトランザクションのデータの読み込み
小林正和
[E-MAIL ADDRESS DELETED]
2006年 11月 16日 (木) 11:54:16 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/fbe9bd4b/attachment.html
Seasar-user メーリングリストの案内