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

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

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

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

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