Проблемы с загрузчиком классов WAS Liberty

У меня проблема с загрузчиком классов WAS Liberty, но я ничего не могу исправить. Проблема, кажется, с log4j2, который я использую.

Я работаю 16.0.0.4 (только что обновлен с 8.5.5.9, где эта проблема также существует). Я пытаюсь создать веб-приложение, используя Primefaces 6.0, который подключается к Elasticsearch 5.1.1.

Я добавил следующую зависимость в Maven:

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>${library.elasticsearch.version}</version>
</dependency>

Где-то вдоль дороги мне нужно сделать следующее:

TransportClient client = new PreBuiltTransportClient(settings)
    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(HOST), PORT));

При отладке этой строки выполняется следующий вызов метода в Elasticsearch (класс: org.elasticsearch.threadpool.ThreadPool, строка 203):

logger.debug("created thread pool: {}", entry.getValue().formatInfo(executorHolder.info));

Это бросает java.lang.NoSuchMethodError:

org/apache/logging/log4j/Logger.debug(java/lang/String;java/lang/Object;)

Обычно мы используем log4j 2.2, но я включил log4j2 2.7, как описано здесь (Elasticsearch v5.0 использует 2.6.2, v5.1 использует 2.7): https://discuss.elastic.co/t/issue-with-elastic-search-5-0-0-noclassdeffounderror-org-apache-logging-log4j-logger/64262/2

Я также попытался сделать это "предоставленным". В настоящее время я создаю файл войны, но я также пытался сделать это как ухо, тот же результат.

Я узнал об этой проблеме в Elasticsearch 5-alpha: https://github.com/elastic/elasticsearch/issues/19415 Здесь они отмечают, что хотят создать сервер и, следовательно, не видят log4j2 как консервативное решение, но предлагают вместо этого вы используете REST API (хотя, на момент написания, это было неприменимо для разработчиков Java).

Итак, вопрос в том, что мне делать? Должен ли я использовать REST API (например, Jest ( https://github.com/searchbox-io/Jest/tree/master/jest)) или?...

Код, который у меня работает, прекрасно работает при автономной работе за пределами Liberty.

ОБНОВИТЬ:

Кажется, что части Liberty действительно содержат log4j v2.2:

class load: org.apache.logging.log4j.core.appender.routing.Route from: file:/C:/deploy/liberty/workarea/org.eclipse.osgi/60/data/cache/com.ibm.ws.app.manager_0/.cache/lib/log4j-core-2.2.jar
...

Он загружает много классов из этой банки, но не тот, с которым у меня проблемы - он загружается из приложения, которое у нас есть. Я пытался поднять версию внутри нашего собственного приложения, но та же проблема.

0 ответов

Другие вопросы по тегам