En Tomcat, cuando el servidor se está cerrando, intenta establecer todas las variables estáticas en las clases que conoce para anular. Al tocar estas clases, se ejecutan sus inicializadores estáticos, lo que puede dar como resultado un ciclo sin fin para algunas de nuestras clases heredadas que tienen iniciadores estáticos masivos.¿Cómo saber si un cierre está actualmente en curso?
¿Existe una forma elegante de detectar si un cierre está actualmente en curso? Podríamos verificar en la parte superior de los inicializadores estáticos si estamos en el modo de apagado y luego ignorar la inicialización.
La única manera que encontramos que parece funcionar es cualquier cosa menos elegante:
try{
Thread hook = new Thread();
Runtime.getRuntime().addShutdownHook(hook); // fires "java.lang.IllegalStateException: Shutdown in progress" if currently in shutdown
Runtime.getRuntime().removeShutdownHook(hook);
}catch(Throwable th){
throw new Error("Init in shutdown thread", th);
}
Eso podría ser lo mejor que obtendrá sin nativo ... –