1

寻找一种在不重新启动 JBoss 的情况下部署新更改的方法导致我这样做:

https://community.jboss.org/wiki/RedeployAnApplicationWhenChangeAFileInAnExplodedDeploymentDirectory

起初,我以为我刚刚找到了圣杯,触摸爆炸目录上的顶级描述符将重新部署新的更改,但随后奇怪的行为和错误开始了。

事实证明 servlet 和 Java 类没有被重新部署,在阅读了许多否定的答案之后,我放弃了这个,但至少我想知道,在触及顶级描述符后重新部署了什么?

如果你们需要知道,我正在部署一个 Java EE 项目作为对 JBoss 4x 的战争。

4

1 回答 1

1

虽然应用程序确实重新部署了工作目录,但默认情况下并没有真正删除(它是 JBoss 保存已编译 jsp 的地方),因此在重新部署后它可能会保留以前编译的 jsp 类。

在 JBoss 5.1 中(我不能 100% 确定它是否在 JBoss 4.x 中可用)有一个选项可以强制 JBoss 在应用程序未部署 - 重新部署时删除它的工作目录。您可以在以下位置找到此选项:$JBOSS_HOME/server/yourInstance/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml,在此文件中查找属性:

<property name="deleteWorkDirOnContextDestroy">true</property>

默认情况下它设置为 false,所以设置为 true。也许在重新部署时它可能有助于解决您的问题,尽管热部署的成功可能取决于对其他类的依赖等。另一方面,在热部署或重新部署应用程序时,使用移动命令(mv),但不要复制(cp) 一,因为 mv 是原子的,但不是 cp(使用 cp 可以在文件仍在复制时激活热部署扫描器)。

热重新部署的另一个解决方案是手动删除它,(仅推荐用于开发环境)我们使用以下命令链(记住您已经在部署目录中):

rm yourapp.war; rm -rf ../work/jboss.web/localhost/yourapp;mv <newappversiondir>/yourapp.war .

但请记住,强烈建议不要在生产环境和关键环境中进行热部署。

于 2012-11-14T08:28:23.620 回答