Почему и как сериализация используется в веб-приложениях Java? - PullRequest
13 голосов
/ 21 мая 2009

Я работал над веб-приложением на Java, где фреймворк настаивает на том, чтобы все было сериализуемым. Я предполагаю, что это относится не только к фреймворку, но и к веб-приложениям на Java в целом, и мой вопрос: что такое фреймворк / сервер / что бы то ни было, что сериализует вещи? Это должно сделать это?

Примечание: я не знаю много о веб-приложениях или сериализации.

Ответы [ 5 ]

16 голосов
/ 21 мая 2009

Типичная проблема заключается в том, что во время репликации или отключения сервера внутренние сеансы HTTP «сериализуются» в постоянное хранилище, чтобы их можно было восстановить или предоставить общий доступ.

Сериализация сохраняет состояние объекта и позволяет восстановить это состояние в более позднее время.

11 голосов
/ 21 мая 2009

Это не является строго необходимым для большинства приложений, но может повысить производительность двумя способами:

  • Сеансы пользователя могут быть сериализованы на диск между запросами. Когда время между запросами от одного и того же пользователя намного больше, чем время, необходимое для обработки запроса, это может значительно сократить использование памяти сервером и позволить вам обслуживать гораздо больше пользователей.
  • Если вы используете балансировку нагрузки для распределения запросов по нескольким серверам, вам нужно либо обеспечить, чтобы все запросы одного и того же пользователя всегда обслуживались одной и той же машиной (что снижает гибкость балансировщика нагрузки), либо вам необходимо перемещать данные сеанса между серверами посредством сериализации.
3 голосов
/ 21 мая 2009

В зависимости от веб-инфраструктуры объекты в сеансе могут сохраняться на диске с помощью сериализации.

3 голосов
/ 21 мая 2009

Сериализация полезна в любой прикладной среде, а не только в веб-приложениях.

Одним из основных применений для сериализации является транспорт. Вы хотите скопировать или переместить объект на удаленный компьютер, скажем, UserProfile. Вы можете сериализовать UserProfile, отправить сериализованные данные (обычно XML) и десериализовать их в новый объект на принимающей стороне, после чего ими можно манипулировать, как если бы это был исходный объект.

Другое использование - сохранение состояния. У вас может быть игра, и вы хотите сохранить точное состояние игрового поля. Вы можете сериализовать объект Board, которому впоследствии может быть приказано сериализовать каждый из его плиток.

2 голосов
/ 22 мая 2009

Если вы используете Enterprise Java Beans (EJB) и имеете API-интерфейс Session Bean-компонента без состояния, то каждый экземпляр SSB выполняется в одном потоке на одной виртуальной машине Java, а его клиенты работают в разных потоках и, в общем, в разные виртуальные машины на разных компьютерах. Поскольку вы не можете передать ссылку на объект Java из одной JVM в другую, объект должен быть сериализован в строку, отправлен в другую JVM и затем десериализован обратно в объект. Эта сериализация / десериализация происходит как с входящими аргументами, так и с возвращаемым значением.

Если вы используете Java Message Service, объекты, которые вы отправляете в каждом сообщении, сериализуются в строку, сохраняются в базе данных, а затем десериализуются получателем сообщения в другое время и в любом месте.

И, как отмечает Уилл Хартунг, объекты HTTP-сеанса в целом являются общими для JVM. Если у вас есть кластер серверов приложений Glassfish Java EE, на котором запущено приложение электронной коммерции, запросы каждого клиента сбалансированы по нагрузке для любого доступного сервера, и этот сервер должен иметь возможность просматривать состояние сеанса клиента (имя клиента, корзина и т. Д.). ). Он может получить это только через сериализацию. В целях безопасности состояние сеанса также может быть записано на диск (например, в базу данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...