【发布时间】:2011-06-19 20:01:49
【问题描述】:
我是JPA新手,不明白无状态和有状态的用法和区别。
有什么经验吗?
问候, 海瑟姆
【问题讨论】:
标签: java jpa stateless stateful
我是JPA新手,不明白无状态和有状态的用法和区别。
有什么经验吗?
问候, 海瑟姆
【问题讨论】:
标签: java jpa stateless stateful
Stateless 和 Stateful 是 EJB 会话 Bean 概念,而不是 JPA。
注意事项: JPA 是 EJB 规范的一部分,但可以在 EJB 容器之外单独使用。这通常是造成混乱的原因。
已编辑:一个有用的 SO 线程,Why Use Stateful Session Beans。
【讨论】:
“有状态”和“无状态”是会话 bean 的属性。
会话 bean(简而言之)提供了一种调用应用程序服务器上的方法的方法。 bean 是 java 类的一个实例。通常,bean 在远程方法终止(并返回结果)后被销毁。这些 bean 是“无状态的”。
可以(但不常见)向 bean 添加字段和属性,以便客户端可以在服务器上“创建”此实例并将其用于多个操作。这些 bean 是“有状态的”(应该避免)。
【讨论】:
我认为部分混淆在于 Java Persistence API 是 EJB3 规范的一部分,有时似乎可以与 EJB 互换使用。直到我第一次接触 Pro EJB 3:Java Persistence API,我才真正理解这一点。看看http://en.wikipedia.org/wiki/Enterprise_JavaBean,它似乎对这个主题提供了一个很好的概述。
【讨论】:
基本上,如您所知,Java 会编译内容,然后您在运行时看到应用程序,如果在类加载器之后一切顺利并避免执行阶段错误等等,当您将变量、对象等存储在任何像 RAM 或数据库这样的地方,当用户与您的应用程序交互时,这些数据可能会发生变化,然后您开发了一个有状态的应用程序,如果您认为代码逻辑中没有什么是动态的(可以重塑应用程序行为的东西),那么您将开发无状态应用程序。
简而言之,有状态的应用程序意味着您的类属性在运行时动态变化。
【讨论】: