本章讲述内容
Bean 的引用不会序列化
自己试一下
| BankAccount account = getBankAccountHome().findById(42); ObjectOutputStream out = new ObjectOutputStream(...); out.writeObject(account); out.close(); |
| ObjectInputStream in = new ObjectInputStream(...); BankAccount account = (BankAccount)in.readObject(); in.close(); account.getBalance(); |
| BankAccount account = getBankAccountHome().findById(42); ObjectOutputStream out = new ObjectOutputStream(...); out.writeObject(account.getHandle()); out.close(); |
| ObjectInputStream in = new ObjectInputStream(...); Handle handle = (Handle)in.readObject(); BankAccount account = (BankAccount)handle.getEJBObject(); in.close(); account.getBalance(); |

| public class BankAccountBean implements EntityBean { public int id; public double balance; public Customer owner; ... } |

| public class CustomerBean implements EntityBean { public int id; public Vector accounts; ... } |
定制序列化
一个示例
| import java.io.*;
public class User implements Serializable { |
一个示例: writeObject()
| private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeObject(encode(getPassword())); } |
一个示例: readObject()
| private void readObject(ObjectInputStream in) throws ClassNotFoundException, IOException { in.defaultReadObject(); setPassword(decode((String)in.readObject())); } |
序列化 Bean 引用

引入一个中间对象 Object

| private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeObject(getBean().getHandle()); } |
但是稍等一下... 还有更多的问题
版本兼容性
您应该如何设定此值?

| public class BankAccount implements Serializable { static final long serialVersionUID = 3206093459760846163L; ... } |
本章讲述内容