package org.distributeme.core.listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* A shutdown hook that unregisters a service upon jvm exit.
*
* @author another
* @version $Id: $Id
*/
public class ServerLifecycleListenerShutdownHook extends Thread{
/**
* Log.
*/
private static Logger log = LoggerFactory.getLogger(ServerLifecycleListenerShutdownHook.class);
/**
* Listeners which have to perform operations prior to shut down.
* @see ServerLifecycleListener
*/
private List<ServerLifecycleListener> listeners;
/**
* <p>Constructor for ServerLifecycleListenerShutdownHook.</p>
*
* @param someListeners a {@link java.util.List} object.
*/
public ServerLifecycleListenerShutdownHook(List<ServerLifecycleListener> someListeners){
listeners = someListeners;
}
/** {@inheritDoc} */
@Override public void run(){
//embedded listeners
if (listeners!=null && listeners.size()>0){
for (ServerLifecycleListener listener : listeners){
try{
listener.beforeShutdown();
}catch(Exception e){
log.warn("Exception in listener "+listener.getClass(),e);
}
}
}
//configured listeners
List<ServerLifecycleListener> configuredListeners = ListenerRegistry.getInstance().getServerLifecycleListeners();
if (configuredListeners!=null && configuredListeners.size()>0){
for (ServerLifecycleListener listener : configuredListeners){
try{
listener.beforeShutdown();
}catch(Exception e){
log.warn("Exception in listener "+listener.getClass(),e);
}
}
}
}
}