Отключить сканирование CDI-бинов в WAR

У меня есть пакет WAR с компонентами CDI. Развертывание пакета происходит очень медленно, потому что каждый раз во время развертывания пакет сканируется на наличие компонентов CDI. Есть ли возможность отключить этот процесс?


person Peter Penzov    schedule 16.06.2015    source источник
comment
Какую реализацию CDI вы используете? Какой сервер приложений?   -  person Steven Pessall    schedule 16.06.2015
comment
Вы хотите отключить CDI только для одного архива или полностью?   -  person Steven Pessall    schedule 16.06.2015
comment
Я использую Tomcat 8 с org.jboss.weld.servlet 2.2.12.Final   -  person Peter Penzov    schedule 16.06.2015
comment
Мне кажется, у вас что-то задом наперёд или, по крайней мере, что-то непонятно читателям. Вы упаковываете сервлет tomcat +weld, но хотите отключить сканирование CDI? Как еще вы хотите зарегистрировать свои бобы?   -  person John Ament    schedule 16.06.2015


Ответы (2)


Правильный способ — отключить обнаружение в beans.xml соответствующего архива:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                        http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
    version="1.1" bean-discovery-mode="none">
</beans>

Согласно спецификации CDI, архив удаляется из список bean-архивов.

person Steven Pessall    schedule 16.06.2015
comment
Ну, я получаю java.lang.IllegalStateException: Singleton не установлен для STATIC_INSTANCE => [] - person Peter Penzov; 16.06.2015
comment
Вы уверены, что можете отключить CDI для своего архива? - person Steven Pessall; 16.06.2015
comment
Я хочу ускорить развертывание пакета, отключив сканирование пакета инфраструктурой CDI, а не отключать использование во время выполнения. - person Peter Penzov; 16.06.2015
comment
И как CDI узнать, какие Managed Bean присутствуют, не сканируя архивы? Возможно, вы сможете ускорить развертывание, разбив свое программное обеспечение на несколько jar-файлов и поместив beans.xml только в некоторые из них. Но это уже совсем другой вопрос. - person Steven Pessall; 16.06.2015

У меня такое чувство, что то, что вы ищете, больше похоже на инструмент. Как уже упоминалось, Weld использует сканирование классов для поиска аннотаций. Есть способы ускорить это. Достаточно хорошо работает Jandex, процессор аннотаций, который можно использовать во время компиляции для создания индекса ( легче читать базу данных) ваших классов и аннотаций. Это значительно увеличивает время развертывания.

person John Ament    schedule 17.06.2015
comment
Интересное предложение. Но похоже, что Weld 2.2 уже использует Jandex (ссылка). - person Steven Pessall; 17.06.2015
comment
Да, сварка 2.2 использует Jandex. Однако для того, чтобы ваше приложение могло использовать Яндекс, вам необходимо включить плагин во время компиляции. - person John Ament; 17.06.2015
comment
Ах хорошо. Я должен попробовать это как-нибудь. - person Steven Pessall; 17.06.2015
comment
Привет, Джон, нужно ли что-то еще сделать, чтобы можно было привыкнуть к Яндексу? Я только что попытался развернуть довольно большое приложение с Яндексом и без него. Файл WAR с jandex имеет размер около 2 МБ или около того, а общий размер войны составляет 79 МБ против войны без какой-либо информации jandex, которая составляет 77 МБ. время развертывания не изменяется вообще. Во всяком случае, ВОЙНА с jandex, кажется, занимает на 2 секунды больше времени в последнем тесте, который я сделал. Таким образом, я не почувствовал особой пользы от наличия индекса в файлах WEB-INF/lib/jar. Я не уверен, что делаю что-то не так... но улучшения нет. - person 99Sono; 29.08.2017
comment
Играет ли роль тот факт, что файлы JAR содержат beans.xml с режимом обнаружения = все? Дает ли htis какое-то указание WELD не использовать jandex и просто выполнять обычное сканирование? Для меня это не имеет смысла... некоторая степень улучшения должна была ощущаться. - person 99Sono; 29.08.2017
comment
Здравствуйте, это очень старый вопрос. Я бы порекомендовал вам начать свой собственный вопрос @99Sono - person John Ament; 29.08.2017
comment
Сделанный. stackoverflow.com/questions/45995249/ - person 99Sono; 01.09.2017