NotSerializableException because of VaadinSession-Save

Hello,

in an application, I open some files and try to save them. After those changes take place, I get a bunch of NotSerializableExceptions. They don’t seem to have much impact besides that the session is lost (-> reload application). Because this is getting annoying, I started some research and activated a more detailed output. It seems like the Exception is thrown, because Vaadin tries to store an object, which is just added to a to a “Select” (at least, the HashMap in this output has 3 values, which are shown in a Select on the UI):

Caused by: java.io.NotSerializableException: defaultPackage.FileChanger - custom writeObject data (class "java.util.HashMap") - object (class "java.util.HashMap", {defaultPackage.FileChanger@14f16cf=JSON Schema, defaultPackage.FileChanger@16271bb=JSON Object, defaultPackage.FileChanger@18cb79=Wsdl}) - field (class "com.vaadin.ui.AbstractSelect", name: "itemCaptions", type: "class java.util.HashMap") - object (class "com.vaadin.ui.OptionGroup", null) - custom writeObject data (class "java.util.HashMap") - object (class "java.util.HashMap", {null=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@1f49560, null=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@7ad6bb, com.vaadin.ui.HorizontalLayout@ffa991=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@a79b8b}) - field (class "com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState", name: "childData", type: "class java.util.HashMap") - object (class "com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState", com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState@84854a) - field (class "com.vaadin.server.AbstractClientConnector", name: "sharedState", type: "class com.vaadin.shared.communication.SharedState") - object (class "com.vaadin.ui.VerticalLayout", com.vaadin.ui.VerticalLayout@1d8dce9) - custom writeObject data (class "java.util.HashMap") - object (class "java.util.HashMap", {com.vaadin.ui.HorizontalLayout@8f4f2d=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@19de19a, com.vaadin.ui.VerticalLayout@1d8dce9=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@4686ea}) - field (class "com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState", name: "childData", type: "class java.util.HashMap") - object (class "com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState", com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState@18be6ec) - field (class "com.vaadin.server.AbstractClientConnector", name: "sharedState", type: "class com.vaadin.shared.communication.SharedState") - object (class "com.vaadin.ui.HorizontalLayout", com.vaadin.ui.HorizontalLayout@9714ab) - custom writeObject data (class "java.util.HashMap") - object (class "java.util.HashMap", {com.vaadin.ui.VerticalLayout@cdee08=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@5bc154, com.vaadin.ui.HorizontalLayout@9714ab=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@1f18dad}) - field (class "com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState", name: "childData", type: "class java.util.HashMap") - object (class "com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState", com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState@1ee42ad) - field (class "com.vaadin.server.AbstractClientConnector", name: "sharedState", type: "class com.vaadin.shared.communication.SharedState") - object (class "com.vaadin.ui.VerticalLayout", com.vaadin.ui.VerticalLayout@49bb18) - field (class "com.vaadin.ui.AbstractSingleComponentContainer", name: "content", type: "interface com.vaadin.ui.Component") - object (class "at.wmfsoftware.cct.ui.DevelopmentTab", at.wmfsoftware.cct.ui.DevelopmentTab@55e48d) - custom writeObject data (class "java.util.ArrayList") - object (class "java.util.ArrayList", [com.vaadin.ui.TabSheet@b2100c, at.wmfsoftware.cct.ui.UserInterfaceTab@1b6ad84, at.wmfsoftware.cct.ui.DevelopmentTab@55e48d, at.wmfsoftware.cct.ui.TestingTab@dca0c8] ) - field (class "com.vaadin.ui.TabSheet", name: "components", type: "class java.util.ArrayList") - object (class "com.vaadin.ui.TabSheet", com.vaadin.ui.TabSheet@608c64) - custom writeObject data (class "java.util.HashMap") - object (class "java.util.HashMap", {com.vaadin.ui.TabSheet@608c64=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@1a18b56, com.vaadin.ui.HorizontalLayout@1d18c85=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@c2f041}) - field (class "com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState", name: "childData", type: "class java.util.HashMap") - object (class "com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState", com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState@111cd1b) - field (class "com.vaadin.server.AbstractClientConnector", name: "sharedState", type: "class com.vaadin.shared.communication.SharedState") - object (class "com.vaadin.ui.VerticalLayout", com.vaadin.ui.VerticalLayout@a108d0) - field (class "com.vaadin.ui.AbstractSingleComponentContainer", name: "content", type: "interface com.vaadin.ui.Component") - object (class "at.wmfsoftware.cct.ui.CCTUI", at.wmfsoftware.cct.ui.CCTUI@14d54de) - custom writeObject data (class "java.util.HashMap") - object (class "java.util.HashMap", {0=at.wmfsoftware.cct.ui.CCTUI@14d54de}) - field (class "com.vaadin.server.VaadinSession", name: "uIs", type: "interface java.util.Map") - root object (class "com.vaadin.server.VaadinSession", com.vaadin.server.VaadinSession@13af2c0) Why is that? It can’t be, that Vaadin stores everything used in the application and therefor has to be Serializable…

