Бэк JSF должен быть сериализуемым?

Я получаю эти сообщения:

[# | 2010-07-30T11: 28: 32.723 + 0000 | ПРЕДУПРЕЖДЕНИЕ |glassfish3.0.1|javax.faces|_ThreadID=37;_ThreadName=Thread-1;| Установка несериализуемого значения атрибута в ViewMap: (ключ: MyBackingBean, класс значения: foo.bar.org.jsf.MyBackingBean)|#]

Означают ли это, что мои компоненты поддержки JSF должны реализовывать Serializable? Или они ссылаются на какую-то другую проблему?

3 ответа

Решение

Да, вы правильно поняли. Представление в основном хранится в области видимости сеанса. Область сеанса находится в JSF, поддерживаемом сервлетом. HttpSession, Все атрибуты сеанса должны быть реализованы Serializable Это связано с тем, что средний контейнер сервлетов может сохранять данные сеанса на жестком диске среди других, чтобы иметь возможность обмениваться данными с другими серверами в кластере, или выдерживать большую нагрузку, или восстанавливать сеансы во время перезапуска сервера.

Хранение необработанных объектов Java на жестком диске возможно только в том случае, если соответствующий класс реализует Serializable, затем ObjectOutputStream может быть использован для записи их на жесткий диск и ObjectInputStream читать их с жесткого диска. Контейнер сервлетов управляет всем этим прозрачно, вам не нужно об этом беспокоиться. JSF просто предупреждает вас, чтобы вы поняли риски.

Бины, которые используют область сеанса, приложения или диалога, должны быть сериализуемыми, но бины, которые используют область запроса, не должны быть сериализуемыми. Источник: https://docs.oracle.com/javaee/6/tutorial/doc/gjbbk.html

Да, Backing Beans / Managed Beans в основном предназначены для сохранения состояния представления, поэтому должна быть реализована сериализация, но компоненты пользовательского интерфейса могут не разрешить его сериализацию, и JSF Runitime покажет вам сообщение об ошибке / предупреждение. Единственное, что вы можете сделать, это пометить такой компонент как переходный в MBeans.

Благодарю.

Другие вопросы по тегам