企业Java Bean(EJB)和实体Java Bean之间有什么区别?

5

有人能解释一下企业级Java Bean实体Java Bean之间的区别吗?

我知道什么是EJB,但就持久性而言,我不理解它们的区别。

我们使用相同的注释来保存它,但为什么要称其为不同的东西呢?

1个回答

9
在早期地球形成时,Java EE 有两种基本的 Java Bean -- Session Bean 和 Entity Bean。
Session Bean 是对某种内部服务的接口。几乎所有的框架都有至少一个与 Session Bean 相似的基础组件。
Entity Bean 是由容器管理的持久化元素。
当人们谈论 Java EE,特别是抱怨它时,Entity Beans 是一个核心问题。它们根本不太好用。
随着 Java 持久化架构(JPA)的引入,以及像 Hibernate 和 EclipseLink 这样的框架,Java EE 中受管持久性的观点发生了巨大变化。我们不再拥有"重量级"的构造,比如 Entity Beans,而是由 JPA 管理的轻量级 POJOs。
然而,困惑在于由 JPA 管理的对象被称为 Entities。JPA Entity 和 EJB Entity Bean 是完全不同的东西。但是术语的复用是一种混淆源。
在 EJB Entity Bean 中,EJB 和 Entity 是相同的东西。Entity EJB 就是 EJB,就像 Session Bean 一样。
然而,JPA Entity 不是这样的。从技术上讲,Entity 根本和 EJB 没有关系。JPA Entity Manager 集成在 EJB 运行时环境中(通过投影,由该 Entity Manager 管理的任何 Entity 都是 EJB 运行时环境的一部分),但是在 EJB 容器中使用 JPA 并不是必须的。它们是不同的技术。尽管如此,它们在 EJB 容器中确实表现得非常出色。
因此。
今天,Entity EJB 仍然存在,但已被弃用,并且有一天将消失。但是容器仍然支持它们。除了 Entity Bean,Java EE 还支持:无状态 Session Beans、有状态 Session Beans 和消息驱动 Beans。这些都是代表 Java EE 组件模型核心的一流 EJBs。EJB 在运行时最引人注目的方面是它们如何与容器内管理的本地事务空间进行交互。此外,EJB 是可部署的构造,类似于 WAR。(它们也是其他东西,这远非详尽无遗。)
JPA Entity 不是 EJBs。它们没有事务上下文。它们有一个不同的状态,即它们是否由其 Entity Manager 主动管理。Entity Manager 已经加入到本地事务空间中(因此,通过代理,JPA 管理的 Entities 也是如此)。
最后,随着 CDI 和注解的兴起,以及将 EJB 直接嵌入到 WAR 中,区分 EJB 本身的边界变得越来越模糊。

哇!太棒了。喜欢它。 - Pritam Banerjee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接