#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
интерфейса, поэтому проверка на наличие исключений была выполнена правильно, но во время проверки мой контейнер попал в aNoClassDefFoundError
, поэтому я не удаляю этот вопрос — потому что знание причины основного исключения не объясняет, почему вNoClassDefFoundError
классе JDK есть a