Pregunta

Tenemos una gran aplicación de oído con aproximadamente 20 módulos EJB-JAR y WAR.

Para cada módulo de guerra que comienza Mojarra, parece que está tratando de escanear la anotación en cualquier otra guerra. Otras guerras no están disponibles para el cargador de clases, por lo que obtengo muchas excepciones. Eventualmente comienza de todos modos, pero clasifica mis registros con advertencias, y supongo que el tiempo de inicio de la aplicación podría ser mucho menor sin esto (+100 segundos).

Para dejarlo en claro, tengo la siguiente estructura:

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

Cuando Mojarra comienza War1, se queja de las clases faltantes de War2 (ClassNotFoundException).

Vi esto al actualizar a Glassfish 3.1 (y por lo tanto, Mojarra 2.1).

¿Fue útil?

Solución

Encontré la razón y algo de solución.

En Glassfish 3.1, que se envía con Mojarra 2.1, el escaneo de clases se delega a peces de vidrio. Ahora, Glassfish parece dar todas las clases de archivo de orejas en lugar de la guerra. abrí http://java.net/jira/browse/javaserverfaces-1995 Para eso (pero realmente parece ser un insecto de pez de vidrio, no JSF/Mojarra).

Mientras esperaba una solución, reparé a Mojarra así: en com.sun.faces.config.configmanager.java, alrededor de la línea 834, comenté algunas líneas:

//            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();
//            }

Los registros ahora son mucho menos detallados. Parece que el pez vidrio todavía está escaneando todas las clases, por lo que todavía recibo advertencias como esta:

[#|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|#]

Pero no hay StackTrace de Mojarra, que ya es muy poco detallado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top