Thanks
Wolfgang

I think, that might be a Vaadin issue! I will respond as soon as I figure it out correctly!

This last comment was stupid (wanted to post in component-Forum). For sure it is Vaadin-related. Any ideas?

Yes, Vaadin will have to serialize all sorts of things to maintain the session state. Whether it has to serialize your unserializable data depends on exactly what you’re doing - could you give a more detailed description, optimally show us a simple example UI that suffers from the problem?

It is really hard to say, what the special lines of code are, because the problem appears while I operate something, which has not to do with where the Serialization-problem is located. I would have to send you the whole code… Something, I recognized is, that it happens when you do tasks, that take the server long to do.

I really just build a mask with a DropDownList, 3 TextAreas and a button. In the TextAreas there is the content of three Files. When you hit the button, all 3 files get saved. But afterwards there is the Serialization-problem with the Objects that are assigned to the DropDownList…

Yes, seems to be that the objects you insert to the select component are not serializable. They have to be, though, otherwise it’s not possible for Vaadin to maintain the UI state in the HttpSession. Elements in select components (and in Containers, more generally) should be simple serializable POJOs or beans.

Thank you for the answer. That seems like it destroys the advantage of just setting the object in a Component and everything works fine… :frowning:

Are there kind of semi-automated solutions/architectures for this problem. This must be very common, isn’t it?

Hi,

I’m trying to solve this problem for Spring managed beans using serializable proxies, ie proxies that serializes a reference to the bean in in Spring context and resolve the reference on deserialization. However the proxies could be used with any non managed instance too, by keeping a reference in memory until deserializarion.

For example:

public class SomeLayout extends VerticalLayout {

   @Autowired
   @SerializableProxy
  // Spring managed bean, session replication will work
   private SomeDao dao;   
   // In memory cached reference, session serialize but don't replicate.
   private SomeObject someObject =
       SerializableProxyUtils.createSerializableProxy(new SomeObject(), true, true, null, null);
   ...
}

See
https://github.com/chelu/jdal/tree/master/aop
for more info

Cheers

Hello,

we managed it another way for now. We added a Proxy-Class for each Container. It holds the Container (i.e. ComboBox) itself and a Map<String, Object> with caption and object. Over that Proxy-Class, we change the properties of the Container and with a Object getIten(String) Method, we return the value, which is chosen from the Container. Isn’t it possible to implement something like this in the vaadin-Framework? I mean, setting and getting the Object directly is really a big advantage imo. Needing those classes to be Serializable is really bad…

Also, I have another big problem with NotSerializableException. Allthough I changed everything, that is added to a container-Class to be Serializable now, I still get the error:


