RMI, Wildfly 10x, Весна: ошибка NoClassDefFoundError: org.omg.CORBA.COMM_FAILURE

#java #spring #wildfly #rmi

#java #весна #wildfly #rmi

Вопрос:

У меня есть приложение с весенней загрузкой, которое предоставляет некоторые из своих интерфейсов другим проектам. Базовый процесс этого был опробован и протестирован в структуре проекта очень часто, поэтому это не должно быть «простой» проблемой RMI, такой как отсутствие сериализации или неправильный реестр.

Этот проект (закодированный на java7) и более старый проект (также java7) должны быть развернуты в wildfly 10.x контейнере.

В принципе, планируется, что наше старое приложение взаимодействует с приложением Spring-Boot для получения определенных наборов данных. При запуске приложения экземпляры компонентов создаются правильно, и базовое соединение, похоже, в порядке. Однако при использовании полностью допустимого вызова я получаю следующее:

ОШИБКА [io.undertow.request] (задача по умолчанию-5) UT005023: запрос на обработку исключений в /servlet/Foo: org.springframework.web.util.NestedServletException: ошибка обработки обработчика; вложенным исключением является java.lang.Ошибка NoClassDefFoundError: org/omg/CORBA/COMM_FAILURE

Я попытался отладить приложение, и при использовании вызывающего метода удаленный класс запускается и выполняет свою работу нормально, возвращаемое значение соответствует ожидаемому и возвращается в контекст spring.

Странная вещь — это часть трассировки стека:

java.lang.Ошибка NoClassDefFoundError: org/omg/CORBA/COMM_FAILURE в org.springframework.remoting.rmi.RmiClientInterceptorUtils.isCorbaConnectFailure(RmiClientInterceptorUtils.java:229) в org.springframework.remoting.rmi.RmiClientInterceptorUtils.isConnectFailure(RmiClientInterceptorUtils.java: 213) в org.springframework.remoting.rmi.RmiClientInterceptor.isConnectFailure(RmiClientInterceptor.java:282) в org.springframework.remoting.rmi.RmiClientInterceptor.Выполните вызов (RmiClientInterceptor.java:347) в org.springframework.remoting.rmi.RmiClientInterceptor.invoke(RmiClientInterceptor.java:259)

потому что, когда я пытаюсь получить доступ RmiClientInterceptorUtils.java:229 , Eclipse сообщает мне, что 229 не является допустимым номером строки. Это заставило бы меня поверить, что в Spring WebMVC существует разница в управлении версиями между сервером и клиентом. Это сохранялось, даже после изменения номера версии (теперь используется 3.2.8.RELEASE of spring-webmvc ) ошибки сохранялись.

Я проверил, может ли быть проблема с зависимостями, но CONN_FAILURE является частью rt.jar и, насколько я знаю, должен присутствовать в каждом проекте Java. Дальнейшее тестирование показало, что:

  • Проверенные исключения передаются нормально
  • примитивные значения (например, логические) передаются правильно
  • сложные объекты вызывают исключение

Я был бы признателен за любую помощь в этом вопросе, поскольку я не могу объяснить или исправить это. Спасибо.

ПРИМЕЧАНИЕ: найдена общая причина возникновения исключения — у класса отсутствовал Serializable интерфейс. Это, однако, не отвечает на вопрос, почему COMM_FAILURE возник NoClassDefFoundError, который я все еще хотел бы знать.

Комментарии:

1. Это очень странно. Это действительно должно быть частью JDK, и его также не следует использовать, кроме как в контексте RMI / IIOP.

2. Ну, он используется в контексте RMI. Дело в том, что произошел сбой соединения из-за отсутствия Serializable интерфейса, поэтому проверка на наличие исключений была выполнена правильно, но во время проверки мой контейнер попал в a NoClassDefFoundError , поэтому я не удаляю этот вопрос — потому что знание причины основного исключения не объясняет, почему в NoClassDefFoundError классе JDK есть a