Включение функции mpHealth ломает автономное приложение в Open Liberty

В настоящее время я играю с Open Liberty 18.0.0.4 и его поддержкой Microprofile. Когда я пытаюсь создать автономный исполняемый Jar, который включает в себя функцию mpHealth-1.0, при запуске происходит сбой

[ERROR   ] CWWKF0033E: The singleton features com.ibm.websphere.appserver.javax.servlet-3.1 and com.ibm.websphere.appserver.javax.servlet-4.0 cannot be loaded at the same time.  The configured features mpHealth-1.0 and jaxrs-2.1 include one or more features that cause the conflict. Your configuration is not supported; update server.xml to remove incompatible features.
[ERROR   ] CWWKF0033E: The singleton features com.ibm.websphere.appserver.javax.annotation-1.2 and com.ibm.websphere.appserver.javax.annotation-1.3 cannot be loaded at the same time.  The configured features mpHealth-1.0 and jaxrs-2.1 include one or more features that cause the conflict. Your configuration is not supported; update server.xml to remove incompatible features.
[ERROR   ] CWWKF0033E: The singleton features com.ibm.websphere.appserver.javaeeCompatible-8.0 and com.ibm.websphere.appserver.javaeeCompatible-7.0 cannot be loaded at the same time.  The configured features jsonb-1.0 and mpHealth-1.0 include one or more features that cause the conflict. Your configuration is not supported; update server.xml to remove incompatible features.
[ERROR   ] CWWKF0033E: The singleton features com.ibm.websphere.appserver.javax.cdi-2.0 and com.ibm.websphere.appserver.javax.cdi-1.2 cannot be loaded at the same time.  The configured features jsonb-1.0 and mpHealth-1.0 include one or more features that cause the conflict. Your configuration is not supported; update server.xml to remove incompatible features.

Я использую jaxrs-2.1 и jsonb-1.0, и все работает отлично. Как только я добавляю функцию mpHealth-1.0, я получаю вышеуказанные ошибки. Вот соответствующий фрагмент server.xml:

    <featureManager>
        <feature>jaxrs-2.1</feature>
        <feature>jsonb-1.0</feature>
        <feature>mpHealth-1.0</feature>
    </featureManager>

И вот что говорит запущенный Jar в конце (но никакая служба не будет доступна):

[AUDIT   ] CWWKF0012I: The server installed the following features: [jsonb-1.0, servlet-4.0, jndi-1.0, mpHealth-1.0, json-1.0, cdi-1.2, jsonp-1.1, jaxrsClient-2.1, jaxrs-2.1].

1 ответ

Решение

Эта ошибка возникает из-за того, что не все функции OpenLiberty совместимы друг с другом, и если вы включаете конфликтующие функции, вы получаете сообщение об ошибке, указывающее, какие функции конфликтуют. Это должно быть разрешено путем включения дополнительных функций в вашем server.xml, чтобы помочь среде выполнения выяснить, какие функции должны быть включены.

Двумя основными причинами конфликта свойств являются:

  1. Попытка включения двух версий одной и той же функции (например, foo-1.0 а также foo-2.0)
  2. Включено сочетание функций Java EE 7 и Java EE 8 (например, cdi-1.2 из EE 7 и jaxrs-2.1 из EE 8)

Чтобы разбить функциональные зависимости того, что вы включили, это выглядит примерно так:

- jsonb-1.0 -> jsonp-1.1
- jaxrs-2.1 -> cdi-2.0
            -> servlet-4.0
- mpHealth-1.0 -> cdi-1.2 (tolerates cdi-2.0)

Причина, по которой вы видите эти ошибки, заключается в том, что у диспетчера функций OpenLiberty нет достаточных доказательств того, что он может переключаться при сбое mpHealth-1.0 -> cdi-2.0 зависимость.

Чтобы это исправить, у вас есть два варианта:

  1. Включить cdi-2.0 особенность в server.xml. Это должно помочь устранить неоднозначность для диспетчера функций, чтобы он мог переключаться на mpHealth-1.0 -> cdi-2.0 зависимость.
  2. Вместо включения отдельных функций, включите microProfile-2.0 удобная функция. Здесь вам не придется беспокоиться о конфликтах функций, но он будет загружать больше функций во время выполнения (например, MP Metrics, MP Config, MP Fault Tolerance и т. Д.), Что повлечет за собой дополнительное время запуска и затраты памяти.
Другие вопросы по тегам