Загруженный объект Eclipselink и сериализация JMS - PullRequest
0 голосов
/ 01 марта 2019

У нас есть сервер приложений Glassfish 5 с несколькими военными модулями и некоторыми клиентами приложений Java, которые обмениваются данными между веб-сервисами JMS и Rest.

Серверное приложение загружает объекты из баз данных с помощью Eclipselink и, при необходимости, отправляет ихчерез JMS автоматически.Теперь я сталкиваюсь с проблемой при десериализации объекта на стороне клиента, потому что JMS выдает исключение java.lang.ClassNotFoundException: org.eclipse.persistence.indirection.IndirectList.Дело в том, что у меня нет объекта IndirectList в моей сущности, но я предполагаю, что именно EclipseLink создает мои списки объектов как IndirectList.Вопрос в том, почему при восстановлении объекта на стороне клиента он пытается создать экземпляр IndirectList вместо List или ArrayList (я поместил MyObject.class в метод getBody () JMS)?Я могу исправить ошибку, добавив зависимость eclipselink на стороне клиента, но я не удовлетворен этим решением, поскольку обычно оно мне не нужно ...

Надеюсь, я хорошо объяснил свою проблему.Спасибо.

1 Ответ

0 голосов
/ 01 марта 2019

Самый простой способ решить java.lang.ClassNotFoundException - добавить отсутствующий класс в ваш путь к классам.Это действительно так просто.

Для чего бы это ни стоило, я обычно отговариваю людей использовать JMS ObjectMessage именно по такой причине.Если объект, который вы помещаете в сообщение, не является чрезвычайно простым, вы заканчиваете тем, что добавляете классы своему клиенту, которые могут не потребоваться, за исключением десериализации другого объекта.Кроме того, сериализация и десериализация объектов Java довольно медленная.Я обычно рекомендую, чтобы приложения обменивались данными с помощью простых байтовых массивов или даже использовали что-то вроде JSON (хотя JSON может быть медленным, есть более быстрые альтернативы).

...