Расширенный Сериализуемый класс, как использовать в удаленных вызовах? - PullRequest
0 голосов
/ 07 мая 2011

Вот моя ситуация:

У меня есть серверное приложение, предоставляющее удаленный интерфейс, который использует объекты bean в качестве параметров вызова / возвращаемых значений. Это, конечно, Сериализуемый. Например, доктор, который работает в хирургии.

Для моего локального приложения я расширил эти объекты вызова: например, у доктора есть дополнительное поле пароля, чтобы пароль доктора мог храниться локально. Теперь мои локальные объекты также можно сериализировать, и я также использую это для отправки их по локальной сети.

Какой самый простой способ для меня сейчас - использовать объекты моих расширенных реализаций при удаленном вызове на сервер? Сервер, очевидно, не может восстановить мои сериализованные реализации, потому что он не знает мои специализированные классы.

Нужно ли вручную создавать необработанный объект bean из моего расширенного объекта, копируя в основном все поля, кроме новых? или есть лучший / более простой способ сделать это? Перезапись методов сериализации не возможна, потому что, как я уже говорил выше, мне все еще нужно, чтобы мои локальные объекты тоже были нормально сериализуемыми.

1 Ответ

0 голосов
/ 07 мая 2011

Сервер явно не может восстановить мои сериализованные реализации, потому что он не знает моего специалиста классы.

Если ваш сервер не сможет узнать о ваших специализированных классах с помощью jar в пути к классам, вы не сможете сделать так, чтобы он не сериализировал ваши классы.

Создание прокси может быть углом для изучения, но без гарантии, что это сработает (недостаточно информации о вашей конкретной ситуации).

Более простым решением является использование корневого класса для ваших bean-компонентов, содержащего или расширяющего хеш-карту, и сохраняющего в нем свойства / значения. Вместо создания метода получения и установки для каждого свойства, реализуйте только одну пару и укажите имя свойства в виде строки.

На сервере не возникнет проблем с его десериализацией, если только один из Сериализуемых объектов на карте неизвестен серверу. Этот метод позволяет вам добавлять в него любую дополнительную информацию о бине, и сервер всегда будет знать, как с ней справиться.

Есть еще один хитрый угол, который вы можете попробовать. Класс Class сам по себе сериализуем. Следовательно, если вы передали его до того, как передали свои компоненты, возможно, сервер может узнать об этом в первую очередь. Я никогда не пробовал это сам, поэтому я не знаю, сработает ли это. Просто идея.

...