Spirng не удается создать компоненты jee:jndi-поиска после перехода на springboot из pure spring

#java #spring #spring-boot #websphere-liberty

Вопрос:

Пытаюсь перейти с чистой весны на весеннюю загрузку. Некоторые компоненты настроены в XML и ссылаются на объекты JNDI, предоставляемые веб-сервером (WLP), таким образом, т. е.:

  <jee:jndi-lookup id="executorService"
                 jndi-name="concurrent/workManagerTaskExecutor"
                 expected-type="java.util.concurrent.ExecutorService"/>
 

Приложение упаковано в военный архив и развернуто на сервере WLP. Теперь с помощью springboot приложение выходит из строя во время инициализации контекста spring с сообщением об ошибке для вышеуказанного компонента:

Не удалось вызвать метод инициализации; вложенным исключением является javax.naming.Исключение ServiceUnavailableException: Не удалось получить начальный контекст из-за сбоя связи. Поскольку URL-адрес поставщика не был указан, URL-адрес поставщика по умолчанию «corbaloc:iiop:1.0@492d7185007d:2809/NameService» был использован. Убедитесь, что любая информация об адресе начальной загрузки в URL-адресе верна и что целевой сервер имен запущен. Возможные причины, помимо неправильного адреса начальной загрузки или недоступного сервера имен, включают сетевую среду и конфигурацию сети рабочей станции. [Корневым исключением является org.omg.CORBA.ПЕРЕХОДНЫЙ ПРОЦЕСС: java.net.ConnectException: Отказано в подключении (отказано в подключении):хост=172.17.0.4,порт=2809 идентификатор виртуальной машины: IBM второстепенный код: E02 завершено: Нет]

Во время миграции, как правило, особых изменений сделано не было:

@SpringBootApplication
@ImportResource("classpath:beans-definitions.xml")
приложение общедоступного класса расширяет SpringBootServletInitializer {
 общедоступная статическая пустота main(строка[] args) {
 SpringApplication.запуск(Application.class, аргументы);
 }

 @Переопределить
защищенную настройку SpringApplicationBuilder(приложение SpringApplicationBuilder) {
 возвратное заявление.источники(Application.class);
 }
}

Пробовал с разными версиями springboot, и это то же самое. С чистой весной — никаких проблем.. Пожалуйста, любые предложения, с чем связана эта ошибка. Как springboot связан с тем, как spring извлекает объект JNDI..? 🙁

Спасибо

Ответ №1:

Это какой-то кошмар, в пути к классу была переходная зависимость:

 group: 'com.ibm.ws.ejb.thinclient', name: 'com.ibm.ws.ejb.thinclient', version:'8.5.5.13'
 

Позже я обнаружил, что для задачи gradle build WAR она была исключена (и я нашел ее только после того, как исключил эту зависимость :D):

 war {
  rootSpec.exclude('**/com.ibm.ws.ejb.thinclient-*.jar')
  ..
}
 

Когда я переключился на spring boot, я начал использовать другую задачу для упаковки, и я не заметил этого глупого исключения, кто бы знал, что это глупое исключение было вызвано lib..

 bootWar {}
 

Решение:
Исключите эту транзитивную зависимость com.ibm.ws.ejb.thinclient:

 exclude(module: 'com.ibm.ws.ejb.thinclient')
 

или объявите его как только для компиляции

  compileOnly(group: 'com.ibm.ws.ejb.thinclient', name: 'com.ibm.ws.ejb.thinclient', version:'8.5.5.13')