Jakarta ee 单例会话bean

Jakarta ee 单例会话bean,jakarta-ee,singleton,ejb,ejb-3.1,session-bean,Jakarta Ee,Singleton,Ejb,Ejb 3.1,Session Bean,引入单例会话bean解决了哪些问题??它是否仅用于共享所有bean的公共数据 在EJB3.0及其之前的版本中,该问题是如何处理的 如果它保留了特定于客户端的会话状态,那么该实例将包含所有特定于客户端(试图同时访问)的数据??安全吗 如果我们可以使用静态最终变量和静态初始值设定项块或静态方法来初始化它们(因为静态变量也是每个类的数据,而不是每个实例的数据) 在其他会话bean中,为了跨bean共享公共数据,单例会话bean需要什么 在singleton中使用业务方法是一个好的设计吗?? 如果是这样

引入单例会话bean解决了哪些问题??它是否仅用于共享所有bean的公共数据

  • 在EJB3.0及其之前的版本中,该问题是如何处理的

  • 如果它保留了特定于客户端的会话状态,那么该实例将包含所有特定于客户端(试图同时访问)的数据??安全吗

  • 如果我们可以使用静态最终变量和静态初始值设定项块或静态方法来初始化它们(因为静态变量也是每个类的数据,而不是每个实例的数据) 在其他会话bean中,为了跨bean共享公共数据,单例会话bean需要什么

  • 在singleton中使用业务方法是一个好的设计吗?? 如果是这样,由单个实例服务的客户端请求的响应时间将比由多个实例服务的客户端请求的响应时间多得多

    此外,虽然singleton bean允许多个客户端并发访问单个bean实例, 默认并发类型(容器管理)中的默认锁类型(写锁)将阻止所有其他线程访问bean,直到该方法结束,并且 这似乎是一个劣势,对吗

  • 如果有人能给出一个清晰简单的用例,没有其他bean像singleton bean那样适合,这将非常有帮助

  • 提前感谢:)

  • 数据通常存储在静态变量中。静态变量不是很好,原因有很多,包括单元测试。此外,静态变量需要某种类型的同步,严格阅读EJB规范不允许这样做,尽管在实践中它工作得很好

  • 通常,存储在单例中的状态不是特定于客户端的,而是特定于应用程序的。例如,缓存全局配置状态或缓存数据库中的全局状态,可能使用周期性非持久性计时器进行刷新

  • 没有,但请看第二条

  • 不,单例bean可能不适合基于请求的业务逻辑。是的,默认值是带有写锁的容器并发,因此一次只能有一个线程。您应该根据需要使用
    @Lock(READ)
    @ConcurrencyManagement(BEAN)

  • 如#3所述,通常是需要在所有bean中共享的“全局”应用程序状态。我发现单例会话bean对于应用程序配置和管理应用程序范围的计时器非常有用

  • 数据通常存储在静态变量中。静态变量不是很好,原因有很多,包括单元测试。此外,静态变量需要某种类型的同步,严格阅读EJB规范不允许这样做,尽管在实践中它工作得很好

  • 通常,存储在单例中的状态不是特定于客户端的,而是特定于应用程序的。例如,缓存全局配置状态或缓存数据库中的全局状态,可能使用周期性非持久性计时器进行刷新

  • 没有,但请看第二条

  • 不,单例bean可能不适合基于请求的业务逻辑。是的,默认值是带有写锁的容器并发,因此一次只能有一个线程。您应该根据需要使用
    @Lock(READ)
    @ConcurrencyManagement(BEAN)

  • 如#3所述,通常是需要在所有bean中共享的“全局”应用程序状态。我发现单例会话bean对于应用程序配置和管理应用程序范围的计时器非常有用


  • 每个问题问一个问题。@BalusC很抱歉把所有问题都放在一个问题里。。我理解你的意思。。但这些都是相关的,我想对singleton bean有一个全面的了解。。这就是为什么我在一篇文章中发布了所有内容。每个问题问一个问题。@BalusC很抱歉在一篇文章中发布了所有内容。。我理解你的意思。。但这些都是相关的,我想对singleton bean有一个全面的了解。。这就是为什么我把所有的东西都放在一个帖子里。。