所以我在序列化、Wicket 和多线程项目方面的经验有些有限,所以请多多包涵。
本质上,我的 Web 应用程序类正在实例化一个 POJ(parentObject),它创建一个新的计时器并实例化几个其中也有计时器的 POJ(childObjects)。这些子对象存储在 parentObject 类的列表中。我的 wicket 应用程序中的页面需要访问 parentObject,因此我将其设置为可访问:
public Object getParentObject
{
return this.parentObject;
}
它在每个页面中被检索,如下所示:
((MyApplication)Application.get()).getParentObject()
当前的问题是 parentObject 和 childObjects 的 timertask 不再像应有的那样每分钟都被调用。我的日志记录了父对象的第一次启动,但是日志消息永远不会再次输出,表明父对象的 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*/)
{
//starts the child's timer to do stuff
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);
}
}
我什至需要使这些对象可序列化吗?对象本身永远不会附加到检票口组件,尽管作为其类成员的字符串、整数、日期类型的变量是。