当我在 JBoss EAP 6.3 上部署我的 JEE6 应用程序并在手动取消部署该应用程序之前关闭服务器时,我遇到了意外异常(见下文)。
我正在寻找一种使关机正常工作的方法或一个可靠的来源,指出它不起作用并且不会被修复。
但是,如果手动关闭应用程序,则关闭效果很好(从部署目录中删除 .ear,等待取消部署,然后关闭 JB)。没有发生任何异常,一切都按预期运行。
因此,我假设有一种方法可以配置 JBoss,使其在服务器关闭时自动执行该操作,向应用程序发送停止信号,等到它们消失或达到超时,然后关闭服务器。
我使用以下命令关闭 JBoss 7:
jboss-cli.bat --connect --command=:shutdown --timeout=30000 --controller=127.0.0.1:9999
我得到的异常(例如 JBAS0141134)让我认为 JBoss 在关闭序列完成之前正在删除我的应用程序所依赖的 Bean 和资源。
我控制内部的关闭过程@PreDestroy
,@Singleton
调用一些@Stateless
具有数据库资源的 bean,等等。
我得到的最突出的例外是:
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
(缩进是我的)
请记住,即使它说“不允许调用”,如果我取消部署该应用程序而不关闭服务器,调用仍然可以正常工作。