Как работает сериализация с java / j2ee и в связи с сохранением этого объекта в сеансе? - PullRequest
2 голосов
/ 11 сентября 2010

Если у меня сложный объект с сотнями полей String и объектов объектов.Некоторые реализуют Serializable, а некоторые нет.

Как сервер j2ee сериализует эти данные в сеансе.Буду ли я ожидать, что все данные будут возвращены.Даже объекты объектов.

Session.setAttribute (data)

Например, Session.getAttribute () == data.getData (). GetData (). GetData (). GetData1 ()

Будет ли объект, возвращенный из getData1 (), возвращаться правильно?

(я использую и Tomcat 6, и Websphere 6 +)

Ответы [ 2 ]

8 голосов
/ 11 сентября 2010

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

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

1 голос
/ 11 сентября 2010

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

РЕДАКТИРОВАТЬ: следует добавить, что, будучи статическими и переходными полями, конечно, не сериализуются.Я стараюсь не включать статические изменяемые поля в вещи, которые нужно сериализовать.

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