Другой объект сессионного компонента с сохранением состояния с использованием SwingWorker в Java Swing
У меня есть пользовательский прогрессбарпанель в Swing, где я хочу показать прогресс длительной операции. Итак, я создал двух рабочих:
- Тот, который выполняет фактическую длительную операцию в управляемом компонентом сеансном компоненте с контролем состояния (lengthyTask)
- Тот, который просит ssb о продвижении в цикле, основанном на флаге (statusTask)
Ssb использует логическую переменную для отметки, если она завершена
Моя проблема заключается в том, что ssb выглядит как разные объекты в потоке диспетчеризации событий и во вновь созданных потоках, даже если ssb назначен конечной переменной. Когда statusTask запрашивает ssb.isDone(), он возвращает false, хотя я точно знаю, что длинная задача выполнена без ошибок.
Псудо пример:
final ProgressPanel p = new ProgressPanel();
final StatefulSessionBean ssb = getSSB();
p.print(ssb);
SwingWorker lengthyTask = new SwingWorker() { public void doInBackground(){p.print(ssb);} };
SwingWorker statusTask = new SwingWorker() {public void doInBackground(){p.print(ssb);} };
lengthyTask.execute();
statusTask.execute();
Код будет распечатывать разные объекты. Кстати, приложение Swing связывается с JBoss 4.2.3 с помощью EJB3, поиск выполняется с помощью JNDI.
Кто-нибудь имел подобный опыт или понимает, почему объект отличается в каждом потоке? Спасибо за любой вклад!