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