Кластеризация проекта Java для высокой доступности: как сериализовать классы из сторонних платформ, используемых в проекте? - PullRequest
0 голосов
/ 04 июля 2018

Я выделяю свой проект на Payara Server с кластеризацией для высокой доступности. Мой проект находится в Java Web и использует JSF Framework с Primefaces с некоторыми расширенными классами, например, DataTable (org.primefaces.component.datatable.DataTable).

Поскольку этот класс не реализует сериализуемый интерфейс, я не могу преуспеть при сбое репликации сервера, поскольку сервер требует, чтобы все классы были сериализованы.

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

Ответы [ 2 ]

0 голосов
/ 10 июля 2018

Многие пользователи используют компоновку - «привязку» к bean-объектам видимости, которых следует избегать. Пожалуйста, прочитайте: https://myfaces.apache.org/orchestra/component-bindings.html

Классы компонентов по своей конструкции не сериализуемы.

Вы всегда можете найти их ленивыми с помощью API findComponent.

0 голосов
/ 10 июля 2018

вам нужно изменить сериализацию вашего bean-компонента viewScoped, который ссылается на несериализуемый объект DataTable. Для этого вам нужно реализовать методы writeObject(java.io.ObjectOutputStream out) и readObject(java.io.ObjectInputStream in), как описано в Javadoc для Serializable . Вы можете использовать метод out.defaultWriteObject для сериализации всех сериализуемых полей и только для записи пользовательской сериализации для вашего объекта DataTable.

Но я бы серьезно подумал об удалении объекта DataTable из сериализации, пометив поле transient. DataTable - это сложный объект, который может тратить много памяти, если включен в сеанс. Лучше хранить только данные, необходимые для воссоздания объекта DataTable. Обычно вы должны хранить только свою модель данных объекта DataTable.

...