Caused by: java.io.NotSerializableException: at.wmfsoftware.cct.medias.PublishOption

  • field (class “com.vaadin.ui.AbstractComponent”, name: “applicationData”, type: “class java.lang.Object”)
  • object (class “com.vaadin.ui.Button”, com.vaadin.ui.Button@a2c76f)
  • custom writeObject data (class “java.util.HashMap”)
  • object (class “java.util.HashMap”, {com.vaadin.ui.Button@d372cb=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@1ea52b1, com.vaadin.ui.Button@a2c76f=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@db0653})
  • field (class “com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState”, name: “childData”, type: “class java.util.HashMap”)
  • object (class “com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState”, com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState@b92222)
  • field (class “com.vaadin.server.AbstractClientConnector”, name: “sharedState”, type: “class com.vaadin.shared.communication.SharedState”)
  • object (class “com.vaadin.ui.VerticalLayout”, com.vaadin.ui.VerticalLayout@158c9f)
  • custom writeObject data (class “java.util.HashMap”)
  • object (class “java.util.HashMap”, {com.vaadin.ui.VerticalLayout@158c9f=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@175e216, com.vaadin.ui.VerticalLayout@1060f95=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@4e3a14, com.vaadin.ui.VerticalLayout@4f6bbc=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@1c733ba, com.vaadin.ui.VerticalLayout@359cfa=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@114fd59, com.vaadin.ui.VerticalLayout@74a1d0=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@1051a1c, com.vaadin.ui.VerticalLayout@7f6b1d=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@1f53f75})
  • field (class “com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState”, name: “childData”, type: “class java.util.HashMap”)
  • object (class “com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState”, com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState@1c3844b)
  • field (class “com.vaadin.server.AbstractClientConnector”, name: “sharedState”, type: “class com.vaadin.shared.communication.SharedState”)
  • object (class “com.vaadin.ui.HorizontalLayout”, com.vaadin.ui.HorizontalLayout@e10653)
  • custom writeObject data (class “java.util.HashMap”)
  • object (class “java.util.HashMap”, {com.vaadin.ui.Panel@53838a=com.vaadin.shared.ui.gridlayout.GridLayoutState$ChildComponentData@1dc5a8b, com.vaadin.ui.HorizontalLayout@e10653=com.vaadin.shared.ui.gridlayout.GridLayoutState$ChildComponentData@1bc62c8, com.vaadin.ui.Panel@17c4faf=com.vaadin.shared.ui.gridlayout.GridLayoutState$ChildComponentData@f978f5, com.vaadin.ui.Panel@cb6d6a=com.vaadin.shared.ui.gridlayout.GridLayoutState$ChildComponentData@744b7c})
  • field (class “com.vaadin.shared.ui.gridlayout.GridLayoutState”, name: “childData”, type: “interface java.util.Map”)
  • object (class “com.vaadin.shared.ui.gridlayout.GridLayoutState”, com.vaadin.shared.ui.gridlayout.GridLayoutState@1a57d0a)
  • field (class “com.vaadin.server.AbstractClientConnector”, name: “sharedState”, type: “class com.vaadin.shared.communication.SharedState”)
  • object (class “com.vaadin.ui.GridLayout”, com.vaadin.ui.GridLayout@835fbf)
  • field (class “com.vaadin.ui.AbstractSingleComponentContainer”, name: “content”, type: “interface com.vaadin.ui.Component”)
  • object (class “at.wmfsoftware.cct.ui.NewInformationPanel”, at.wmfsoftware.cct.ui.NewInformationPanel@19d9606)
  • custom writeObject data (class “java.util.HashMap”)
  • object (class “java.util.HashMap”, {at.wmfsoftware.cct.ui.NewInformationPanel@19d9606=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@101ef9e, com.vaadin.ui.GridLayout@1afff3b=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@1a76cb})
  • field (class “com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState”, name: “childData”, type: “class java.util.HashMap”)
  • object (class “com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState”, com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState@f8a4d)
  • field (class “com.vaadin.server.AbstractClientConnector”, name: “sharedState”, type: “class com.vaadin.shared.communication.SharedState”)
  • object (class “at.wmfsoftware.cct.ui.InformationLayout”, at.wmfsoftware.cct.ui.InformationLayout@401d7e)
  • custom writeObject data (class “java.util.ArrayList”)
  • object (class “java.util.ArrayList”, [at.wmfsoftware.cct.ui.InformationLayout@401d7e, at.wmfsoftware.cct.ui.DevelopmentLayout@150676f]
    )
  • field (class “com.vaadin.ui.TabSheet”, name: “components”, type: “class java.util.ArrayList”)
  • object (class “com.vaadin.ui.TabSheet”, com.vaadin.ui.TabSheet@fbf95f)
  • custom writeObject data (class “java.util.HashMap”)
  • object (class “java.util.HashMap”, {com.vaadin.ui.TabSheet@fbf95f=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@b56469, com.vaadin.ui.HorizontalLayout@80efbf=com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState$ChildComponentData@d33731})
  • field (class “com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState”, name: “childData”, type: “class java.util.HashMap”)
  • object (class “com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState”, com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState@187608e)
  • field (class “com.vaadin.server.AbstractClientConnector”, name: “sharedState”, type: “class com.vaadin.shared.communication.SharedState”)
  • object (class “com.vaadin.ui.VerticalLayout”, com.vaadin.ui.VerticalLayout@b0e0fe)
  • field (class “com.vaadin.ui.AbstractSingleComponentContainer”, name: “content”, type: “interface com.vaadin.ui.Component”)
  • object (class “at.wmfsoftware.cct.ui.CCTUI”, at.wmfsoftware.cct.ui.CCTUI@d59822)
  • custom writeObject data (class “java.util.HashMap”)
  • object (class “java.util.HashMap”, {0=at.wmfsoftware.cct.ui.CCTUI@d59822})
  • field (class “com.vaadin.server.VaadinSession”, name: “uIs”, type: “interface java.util.Map”)
  • root object (class “com.vaadin.server.VaadinSession”, com.vaadin.server.VaadinSession@372f71)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
    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.HashMap.writeObject(HashMap.java:1132)
    at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
    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.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.HashMap.writeObject(HashMap.java:1132)
    at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
    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.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.HashMap.writeObject(HashMap.java:1132)
    at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
    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.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.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.HashMap.writeObject(HashMap.java:1132)
    at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
    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.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.ArrayList.writeObject(ArrayList.java:742)
    at sun.reflect.GeneratedMethodAccessor22.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
    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.HashMap.writeObject(HashMap.java:1132)
    at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
    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.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.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.HashMap.writeObject(HashMap.java:1133)
    at sun.reflect.GeneratedMethodAccessor21.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:988)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1495)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1431)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1177)
    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 org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1673)
    at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1079)
    at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:432)
    at org.apache.catalina.session.StandardManager.unload(StandardManager.java:353)
    at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:518)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5622)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3947)
    … 7 more

