0

Clustering: BindUiLifeCycle is not serializable cause NotSerializableException

asked 2018-10-23 18:05:52 +0800

DennyDeng1 gravatar image DennyDeng1
5 2

updated 2018-10-25 15:01:46 +0800

My app is clustering with two tomcat instance, I see many java.io.NotSerializableException: org.zkoss.bind.tracker.impl.BindUiLifeCycle

ZK supports clustering, BindUiLifeCycle is a ZK class, but why I have this exception?

Any comments will be appreciated, many thanks.

    23-Oct-2018 11:26:29.047 WARNING [msm-storage-thread-1] de.javakaffee.web.msm.JavaSerializationTranscoder.writeAttributes Cannot serialize session attribute [javax.zkoss.zk.ui.Session] for session [4563FA27DD4B3DC33F8983A4C44F9A0B.app1]
 java.io.NotSerializableException: org.zkoss.bind.tracker.impl.BindUiLifeCycle
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at org.zkoss.zk.ui.EventListenerInfo.write(EventListenerInfo.java:68)
    at org.zkoss.zk.ui.AbstractComponent.writeObject(AbstractComponent.java:3308)
    at sun.reflect.GeneratedMethodAccessor166.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at org.zkoss.zk.ui.AbstractComponent.writeObject(AbstractComponent.java:3287)
    at sun.reflect.GeneratedMethodAccessor166.invoke(Unknown Source)
    ...
    ...
    at org.zkoss.zk.ui.http.SimpleSession.writeThis(SimpleSession.java:433)
    at org.zkoss.zk.ui.http.SerializableSession.writeObject(SerializableSession.java:71)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:1028)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1496)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at de.javakaffee.web.msm.JavaSerializationTranscoder.writeAttributes(JavaSerializationTranscoder.java:139)
    at de.javakaffee.web.msm.JavaSerializationTranscoder.serializeAttributes(JavaSerializationTranscoder.java:100)
    at de.javakaffee.web.msm.TranscoderService.serializeAttributes(TranscoderService.java:151)
    at de.javakaffee.web.msm.BackupSessionTask.serializeAttributes(BackupSessionTask.java:179)
    at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:109)
    at de.javakaffee.web.msm.BackupSessionTask.call(BackupSessionTask.java:50)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
delete flag offensive retag edit

1 Answer

Sort by ยป oldest newest most voted
0

answered 2020-12-04 13:32:39 +0800

fillermark gravatar image fillermark
1

java.io.NotSerializableException can occur when you serialize an inner class instance because serializing such an inner class instance will result in serialization of its associated outer class instance as well. How to solve it?

  • If the class is yours, make the class serializable by implementing the interface java.io.Serializable.
  • All non primitive members implement Serializable (or are transient instead)
  • If your class is an inner class it's either static or the outer class implements Serializable

If the class is 3rd party, but you don't need it in the serialized form, mark the field as transient

It is important to note that Serialization of inner classes (i.e., nested classes that are not static member classes), including local and anonymous classes, is strongly discouraged.

link publish delete flag offensive edit
Your answer
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow
2 followers

RSS

Stats

Asked: 2018-10-23 18:05:52 +0800

Seen: 13 times

Last updated: Dec 04 '20

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More