#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')