【问题标题】:Java Persistance Application Stateless vs. StatefulJava 持久性应用程序无状态与有状态
【发布时间】:2011-06-19 20:01:49
【问题描述】:

我是JPA新手,不明白无状态和有状态的用法和区别。

有什么经验吗?

问候, 海瑟姆

【问题讨论】:

    标签: java jpa stateless stateful


    【解决方案1】:

    StatelessStateful 是 EJB 会话 Bean 概念,而不是 JPA

    注意事项: JPA 是 EJB 规范的一部分,但可以在 EJB 容器之外单独使用。这通常是造成混乱的原因。

    已编辑:一个有用的 SO 线程,Why Use Stateful Session Beans

    【讨论】:

    • +1:简洁,但正确。应该注意的是,JPA 是 EJB 规范的一部分,但可以在 EJB 容器之外单独使用。这就是造成混乱的原因。
    • 谢谢,darioo,您的建议已添加到帖子中。 :)
    【解决方案2】:

    Stateful 和 Stateless 是 EJB's(Java EE 容器管理的会话 Bean)的属性,而不是 JPA 规范的任何特定属性。对于来自同一客户端的每个请求,Stateful bean 将具有与之关联的状态。 Stateless bean 没有特定于客户端的状态,单个实例可以在多个客户端请求之间并发使用,线程安全。

    JPA 是一种可用于持久化有状态 bean 的持久化策略(我猜你也可以直接使用 JDBC,或者插入一些其他持久化策略)。

    【讨论】:

      【解决方案3】:

      “有状态”和“无状态”是会话 bean 的属性。

      会话 bean(简而言之)提供了一种调用应用程序服务器上的方法的方法。 bean 是 java 类的一个实例。通常,bean 在远程方法终止(并返回结果)后被销毁。这些 bean 是“无状态的”。

      可以(但不常见)向 bean 添加字段和属性,以便客户端可以在服务器上“创建”此实例并将其用于多个操作。这些 bean 是“有状态的”(应该避免)。

      【讨论】:

      • 购物车应用程序中不使用有状态会话 bean 吗?那么...如果至少有一个用例,为什么要避免使用有状态 bean?
      【解决方案4】:

      我认为部分混淆在于 Java Persistence API 是 EJB3 规范的一部分,有时似乎可以与 EJB 互换使用。直到我第一次接触 Pro EJB 3:Java Persistence API,我才真正理解这一点。看看http://en.wikipedia.org/wiki/Enterprise_JavaBean,它似乎对这个主题提供了一个很好的概述。

      【讨论】:

        【解决方案5】:

        基本上,如您所知,Java 会编译内容,然后您在运行时看到应用程序,如果在类加载器之后一切顺利并避免执行阶段错误等等,当您将变量、对象等存储在任何像 RAM 或数据库这样的地方,当用户与您的应用程序交互时,这些数据可能会发生变化,然后您开发了一个有状态的应用程序,如果您认为代码逻辑中没有什么是动态的(可以重塑应用程序行为的东西),那么您将开发无状态应用程序。

        简而言之,有状态的应用程序意味着您的类属性在运行时动态变化。

        【讨论】:

          猜你喜欢
          • 2012-08-06
          • 1970-01-01
          • 2020-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-17
          • 2012-06-19
          • 2020-12-25
          相关资源
          最近更新 更多