pourquoi ne mojarra 2.1 analyse tous les autres la guerre à chaque démarrage du module?

StackOverflow https://stackoverflow.com/questions/5327070

  •  25-10-2019
  •  | 
  •  

Question

Nous avons une énorme application EAR avec environ 20 modules ejb-jar et guerre.

Pour chaque module de guerre qui Mojarra démarre, il semble qu'il tente d'annotation d'analyse sur toutes les autres guerres. D'autres guerres ne sont pas disponibles à la classloader, donc je reçois beaucoup d'exceptions. Il commence finalement de toute façon, mais il encombre mes journaux avec des avertissements, et je suppose que le temps de l'application pourrait être beaucoup moins sans que cela (+100 secondes).

Pour rendre clair, je la structure suivante:

EAR
+- ejb1
+- ejb2
+- war1
+- war2

Quand Mojarra commence WAR1, il se plaint de cours manquantes de WAR2 (ClassNotFoundException).

J'ai vu cette mise à jour vers Glassfish 3.1 (et donc, Mojarra 2.1).

Était-ce utile?

La solution

Je trouve la raison, et une solution de contournement.

Sur Glassfish 3.1, qui est livré avec Mojarra 2.1, la numérisation classpath est déléguée à Glassfish. Maintenant, Glassfish semble donner toutes les classes de fichier de l'oreille au lieu de la guerre. J'ai ouvert http://java.net/jira/browse/JAVASERVERFACES-1995 pour que (mais il semble vraiment être un bug Glassfish, pas JSF / Mojarra).

En attendant une solution, je patché Mojarra comme ceci: en com.sun.faces.config.ConfigManager.java, autour de la ligne 834, je commentais quelques lignes:

//            if (provider instanceof DelegatingAnnotationProvider &&
//                null != annotationScanner) {
//                // This InjectionProvider is capable of annotation scanning *and*
//                // injection.
//                ((DelegatingAnnotationProvider)provider).setAnnotationScanner(annotationScanner,
//                        metadataGetter.getJarNames());
//                scanUris = Collections.emptySet();
//            } else {
                // This InjectionProvider is capable of annotation scanning only
                scanUris = metadataGetter.getAnnotationScanURIs();
//            }

Les journaux sont maintenant beaucoup moins bavard. Il semble Glassfish scrute encore toutes les classes, donc je reçois encore des avertissements comme celui-ci:

[#|2011-03-18T13:47:05.019+0100|WARNING|oracle-glassfish3.1|javax.enterprise.system.container.web.org.glassfish.web.loader|_ThreadID=57;_ThreadName=Thread-1;|WEB9052: Unable to load class org.apache.myfaces.custom.inputTextHelp.HtmlTextHelpRenderer, reason: java.lang.ClassNotFoundException: org.apache.myfaces.custom.inputTextHelp.HtmlTextHelpRenderer|#]

Mais stacktrace de Mojarra, qui est déjà bien moins bavard.

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