Проблем с преносимостта при изпълнението на 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.ZookeeperRegistry .portOffset
на com.my-company.core.internal.util.ZookeeperRegistry.portOffset(ZookeeperRegistry.java:0) WELD-001475: Следните компоненти съвпадат по тип, но никой няма съвпадащи квалификатори: - Метод на производителя [По избор ] с квалификатори [@Any @ConfigurationValue], декларирани като [[UnbackedAnnotatedMethod] @ConfigurationValue @Dependent @Produces org.wildfly.swarm.container.runtime.cdi.ConfigurationValueProducer.produceOptionalConfigValue(InjectionPoint)]

Много благодаря предварително.


person Jose Manuel Gomez Alvarez    schedule 18.06.2019    source източник
comment
Това почти изглежда, че имате зависимост само от API на MicroProfile Config (org.eclipse.microprofile.config:microprofile-config-api), но не и от Thorntail MP Config fraction (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, така че библиотеката да не бъде включена във войната/ухото.
person Jose Manuel Gomez Alvarez    schedule 19.06.2019