Configuración de com.sun.faces.config.ConfigureListener

Estoy revisando un proyecto JSF actual donde la configuración web.xml contiene:

  • FacesServlet (configurado en *.xhtml )
  • the com.sun.faces.config.ConfigureListener

Estoy usando la implementación de JSF 2.2 y Mojarra.

Estoy confundido sobre el ConfigureListener . ¿Se necesita esta clase en la configuración? ¿Cuál es el objective de esta clase? No pude encontrar ninguna información y la clase casi no tiene javadoc.

Si elimino esta configuración, todo parece funcionar de la misma manera. Por lo tanto, supongo que el ConfigureListener podría o debería eliminarse, pero no estoy seguro.

El ConfigureListener normalmente se registra automáticamente mediante el archivo /META-INF/jsf_core.tld archivo JAR de implementación de Mojarra. Además, ConfigureListener se registra explícitamente a través de Servlet 3.0 ServletContainerInitializer para solucionar un antiguo error de GlassFish v3 (nota: v3, no 3.0.x, por lo tanto realmente esa primera versión de GF3).

Existen situaciones en las que el registro automático a través del archivo .tld es insuficiente. El más conocido es cuando la aplicación web se despliega en Jetty . Esto se explica en detalle en esta sección de preguntas y respuestas: no se pudo encontrar Fábrica: javax.faces.context.FacesContextFactory .

Además, como se mencionó anteriormente y en esa respuesta detallada, GlassFish v3 tiene un error en el que el archivo TLD se escanea demasiado tarde y, por lo tanto, JSF no pudo hacer su inicialización necesaria en el momento correcto. Entonces necesitaría registrar explícitamente el ConfigureListener en web.xml de web.xml .

Pero si funciona para usted cuando no está registrado explícitamente en web.xml , simplemente guárdelo. Menos ruido en web.xml es mejor. Pero si posiblemente se despliega en un contenedor sensible al problema mencionado (por lo tanto, cuando su aplicación web es realmente distribuida públicamente y usted no tiene control sobre la elección del contenedor objective), será mejor que la guarde “para el caso ese”.


Actualización : parece que Tomcat 8.x muestra un comportamiento con errores cuando esta entrada está habilitada en web.xml : este oyente se ejecutará realmente dos veces en lugar de una sola vez. La consecuencia es desastrosa: entre otros, todos los oyentes de eventos JSF se registrarán dos veces y las bibliotecas de componentes se cargarán dos veces. Esto solo conduce a conflictos durante el tiempo de ejecución. En otras palabras, al implementar en Tomcat, asegúrese de que esta entrada se elimine de web.xml .