我的理解Servlet,Servlet将化的容器,它的 init() 方法将被称为一次,并servlet将生活就像一个单独直到JVM关闭。

我不希望我的servlet能化,因为它将是建造新的,当应用程序服务器的恢复或开始了正常。Servlet应该举行会议特定的成员,所以它不会对它被写入磁盘和重新实例化。是否有实际使用这个吗?

我的问题是,我把一些非序列化领域内存在,然后我会神秘地失败了在生产环境中,一种不同的会议复会。

有帮助吗?

解决方案

从技术上讲,我相信servlet容器可以“钝化”。 servlet对象到磁盘,与EJB会话bean的方式类似。因此,如果您的应用因非序列化字段而失败,那么您提出的问题是正确的。

在实践中,我从来没有听说过这样做的容器,所以它实际上只是早期J2EE早期糟糕的遗产。我不担心。

其他提示

HttpServlet应该通过序列化到磁盘并在servlet容器重启后继续运行。例如,tomcat允许你设置标志,使这种生存。下一个选项是使用JNDI进行传输。这不是垃圾,只在极端使用情况下使用。

谷歌似乎建议这样做,以便容器作者可以选择,如果他们想要的话。

你是正确的,servlet不应该没有特定于会话的成员,事实上我认为你想要尽可能少的状态。如果您将所有内容存储在Session或ServletConfig中,我认为您将能够在序列化中存活。

就像Session对象被序列化以使那些提供集群选项的servletcontainer的缓存更生存时,可能有一个容器可以选择将Servlet实例传输到另一个集群节点?我只是在这里猜测

序列化是作为一个 接口标记 对于会议的属性分布的环境。

SRV。7.7.2分布的环境(JSR-154)

在应用标记为 可分配, 所有请求, 一部分的会议必须处理的一个Java虚拟机 ("JVM"),在一段时间。容器必须能够处理所有对象 放到实例HttpSession类使用下 或putValue方法适当的。以下限制 强加给为满足这些条件:

  • 容器必须接受对象实施的序列化的接口.
  • 迁移的会议将处理的容器的特定设施。

分布式servlet容器必须扔一个 IllegalArgumentException为对象 容器不能 支持该机构必要的移徙会议的储存 他们.

分布式servlet容器必须支持该机构必要的 对于 迁移的对象实施的序列化.

(...)

容器供应商可以确保可伸缩性和服务质量 功能,如装载平衡和故障过 具有的能力 移动一届会议的对象,并且其内容,从任何活动节点的 分布式系统的不同节点的系统。 如果分布 容器 持续存在或迁移届会议 提供高质量的 服务功能,它们不限于使用本地JVM 化机制序列化httpsession并和他们的 属性。开发都是不能保证容器的呼叫 readObject和writeObject方法上届会议的属性,如果他们 执行, 但是保证序列化封闭的 他们的特性将予以保留.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top