在不重新启动JBoss的情况下搜索部署新更改的方法引发了我的注意:
https://community.jboss.org/wiki/RedeployAnApplicationWhenChangeAFileInAnExplodedDeploymentDirectory
起初,我以为我刚刚找到了圣杯,触摸爆炸目录上的顶级描述符将重新部署新的更改,但随后出现了奇怪的行为和错误。
事实证明servlet和Java类没有重新部署,在阅读了许多否定答案之后,我放弃了这一点,但至少我想知道,在触及顶级描述符之后重新部署了什么?
如果你们需要知道,我正在部署一个Java EE项目作为对JBoss 4x的战争。
答案 0 :(得分:1)
虽然应用程序确实已经重新部署,但默认情况下并没有真正删除工作目录(这是JBoss保存已编译的jsp的地方),因此在重新部署之后它可能会保留以前编译的jsp类。
在JBoss 5.1中(我不确定它是否在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。也许在重新部署时可能有助于解决您的问题,尽管热部署的成功可能取决于对其他类的依赖性等。另一方面,在热部署或重新部署应用程序时,请使用move命令(mv),但从不复制(cp)一,因为mv是原子的而不是cp(使用cp时,可以在文件仍被复制时激活热部署扫描程序。)
热重新部署的另一个解决方案是手动删除它(建议仅用于开发环境)我们使用以下命令链(请记住,您已经在deploy目录中):
rm yourapp.war; rm -rf ../work/jboss.web/localhost/yourapp;mv <newappversiondir>/yourapp.war .
但请记住,强烈劝阻生产和关键环境中的热部署 。