Application Server 通过 HTTP 会话数据和有状态会话 Bean (StateFul Session Bean, SFSB) 会话数据的故障转移提供高可用性会话持久性。故障转移意味着如果服务器实例或硬件发生故障,另一个服务器实例将接管分布式会话。
分布式会话可以在多个 Sun Java System Application Server 实例中运行,如果:
每个服务器实例均可访问同一高可用性数据库 (High-Availability DataBase, HADB)。有关如何启用此数据库的信息,请参见 configure-ha-cluster(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、分布式实体 Bean 的远程主引用、远程引用。
分布式会话 Bean 的远程主引用和远程引用。
InitialContext 和 java:comp/env 的 JNDI 上下文。
UserTransaction 对象。但是,如果从未重新启动失败的实例,则会丢失所有就绪的全局事务,并且可能无法正确回滚或提交这些事务。
可序列化的 Java 类型。
您不能将以下对象类型绑定到支持故障转移的会话中:
JDBC 数据源
Java 消息服务 (Java Message Service, JMS) ConnectionFactory 和 Destination 对象
JavaMail™ 会话
连接工厂
受管理的对象
Web 服务引用
对于这些对象,故障转移通常不起作用。但是,在某些情况下故障转移也可能发挥作用,例如,如果对象为可序列化对象。
以下目录包含用于演示会话持久性的样例应用程序:
install_dir/samples/ee-samples/highavailability install_dir/samples/ee-samples/failover
以下样例应用程序用于演示 SFSB 会话持久性:
install_dir/samples/ee-samples/failover/apps/sfsbfailover