Sun Java System Application Server 9.1 高可用性管理指南

有状态会话 Bean 故障转移

有状态会话 Bean (SFSB) 包含特定于客户机的状态。客户机和有状态会话 Bean 之间存在一对一关系。创建时,EJB 容器赋予每个 SFSB 唯一的会话 ID,以便将其绑定到客户机。

服务器实例出现故障时,SFSB 的状态可以保存在持久性存储中。在 SFSB 的生命周期中,其预定义点处的状态将被保存到持久性存储库中。这称为检查点操作。如果已启用,通常会在 Bean 完成了任意事务之后(即使该事务回滚)执行检查点操作。

但是,如果 SFSB 参与了 Bean 管理的事务,则该事务可能会在 Bean 方法执行的中间就被提交。由于 Bean 的状态可能因方法调用而发生转换,因此这不是对 Bean 的状态进行检查点操作的适当时间。在此情况下,EJB 容器将在相应方法结束时对 Bean 的状态进行检查点操作,前提是当该方法结束时,该 Bean 不在另一个事务的范围内。如果 Bean 管理的事务涉及多个方法,则检查点操作将被延迟,直至在后继方法结束时没有活动的事务。

SFSB 的状态并不一定具有事务性,并且可能因非事务性业务方法而被显著修改。如果某个 SFSB 出现这种情况,则您可以指定一系列检查点方法,如指定对其执行检查点操作的方法所述。

如果可分布的 Web 应用程序引用了 SFSB,并且 Web 应用程序的会话发生故障转移,则 EJB 引用也将进行故障转移。

如果停止 Application Server 实例时取消部署使用会话持久性的 SFSB,则持久性存储中的会话数据可能不被清除。要避免这种情况,请在运行 Application Server 实例时取消部署 SFSB。

为 EJB 容器配置可用性

Procedure启用 EJB 容器的可用性

  1. 选择“EJB 容器可用性”选项卡。

  2. 选中“可用性服务”框。

    要禁用可用性,请取消选中该框。

  3. 更改其他设置,如可用性设置中所述。

  4. 单击“保存”按钮。

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

等效的 asadmin 命令

要启用 EJB 容器的可用性,请使用 asadmin set 命令设置以下三个配置属性:

例如,如果 config1 为配置名称,请使用以下命令:

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

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-persistence-type="file"

asadmin set --user admin --passwordfile password.txt --host localhost --port 4849config1.availability-service.ejb-container-availability.sfsb-ha-persistence-type="ha"

可用性设置


注 –

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 管理指南》中的“用法配置文件”


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

HA 持久性类型:为已启用可用性的 SFSB 指定会话持久性和钝化机制。允许的值有 file(文件系统)、replicated(其他服务器上的内存)和 ha (HADB)。默认值是 ha。对于需要会话持久性的生产环境,请使用 hareplicated

SFSB 持久性类型:为尚未启用可用性的 SFSB 指定钝化机制。允许的值有 file(默认值)、replicated ha

如果将任一持久性类型设置为 file,EJB 容器都将指定用于存储已钝化的会话 Bean 状态的文件系统位置。文件系统的检查点操作对于测试很有用,但不适用于生产环境。有关配置存储属性的信息,请参见管理控制台联机帮助。

HA 持久性可以允许服务器实例的群集在任何服务器实例出现故障时恢复 SFSB 状态。HADB 还可以用作钝化和活化存储。在要求 SFSB 状态持久性的生产环境中使用此选项。有关更多信息,请参见 configure-ha-cluster(1)

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

在禁用可用性时配置 SFSB 会话存储

如果已禁用可用性,本地文件系统将用于 SFSB 状态钝化而非持久性。要更改 SFSB 状态的存储位置,请更改 EJB 容器中的“会话存储位置”设置。有关配置存储属性的信息,请参见管理控制台联机帮助。

为单个应用程序或 EJB 模块配置可用性

您可以在部署期间启用单个应用程序或 EJB 模块的 SFSB 可用性:

为单个 Bean 配置可用性

要为单个 SFSB 启用可用性并选择执行检查点操作的方法,请使用 sun-ejb-jar.xml 部署描述符文件。.

要启用高可用性会话持久性,请在 ejb 元素中设置 availability-enabled="true"。要控制 SFSB 高速缓存的大小和行为,请使用以下元素:

有关 sun-ejb-jar.xml 的更多信息,请参见《Sun Java System Application Server 9.1 Application Deployment Guide》中的“The sun-ejb-jar.xml File”


示例 9–1 已启用可用性的 EJB 部署描述符示例

<sun-ejb-jar>
    ...
    <enterprise-Beans>
        ...
        <ejb availability-enabled="true">
            <ejb-name>MySFSB</ejb-name>
        </ejb>
        ...
    </enterprise-Beans>
</sun-ejb-jar>

指定对其执行检查点操作的方法

如果已启用,通常会在 Bean 完成了任意事务之后(即使该事务回滚)执行检查点操作。要指定非事务性业务方法(导致对 Bean 状态的重要修改)结束时 SFSB 的其他可选检查点操作,请使用 sun-ejb-jar.xml 部署描述符文件的 ejb 元素中的 checkpoint-at-end-of-method 元素。

checkpoint-at-end-of-method 元素中的非事务性方法可以是:


注 –

如果 SFSB 没有参与任何事务,并且没有在 checkpoint-at-end-of-method 元素中明确指定其任何方法,则将不对 Bean 的状态进行检查点操作(即使对于此 Bean,已设置 availability-enabled="true")。

请指定方法的较小子集以获得更好的性能。方法应完成大量工作或导致对 Bean 状态的重要修改。



示例 9–2 指定方法检查点操作的 EJB 部署描述符示例

<sun-ejb-jar>
    ...
    <enterprise-Beans>
        ...
        <ejb availability-enabled="true">
            <ejb-name>ShoppingCartEJB</ejb-name>
            <checkpoint-at-end-of-method>
                <method>
                    <method-name>addToCart</method-name>
                </method>
            </checkpoint-at-end-of-method>
        </ejb>
        ...
    </enterprise-beans>
</sun-ejb-jar>