【问题标题】:Session Replication in Programming (Weblogic & Java)编程中的会话复制(Weblogic 和 Java)
【发布时间】:2011-06-21 03:30:21
【问题描述】:

我想知道是否还需要调用 session.setAttribute 或 session.getAttribute 的对象来实现“java.io.Serializable”以支持会话复制?

例如
User 类实现了 Serializable 接口。 但是如果需要调用“session.setAttribute”的类SomeUtilityClass来实现Serializable接口。


/* Does it also need to implement the Serializable here? */
public class SomeUtilityClass{
    public void test(HttpServletRequest request){
        request.getSession().setAttribute("user", new User());
    }
}

public class User implements Serializable{
        private static final long serialVersionUID = 12345432534456654664L;
        //skip the getter & setter...
}

如果会话复制省略了变量serialVersionUID,是否有任何问题?

提前致谢。

【问题讨论】:

    标签: java session jakarta-ee weblogic replication


    【解决方案1】:

    只有进入会话的对象需要可序列化(即实现 Serializable 接口)

    这意味着任何设置为属性的对象,以及包含在这些对象中的任何对象。

    所以如果你有课

    public class User implements Serializable {
          private Department department;
    
    // ...
    }
    

    那么你的Department类也需要实现Serializable

    对会话进行简单调用的类(包括对setAttribute 的调用)不需要实现Serializable(包括SomeUtilityClass

    原因是会话中的任何内容都必须发送到另一个 WebLogic 节点(可能在不同的服务器上运行)。这意味着它需要通过网络发送您的User 类,因此它需要能够将您的User 类转换为一系列字节,它可以发送,然后再次将其转换回真实对象另一边。

    当您实现Serializable 接口时,您是在告诉Java,您已经以一种可以将其转换为这些字节(然后再返回)的方式构建您的类。如果您不实现Serializable,那么Java 不知道这样做是否可以,所以它不知道。 注意:类的代码不会被发送出去,只是里面的字段的值。该代码已经在另一个节点上,因为它是您的应用程序的一部分,已经部署到所有节点。

    您的实用程序类,不需要通过网络。您还没有将该类的对象放入会话中,因此 WebLogic 不需要将其转换为字节(然后再返回)作为会话复制的一部分。
    唯一需要的是 @ 987654332@ 是直接(如您的User)或间接(如Department 示例)放入会话的对象。 仅在会话上进行调用的对象不需要是 Serializable

    【讨论】:

    • 非常详细和有用的信息。谢谢。
    【解决方案2】:

    如果您的实用程序类没有要在服务器实例之间复制的状态,那么它就不需要可序列化。至于serialVersionUID,本身就是一个whole新的discussion

    【讨论】:

    • 首先感谢您的链接。你能解释更多关于“要复制的状态......”吗?实际上,我有一些实用类和 struts 的动作类,其中包含一些使用 session.setAttribute/getAttribute 的函数。我不太确定他们是否需要实现接口。谢谢
    猜你喜欢
    • 2014-03-01
    • 2011-09-16
    • 2011-04-09
    • 2014-09-28
    • 2012-01-08
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多