NotSerializableException при сериализации объектов, показанных в настоящее время Ваадином

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

Структура выглядит так:

Пользовательский интерфейс Vaadin <--- serialize / deserialize --- > Hibernate/JPA Postgres База данных

Vaadin показывает объекты, которые запрашиваются из базы данных через IPC, но когда я манипулирую объектом и хочу сохранить его снова, сериализовав его и отправив на контроллер, я получаю следующее исключение:

java.io.NotSerializableException: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext
 at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1183)
 at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1547)
 at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1508)
 at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
 at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
 at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
 at java.util.LinkedList.writeObject(LinkedList.java:1118)
 at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 at java.lang.reflect.Method.invoke(Method.java:606)

Я пытался:

Запрос - > манипулировать - > Сохранить | работает

Запрос - > показать в Vaadin -> манипулировать в Vaadin- > Сохранить | не работает

Почему Serializer хочет AnnotationConfigEmbeddedWebApplicationContext и есть ли обходной путь? Могу ли я удалить его заранее?

1 ответ

Компоненты Spring обычно не сериализуются (или вообще не должны быть сериализованы).

Внедрить компоненты Spring в компоненты Vaadin, связанные с пользовательским интерфейсом Vaadin, сложно, поскольку их следует объявить как transient и повторно заселены после десериализации..

Я написал небольшую библиотеку jdal-aop, чтобы упростить процесс, используя сериализуемые прокси Spring-aop.

например

public class MainLayout extends VerticalLayout {

    @Autowired
    @SerializableProxy  // make this Dao serializable
    private CustomerDao customerDao;
} 

Это может быть полезно для вас.

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