Подтвердить что ты не робот

Что делать с аннотациями после установки метаданных-complete = "true" (которые разрешили медленный запуск Tomcat 7)?

Похоже, что медленная проблема запуска Tomcat 7 может быть решена с помощью "metadata-complete", установленного в "true" в web.xml, например:

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

Проблема заключается в том, что Tomcat сканирует аннотации при запуске, и это значительно замедляет работу. Мое время сокращается с 25 секунд до 5 секунд. (Подробнее здесь: Веб-настройка Tomcat и Servlet 3.0)

Однако у меня есть некоторые аннотации в моем коде, например:

@ManagedBean
@RequestScoped
@Override
...

Я запутался - будет ли мой код работать после того, как я установил метаданные-complete = "true"? Нужно ли удалять аннотации и переместить все в web.xml?

4b9b3361

Ответ 1

Медленный запуск вызван тем, что каждый отдельный файл класса в каждом отдельном файле JAR в /WEB-INF/lib также сканируется для специальных аннотаций сервлета 3.0. У вас, видимо, много (больших) JAR файлов в /WEB-INF/lib.

metadata-complete="true" указывает, что файлы JAR в /WEB-INF/lib не нужно сканировать для специальных аннотаций сервлета 3.0, но собственные классы webapp все еще будут проверяться.

Обратите внимание, что вы указали там две аннотации JSF и одну аннотацию Java SE, а не аннотации сервлетов 3.0. Аннотации Servlet 3.0 перечислены в пакете javax.servlet.annotation. JSF будет сканировать только аннотации, когда файл JAR содержит файл /META-INF/faces-config.xml, совместимый с JSF 2.0. Он не будет сразу сканировать каждый отдельный класс в каждом файле JAR. Аннотации Java SE @Override не является аннотацией во время выполнения, а только средством для компиляции.

См. также:

Ответ 2

Вот что такое Java Servlet 3.0/3.1 Спецификация должен сказать:

Дескриптор развертывания веб-приложения содержит метаданные, полныеатрибут в элементе веб-приложения. Атрибут метаданных - полныйопределяет, завершен ли дескриптор web.xml, или другой Источники метаданных, используемые процессом развертывания, должны быть считается. Метаданные могут быть получены из файла web.xml, web-fragment.xmlфайлы, аннотации в файлах классов в WEB-INF/classes и аннотации на классы в файлах jar в каталоге WEB-INF/lib. Если metadata-complete установлено значение "true", инструмент развертывания только проверяет файла web.xml и должны игнорировать аннотации, такие как @WebServlet, @WebFilter и @WebListener, присутствующих в файлах классов приложения, а также должен игнорировать любой дескриптор web-fragment.xmlупакован в файл jar в WEB-INF/lib. Если metadata-completeатрибут не указан или установлен в значение "false", средство развертывания должен проверять файлы классов и файлы web-fragment.xml для метаданные, как указано ранее.

Это будет сказано и ответить на ваш вопрос: Да, чтобы оптимизировать время запуска Tomcat, вам нужно использовать metadata-complete="true" и поместить каждый сервлет или фильтр или прослушиватель в дескриптор развертывания.