虽然应用程序确实重新部署了工作目录,但默认情况下并没有真正删除(它是 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 .
但请记住,强烈建议不要在生产环境和关键环境中进行热部署。