Проблема переносимости с реализацией конфигурации MicroProfile Config в Thorntail

Этот вопрос касается правильного способа чтения конфигурации в службе REST переносимым способом, например должен работать на Thorntail 2.4.0 и Wildfly 15.

Это была оригинальная реализация, предложенная Thorntail.

@Inject
    @org.wildfly.swarm.spi.runtime.annotations.ConfigurationValue("swarm.port.offset")
private Optional<String> portOffset;

Это не работало в WildFly 15, поэтому мы изменили этот код следующим образом:

@Inject
@ConfigProperty(name="swarm.port.offset")
private Optional<String> portOffset;

И при условии, что системное свойство установлено, оно работает нормально.

Однако в Thorntail возникает следующее исключение:

org.jboss.weld.exceptions.DeploymentException: WELD-001408: неудовлетворенные зависимости для типа Необязательно с квалификаторами @ConfigProperty
в точке внедрения [BackedAnnotatedField] @Inject @ConfigProperty private com.my-company.core.internal.util.ZookeeperRe .portOffset
в com.my-company.core.internal.util.ZookeeperRegistry.portOffset (ZookeeperRegistry.java:0) WELD-001475: следующие bean-компоненты соответствуют типу, но ни у одного из них нет соответствующих квалификаторов: - Метод производителя [Необязательно ] с квалификаторами [@Any @ConfigurationValue], объявленными как [[UnbackedAnnotatedMethod] @ConfigurationValue @Dependent @Produces org.wildfly.swarm.container.runtime.cdi.ConfigurationValueProducer.produceOptionalConfigPointValue] (InjectionalConfigPointValue)

Спасибо заранее.


person Jose Manuel Gomez Alvarez    schedule 18.06.2019    source источник
comment
Это почти похоже на то, что у вас есть зависимость только от API конфигурации MicroProfile (org.eclipse.microprofile.config:microprofile-config-api), но не от фракции Thorntail MP Config (io.thorntail:microprofile-config). Разве это не так?   -  person Ladicek    schedule 19.06.2019


Ответы (1)


Наконец, код запускается в обеих средах с одним файлом pom.

Ниже я подробно рассказываю о принятом решении.

  1. Используется @ConfigProperty, а не @ org.wildfly.swarm.spi.runtime.annotations.ConfigurationValue
  2. Используйте @Any @ConfigProperty, разрешено WELD-001475
  3. Что касается зависимостей maven, я включил эту зависимость независимо от того, строим ли мы для Thorntail или для WildFLy.

    <dependency>
        <groupId>org.eclipse.microprofile.config</groupId>
        <artifactId>microprofile-config-api</artifactId>
    </dependency>
    

Фактическая версия определяется с помощью dependencyManagement для микропрофиля Eclipse:

<dependencyManagement>
    <dependencies>
        <dependency>
           <groupId>org.eclipse.microprofile</groupId>
           <artifactId>microprofile</artifactId>
           <version>2.2</version>
           <type>pom</type>
           <scope>import</scope>
       </dependency>   
...
</dependencyManagement>
  1. Профили Maven используются для импорта реализаций Thorntail, которые не являются «основными», например microprofile-health, но в случае microprofile-config в этом нет необходимости. Для WildFly предоставляется реализация org.wildfly.extension.microprofile.config.smallrye, поэтому библиотека не должна быть включена в war / ear.
person Jose Manuel Gomez Alvarez    schedule 19.06.2019