【问题标题】:What cannot be done without EJB没有 EJB 不能做什么
【发布时间】:2014-08-13 05:40:30
【问题描述】:

如果 JPA 不依赖于 EJB 并且它有自己的规范。为什么我需要 EJB? 没有 EJB 我不能做什么?

我已经阅读了以下讨论,但我真的没有指出为什么仍然需要它?

Why should we use EJB?

https://stackoverflow.com/questions/4464338/why-ejb-is-used-in-enterprise-applications

【问题讨论】:

  • 阅读“容器管理事务”,您将开始了解 EJB 的用途。您不需要它们,它们可以在某些应用程序架构中提供很大帮助。
  • CMT 在 JPA 中工作吗?
  • 您已经知道 JPA 在 EJB 中工作,所以我不明白您为什么还要问这个问题。
  • 作为 EJB 3.0 规范 (JSR 220) 的一部分,但可以在没有 EJB 容器的情况下或在 EJB 容器之外使用。在 Java EE 6 中,JPA 2.0 在 EJB 3.1 规范 (JSR 318) 之外有其单独的规范 (JSR 317)

标签: java jakarta-ee jpa ejb


【解决方案1】:

EJB 或企业 Java bean 是可以由 Java EE 容器管理的 Java 类,可以保证类似的服务

  • bean 生命周期
  • 线程管理
  • 事务管理等

是的,JPA 现在不是 Java EE 规范的一部分。它移至 JSE。然而,在过去,Entity Beans 提供了 java 和关系数据库世界之间的“标准”桥梁。

没有 EJB 你不能做什么?我什么也不说。我的意思是你可以在没有 EJB 的情况下做任何事情。原因是存在诸如 Spring 或 Guice 之类的替代解决方案。

和往常一样,您可以在没有任何框架的情况下编写较低级别的代码。

【讨论】:

  • Java Persistence 2.1 在链接中被列为 java ee 7 技术。 oracle.com/technetwork/java/javaee/tech/index.html。它何时成为 JSE 的一部分并从 Java EE 技术中移除?
  • @mmcc18,谢谢,很高兴知道。不过我记得曾几何时它是 JSE 的一部分
  • 它不是 JavaSE(从那时起它将成为 JDK 的一部分,但它不是)。它可以 JavaSE 或JavaEE 一起使用(并作为JavaEE 的一部分捆绑在一起)。
【解决方案2】:

EJB 只是一个服务于用户请求的服务器端组件。每个企业 bean 在一个容器中运行,容器代表用户/程序员进行一些维护(事务管理、安全管理、bean 生命周期等)。因此,它使开发人员能够专注于核心工作,而不是单独进行重新发明。

所以我们可以得出结论,EJB 只是减少了程序员的编码量,让程序员专注于核心业务逻辑。

我们可以在没有 EJB 的情况下通过大量编码来做同样的事情。

谢谢, JK

【讨论】:

    【解决方案3】:

    以上所有答案都为问题添加了重要信息,但错过了一个关键点。 EJB 架构的主要卖点是分布式组件(除了所有 其他服务,例如容器管理、事务性、安全等)。这个想法是使业务逻辑能够在分布式环境中运行,并搭载 RMI/IIOP。尽管多年来这种建筑风格被证明是糟糕的。对于分布式计算,有更成功的基于 Web 服务的架构。尽管 EJB 使分布式组件看起来很容易,但它们也有其固有的复杂性和性能问题,后来尽可能避免使用。 Martin Fowler 对这个问题的一篇古老但非常有趣的读物可以阅读here,他在其中严厉抨击了 EJB 等通常推广的分布式架构的诱惑。后来的人们似乎也遵循了这种智慧,避免了跳上“分布式架构”的潮流。在 Java 领域,这以 Spring 框架的兴起和 Rod Johnson 的名著“Expert One-on-One J2EE Development without EJB”为标志。从那时起,人们和我这样的人就再也没有错过过 EJB :-)

    P.S. 为了公平对待 EJB 规范和努力改进它的人,他们在过去十年中确实取得了相当大的进步,而且他们非常现代且对开发人员友好。然而,它们的“分布式”性质已经退居次席

    【讨论】:

    • 我认为构建分布式组件使 EJB 比其他功能更重要,这与其他框架不同。
    • manning.com/panda/panda_meapch1.pdf 是一篇很棒的文章,它让我了解了一些关键点和 EJB 之旅,让我们走到了现在。
    • "1.1.4 为什么选择 EJB 3"
    • +1 用于分布式组件。然而恕我直言,它是另一个(重要的)EJB 特性,它在 15 年前曾经是独一无二的,现在变得普遍可用。有很多框架可以帮助分发我们的构建块,其中一些比 EJB 好得多。
    猜你喜欢
    • 1970-01-01
    • 2016-11-20
    • 2011-08-23
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多