我的应用程序部署在具有两台服务器的群集中。当我使用:
设置任何属性时this.getServletContext().setAttribute("test", testObj);
testObj
的{{1}}属性可用于访问
两个服务器?test
通过两者访问时都可用
JVM的?答案 0 :(得分:2)
如果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。