The strange thing is, that these Values (NewInformatioinPanel, InformationLayout,…) are not shown, where I am (i am at another Tab). Also, it can’t be that all things implemented in a Layout need to be Serializable, can it?

Thanks
Wolfgang

The stacktrace suggests that class at.wmfsoftware.cct.medias.PublishOption is not Serializable. Did you check that?

Yes, it is not. But as I said before: It should be OK, if it is not. Because it is not used in any container-class. Even the layouts in the stacktrace are not shown at the time the exception is raised!

But it is still bound the session. Reading the stacktrace there is a Button where you have bound instance of (using setData method). Layouts may not be visible (i.e. through setVisible(false)), but there still are references.

You have couple of options:

  1. Clear a layout where you use non-serializable data. (for example remove ‘InformationLayout’ from ‘DevelopmentLayout’ when not used).
  2. Make your data classes serializable.

While #1 is good also good for memory optimization, I would consider #2 the “right” solution, because it frees you tracking the UI object to in order to avoid serialization problems like this.

Thanks for the help, this makes sense. I don’t have enough time to solve this error now, but I will in the future and come back, if there are still problems.

Since I have a vaadin-specialist on the line now, I have a question: Why is it not possible to avoid those NotSerializableExceptions by creating a proxy-architecture in the vaadin-framework? Or with another solution mentioned above? It seems like many people have problems with that…

Thanks
Wolfgang

OK, I got a big problem here: I thought, these Exceptions only occur, when you add not serializable objects to a container-class. But the Button-class doesn’t seem to be a container-class! Does that mean, that any data attached to any vaadin-object needs to be serializable? This is a big problem, because programs sometimes need to work with not serializable objects.

Thanks
Wolfgang