#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