我在 QA 中发现了 JBoss 4.2 上的这种令人讨厌的行为,我想在我们投入生产并找到其他极端案例之前将其扼杀在萌芽状态。
jsp 调用具有以下签名的方法:
public void methodName(String arg)
这已更改为:
public void methodName(String arg, Object... args)
预先存在的 JSP 通过以下方式调用此方法:
methodName("param");
在部署修改后的代码时,JBoss 没有重新编译 JSP,这导致 QA 崩溃。向 jsp 添加一个愚蠢的注释解决了这个问题(JBoss 认识到 JSP 已更改并重新编译它)。
JBoss 上是否有设置强制在重新启动时重新编译 JSP?
编辑:为了澄清答案中的一些观点,设置是 JSP 是战争的一部分,战争是耳朵的一部分。耳朵里有所有的类,在一个罐子里。
关于预编译的愿望,如果系统不认为jsp需要编译,预编译会强制重新编译吗?似乎并非如此。这里的错误不是编译错误,而是方法调用错误,因为“更改”(在字节码级别,而不是真正在代码级别)方法签名。
附录:请注意,我们最近在生产中体验到,即使设置了接受答案的标志,JSP 也不会重新编译,即使 JSP 实际上确实发生了变化。那里的主要错误,但无论如何,JBoss 已正常关闭。此时它已成为 JBoss 的旧版本,但如果您仍在使用它,删除 work 和 tmp 目录的内容是唯一确定的方法。
我不会仅仅因为它确实达到了问题所要寻找的目的而改变接受的答案。JBoss 错误是一个单独的问题。