Ich bin in der Qualitätssicherung auf dieses unangenehme Verhalten bei JBoss 4.2 gestoßen, und ich möchte es im Keim ersticken, bevor wir in die Produktion gehen und einen anderen Eckfall finden.
Ein JSP ruft eine Methode mit der folgenden Signatur auf:
public void methodName(String arg)
Dies wurde geändert in:
public void methodName(String arg, Object... args)
Ein bereits vorhandenes JSP hat diese Methode über aufgerufen:
methodName("param");
Bei der Bereitstellung des geänderten Codes kompilierte JBoss die JSP nicht neu, was zu einem Absturz in QA führte. Durch Hinzufügen eines dummen Kommentars zur JSP wurde das Problem behoben (JBoss erkannte, dass die JSP geändert wurde und kompilierte sie neu).
Gibt es eine Einstellung in JBoss, um die Neukompilierung von JSPs beim Neustart zu erzwingen?
EDIT: Um einige Punkte in der Antwort zu klären, ist die Einrichtung, dass die JSPs Teil eines War sind, der Teil eines Ear ist. Das Ohr hat alle Klassen in ihm, in einer Jar.
Bezüglich des Wunsches nach Vorkompilierung: Wenn das System der Meinung ist, dass die jsp nicht kompiliert werden muss, wird die Vorkompilierung dann eine Neukompilierung erzwingen? Das scheint nicht der Fall zu sein. Der Fehler hier ist kein Kompilierungsfehler, sondern ein Fehler beim Methodenaufruf aufgrund der "geänderten" (auf Bytecodeebene, nicht wirklich auf Codeebene) Methodensignatur.
Nachtrag: Kürzlich haben wir in der Produktion festgestellt, dass selbst bei gesetztem Flag für die akzeptierte Antwort die JSPs nicht neu kompiliert wurden, obwohl sich die JSPs tatsächlich geändert hatten. Das ist ein großer Fehler, aber trotzdem wurde JBoss normal heruntergefahren. An diesem Punkt wird es zu einer alten Version von JBoss, aber wenn Sie sie noch verwenden, ist das Löschen des Inhalts der Verzeichnisse work und tmp die einzige Möglichkeit, sicher zu sein.
Ich ändere die akzeptierte Antwort nicht, weil sie wirklich auf den Punkt bringt, wonach die Frage gesucht hat. JBoss-Fehler sind eine Art separates Thema.