Исключение компонента CDI на основе конфигурации PropertyFileConfig (DeltaSpike, WebSphere 8.5.5)

#java #jakarta-ee #cdi #deltaspike

#java #джакарта-ee #cdi #deltaspike

Вопрос:

Я пытаюсь исключить реализацию компонента, используя DeltaSpike 1.0 @Exclude -аннотацию. Исключение должно основываться на таком значении свойства, как это:

 @Exclude(onExpression = "providerimplementation!=mock")
 

Я создал PropertyFileConfig возвращающее мое .properties имя файла, чтобы позволить DeltaSpike получать настроенное значение, и использовал это @Exclude в двух разных реализующих компонентах, каждый из которых был исключен, как указано выше.

Конфигурация включена в EAR в виде .jar файла, и обе реализации находятся в разных .jar файлах внутри EAR.

Я пытаюсь развернуть весь архив на сервере WebSphere 8.5.5, и при запуске я получаю a javax.enterprise.inject.AmbiguousResolutionException для точки ввода.

Мне кажется, что PropertyFileConfig это не было подобрано до разрешения выражения, хотя я нашел ссылки на такого рода шаблоны (http://deltaspike.apache.org/core.html#exclude и https://groups.google.com/forum /#!topic/java-config/xsleMKST3rU), поэтому мне интересно, что не так с моей настройкой.

Комментарии:

1. Является ли использование WAR вариантом? В настоящее время у нас нет большой поддержки EARs в DeltaSpike из-за различных проблем с загрузчиком классов.

2. Насколько я знаю, WebSphere (по крайней мере, полный профиль) не поддерживает развертывание WAR-файлов самостоятельно. В настоящее время мы используем настройку «skinny WAR» для развертывания, поэтому каждый зависимый JAR размещается непосредственно внутри EAR. Может ли эта настройка быть проблемой? Обычная инъекция работает просто отлично.

Ответ №1:

Первый ответ :

К сожалению, свойства, определенные с помощью функции PropertyFileConfig, нельзя использовать с @Exclude .

Это связано с тем, что расширение ConfigurationExtension регистрирует PropertyFileConfig только в конце инициализации контейнера (что, возможно, является обязательным, поскольку классы PropertyFileConfig используются в качестве компонентов CDI)

Вместо этого вы должны использовать реализации configSource по умолчанию: http://deltaspike.apache.org/documentation/configuration.html#_configsources_provided_by_default или создайте свой собственный пользовательский конфигурационный источник

В частности, быстрый обходной путь здесь заключается в определении вашего свойства в файле свойств по умолчанию: META-INF/apache-deltaspike.properties вместо пользовательского файла свойств

Редактировать :

На самом деле мой предыдущий ответ неполон (по крайней мере, с последней версией DeltaSpike (1.3.0 на сегодняшний день)): javadoc для PropertyFileConfig теперь документирует это ограничение И показывает другой способ настройки пользовательских файлов свойств с помощью средства serviceloader : http://deltaspike.apache.org/javadoc/1.3.0/org/apache/deltaspike/core/api/config/PropertyFileConfig.html