W Tomcat, gdy serwer jest wyłączany, próbuje ustawić wszystkie zmienne statyczne w klasach, o których wie, że mają wartość null. Dotykając tych klas, uruchamiane są ich statyczne inicjalizatory, co może skutkować nieskończoną pętlą dla niektórych klas, które mają masywne inicjatory statyczne.Jak sprawdzić, czy obecnie trwa wyłączanie?
Czy istnieje elegancki sposób wykrywania, czy obecnie trwa wyłączanie? Możemy wtedy sprawdzić u góry statycznych inicjalizatorów, czy jesteśmy w trybie zamknięcia, a następnie zignorować inicjalizację.
Jedynym sposobem znaleźliśmy który wydaje się działać wcale nie jest elegancki:
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);
}
To może być najlepsze, co otrzymasz bez rodzimej ... –