package jeffaschenk.commons.frameworks.cnxidx.resiliency.ldap;
import jeffaschenk.commons.frameworks.cnxidx.utility.logging.FrameworkLoggerLevel;
import jeffaschenk.commons.frameworks.cnxidx.utility.logging.FrameworkLogger;
import java.util.*;
/**
* Service Shutdown Thread for the IRRChangeLogRestoreService Facility.
*
* @author jeff.schenk
* @version 4.4 $Revision
* Developed 2005
*/
public class IRRChangeLogRestoreServiceShutdownThread extends Thread {
// *******************************
// Common Logging Facility.
public static final String CLASSNAME = IRRChangeLogRestoreServiceShutdownThread.class.getName();
// *******************************
// Work Thread to attach to.
private Thread controlThread;
/**
* IRRChangeLogRestoreServiceShutdownThread Contructor class driven from
* Main or other Class Caller.
*/
public IRRChangeLogRestoreServiceShutdownThread(Thread controlThread) {
this.controlThread = controlThread;
} // End of Constructor for IRRChangeLogRestoreServiceShutdownThread.
/**
* Shutdown Thread.
*/
public void run() {
String METHODNAME = "run";
this.setName("ServiceShutdownThread");
FrameworkLogger.log(CLASSNAME, METHODNAME, FrameworkLoggerLevel.WARNING,
MessageConstants.SHUTDOWN_REQUESTED,
new String[]{new Date().toString()});
// **********************************
// Check to see if the Control Thread
// is alinve, it may have been shutdown
// from the webadmin thread.
if (controlThread.isAlive()) {
// **********************************
// Request worker thread to finish
controlThread.interrupt();
// ************************************
// Wait for the worker thread to finish
try {
synchronized (controlThread) {
controlThread.wait();
} // End of Synchronized Code Area.
} catch (InterruptedException e) {
} // End of Exception.
} // End of If check for Control Thread Being Alive.
// ****************************************
// Give our final Goodbye.
FrameworkLogger.log(CLASSNAME, METHODNAME, FrameworkLoggerLevel.WARNING,
MessageConstants.SHUTDOWN_FINISHED,
new String[]{new Date().toString()});
// *************************
// Finish up the Service.
return;
} // End of run Thread.
} // End of Class IRRChangeLogRestoreServiceShutdownThread