На самом деле я бы оставил хук выключения включенным, но он должен быть определен в нужном месте.Кто-то реализовал это по причине;)
Я не знаю, какой тип развертывания у вас, но давайте предположим, веб-приложение.В таком случае вы должны зарегистрировать хук отключения в web.xml
как ServletContextListener .В этом случае он будет срабатывать при завершении работы веб-приложения, и в это время путь к классам содержит все классы ActiveMQ, и он будет работать, как и ожидалось.
Регистрация перехвата отключения на JVM в случае веб-приложения может быть проблематичной.Веб-контейнер (tomcat) во время завершения работы сначала останавливает веб-приложения, а затем выполняются ловушки завершения работы JVM.
ActiveMQ регистрирует пользовательские потоки, и они будут продолжать работать после остановки веб-приложения, но они не смогут получить доступ к классам из этого веб-приложения (так как оно было уничтожено), и поэтому вы получите NoClassDefFoundError
.
Еще одна вещь: возможно, вы можете отключить отключение крюка.Если вы загружаете ActiveMQ как Spring Beans, а контекст Spring загружается из web.xml
(Spring Web Context), то Spring автоматически регистрирует перехватчики и корректно закрывает компоненты AcrtiveMQ.