Как узнать, происходит ли отключение в данный момент? - PullRequest
8 голосов
/ 27 апреля 2011

В Tomcat, когда сервер выключается, он пытается установить все статические переменные в классах, о которых он знает, в null.При прикосновении к этим классам запускаются их статические инициализаторы, что может привести к бесконечному циклу для некоторых из наших устаревших классов, которые имеют массивные статические инициализаторы.?Затем мы могли бы проверить в верхней части статических инициализаторов, находимся ли мы в режиме выключения, а затем проигнорировать инициализацию.

Единственный найденный способ, который, кажется, работает, - это не элегантно:

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

У вас есть контроль над конфигурацией веб-приложения?Если это так, вы можете отключить очистку статических ссылок, установив

clearReferencesStatic=false

в /META-INF/context.xml, как указано в документации

В противном случае я согласен с установкой флагав ServletContextListener, вероятно, ваш лучший вариант.

2 голосов
/ 27 апреля 2011

Вы можете посмотреть, использует ли Tomcat новый поток для завершения работы, если да, вы можете просмотреть текущие потоки и найти этот поток.

Далее, настраивая ServletContextListener, чтобы он включал и выключал флаг в contextInitialized и contextDestroyed, ваши классы проверяют этот флаг.

...