【发布时间】:2012-04-17 16:17:50
【问题描述】:
所以我在序列化、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);
}
}
我什至需要使这些对象可序列化吗?对象本身永远不会附加到检票口组件,尽管作为其类成员的 String、integer、Date 类型的变量是。
【问题讨论】:
-
嗯,你为什么从今天开始重新发布你的earlier question(稍作改动)?您可以编辑和改进原件,但请勿添加重复内容。
-
问题其实完全相反。一个有太多线程的问题,现在我的线程由于某种原因被杀死了。我将在下面接受 artbristol 的建议,因为这似乎是最简单的解决方案,尽管我仍然对 Wicket 不喜欢有多线程的 POJ 感到困惑。
-
哦,对不起;很难说几乎所有内容都是逐字复制的(实际上我花了一分钟的时间用眼睛“区分”它们)。一般来说,如果你链接到你的其他问题来提供上下文,然后非常清楚地解释什么是新的 i> 你问的问题。突出显示关键点(例如粗体)。不要在两个地方复制粘贴所有代码;只是相关/不同的部分(如果有的话)。
-
啊,我明白了。我以后一定会这样做的!
标签: java multithreading timer wicket