Within a MVC web application I get the ResultSet within a
Sevlet and would like to attach it to the Session object to be
displayed to the user from a JSP.
Since the ResultSets aren't serializable, I get the following
stack trace:
2003-06-01 15:18:17 StandardManager[/Chameleon]
Exception loading sessions from persistent storage
java.io.WriteAbortedException: writing aborted;
java.io.NotSerializableException:
org.mandarax.reference.ResultSetImpl2
at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1278)
at
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
at
java.io.ObjectInputStream.readArray(ObjectInputStream.java:1603)
at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1271)
at
java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1845)
at
java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1769)
at
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1646)
at
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1274)
at
java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
at
org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1369)
at
org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:864)
at
org.apache.catalina.session.StandardManager.load(StandardManager.java:440)
at
org.apache.catalina.session.StandardManager.start(StandardManager.java:655)
at
org.apache.catalina.core.StandardContext.start(StandardContext.java:3570)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
at
org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)
at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347)
at
org.apache.catalina.core.StandardService.start(StandardService.java:497)
at
org.apache.catalina.core.StandardServer.start(StandardServer.java:2190)
at
org.apache.catalina.startup.Catalina.start(Catalina.java:512)
at
org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
at
org.apache.catalina.startup.Catalina.process(Catalina.java:180)
at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at
org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
Caused by: java.io.NotSerializableException:
org.mandarax.reference.ResultSetImpl2
at
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1304)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
at
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at
java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1224)
at
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1050)
at
java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1332)
at
java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:367)
at java.util.Vector.writeObject(Vector.java:1017)
at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at
java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:809)
at
java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1296)
at
java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1247)
at
java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
at
java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at
org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1439)
at
org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:881)
at
org.apache.catalina.session.StandardManager.unload(StandardManager.java:536)
at
org.apache.catalina.session.StandardManager.stop(StandardManager.java:691)
at
org.apache.catalina.core.StandardContext.stop(StandardContext.java:3665)
at
org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:1036)
at
org.apache.catalina.core.StandardHostDeployer.remove(StandardHostDeployer.java:470)
at
org.apache.catalina.core.StandardHost.remove(StandardHost.java:852)
at
org.apache.catalina.startup.HostConfig.undeployApps(HostConfig.java:758)
at
org.apache.catalina.startup.HostConfig.stop(HostConfig.java:738)
at
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:360)
at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:166)
at
org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1221)
at
org.apache.catalina.core.ContainerBase.stop(ContainerBase.java:1233)
at
org.apache.catalina.core.StandardService.stop(StandardService.java:554)
at
org.apache.catalina.core.StandardServer.stop(StandardServer.java:2225)
at
org.apache.catalina.startup.Catalina.start(Catalina.java:543)
... 7 more
If there's no way around it, I could still generate the
ResultSet in the JSP only and immediately display it -
however, this wouldn't be a nice solution.
Is there an easy way to serialize the ResultSet?
Logged In: YES
user_id=835789
Despite the age of this post, I may as well reply, if only
to get the help out there to Google....
You can use the CachedRowSet feature of Java 1.5. Simply
make a new object, and then call populate() with the
ResultSet that you wish to serialise.
Cheers,
Jonathan Giles