Когда я развертываю свое приложение JEE6 на JBoss EAP 6.3 и выключаю сервер перед отключением приложения вручную, я получаю неожиданные исключения (см. Ниже).
Я ищу способ заставить завершение работы работать или надежный источник, который заявляет, что он не работает и не будет исправлен.
Тем не менее, завершение работы приложения работает нормально, если выполняется вручную (удалите .ear из каталога развертывания, дождитесь отмены развертывания, затем выключите JB). Никаких исключений не происходит, все работает как положено.
Итак, я предполагаю, что есть способ настроить JBoss таким образом, чтобы это происходило автоматически при выключении сервера, отправляло сигнал остановки приложениям, ждало, пока они не исчезнут или не истечет время ожидания, а затем выключите сервер.
Я выключил JBoss 7 с помощью этой команды:
jboss-cli.bat --connect --command=:shutdown --timeout=30000 --controller=127.0.0.1:9999
Исключения, которые я получаю (например, JBAS0141134), заставляют меня думать, что JBoss удаляет компоненты и ресурсы, от которых зависит мое приложение, до завершения последовательности завершения работы.
Я контролирую процесс выключения внутри @PreDestroy
внутри @Singleton
это вызывает некоторые @Stateless
beans, которые, в свою очередь, имеют ресурсы базы данных и т. д.
Наиболее заметное исключение, которое я получаю:
ERROR - JBAS014134:
EJB-Aufruf an Komponente MyStatelessBean
für Methode public abstract void MyStatelessLocal.performShutdownOperation() fehlgeschlagen:
javax.ejb.EJBAccessException: JBAS014502:
Aufruf an Methode: public abstract void MyStatelessLocal.performShutdownOperation()
von Bean: MyStatelessBean ist nicht gestattet
(Отступ мой)
Имейте в виду, что даже несмотря на то, что он говорит «вызов не разрешен», вызов работает нормально, если я отменяю развертывание приложения без выключения сервера.