Используйте веб-фрагменты (Servlet API 3.0) в среде огромного проекта

Мы недавно перешли на 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. пространство (вызвано неэффективно реализованным процессором аннотаций Tomcat (кэшируется около 50 000 классов)).


Я знаю, что мы можем отключить поиск аннотаций в библиотеке, но, поскольку мы используем в основном сторонние продукты, у которых нет флага metadata-complete = "true" , это тоже не так. опция.

Можно ли что-нибудь сделать, чтобы отключить поиск аннотаций? Или мы можем заставить контейнер сервлетов искать web-fragment.xml только в объявленных библиотеках?

Я действительно хотел бы использовать новую функцию веб-фрагмента, но с увеличенным временем запуска и увеличенным объемом памяти это невозможно.

7
задан Mr_and_Mrs_D 14 April 2013 в 11:55
поделиться