繁体   English   中英

Java 持久化应用程序无状态与有状态

[英]Java Persistance Application Stateless vs. Stateful

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

有什么经验吗?

问候,海瑟姆

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM