Использование microprofile-config-api: WELD-001408: Неудовлетворенные зависимости для типа String с квалификаторами @ConfigProperty
Я играю с функцией mpConfig-1.2, но она не работает в моей настройке.
Использование Liberty 18.0.0.2.
Добавили зависимость maven для microprofile-config-api, CDI работает нормально, но при запуске @ConfigProperty происходит сбой с сообщением
[ERROR ] CWWKZ0106E: Could not start web application demo-service-ear {1.0-SNAPSHOT}.
[ERROR ] CWWKZ0004E: An exception occurred while starting the application demo-service-ear {1.0-SNAPSHOT}. The exception message was: com.ibm.ws.container.service.state.StateChangeException: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type String with qualifiers @ConfigProperty
at injection point [BackedAnnotatedField] @Inject @ConfigProperty private no.klp.bpm.task.KOPSTask.endpoint2
at no.klp.bpm.task.KOPSTask.endpoint2(KOPSTask.java:0)
Аннотация выглядит так:
@Inject
@ConfigProperty(name="rule.engine.host", defaultValue="ukjent!")
private String endpoint2;
Что здесь может быть не так?
/ BWA
0 ответов
Справочная информация:
Это проблема видимости загрузчика классов, которая в основном возникает, когда более старые конфигурации (например, до 2017 года) переносятся в приложения, использующие MicroProfile. В Liberty API были классифицированы по следующим категориям:
api
(например, API JavaSE)spec
(например, API JavaEE)ibm-api
(напримерcom.ibm.websphere.*
API)third-party
(напримерorg.eclipse.persistence.*
API из функции JPA 2.1)
По умолчанию, api,spec,ibm-api
видны приложениям, что означает third-party
это не так (потому что сторонние библиотеки могут нарушать изменения, которые нарушают политику нулевой миграции Liberty).
Затем, когда появились функции MicroProfile, они не вписывались ни в одну из перечисленных выше категорий API (недостаточно универсальных, чтобы их можно было рассматривать spec
, но более стабильный, чем third-party
), поэтому мы сделали видимость нового типа API:
stable
(напримерorg.eclipse.microprofile.*
API)
Новый stable
Тип API теперь включен по умолчанию, поэтому приложения могут видеть эти API.
Объяснение вопроса:
Так как у вас был apiTypeVisibility
жестко spec, ibm-api, api, third-party
это фактически исключило новый stable
Тип API, по которому были классифицированы API MicroProfile. Чтобы исправить эту проблему, вы можете указать:
<classloader apiTypeVisibility="spec, stable, ibm-api, api, third-party"/>
Это довольно многословно, и все, что вы действительно пытаетесь сделать, это включить third-party
API должны быть видны, в дополнение к тому, что вы получаете по умолчанию. По этой причине с 18.0.0.3 теперь вы можете использовать синтаксис "chmod style" для предоставления или отмены отдельных типов API с +
или же -
приметы. Например, выше <classloader>
конфиг эквивалентен:
<!-- Read as: In addition to default values, also grant 'third-party' api type visibility -->
<classloader apiTypeVisibility="+third-party"/>