Hi,
I am using SQLContainer in my application. When I try to redeploy my application I have exception
java.io.NotSerializableException: org.apache.tomcat.dbcp.dbcp2.BasicDataSource
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.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:441)
at com.vaadin.data.util.sqlcontainer.SQLContainer.writeObject(SQLContainer.java:1987)
....
After researching, I found that the reason for that exception is that J2EEConnectionPool class implements Serialization interface, but has
non transient
DataSource field.
SQLContainer has FreeFormQuery instance as “delegate” field, and FreeFormQuery has J2EEConnectionPool instance as
“connectionPool” field.
Thanks,
Dmitry