【问题标题】:Session Facade in the world of Spring/Hibernate - is it still relevant?Spring/Hibernate 世界中的会话外观 - 它仍然相关吗?
【发布时间】:2011-08-16 18:36:34
【问题描述】:

我们将如何在 Spring 应用程序中实现会话外观设计模式? Session 外观的角色是否可以简单地由服务 bean 类提供服务,该服务 bean 类将为事务注释并具有会话范围?

【问题讨论】:

    标签: spring jakarta-ee spring-mvc


    【解决方案1】:

    Spring 服务(具有单例范围)就像本地无状态会话 bean,它是会话外观模式的实现,仅适用于非分布式应用程序。 Spring 确实证明了在大多数情况下不需要分发服务,并且 Session 外观的分布式方面并不像 J2EE 所宣称的那样普遍。

    (当您说“会话范围”时,听起来您将会话与事务中的会话与 HttpSession 中的会话混淆了,因为 Spring 使用术语会话范围来指代 HttpSessions。(至少它让我对预期的内容感到困惑。 ) 我对the Session facade description 的阅读使我认为它与 HttpSession 没有任何关系。)

    无论如何,我认为封装复杂性的基本目标仍然有效。在某些情况下,提供分布式访问的目标仍然非常有效,只是不像 J2EE 试图让它成为默认情况。 Seam 为有状态会话 bean 提供了一个案例。

    【讨论】:

    • 感谢您的回答。我在问题中提到“会话”的原因是会话外观通常在会话期间可用,因此来自 Web 层的所有请求都将转到同一个会话外观,并且 EJB 服务器将创建一个池会话 bean 实例。由于 Spring bean 的默认范围是单例的,一个 Spring bean 将被所有请求共享,我认为这对于许多并发请求进行耗时的数据检索来说可能是一个问题,对吧?
    • LeoNYC: a) 当然,spring 是无状态的,不是池化的,它不是有状态的会话 bean。池可能会用完连接,或者 rdbms 可能会崩溃,但对于(无状态)服务来说,并发应该不是问题。
    • @LeoNYC:如果您提供更多详细信息,您可能会得到更好的答案。如果您对使会话外观不相关的事物有所了解,请简要描述一下。否则我们不知道你来自哪里。
    【解决方案2】:

    会话应该与网络层相关联,而不是服务。

    服务确实拥有事务,因此它们应该具有该注释。

    【讨论】:

    • 这不能回答我的问题。我试图了解来自 EJB 世界的 Session Facade 的概念如何转化为带注释的事务、单例 bean(注入/注释)等的 Spring 世界。
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 2010-09-19
    • 2011-06-18
    • 1970-01-01
    • 2013-04-25
    • 2021-01-10
    • 2011-07-25
    • 2015-07-27
    相关资源
    最近更新 更多