Пример JSF 2 PostConstructApplicationEvent и PreDestroyApplicationEvent

Пример 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-приложения, см. Рисунок ниже:

jsf2-PostConstructApplicationEvent-example

Note
ОднакоPreDestroyApplicationEvent не совсем надежен, потому что JSF не запустит его, если он отключится ненормально. Например, процесс Java, убитый системным администратором, всегда происходил :). Поэтому, пожалуйста, используйте это системное событие с умом.

Скачать исходный код