Application Server 通过 HTTP 会话数据和有状态会话 Bean (StateFul Session Bean, SFSB) 会话数据的故障转移提供高可用性会话持久性。故障转移意味着如果服务器实例或硬件发生故障,另一个服务器实例将接管分布式会话。
分布式会话可以在多个 Sun Java System Application Server 实例中运行,如果:
每个服务器实例都可以访问相同的会话状态数据。Application Server 为 HTTP 会话和有状态会话 Bean 数据提供了以下类型的高可用性存储:
群集中其他服务器上的内存中复制。对于群集配置文件,默认情况下启用内存中复制。
使用内存中复制要求启用组管理服务 (Group Management Service, GMS)。有关 GMS 的更多信息,请参见组管理服务。
如果群集中的服务器实例位于不同的计算机上,请确保满足以下先决条件:
要确保 GMS 和内存中复制正常工作,这些计算机必须在同一子网上。
要确保内存中复制正常工作,必须同步群集中所有计算机上的系统时钟使其尽可能接近。
高可用性数据库 (High-availability database, HADB)。有关如何启用此数据库的信息,请参见 configure-ha-cluster(1)。
HADB 软件随 Sun Java System Application Server 的 Application Server 独立分发提供。有关 Sun Java System Application Server 的可用分发的信息,请参见《Sun Java System Application Server 9.1 Installation Guide》中的“Distribution Types and Their Components”。HADB 功能仅在企业配置文件中可用。有关配置文件的信息,请参见《Sun Java System Application Server 9.1 管理指南》中的“用法配置文件”。
每个服务器实例上均部署有相同的可分布 Web 应用程序。web.xml 部署描述符文件的 web-app 元素中必须包含 distributable 元素。
Web 应用程序使用高可用性会话持久性。如果将非可分布的 Web 应用程序配置为使用高可用性会话持久性,服务器会将错误写入日志文件。
必须使用 deploy 或 deploydir 命令并且将 --availabilityenabled 选项设置为 true 来部署 Web 应用程序。有关这些命令的更多信息,请参见 deploy(1) 和 deploydir(1)。
会话故障转移时,将丢失所有对打开文件或网络连接的引用。编码应用程序时必须考虑到此限制。
您只能将某些对象绑定到支持故障转移的分布式会话中。与 Servlet 2.4 规范不同,如果将不支持故障转移的对象类型绑定到分布式会话中,Sun Java System Application Server 不会抛出 IllegalArgumentException。
您可以将以下对象绑定到支持故障转移的分布式会话中:
所有 EJB 组件的本地主引用和对象引用。
共存的无状态会话、有状态会话或实体 Bean 引用。
分布式无状态会话、有状态会话或实体 Bean 引用。
InitialContext 和 java:comp/env 的 JNDI 上下文。
UserTransaction 对象。但是,如果从未重新启动失败的实例,则会丢失所有就绪的全局事务,并且可能无法正确回滚或提交这些事务。
可序列化的 Java 类型。
您不能将以下对象类型绑定到支持故障转移的会话中:
JDBC 数据源
Java 消息服务 (Java Message Service, JMS) ConnectionFactory 和 Destination 对象
JavaMail™ 会话
连接工厂
受管对象
Web 服务引用
对于这些对象,故障转移通常不起作用。但是,在某些情况下故障转移也可能发挥作用,例如,如果对象为可序列化对象。