java - Enterprise Java Bean(EJB) 和 Entity Java Bean 有什么区别?

标签 java ejb java-ee-7

谁能解释一下 Enterprise Java BeanEntity Java Bean 之间的区别?

我知道 EJB 是什么,但我不明白它们在持久性方面的区别。

我们用同样的注解来保存,为什么叫法不一样呢?

最佳答案

在过去,随着地球的形成,Java EE 有两种基本的 Bean—— session Bean 和实体 Bean。

session Bean 是某种内部服务的接口(interface)。大多数框架都与 session Bean 有一些基本的相似之处。

实体 Bean 是由容器管理的持久元素。

当人们谈论 Java EE 时,尤其是当他们提示它时,实体 Bean 是一个核心问题。他们根本不是很好。

随着 Java 持久性架构 (JPA) 以及 Hibernate 和 EclipseLink 等框架的引入,托管持久性的 Java EE View 发生了巨大的变化。我们不再拥有诸如 Entity Beans 之类的“重量级”构造,而是由 JPA 管理的轻量级 POJO。

然而,令人困惑的是,由 JPA 管理的对象被称为实体。 JPA 实体和 EJB 实体 Bean 是完全不同的动物。但该术语的重复使用会造成混淆。

有了EJB Entity Bean,EJB和Entity是一回事。实体 EJB 是一个 EJB,就像一个 session Bean。

然而,JPA 实体不是。从技术上讲,实体与 EJB 完全无关。 JPA 实体管理器集成在 EJB 运行时上下文中(并且通过投影,该实体管理器管理的任何实体都是 EJB 运行时上下文的一部分),但不要求在 EJB 容器中使用 JPA。它们是独立的技术。也就是说,它们在 EJB 容器中确实工作得很好。

所以。

今天,实体 EJB 仍然存在,但已被弃用,并且有一天会消失。但是容器仍然支持它们。除非你有一些遗留代码,否则没有理由去关心他们。除实体 Bean 外,Java EE 支持:无状态 session Bean、有状态 session Bean 和消息驱动 Bean。这些都是一流的 EJB,代表了 Java EE 组件模型的核心。 EJB 在运行时最显着的方面是它们如何与容器内管理的本地事务空间进行交互。此外,EJB 是 EJB 容器内的可部署构造,类似于 WAR。 (它们也是其他东西,这很难详尽。)

JPA 实体不是 EJB。他们没有交易背景。关于它们是否由实体管理器主动管理,它们具有不同的状态。实体管理器在本地事务空间中注册(因此 JPA 管理的实体也是通过代理注册的)。

最后,随着 CDI 和注释的兴起,EJB 直接嵌入到 WAR 中,区分 EJB 本身的界限每天都变得越来越模糊。

关于java - Enterprise Java Bean(EJB) 和 Entity Java Bean 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40666486/

相关文章:

java - 删除字符串中感叹号之前的字符

java - 继续接收 : javax. el.PropertyNotFoundException : Target Unreachable, 'null' 返回 null

java - hibernate3 maven 插件 :make hbm2java generate hibernate annotations instead of ejb3 annotations

glassfish - Java EE7 的拦截器问题

java - JaxRs 客户端不执行 MessageBodyReader

glassfish - 在 GlassFish 4.1 上部署 Java EE 7 应用程序时出现 java.lang.ClassNotFoundException : org. hibernate.validator.internal.cdi.interceptor.ValidationInterceptor

java - 更快地找到邻居索引的方法

java - 在 Tomcat 5.5 中强制 session 复制

java - Tagsoup ,将文本标记为另一个标记

java - 在一个 JBoss 上无法从 java.lang.String 类型转换为 java.util.Date 类型,但在另一个 JBoss 上则正常