关于java序列化的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java序列化的问题相关的知识,希望对你有一定的参考价值。

>>请问,为什么这个异常在conncetion中抛出,序列化不是都在远程传输中使用吗?而我这个对象也没有存储在session中,为什么这个对象要序列化啊??请高手赐教。。。如果满意,一定追分!!!!!

<2008-4-23 上午09时27分58秒 CST> <Error> <HTTP Session> <BEA-100028> <Could not
deserialize session data.
java.io.NotSerializableException: oracle.jdbc.driver.OracleConnection
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)

at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
:1330)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
02)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
a:1245)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)

at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java
:1330)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:13
02)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.jav
a:1245)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)

at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at weblogic.servlet.internal.AttributeWrapper.convertObjectToBytes(Attri
buteWrapper.java:136)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper
.java:112)
at weblogic.servlet.internal.AttributeWrapper.getObject(AttributeWrapper
.java:69)
at weblogic.servlet.internal.session.SessionData.getAttribute(SessionDat
a.java:431)
at jsp_servlet._system.__sys_supp_settype._jspService(__sys_supp_settype
.java:135)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run
(ServletStubImpl.java:971)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:402)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm
pl.java:305)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio
n.run(WebAppServletContext.java:6350)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate
dSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:
118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe
rvletContext.java:3635)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm
pl.java:2585)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
>
TO baimaxiaosheng - 秀才 三级

您好,你说的太有道理了,但是有一点我不明白,为什么对象型数据要序列化呢?
我看了一些资料,说是放在session中的数据都要序列化,因为weblogic会对session中的数据进行持久化,我有一个对象login放在session中,
其字段描述如下:

private static final long serialVersionUID = -8783454813441161035L;

private PubDb db = new PubDb();

private PubFunc func = new PubFunc();

private Pubhtml ph = new PubHtml();

private String us_id = ""; // 人员表ID

private String username = ""; // 姓名

private String password = ""; // 密码

private String purview = ""; // 权限

private Connection conn = null;

这里的conn没有进行序列化,所以一直报这个异常,请问一下,这个connction我怎么加序列化呢?这个不是我的类,是JDBC中的类。。

首先说明一下序列化的知识:
java中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket进行传输、或者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象。序列化机制在java中有着广泛的应用,EJB、RMI等技术都是以此为基础的。

序列化机制是通过java.io.ObjectOutputStream类和java.io.ObjectInputStream类来实现的。在序列化(serialize)一个对象的时候,会先实例化一个ObjectOutputStream对象,然后调用其writeObject()方法;在反序列化(deserialize)的时候,则会实例化一个ObjectInputStream对象,然后调用其readObject()方法。

上面您的错误,就是在于有一个或者几个没有"序列化"的数据,导致没有办法创建输出流,导致发生的java.io.NotSerializableException。

之所以要序列化,我猜测是因为您的数据里面存在一个对象型的数据,但是该对象没有实现序列化。比如:您有一个字段为address,这个字段您是通过一个类Address来描述的,Address里面可能有province、city、street等等属性或者一些setter 和getter,如果这个类,没有实现序列化,往往会出现这个问题。

毕竟没有看到程序,是我的一个猜测,请检查一下程序或者发出来进行进一步讨论。
参考技术A 我觉得Connection这个类没有必要序列化,你把Connection对象通过session传递有什么用处呢,Connection应该是一个对数据库的连接,你如果想让接收方对数据库进行连接的话,应该在传递的时候传递远程数据库的连接方式,比如驱动链接,数据库地址,数据库用户名密码等等,接收方在操作的时候新建立一个Connection对象用你传递给他的信息进行连接就可以了.

而关于建立一个Connection所需要的条件的封装,序列化,传递应该很简单吧!
参考技术B at weblogic.servlet.internal.session.SessionData.getAttribute(SessionDat

以上是关于关于java序列化的问题的主要内容,如果未能解决你的问题,请参考以下文章

关于Java序列化的问题你真的会吗?

关于Java序列化的问题你真的会吗?

关于java Serializable接口的问题

关于java的序列化

一道关于java序列化的问题,看大家知多少————

关于java序列化中的一个细节