J2EE错误实践:存储在会话中的非可序列化对象
Explanation:
J2EE JVM JVM J2EE JVM HttpSession JVM JVM
public class DataGlob {
String globName;
String globValue;
public void addToSession(HttpSession session) {
session.setAttribute("glob", this);
}
}
Recommendations:
public class DataGlob implements java.io.Serializable {
String globName;
String globValue;
public void addToSession(HttpSession session) {
session.setAttribute("glob", this);
}
}
分析
对于不需要将对象序列化到同一jvm以外的应用场景,以上代码没有问题。然而考虑到系统的扩展性,以上问题应该予以避免。
以下是一些常见的会导致问题的场景:
1.
在一些大型应用系统的实现里,会考虑将部分SESSION里的对象钝化到数据库、磁盘里。
2.
在非session-sticky的集群环境里,应用服务器会在集群里广播、复制session数据
修正