annotations tomcat7 servlet-3.0

annotations - ¿Qué hacer con las anotaciones después de configurar metadata-complete=“true”(que resolvió el inicio lento de Tomcat 7)?



tomcat7 servlet-3.0 (2)

Parece que el lento problema de inicio de Tomcat 7 se puede resolver con "metadata-complete" establecido en "true" en el web.xml, así:

<?xml version="1.0" encoding="UTF-8"?> <web-app metadata-complete="true" id="WebApp_ID" version="3.0"...

El problema es que Tomcat busca anotaciones en el inicio, y esto lo ralentiza significativamente. Mi tiempo se reduce de 25 segundos a 5 segundos. (Más información aquí: Tomcat y Servlet 3.0 Configuración web )

Sin embargo, tengo algunas anotaciones en mi código, como:

@ManagedBean @RequestScoped @Override ...

Estoy confundido: ¿funcionará mi código después de configurar metadata-complete = "true"? ¿Tengo que eliminar las anotaciones y mover todo a web.xml?


Aquí está lo que la especificación de Java Servlet 3.0 / 3.1 tiene que decir:

El descriptor de despliegue de la aplicación web contiene un atributo de metadatos completos en el elemento de la aplicación web . El atributo de metadatos completos define si el descriptor web.xml está completo o si se deben considerar otras fuentes de metadatos utilizadas por el proceso de implementación. Los metadatos pueden provenir del archivo web.xml , los archivos web-fragment.xml , las anotaciones en los archivos de clase en WEB-INF / classes y las anotaciones en las clases en archivos jar en el directorio WEB-INF / lib . Si metadata-complete se establece en "verdadero", la herramienta de implementación solo examina el archivo web.xml y debe ignorar las anotaciones como @WebServlet , @WebFilter y @WebListener presentes en los archivos de clase de la aplicación, y también debe ignorar cualquier Descriptor web-fragment.xml empaquetado en un archivo jar en WEB-INF / lib . Si el atributo de metadatos completos no se especifica o se establece en "falso", la herramienta de implementación debe examinar los archivos de clase y los archivos web-fragment.xml para los metadatos, como se especificó anteriormente.

Dicho esto y para responder a su pregunta: Sí, para optimizar el tiempo de inicio de Tomcat, debe usar metadata-complete="true" y colocar cada Servlet o Filtro o Escucha en su descriptor de implementación.


El inicio lento se debe a que cada archivo de clase en cada archivo JAR en /WEB-INF/lib también se analiza en busca de anotaciones específicas de Servlet 3.0. Aparentemente tienes muchos archivos JAR (grandes) en /WEB-INF/lib .

metadata-complete="true" indica que los archivos JAR en /WEB-INF/lib no necesitan ser analizados en busca de anotaciones específicas de Servlet 3.0, pero las propias clases de la aplicación web aún serán analizadas.

Tenga en cuenta que enlistó allí dos anotaciones JSF y una anotación Java SE, no cualquier anotación Servlet 3.0. Las anotaciones de Servlet 3.0 se enumeran en el paquete javax.servlet.annotation . JSF solo buscará anotaciones cuando el archivo JAR contenga un archivo compatible con JSF 2.0 /META-INF/faces-config.xml . No escaneará inmediatamente cada clase en cada archivo JAR. La anotación @Override Java SE no es una anotación de tiempo de ejecución, sino solo una ayuda en tiempo de compilación.

Ver también: