Question

Je frappe sur ce comportement méchant sur JBoss 4.2 dans QA, et je veux étouffer dans l'œuf avant d'entrer dans la production et de trouver un autre cas d'angle.

A jsp calles une méthode qui avait la signature suivante:

 public void methodName(String arg)

Ceci a été changé à:

 public void methodName(String arg, Object... args)

Une JSP pré-existante appelée cette méthode via:

 methodName("param");

Lors du déploiement du code modifié, JBoss n'a pas recompiler le JSP et cela a causé un accident dans l'assurance qualité. Ajout d'un commentaire stupide au jsp résolu le problème (JBoss a reconnu que le JSP modifié et recompilé il).

Y at-il un paramètre sur JBoss pour forcer recompilation RRCPD au redémarrage?

EDIT: Pour clarifier quelques points dans la réponse, la configuration est que le font partie d'JSPs une guerre qui fait partie d'une oreille. L'oreille a toutes les classes en elle, dans un bocal.

En ce qui concerne le désir d'effectuer une pré-compilation, si le système ne pense pas que le besoin jsp compilation, sera précompiler la force recompilation? Il ne semble pas. L'erreur ici est pas une erreur de compliation, il est une erreur d'appel de méthode en raison de la signature de la méthode « changé » (au niveau du code octet, pas vraiment au niveau du code).

Addendum: Notez que nous avons connu dans la production récemment que même avec le drapeau de la réponse acceptée mis la JSPs n'a pas recompiler, même si la JSP a fait dans le changement fait. bug majeur là-bas, mais peu importe, JBoss a été arrêté normalement. À ce stade, il est en train de devenir une ancienne version de JBoss, mais si vous utilisez encore, la suppression du contenu des répertoires de travail et tmp est le seul moyen d'être sûr.

Je ne change pas la simple réponse acceptée car il est vraiment au point de ce que la question cherchait. bogues JBoss sont un peu une question distincte.

Était-ce utile?

La solution

Si les JSPs font partie d'une guerre qui fait partie d'une oreille qui est déployée comme un pot, alors je ne suis pas clair pourquoi vos pages JSP ne sont pas recompilés. Ne pas le JSPs dans le fichier de guerre ont plus récents que leurs horodatages fichiers de classe compilés JBoss à partir de la dernière Déployez? Sinon, vous ne pourriez pas toucher la partie de JSPs comme la construction WAR / EAR avant de déployer. [Je fais référence à l'aide de la commande Unix « toucher », ne pas toucher manuellement chaque fichier JSP.]

Vous pouvez également le réglage de DeleteWorkDirOnContextDestroy en $ jboss / server / default / deploy / jboss-web.deployer / META-INF / jboss-service.xml peut être ce que vous recherchez. Il est faux par défaut, mais le mettre à vrai peut-être ce dont vous avez besoin. Je pense que cela devrait supprimer les fichiers de classe de JavaServer sur redéployer afin qu'ils recréés sur un premier accès de chaque JSP.

Voir https://jira.jboss.org/jira/browse/JBAS-3358 pour plus d'informations.

Autres conseils

Je ne sais pas d'un paramètre, mais la suppression du fichier de classe Java généré dans le répertoire de travail de votre instance JBoss ramènerai les JSP à recompiler la prochaine fois qu'il est appelé.

Vous coudl modifier les scripts de démarrage JBoss pour supprimer explicitement le « tmp » et / ou répertoires « travail », où les pages JSP compilées sont stockées. JBoss aurait alors pas d'autre choix que de les recompiler tous.

Non subtile, mais elle ferait le travail.

Une option pour vous serait de précompiler tous vos jsp au moment de la construction. Cela rapidement signaler toute erreur de compilation.

Vous pouvez aussi le faire dans la production - l'accélération de premier accès mais je reçois le sentiment que vous voulez que ce plus pour une étape d'assurance qualité que toute autre chose. Si oui, vous pouvez ajouter l'étape precompile à la votre phase de test dans votre outil de construction de choix - et donc à votre environnement de CI. Cela fournirait l'assurance que ce jsp qui ne fera pas compilent pas de test.

Voir ce pour plus de détails sur l'exécution d'une tâche precompile:

configuration Jboss Jasper

Hope this helps.

Certains conteneurs JSP (conformément à la section 8.4.2 de la spécification JSP 1.2) soutenir la capacité de précompilant une page JSP.

Pour précompiler une page JSP, accédez à la page avec une chaîne de requête de? Jsp_precompile

http://hostname.com/mywebapp/mypage.jsp?jsp_precompile

La page JSP ne sera pas exécutée. Si le conteneur prend en charge précompilation, la page JSP sera compilée si nécessaire.

Voir aussi http://www.rgagnon.com/javadetails/java-0414 .html

Pablojim est sur la bonne voie. Vous avez juste besoin d'un peu plus d'informations pour obtenir une vue complète de ce qui se passe. Voici ce que je comprends.

prod, vous avez changé jsp qui exige d'autres jsps être recompilés. Pour eux recompiler une des 2 choses doivent se produire

  1. La version compilée du jsp doit être supprimé.
  2. Le jsp lui-même doit être modifié (ou même si elle est « touché » - date de modification est mis à jour)

Si vous avez besoin de vérifier que tous vos jsps fonctionnent, ils doivent tous être précompilés à l'aide d'une tâche de fourmi . Cela vous permet également de déployer le fichier de guerre avec les jsps précompilés dans le fichier de guerre. Cela devrait résoudre votre problème.

Si vos fichiers ne sont pas déployés dans un fichier de guerre, mais dans un format éclaté, vous devriez envisager sérieusement l'emballage de votre application web dans un fichier de guerre pour le déploiement. Cela en fait un joli paquet de déployer entre les environnements.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top