Итак, у меня есть несколько ограниченный опыт работы с сериализацией, Wicket и многопоточными проектами, так что несите меня.Wicket And Multi-threaded Business Object
По существу мой класс веб-приложений создает экземпляр POJ (parentObject), который создает начало нового таймера и создает несколько POJ (childObjects), которые также имеют в них таймеры. Эти объекты childObject хранятся в списке в классе parentObject. Страницы в моей калиткой приложения должны получить доступ parentObject, поэтому я сделал его доступным, как так:
public Object getParentObject
{
return this.parentObject;
}
И извлекается на каждой странице, как так:
((MyApplication)Application.get()).getParentObject()
В настоящее время проблема заключается в том, что TimerTask для как parentObject, так и childObjects больше не вызывают каждую минуту, как они должны быть. Мои журналы берут первый запуск объекта parentObject, но сообщение о регистрации больше не выводится, сигнализируя, что метод run() родительского объекта Timertask не выполняется каждую минуту. То же самое справедливо и для дочерних объектов. Кажется, что таймеры только исполняются один раз. Ниже приведены некоторые псевдокоды для того, что у меня есть
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);
}
}
ли мне даже не нужно, чтобы сделать эти объекты Serializable? Сами объекты никогда не привязаны к компонентам калитки, хотя String, integer, Date сортирует переменные, которые являются членами их классов.
Умм, почему вы повторно опубликовали свой [более ранний вопрос] (http://stackoverflow.com/questions/10181865/wicket-application-serialization-and-java-timers) с сегодняшнего дня (с незначительными изменениями)? Вы можете редактировать и улучшать оригинал, но, пожалуйста, не добавляйте дубликаты. – Jonik
Вопрос на самом деле полностью противоположный. У одной проблемы была слишком много потоков, и теперь по моим причинам мои потоки убиты. Я просто собираюсь пойти с советом artbristol ниже, поскольку это похоже на простейшее решение, хотя я все еще смущен тем, почему Wicket не любит иметь POJ, которые имеют несколько потоков. – thatidiotguy
О, простите меня; это трудно сказать, когда почти все это скопировано дословно (и я на самом деле потратил минуту «отличить» их глазами). В общем, этот вопрос продолжения будет * намного лучше, если вы ** ссылаетесь на свой другой вопрос **, чтобы предоставить контекст, а затем очень четко объясните, что нового * вопроса, который вы задаете. Выделите ключевые точки (например, полужирный). Не копируйте все коды в обоих местах; просто релевантные/разные части (если есть). – Jonik