4

我是 JPA 的新手,我无法理解无状态和有状态之间的用途和区别。

有什么经验吗?

问候, 海瑟姆

4

5 回答 5

9

StatelessStateful是 EJB Session Bean 的概念,而不是JPA的概念。

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

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

于 2011-02-02T09:02:20.457 回答
4

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

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

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

于 2011-02-02T09:04:17.650 回答
0

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

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

于 2011-02-02T09:03:45.790 回答
0

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

于 2011-02-02T09:14:29.520 回答
0

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

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

于 2020-08-25T06:16:50.983 回答