Я столкнулся с этим неприятным поведением на JBoss 4.2 в QA и хочу пресечь его в зародыше, прежде чем мы пойдем в производство и найдем какой-то другой угловой случай.
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 - это отдельная проблема.