そのため、シリアライゼーション、Wicket、およびマルチスレッド プロジェクトの経験はやや限られているため、ご容赦ください。
基本的に、私の Web アプリケーション クラスは POJ (parentObject) をインスタンス化し、新しいタイマーを開始して、タイマーを含むいくつかの childObjects をインスタンス化します。これらの childObjects は、parentObject クラスのリストに格納されます。私のウィケット アプリケーションのページは、parentObject にアクセスする必要があるため、次のようにアクセスできるようにしました。
public Object getParentObject
{
return this.parentObject;
}
そして、次のように各ページで取得されます。
((MyApplication)Application.get()).getParentObject()
現在の問題は、parentObject と childObjects の両方の timertask が、本来あるべきように毎分呼び出されなくなったことです。私のログはparentObjectの最初の開始を拾いますが、ログメッセージは二度と出力されず、親オブジェクトのtimertaskのrun()メソッドが毎分実行されていないことを示しています。
編集:問題をより明確にするために、さらにいくつかのコードを追加しました
public class childObject implements Serializable
{
private transient NamedParameterJdbcTemplate njt;
private transient Timer timer;
public childObject(DataSource ds)
{
this.njt = new NamedParamterJdbcTemplate(ds);
}
public void start()
{
timer = new Timer();
timer.schedule(new TimerTask(){
public void run()
{
//do some stuff that is never happening
}
}, 0, 60000);
}
}
public class ParentObject implements Serializable
{
private DataSource ds;
private List<ChildObject> childObjects;
private transient Timer;
public ParentObject(DataSource ds)
{
this.ds = ds;
//add some stuff to childObjects
timer = new Timer();
timer.schedule(new TimerTask(){
public void run()
{
for(some condition)
{
//Do some stuff
if(/*condition is met*/)
{
childObjects.get(i).start();
}
}
}
}, 0, 60000);
}
}
public MyApplication extends WebApplication
{
private ParentObject object;
private DataSource ds;
public void init()
{
super.init();
ApplicationContext context = new ClassPathXmlApplicationContext("/applicationContext.xml");
ds = (DataSource) context.getBean("dataSource");
parentObject = new ParentObject(ds);
}
}