Я добавила в Main menu action, который вызывает report из базы данных, при этом слепо скопировав кусок кода для вызова ReportUtils из соседнего action. Когда стала тестировать оказалось, что report не обновляется в соответствии с database changes до тех пор, пока клиент не logout->login again.
Стала разбираться оказалось, что когда в action после вызова соответствующего веб сервиса(через ReportUtils), создается report table (заполняется ArrayList), то она при последующем вызове не обновляется, так как перед этим вызовом стоит проверка if (equipmentLst ==null), вот так примерно:
Code: Select all
.....
ArrayList equipmentLst;
public void actionPerformed(ActionEvent e) {
String msg = "";
String xml = "";
if (equipmentLst == null) {
equipmentLst = ReportUtils.getEquipmentReportList();
if (equipmentLst == null) {
msg = "Equipment report is not available. ";
JOptionPane.showMessageDialog(ClientUtils.getMainFrame(),
msg,
Globals.getResourceBundle().getString("message.information"),
JOptionPane.INFORMATION_MESSAGE);
return;
}
}
Boot.start();
.......
Устранение первого
Code: Select all
if (equipmentLst == null) {
С другой стороны, вызывая каждый раз
Code: Select all
equipmentLst = ReportUtils.getEquipmentReportList();
я создаю новый session object для каждого вызова этого report.
Мой вопрос в том насколько рационален такой подход? Может можно как-то сделать так, чтобы не нужно было создавать нового session object каждый раз. Ведь там может быть всего одни аттрибут изменен, а мы каждый раз всю таблицу заново пересоздаем.
Спасибо,
Сабина