针对使用带有 HTTP 会话的 ActivitySession 的用法模型

本主题描述在 WebSphere® Web 容器中运行的 Web 应用程序如何参与 ActivitySession 上下文。

如果设计 Web 应用程序,使多个 servlet 调用作为同一逻辑应用程序的一部分出现,那么 servlet 可使用 HttpSession 保存 servlet 调用间的状态。ActivitySession 上下文是一个状态,可暂挂到 HttpSession 中,并在以后调用访问 HttpSession 的 servlet 时再恢复。

ActivitySession 自动与 HttpSession 相关联,所以可用于扩展对多个 HTTP 调用以及 servlet 的包含或转接上的 ActivitySession 访问,并且支持 Web HTTP 客户机的生命周期可确定的 Enterprise JavaBeans (EJB) 激活周期。HttpSession 中存储的 ActivitySession 上下文还可用于使 ActivitySession 的工作反过来与特定 Web HTTP 客户机相关联。

根据与 Web 应用程序模块中的 servlet 相关联的部署描述符属性,Web 容器管理 ActivitySession。两个用法模型为:
  • Web 容器启动和结束 ActivitySession。
    Web 应用程序调用已为 ActivitySession 的容器控制配置的 servlet。
    • 如果 HttpSession 存在,那么它具有关联的 ActivitySession。
    • 如果 HttpSession 不存在,那么 servlet 可启动 HttpSession,这导致 ActivitySession 自动启动,并与 HttpSession相关联。

    在结束现有 HttpSession 后,servlet 才能启动新的 HttpSession。在 HttpSession 内,Web 应用程序可调用能使用关联的 ActivitySession 上下文的其他 servlet。当 Web 应用程序调用结束 HttpSession 的 servlet 时,ActivitySession 自动结束。这在下图中有所显示:

    图 1. ActivitySession 的 Web 容器控制. 此图周围的文本对此图进行了描述。ActivitySession 的Web 容器控制,如附带此图的文本所描述
  • Web 应用程序启动和结束 ActivitySession。
    Web 应用程序调用已为 ActivitySession 的应用程序控制配置的 servlet。
    • 如果 HttpSession 存在并具有关联的 ActivitySession,那么 servlet 使用或结束此 ActivitySession 上下文。
    • 如果 HttpSession 不存在,servlet 可启动 HttpSession,但是这不会自动启动 ActivitySession。
    • 如果 HttpSession 存在,但是没有关联的 ActivitySession,那么 servlet 可启动新的 ActivitySession。这将 ActivitySession 自动与 HttpSession 相关联。ActivitySession 持续到 ActivitySession 明确结束,或者 HttpSession 结束。

    在结束现有 ActivitySession 后,servlet 才能启动新的 ActivitySession。结束现有 HttpSession 后,servlet 才能启动新的 HttpSession。

    在 HttpSession 内,Web 应用程序可调用能使用或结束现有 ActivitySession 上下文的其他 servlet,或者如果不存在 ActivitySession,那么启动新的 ActivitySession。当 Web 应用程序调用结束 HttpSession 的 servlet 时,ActivitySession 自动结束。这在下图中有所显示:

    图 2. ActivitySession 的 Web 应用程序控制. 此图周围的文本对此图进行了描述。ActivitySession 的 Web 应用程序控制,如附带此图的文本所描述

Web 应用程序可调用为用法模型配置的 servlet。

以下部分用于两个用法模型:

  • 要结束 HttpSession(和任何关联的 ActivitySession),Web 应用程序必须使此会话失效。这导致为 ActivitySession 设立检查点。
  • ActivitySession 上下文中激活的任何下游企业 Bean 可保存在内存中,而不是在 servlet 调用间已钝化,这是因为客户机有效地变成 Web HTTP 客户机。
  • Web 应用程序可由很多 servlet 组成,而 Web 应用程序中的每个 servlet 可使用 ActivitySessionControl 的值进行配置。ActivitySessionControl 确定 servlet 或其容器是否启动任何 ActivitySession。
  • 封装活动事务上下文的 ActivitySession 上下文不能与 HttpSession 相关联,这是因为事务可保持数据库锁定,而且应该设计为短期的。如果应用程序将活动事务移到 HttpSession,那么事务回滚,而 ActivitySession 暂挂到 HTTPSession 中。一般情况下,您应该将应用程序设计为使用 ActivitySession 或其他构造作为长期实体,而 ACID 事务作为这些应用程序中的短期实体。
  • 对于 ActivitySession 的持续时间,任何时候只能有一个 ActivitySession 可与 HttpSession 相关联。与 HttpSession 关联的 ActivitySession 仍然在 ActivitySession 的持续时间内相关联,但是在完成第一个 ActivitySession 后,才能被另一个 ActivitySession 所替换。如果 servlet 已共享对 HttpSession 的访问,那么 ActivitySession 可被多个 servlet 访问。
  • ActivitySession 不是持久的。如果持久 HttpSession 的存在时间长于主管它的服务器,那么在主管服务器结束时,终止已高速缓存的 ActivitySession。
  • 如果在关联的 ActivitySession 结束前 HttpSession 超时,那么复位 ActivitySession1。这样将 ActivitySession 资源回滚到最后一个一致点:
    • 如果 Web 应用程序调用已为 ActivitySession 的容器控制配置的 servlet,那么完全回滚 ActivitySession 资源。
    • 如果 Web 应用程序调用已为 ActivitySession 的应用程序控制配置的 servlet,那么 ActivitySession 资源回滚到 servlet 执行的最后检查点,或者如果未设置检查点,那么完全回滚。
  • 如果 ActivitySession 超时,那么将它复位到最后一个一致点(请参阅前一项),然后结束 HttpSession。
1 复位 ActivitySession 会导致当前 ActivitySession 中涉及的所有资源回滚到最后一致点,但是允许在 ActivitySession 中以后工作。复位完成后,线程将与调用复位前的同一个 ActivitySession 相关联。ActivitySession 资源仍然与 ActivitySession 相关联,尽管它们无法进一步参与 ActivitySession

指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=ras_ohttp
文件名:ras_ohttp.html