Que faire avec les annotations après la définition de metadata-complete = “true” (qui a résolu le démarrage lent de Tomcat 7)?

Il semblerait que le problème de démarrage lent de Tomcat 7 puisse être résolu avec “metadata-complete” défini sur “true” dans le fichier web.xml, comme ceci:

 <web-app metadata-complete="true" id="WebApp_ID" version="3.0"... 

Le problème est que Tomcat parsing les annotations au démarrage, ce qui le ralentit considérablement. Mon temps est réduit de 25 secondes à 5 secondes. (Plus d’infos ici: Configuration Web Tomcat et Servlet 3.0 )

Cependant, j’ai des annotations dans mon code, comme:

 @ManagedBean @RequestScoped @Override ... 

Je suis confus – mon code fonctionnera-t-il après avoir défini metadata-complete = “true”? Dois-je supprimer les annotations et les transférer dans web.xml?

Le démarrage lent est dû au fait que chaque fichier de classe dans chaque fichier JAR dans /WEB-INF/lib est également analysé pour des annotations spécifiques à Servlet 3.0. Vous avez apparemment beaucoup de (gros) fichiers JAR dans /WEB-INF/lib .

metadata-complete="true" indique que les fichiers JAR dans /WEB-INF/lib n’ont pas besoin d’être analysés pour des annotations spécifiques à Servlet 3.0, mais les propres classes de l’application Web seront toujours analysées.

Notez que vous y avez répertorié deux annotations JSF et une annotation Java SE, et non des annotations Servlet 3.0. Les annotations Servlet 3.0 sont répertoriées dans le package javax.servlet.annotation . JSF recherchera uniquement des annotations lorsque le fichier JAR contient un fichier compatible avec JSF 2.0 /META-INF/faces-config.xml . Il n’parsingra pas immédiatement chaque classe dans chaque fichier JAR. L’annotation Java SE @Override n’est pas une annotation d’exécution, mais une aide à la compilation uniquement.

Voir également:

  • Fichiers d’emballage Facelets (modèles, inclus, composites) dans un JAR

Voici ce que la spécification Java Servlet 3.0 / 3.1 a à dire:

Le descripteur de déploiement d’application Web contient un atsortingbut de métadonnées complet sur l’élément Web-app . L’atsortingbut metadata-complete définit si le descripteur web.xml est complet ou si d’autres sources de métadonnées utilisées par le processus de déploiement doivent être sockets en compte. Les métadonnées peuvent provenir du fichier web.xml, des fichiers web-fragment.xml , des annotations sur les fichiers de classe dans WEB-INF / classes et des annotations sur les classes des fichiers jar du répertoire WEB-INF / lib . Si metadata-complete est défini sur “true”, l’outil de déploiement examine uniquement le fichier web.xml et doit ignorer les annotations telles que @WebServlet , @WebFilter et @WebListener présentes dans les fichiers de classe de l’application et ignorer également descripteur web-fragment.xml empaqueté dans un fichier jar dans WEB-INF / lib . Si l’atsortingbut metadata-complete n’est pas spécifié ou défini sur “false”, l’outil de déploiement doit examiner les fichiers de classe et les fichiers web-fragment.xml pour les métadonnées, comme indiqué précédemment.

Ceci étant dit et pour répondre à votre question: Oui, afin d’optimiser le temps de démarrage de Tomcat, vous devez utiliser metadata-complete="true" et mettre chaque servlet ou filtre ou écouteur dans votre descripteur de déploiement.