Se implementa una aplicación web de fondo en un contenedor de servlet Tomcat 6. En la aplicación web, se inician varios hilos de supervisión. El problema es con el apagado.Cómo matar correctamente los hilos locales propiedad de una aplicación web que se ejecuta en tomcat con instrucciones de cierre
- ¿Cómo sé que se solicita que la aplicación webapp se apague?
- ¿Cómo debo manejar esto en mis hilos?
Actualmente mi hilo se implementa de la siguiente manera. Cuando se le indica al servlet que se apague (shutdown.sh), este completa un apagado limpio y no cuelga debido a este hilo. ¿Por qué?
class Updater extends Thread {
volatile boolean interrupted = false;
@Override
public void run() {
Integer lastUpdateLogId = CommonBeanFactory.getXXX()
.getLastUpdateLogRecordKey(MLConstants.SMART_DB_NAME);
List<UpdateLog> updateLogRecords;
while (!interrupted) {
boolean isConfigurationUpdateRequested = false;
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
setInterrupted(true);
}
updateLogRecords = CommonBeanFactory.getXXX()
.getLastFactsUpdateLogRecords(MLConstants.XXXX, lastUpdateLogId);
for(UpdateLog updateLog : updateLogRecords) {
if (updateLog.getTable_name().equals(MLConstants.CONFIG_RELOAD)) {
isConfigurationUpdateRequested = true;
}
lastUpdateLogId = updateLog.getObjectKey();
}
if (isConfigurationUpdateRequested) {
Configuration.getInstance().loadConfiguration();
}
}
}
public boolean getInterrupted() {
return interrupted;
}
public void setInterrupted(boolean interrupted) {
this.interrupted = interrupted;
}
}