如何开发支持群集的servlet以及它的设计标准是什么?
答案 0 :(得分:1)
这不是要在代码级别解决的问题,而是在Web服务器级别解决的问题。所以Servlet代码不需要知道是否被聚集。
答案 1 :(得分:1)
代码不需要知道群集,但开发人员需要知道代码可能是群集的并且会话被复制。让我解释一下。
在web.xml中标记webapp时,您告诉容器该Web应用程序可以群集。
如果webapp部署在群集上,则群集中的每台计算机都将运行vm并在其中运行此Web应用程序。就客户端而言,请求它看到一个webapp,尽管来自客户端的每个请求都可以由集群中的不同vm提供服务。
因此,如果webapp存储任何状态,则必须使其可用于运行webapp的vms(在集群中)的所有实例。 如何才能做到这一点 ? 通过将您放入httpsession对象的内容标记为“Serializable”。您向容器发出信号,表明它应该将状态复制到其他虚拟机(如果您有安装会话复制)。它在weblogic中以几种方式完成。每次在会话中使用setAttribute()时,它都会触发sessionreplication事件。
在WL中有两种方法可以复制内存复制和使用数据库 复制。我想听听其他应用程序如何完成。
答案 2 :(得分:0)
正如@BalusC所说,这主要是一个服务器配置任务,如何做到这在很大程度上取决于你正在使用哪个服务器(以及你没有提到的),但这里是how to do it with Tomcat 6,示例
但是在代码方面要记住一件事,那就是你必须要小心把你放入HTTP会话的对象(使用HttpSession.setAttribute()
。)要使会话复制起作用,这些对象必须是可序列化的,以便通过网络传输到集群中的其他服务器。如果它们不可序列化,那么服务器可能会丢弃它们,或者它可能会抛出异常。
开发人员使用HTTP会话作为放置大型复杂业务对象(例如允许从JSP访问它们)的地方并不少见,而且这些事情不太可能是可序列化的。表单绑定对象的其他示例虽然是简单的表单数据持有者,但通常不可序列化。