集群应用程序环境中的ServletContext属性

时间:2012-10-09 21:59:49

标签: java servlets struts2 struts servletconfig

我的应用程序部署在具有两台服务器的群集中。当我使用:

设置任何属性时
this.getServletContext().setAttribute("test", testObj);
  1. 具有密钥testObj的{​​{1}}属性可用于访问 两个服务器?
  2. 服务器数量是否等于JVM的数量?在我的情况下 是两个服务器,这是否意味着有两个JVM?
  3. 根据我的理解,每个JVM每个webapp一个ServletContext,所以 在我的情况下,test通过两者访问时都可用 JVM的?

1 个答案:

答案 0 :(得分:2)

根据ServletContext javadoc

  

如果Web应用程序在其部署描述符中标记为“distributed”,则每个虚拟机将有一个上下文实例。在这种情况下,上下文不能用作共享全局信息的位置(因为信息不是真正的全局信息)。使用外部资源,如数据库。

Servlet specification还在“分布式容器中的SRV.4.4.1上下文属性”中声明:

  

上下文属性是创建它们的JVM的本地属性。这可以防止ServletContext属性成为分布式容器中的共享内存。当需要在分布式环境中运行的servlet之间共享信息时,应将信息放入会话(请参阅第SRV.7节“会话”),存储在数据库中或设置在Enterprise JavaBeansTM组件中。

所以问题的答案是否定的,该属性在整个集群中是不可访问的,只能在本地JVM上使用。

至于每台服务器的JVM数量,在基本设置中,每台物理机器可以有一台JVM,但也可以有more JVM's on the same machine depending on the characteristics of the application or if you want to maximize your hardware usage