2013-02-15 2 views
2

В приложении с калиткой на странице навигации создается новый объект страницы, вызывая конструктор новой страницы в методах onClick(). Как показано ниже.Wicket - правильная очистка компонентов страницы после обработки исключений

DisplayItem.add(new Link("edit") { 
@Override 
    public void onClick() { 
    try{ 
    setResponsePage(new ReportPage(object, getPageReference())); 
     } catch (CustomException e){ 
      /// set some feedback message 
     } 
    } 
}); 

ReportPage имеет несколько LoadableDetachableModels, PageableListViews, панели, фрагменты и т.д. Я делаю обработку исключений в конструкторе ReportPage и бросает его обратно, если происходит исключение. Ses ниже. (частичный код)

public ReportPage(final Objectm, final PageReference pr) throws CustomException{ 

try{ 
final LoadableDetachableModel<MaintReport> ldm = 
     new LoadableDetachableModel<MaintReport>() { 

      @Override 
      protected MaintReport load() { 
       return new MaintReport(); 
      } 
     }; 

/* 

Several LoadableDetachableModels, PageableListViews, Panels, Fragments etc. 

*/ 


} catch (Exception ex){ 
// create Custom Exception 

} finally { 

// Clean up of stuff 

} 

Так что, если при создании страницы возникает исключение. Как мне очистить (в , наконец,)? , Должен ли я установить для всех отдельных объектов значение null? Есть ли какой-либо метод Wicket для сбора мусора (или отправить сигнал в GC)?

Спасибо

+0

Помимо достоинства вашего вопроса, почему бы не обрабатывать логин исключения в ReportPage, поскольку эта страница знает, что пошло не так и как с этим бороться? Таким образом, у вас есть логика о странице на двух или более местах ... –

+2

Я что-то упустил или не должен собирать сборщик мусора для таких ситуаций? – Nicktar

+1

@RobertNiestroj У меня есть отдельный файл try..catch на странице отчета, и я регистрирую ошибку, но если я не выкидываю исключение, калитка будет генерировать исключение страницы Runtime, поскольку компоненты, помеченные на html-страницах, не отображаются , Думаю, я поправлю свой пост, чтобы добавить больше ясности. – Jay

ответ

1

Бросив форму исключения в конструкторе сразу делает половину инициализирован объект, имеющий право на сбор мусора. Если вы каким-то образом не предотвратили это, добавив объект в коллекцию, принадлежащую другому объекту до того, как было выброшено исключение, нет необходимости беспокоиться об освобождении этого объекта и его полей. Вам все равно нужно освободить любые неуправляемые ресурсы, которые могут быть уже выделены (например, дескрипторы файлов), как вы обычно делали бы в своем последнем блоке.

+0

Полагаю, я сейчас понял. В любом случае, мое приложение не имеет файловых дескрипторов, мое соединение db управляется на уровне сервера пулом соединений, а операции DB управляются сущностями. – Jay

 Смежные вопросы

  • Нет связанных вопросов^_^