2009-04-29 6 views
1

Nous sommes en train de migrer notre application de notre environnement de production vers un tout nouveau centre de données. JavaEE 5, WAS 6.0 Problème étrange avec JSP includes

  • environnement de production actuel: Java 1.4, Java EE 3, ÉTAIT 5.1, JSF 2.1
  • New Data Center Environnement: Java 1.5, Java EE 5, WAS 6.1, JSF 2.1
Notre application est construite sur JSF 2.1 et contient le code ci-dessous dans l'un des appels AJAX:
request.getSession().getServletContext().getRequestDispatcher(
        "/results.faces").include(request, response);
Et c'est là que nous rencontrons des problèmes.

Cas 1: structure EAR selon les spécifications standard
. EAR -> WAR -> WEB-INF -> lib -> * .jar (tous les fichiers spécifiques à l'application sont sous WEB-INF/lib). Cela ne fonctionne pas et nous obtenons des exceptions pour la classe non trouvée par le chargeur de classe. En outre, l'appel AJAX ci-dessus échoue (pas de sortie générée)

Cas 2: EAR contient tous les fichiers JAR de l'application sur la racine (MANIFEST.MF a le chemin de classe spécifié manuellement).
Cette approche fonctionne parfaitement et tous les fichiers JAR sont chargés sans aucun problème. De plus, l'appel AJAX passe aussi bien.

Des idées pour lesquelles cela pourrait arriver.

- Ashish

Répondre

1

Oui, il est parce que les serveurs d'applications Java EE ont une hiérarchie de chargeurs de classe qui ressemble à ceci: d'abord le chargeur de classes d'amorçage est appelée; Ensuite, il y a le chargeur de classe de niveau EAR, puis le chargeur de classe de niveau WAR. Les chargeurs de classe supérieure ne regarderont pas ci-dessous les classes dont ils ont besoin. S'ils ne trouvent pas ce dont ils ont besoin, une ClassNotFoundException sera lancée. Par conséquent, les fichiers JAR dans WEB-INF/lib n'étaient pas visibles par le chargeur de classe de niveau EAR. Lorsque vous déplacez ces fichiers JAR, vous résolvez le problème. Il rend également visibles tous ces fichiers JAR à tous les fichiers WAR de votre fichier EAR.

Une chose que vous pourriez vouloir vérifier est la spécification pour votre web.xml et d'autres fichiers. Le servlet et les spécifications JSP ont changé quelque part le long du chemin, donc les JARs comme JSTL et autres sont passés de la version 1.0 à la version 1.1. Vous pouvez vérifier attentivement votre fichier web.xml et tous les fichiers JAR pour vous assurer qu'ils correspondent aux spécifications prises en charge par votre serveur d'applications Java EE. Malheureusement, la mise à niveau du serveur d'applications n'est pas aussi simple que l'insertion d'un fichier EAR ou d'un fichier WAR dans le fichier.