【问题标题】:Web application statesWeb 应用程序状态
【发布时间】:2015-10-30 15:36:05
【问题描述】:

Rest 意味着无状态。客户端维护应用程序状态,服务器维护资源状态。在有状态的应用程序中,该状态在哪里维护?它是在会话中维护还是在内存数据库中或其他任何东西中维护?

【问题讨论】:

    标签: web-services rest session web-applications


    【解决方案1】:

    来自 oracle 文档:

    什么是有状态会话 Bean?

    有状态会话 bean 是维护会话状态的会话 bean。

    有状态会话 bean 对于会话会话很有用,在会话会话中,必须在方法调用之间维护状态,例如实例变量值或事务状态。这些会话 bean 在该客户端的生命周期内映射到单个客户端。

    有状态会话 bean 在方法调用之间维护其状态。因此,为每个客户端创建了一个有状态会话 bean 的实例。每个有状态会话 bean 都包含一个身份以及与单个客户端的一对一映射。

    当容器确定它必须从内存中删除一个有状态会话 bean(以释放资源)时,容器通过钝化(将 bean 序列化到磁盘)来维护 bean 的状态。这就是为什么你钝化的状态必须是可序列化的。但是,此信息无法在系统故障后继续存在。当客户端再次请求 bean 实例时,容器会激活之前钝化的 bean 实例。

    保存的状态类型不包括资源。容器调用 bean 中的 ejbPassivate 方法为 bean 提供清理其资源的机会,例如持有的套接字、数据库连接和带有静态信息的哈希表。所有这些资源都可以在 ejbActivate 方法期间重新分配和重新创建。

    https://docs.oracle.com/html/E13981_01/undejbs002.htm

    记住“将bean序列化到磁盘”,注意这是oracle的实现,并不意味着所有的实现都是这样。

    【讨论】:

    • 所以我得到了会话部分,但同样,会话是否存在于休息架构样式(无状态)中?还是只存在于有状态的?
    • 在休息架构中,您不应该跟踪用户会话。你可以让它快乐,但从建筑的角度来说这是错误的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2012-06-11
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多