当前位置: 首页 > 知识库问答 >
问题:

强制类实现可序列化的Tomcat会话复制

宋望
2023-03-14

我正在实现tomcat会话复制以实现集群之间的负载平衡,但是复制需要会话中的所有对象都是可序列化的。

在集群之前,有很多类不是Serirazable并存储在会话中,我们更改为实现Serilazable,但是随着将来的类的添加,可能会发生这种情况,有人可能会错过序列化,这将导致会话复制时出错。

我在考虑扩展tomcat提供的HttpSession实现并覆盖setAtcm以摄入Serializable对象作为参数,但是接口方法将Object作为参数,因此这是不可能的。

有没有什么方法可以让我强制所有要放入会话的类在编译时序列化?

我们正在使用spring 4。我想知道aspect是否会有所帮助?

共有1个答案

冷越泽
2023-03-14

我既不推荐Java序列化,也不推荐会话复制。尽管如此:

如果类是可扩展的,您可以使用也实现Serializable的类对其进行子类化。当然,没有一个基类字段会被序列化。您将需要自定义readObjectWriteObject来执行这些操作。

为了动态地实现这一点,你可能需要某种过滤机制来替换进出会话的对象。

 类似资料:
  • 我正在试验Stanford CoreNLP库,我想序列化主要的StanfordCoreNLP管道对象,尽管它抛出了一个java.io.NotSerializableException。 完整故事:每当我运行我的实现时,将管道注释器和分类器加载到内存中大约需要15秒。最终进程的内存约为600MB(很容易小到可以存储在我的机箱中)。我想在第一次创建管道后保存它,这样我就可以在以后将其读入内存。 然而,

  • 我使用redisson在运行tomcat V8.5的3个tomcat吊舱中复制spring应用程序的tomcat会话。我还在同一个Kubernetes集群中部署了Redis。下面是我的tomcat context.xml配置 我的redisson配置如下: 当我在所有pod上运行我的应用程序和负载平衡请求时,它会为发送到不同pod的每个请求创建一个新的JSESSIONID cookie 这应该验证

  • 问题内容: 我正在本地计算机上的Tomcat 7上设置群集/复制,以评估它是否可与我的环境/代码库一起使用。 建立 我在不同端口上运行的同级目录中有两个相同的tomcat服务器。我已经在其他两个端口上监听了httpd,并作为VirtualHosts连接到了两个tomcat实例。我可以在配置的端口上访问两种环境并与之交互。一切都按预期进行。 Tomcat服务器在server.xml中启用了集群功能:

  • 我正在尝试让Tomcat在关机时坚持我的会话。我已经解决了这样一个要求,即我在会话中存储的所有内容都是可序列化的,当我在Eclipse下运行Tomcat时,这很好:当代码更改迫使Eclipse重新加载webapp时,会话现在仍然存在。 然而,当我试图在一个独立的Tomcat中做同样的事情时,我遇到了一个问题。 我取消了${catalina.base}/conf/context.xml中的Manag

  • 我应该实现Serializable接口来解决这个问题吗? 错误日志: 代码: