Пример JSF 2 PostConstructApplicationEvent и PreDestroyApplicationEvent
Начиная с JSF 2.0, вы можете зарегистрировать системное событиеjavax.faces.event.PostConstructApplicationEvent иjavax.faces.event.PreDestroyApplicationEvent для управления жизненным циклом приложения JSF.
1. PostConstructApplicationEvent - выполнить пользовательскую постконфигурацию после запуска приложения.
2. PreDestroyApplicationEvent - выполнить специальную задачу очистки перед завершением работы приложения.
Note
В JSF вы не можете зависеть от стандартногоServletContextListeners для выполнения вышеуказанной задачи, потому чтоServletContextListeners может быть запущен до запуска приложения JSF.
В следующем примере показано, как создать системное событиеPostConstructApplicationEvent иPreDestroyApplicationEvent в JSF 2.0.
1. Реализует SystemEventListener
Создайте класс, реализующийjavax.faces.event.SystemEventListener, и переопределите методыprocessEvent() иisListenerForSource() для вашей пользовательской задачи пост-конфигурации и очистки.
package com.example;
import javax.faces.application.Application;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.PostConstructApplicationEvent;
import javax.faces.event.PreDestroyApplicationEvent;
import javax.faces.event.SystemEvent;
import javax.faces.event.SystemEventListener;
public class FacesAppListener implements SystemEventListener{
@Override
public void processEvent(SystemEvent event) throws AbortProcessingException {
if(event instanceof PostConstructApplicationEvent){
System.out.println("PostConstructApplicationEvent is Called");
}
if(event instanceof PreDestroyApplicationEvent){
System.out.println("PreDestroyApplicationEvent is Called");
}
}
@Override
public boolean isListenerForSource(Object source) {
//only for Application
return (source instanceof Application);
}
}
2. Зарегистрировать системные события
Зарегистрируйте системные событияPostConstructApplicationEvent иPreDestroyApplicationEvent в файлеfaces-config.xml следующим образом:
faces-config.xml
com.example.FacesAppListener javax.faces.event.PostConstructApplicationEvent com.example.FacesAppListener javax.faces.event.PreDestroyApplicationEvent
3. Demo
Запустите ваше приложение JSF. МетодprocessEvent() выполняется после запуска вашего JSF-приложения, см. Рисунок ниже:

Note
ОднакоPreDestroyApplicationEvent не совсем надежен, потому что JSF не запустит его, если он отключится ненормально. Например, процесс Java, убитый системным администратором, всегда происходил :). Поэтому, пожалуйста, используйте это системное событие с умом.
Скачать исходный код
Скачать -JSF-2-PostConstructApplicationEvent-Example.zip (9 КБ)