Сохранение объектов в сеансе сервлета и java.io.NotSerializableException - PullRequest
2 голосов
/ 17 мая 2010
 SEVERE: IOException while loading persisted sessions:
         java.io.WriteAbortedException:
         writing aborted; java.io.NotSerializableException:

Это означает, что этот объект нельзя сохранить на жестком диске.

Означает ли это, что не безопасно хранить в объектах Session, которые не реализуют "Serializable"?

Я не слышал, что существуют ограничения на сохранение несериализуемых объектов в объекте Session.

Это просто означает, что Tomcat всегда будет хранить их в памяти, верно?

Ответы [ 3 ]

8 голосов
/ 17 мая 2010

Означает ли это, что это не безопасно хранить в сеансе объекты, которые не реализовать "Сериализуемый"?

Совершенно верно, да.

Однако, многие контейнеры сервлетов позволят вам избежать неприятностей, если им на самом деле не нужно выполнять сериализацию.

Например, Tomcat не волнует, являются ли атрибуты сеанса сериализуемыми или нет, , если вы не включите репликацию сеанса. Он должен иметь возможность сериализации атрибутов для репликации их на другие серверы в кластере.

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

2 голосов
/ 17 мая 2010

Спецификация Servlet определяет правила распределения сеансов (спецификация 2.5 фактически не описывает, как сохранить сеанс для чего-либо, кроме распределенных сред, но семантика должна быть одинаковой). В таких случаях обычно проще всего реализовать Serializable. Вы также можете использовать интерфейс HttpSessionActivationListener, если хотите получать уведомления об этих событиях.

1 голос
/ 17 мая 2010

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

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