Мы недавно перешли на Servlet API 3.0. Поскольку мы разрабатываем структуру, которая иногда требует нескольких изменений в web.xml
, проекты, основанные на нашей структуре, должны обновлять свои web.xml
всякий раз, когда вносятся изменения в структуру.
Servlet API 3.0 представляет новые веб-фрагменты , которые делают это поведение более свободным и динамичным. Я создаю web-fragment.xml
и перемещаю туда все наши материалы из web.xml. Таким образом, теперь проектам нужно только определить следующие web.xml
и свои собственные дополнительные объявления.
<?xml version="1.0" encoding="UTF-8"?>
<web-app
version="3.0"
metadata-complete="false"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
</web-app>
Мы должны использовать metadata-complete="false"
, чтобы включить поиск фрагментов в JAR-файлах (наша инфраструктура имеет web-fragment.xml
в META-INF/
.
Поскольку у нас много зависимостей от других платформ и библиотек (около 80-90), а metadata-complete="false"
также запускает поиск аннотаций, для поиска во всех библиотеках может потребоваться недопустимое 12 секунд .
Механизм, как он есть, прекрасно работает, и мне нравится тот факт, что мы более оторваны от нашей среды, но время запуска фатально! Также нам нужно увеличить доступную память для Tomcat с -Xms256m -Xmx512m
до -Xms512m -Xmx1024m
, чтобы запустить ее без получения java.lang.OutOfMemoryError: Java heap space
(вызвано неэффективно реализованным процессором аннотаций Tomcat (кэшируется около 50 000 классов)).
Я знаю, что мы можем отключить поиск аннотаций в библиотеке, но, поскольку мы используем в основном сторонних разработчиков, у которых нет флага metadata-complete="true"
, это также не вариант.
Можем ли мы что-нибудь сделать, чтобы отключить поиск аннотаций? Или мы можем заставить контейнер сервлетов искать только в объявленных библиотеках web-fragment.xml
?
Мне бы очень хотелось использовать новую функцию веб-фрагментов, но с увеличенным временем запуска и памятью это невозможно.