В Tomcat, когда сервер выключается, он пытается установить для всех статических переменных в известных ему классах значение NULL. При прикосновении к этим классам запускаются их статические инициализаторы, что может привести к бесконечному циклу для некоторых из наших устаревших классов, которые имеют массивные статические инициализаторы.
Есть ли элегантный способ определить, выполняется ли в настоящее время завершение работы? Затем мы могли бы проверить в верхней части статических инициализаторов, находимся ли мы в режиме выключения, а затем проигнорировать инициализацию.
Единственный способ, который, как мы обнаружили, работает, совсем не элегантен:
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 );
}