Perché mojarra 2.1 scansione di ogni altra guerra su ogni avvio del modulo?
Domanda
Abbiamo una vasta applicazione EAR con circa 20 moduli EJB-JAR e di guerra.
Per ogni modulo guerra che Mojarra inizia, a quanto pare sta cercando di annotazioni di scansione su ogni altra guerra. Altre guerre non sono disponibili per il programma di caricamento classe, in modo da ottenere molte eccezioni. E alla fine si avvia comunque, ma ingombra miei ceppi con avvisi, e credo che il tempo di applicazione di avvio potrebbe essere molto meno senza questo (+100 secondi).
Per chiarire, ho seguente struttura:
EAR
+- ejb1
+- ejb2
+- war1
+- war2
Quando si avvia Mojarra war1, si lamenta classi manca dal War2 (ClassNotFoundException).
Ho visto questo quando l'aggiornamento a Glassfish 3.1 (e, quindi, Mojarra 2.1).
Soluzione
Ho trovato la ragione, e alcuni workaround.
su GlassFish 3.1, fornito con Mojarra 2.1, scansione classpath è delegata a Glassfish. Ora, Glassfish sembra dare tutte le classi di file ear invece di guerra. Ho aperto http://java.net/jira/browse/JAVASERVERFACES-1995 per questo (ma sembra davvero essere un bug Glassfish, non JSF / Mojarra).
In attesa di una correzione, ho patchato Mojarra in questo modo: in com.sun.faces.config.ConfigManager.java, intorno alla linea 834, ho commentato alcune linee:
// 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();
// }
I registri sono ora molto meno prolissa. Sembra Glassfish è ancora la scansione ogni classi, quindi ho ancora avvertimenti come questo:
[#|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|#]
Ma nessuno stacktrace da Mojarra, che è già molto meno prolisso.