masapon1967です。<br><br>java.util.TimerTaskを使用して・髟阡札如��タベ・踉札垢縫如��タを書き込むプログラムをテストしているのですが・髟阡�<br>テ・踉札屮襪�薀如��タを読み込むことができません。<br><br>TimerTaskで��孫圓気譴襪里�謄好肇院��スとは別のスレッドのためだとは思う瘢雹のですが・髟阡擦匹�逅擦垢譴个茲い��<br>分かりません。解決方法がお分かりの方がいらっしゃれば・髟阡擦�気┫蠅い泙后�<br><br>-S2 2.3.14
<br>-S2Dao 1.0.37<br>-S2Dao tiger 1.0.35<br>-MySQL Connection/J 5.0.3<br>-MySQL Server 5.0.24a<br><br>table FooTable<br>- id int<br>- name varchar<br><br>//エンティティクラス<br>@Bean(table = &quot;FooTable&quot;)<br>public class Foo{
<br>&nbsp; private int id;<br>&nbsp; private String name;<br>&nbsp; @Id(value = IdType.IDENTITY)<br>&nbsp; public void setId(int id){<br>&nbsp;&nbsp;&nbsp; <a href="http://this.id">this.id</a> = id;<br>&nbsp; }<br>&nbsp; //以王踉�id, nameのsetter, getter<br>}<br clear="all">
<br>//DAOクラス<br>@S2Dao(bean = Foo.class)<br>public interface FooDao{<br>&nbsp; @Arguments(&quot;id&quot;)<br>&nbsp; Foo get(int id);<br>}<br><br>//タスククラス<br>public class FooTask extends TimerTask{<br>&nbsp; private FooDao fooDao;<br>&nbsp; public FooTask(FooDao fooDao){
<br>&nbsp;&nbsp;&nbsp; this.fooDao = fooDao;<br>&nbsp; }<br>&nbsp; public void run(){<br>&nbsp;&nbsp;&nbsp; Foo foo = fooDao.get(1);&nbsp; //����海海如���fooにnullがセットされる。<br>&nbsp;&nbsp;&nbsp; if(foo == null){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new Exception();<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>}<br><br>public interface Bar{
<br>&nbsp; void execute();<br>}<br><br>//タスク設定のクラス<br>public class BarImpl implements Bar{<br>&nbsp; private FooDao fooDao;<br>&nbsp; public BarImpl(FooDao fooDao){<br>&nbsp;&nbsp;&nbsp; this.fooDao = fooDao;<br>&nbsp; }<br>&nbsp; public void execute(){<br>&nbsp;&nbsp;&nbsp; FooTask task = new FooTask(fooDao);
<br>&nbsp;&nbsp;&nbsp; Timer timer = new Timer();<br>&nbsp;&nbsp;&nbsp; timer.schedule(task, 1000); //1秒後にFooTaskのrunが��孫圓気譴襦�<br>&nbsp; }<br>}<br><br>//テストクラス<br>public class BarImplTest extends S2TestCase{<br>&nbsp; private Bar bar;<br>&nbsp; protected void setUp() throws Exception{
<br>&nbsp;&nbsp;&nbsp; super.setUp();<br>&nbsp;&nbsp;&nbsp; include(&quot;test.dicon&quot;);<br>&nbsp; }<br>&nbsp; public final void testExecuteTx(){<br>&nbsp;&nbsp;&nbsp; // UT0001Prepare.xlsにはFooTableのワ・踉札�掘��トにid = 1, name = &quot;ABC&quot;という瘢雹行が登録されている<br>&nbsp;&nbsp;&nbsp; readXlsWriteDb(&quot;
UT0001Prepare.xls&quot;);<br>&nbsp;&nbsp;&nbsp; bar.execute(); //FooTask.run()でFooオブジェクトが��萋世任④覆い燭瓠���例外が発生する。<br>}<br><br>test.diconにはBarDaoとBarImplが登録されていて・髟阡�BarDaoにはdao.interceptorを・髟阡�BarImplにはj2ee.requiredTxが<br>織り込まれています。<br>testExecute(Tx)としているため・髟阡擦海海燃�呂気譴織肇薀鵐競�轡腑鵑函���FooTaskが��孫圓気譴襯好譽奪匹�
<br>トランザクションが異なるのだと思います。<br>��尊檗���testExecuteとTxを外して��孫圓靴燭箸海蹇���FooTaskのrunメソッドで・髟阡�Fooオブジェクトが読み込まれます。<br>解決方法が分かる方・髟阡擦茲蹐靴�羇蠅い靴泙后�<br><br>-- <br>----------------------------------------------<br>Masakazu Kobayashi (<a href="mailto:masapon1967@gmail.com">
masapon1967@gmail.com</a>)