Sun Java System Application Server Enterprise Edition 8.1 2005Q2 高可用性管理指南

HTTP 会话故障转移

J2EE 应用程序通常具有大量会话状态数据。Web 购物车是一个典型的会话状态示例。此外,应用程序可以高速缓存会话对象中需要频繁使用的数据。事实上,几乎带有重要用户交互的所有应用程序都需要维护会话状态。

为 Web 容器配置可用性

要使用 asadmin 启用和配置 Web 容器的可用性,请参见 configure-ha-persistence(1)

或者,使用 asadmin set 命令将配置的 availability-service.web-container-availability.availability-enabled 属性设置为 true,然后使用 configure-ha-persistence 根据需要设置属性。

例如,按如下所示使用 set 命令,其中 config1 为配置名称:


asadmin set --user admin --passwordfile password.txt 
--host localhost --port 4849 
config1.availability-service.web-container-availability.availability-enabled="true"
asadmin configure-ha-persistence --user admin --passwordfile secret.txt 
--type ha 
--frequency web-method 
--scope modified-session 
--store jdbc/hastore 
--property maxSessions=1000:reapIntervalSeconds=60 cluster1

Procedure使用管理控制台启用 Web 容器的可用性

  1. 在树组件中,选择所需配置。

  2. 单击“可用性服务”。

  3. 选择“Web 容器可用性”选项卡。

    选中“可用性服务”框以启用可用性。要禁用可用性,请取消选中该框。

  4. 更改其他设置,如下一节可用性设置所述。

  5. 重新启动服务器实例。

可用性设置

通过“可用性服务”的“Web 容器可用性”选项卡,您可以更改这些可用性设置:

持久性类型指定已启用可用性的 Web 应用程序的会话持久性机制。允许的值包括 memory(无持久性)、file(文件系统)和 ha (HADB)。

在使用 ha 会话持久性之前,必须先配置和启用 HADB。有关详细配置信息,请参见 configure-ha-cluster(1)

如果启用了 Web 容器可用性,则默认值为 ha。否则,默认值为 memory。对于需要会话持久性的生产环境,请使用 ha。前两种类型(memory 和 file 持久性)不提供高可用性会话持久性。

持久性频率:指定存储会话状态的频率。仅当持久性类型为 ha 时适用。允许的值包括:

持久性范围:指定会话对象的数目和存储会话状态的频率。仅当持久性类型为 ha 时适用。允许的值包括:

单点登录状态:选中此框以启用单点登录状态的持久性。要禁用可用性,请取消选中该框。有关更多信息,请参见结合使用会话故障转移和单点登录

HTTP 会话存储:如果更改了用于连接 HADB 的 JDBC 资源以获得会话持久性,您可以更改 HTTP 会话存储。有关详细信息,请参见 configure-ha-cluster(1)

为单个 Web 应用程序配置可用性

要启用和配置单个 Web 应用程序的可用性,请编辑应用程序部署描述符文件 sun-web.xml。应用程序的部署描述符中的设置将覆盖 Web 容器的可用性设置。

session-manager 元素的 persistence-type 属性用于确定应用程序使用的会话持久性的类型。必须将其设置为 ha 以启用高可用性会话持久性。

有关 sun-web.xml 文件的更多信息,请参见《Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide》中的“The sun-web.xml File”

示例

<sun-web-app> ... 
  <session-config> 
    <session-manager persistence-type=ha> 
      <manager-properties> 
        <property name=persistenceFrequency value=web-method /> 
      </manager-properties> 
      <store-properties> 
        <property name=persistenceScope value=session /> 
      </store-properties> 
    </session-manager> ... 
</session-config> ...

结合使用会话故障转移和单点登录

在单个应用程序服务器实例中,如果一个应用程序验证了用户,则运行在同一个实例上的其他应用程序不会对用户进行重新验证。这称为单点登录。有关更多信息,请参见《Sun Java System Application Server Enterprise Edition 8.1 2005Q2 Developer’s Guide》中的“User Authentication for Single Sign-on”

为了使 HTTP 会话故障转移到群集中另一个实例后该功能仍然可用,必须将单点登录信息保留在 HADB 中。要保留单点登录信息,请首先启用服务器实例和 Web 容器的可用性,然后启用单点登录状态故障转移。

通过管理控制台中的“可用性服务”的“Web 容器可用性”选项卡,您可以启用单点登录状态故障转移,如为 Web 容器配置可用性中所述。您也可以使用 asadmin set 命令将配置的 availability-service.web-container-availability.sso-failover-enabled 属性设置为 true。

例如,按如下所示使用 set 命令,其中 config1 为配置名称:

asadmin set --user admin --passwordfile password.txt 
--host localhost --port 4849 
config1.availability-service.web-container-availability.
sso-failover-enabled="true"

单点登录组

可以通过单个名称和密码的组合进行访问的应用程序组成了单点登录组。对于与应用程序(是单点登录组的一部分)相对应的 HTTP 会话,如果其中一个会话超时,其他会话并不会失效,并且仍然可用。这是因为一个会话的超时不应影响其他会话的可用性。

作为这个行为的推论,如果一个会话超时并且您尝试从运行该会话的同一浏览器窗口访问相应的应用程序,则您无需再次进行验证。但是,将创建一个新的会话。

以属于含有其他两个应用程序的单点登录组的购物车应用程序为例。假设其他两个应用程序的会话超时值大于购物车应用程序的会话超时值。如果购物车应用程序的会话超时,并且您尝试从运行该会话的同一浏览器窗口运行购物车应用程序,则您无需再次进行验证。但是,前一个购物车将丢失,并且您必须创建一个新的购物车。即使运行购物车应用程序的会话已超时,其他两个应用程序也会继续照常运行。

类似地,可假定与其他两个应用程序中的任何一个应用程序对应的会话超时。当从运行该会话的同一浏览器窗口连接应用程序时,您无需再次进行验证。


注 –

此行为仅适用于会话超时情况。如果启用了单点登录并且您使用 HttpSession.invalidate() 令其中一个会话失效,则属于单点登录组的所有应用程序的会话都将失效。如果您尝试访问属于单点登录组的任一应用程序,则需要再次进行验证,系统将为访问该应用程序的客户机创建一个新的会话。