【问题标题】:EJB3 or "Spring3 + hibernate" which one suitableEJB3还是“Spring3+hibernate”哪一种合适
【发布时间】:2011-10-23 07:57:56
【问题描述】:

在 EJB3 和带有休眠的 Spring 3 中有很多共同点。 我需要找出在哪里可以使用带有休眠而不是 EJB3 的 Spring 框架,反之亦然。

【问题讨论】:

  • @jasalguero 它不仅仅是春天。 Spring + Hibernate 与 EJB3 的比较
  • Hibernate 是持久层的 JPA 规范的实现,所以这意味着在 EJB3 选项中您不会使用 JPA?

标签: java hibernate spring jakarta-ee ejb-3.0


【解决方案1】:

您可以互换使用它们。

如果您使用 EJB3,则必须拥有完整的 Java EE、EJB3 应用服务器。有些是免费的,有些不是。

如果您使用 Spring 3,则需要在 CLASSPATH 中包含 Spring JAR,但不需要完整的 Java EE 应用服务器。 Tomcat 或 Jetty 就足够了,这取决于你的需要。

EJB3 实现有多个供应商;毕竟,EJB3 只是一个规范。 Spring 只有一个供应商。

就个人而言,我更喜欢春天。从 1.0 版开始,我已经使用了六年,并取得了巨大的成功。这是一个非常高质量的框架。 EJB3 从 Spring 和 Hibernate 中吸取了很多教训。我认为 Spring 的面向方面编程比添加到 EJB3 中的要好。其他模块(例如安全、LDAP、Web 服务等)非常出色。

【讨论】:

  • 我同意 (+1)。除了企业需求之外,几乎没有任何令人信服的理由选择 JEE 而不是 Spring。
  • @duffymo 除了服务器的原因,还有什么特别的原因,比如事务管理,EJB 在复杂和分布式的应用程序中表现不错,因为很多东西都是由服务器供应商实现的。
  • Spring做事务管理;它可以处理复杂性(因为您的代码可以做到这一点);它可以分发。 EJB3 没有什么是 Spring 做不到的,除了收取许可费。
  • >除了收取许可费之外,EJB3 没有什么可以做 Spring 做不到的——所以 Rod 给了我们 Spring 没有任何商业利益?真的吗? Apache 收取许可费是因为我使用 OpenEJB 吗?真的吗?
  • Dyffymo,你的观点毫无意义。我见过雇主为 tcServer 花费大量时间,因为它应该是 Spring 应该运行的地方(他们的标语)。也许 Springsource 对他们要的价格有点尴尬,因为在他们的网站上并不是很清楚,是吗?同时,我从来没有为使用 OpenEJB 付过一分钱。是的,这是事实!
【解决方案2】:

它们都非常相似。也请参阅此问题:EJB 3.1 or Spring 3.. When to choose which one?

如果您使用 EJB,您可以选择以 Java EE 为目标。这意味着您不必在 WAR 中包含任何额外的 jar,因为目标环境已经支持 EJB。将此与以 Java SE 为目标进行比较,您不必在 jar 中包含诸如 ArrayList 和 HashMap 之类的类,因为任何 Java SE 运行时都已经具有这些类。

当然,您也可以在您的应用程序中包含 EJB jar,如果您想针对 Tomcat 或 Jetty 等 servlet 容器,这会很方便。在这种情况下,OpenEJB 可能是最好的选择,但是任何 EJB 实现都可以在嵌入式模式下运行其容器(这是 EJB 规范的要求),并且可以在 Java SE 中使用。

还有一个比完整 EJB 更轻量级的 EJB 版本。这称为 EJB3-lite,并受到 Glassfish Web Profile 和 Resin 等服务器的支持。它们都只比裸 Tomcat 大(Resin 为 23MB),并为您提供了一个完整的开箱即用堆栈。

我个人认为 EJB3 比 Spring 要好。它不那么复杂,也不那么重量级。 EJB3 开始了一场革命,它只需要简单的注释并强烈遵守约定优于配置。 Spring 从历史上看,即使是最简单的事情也需要大量的 XML。然而,Spring 从 EJB 中吸取了教训,现在采用了相同的方法。

归根结底,这两种技术都是成熟而优秀的技术,你不会出错(只是避免混合它们,除非你绝对必须这样做)。

【讨论】:

  • 您可以将 Spring 与 EJB 一起使用;另一种方式是不可取的。 “不那么复杂,不那么重量级”——真的吗?大量的 XML - 您还没有看过 Spring 3 和注释。您没有承认 EJB3 欠 Spring 和 Hibernate。
  • Duffyomo,关于债务,我部分同意你的看法,但还有更多。 EJB 和 Spring 在创新方面步调一致。在 Java 中,EJB 最初提出了带有横切服务的容器管理 bean 的想法。然而,该模型具有侵入性和重量级。需要大量的 XML。 Spring 通过提出基于 pojo 的方法简化了 EJB,但需要更多的 XML。然后 EJB 跟随 Spring,但通过全注释进一步简化。然后 Spring 紧随 EJB。 EJB(通过 CDI)随后通过引入类型安全注入进行了创新。
  • 关于 Hibernate 的债务,EJB 目前没有债务,但 JPA 部分债务。然而,这种关系相当明显,因为 Gavin King 自己为 JPA 规范做出了贡献,而 Hibernate is JPA。此外,Hibernate 并没有发明该模型,因为 TopLink 早在它之前就已经存在。 Hibernate 只是 TopLink 的一个开源替代品。当时 Sun 的成员(例如 Mike Keith)实际上从一开始就提议在 EJB 中使用 TopLink 模型,但他们输给了那些提倡可怕的 EJB1/2 Entity bean 模型的人。
  • @duffymo:不要忘记 Rod Johnson 一次又一次地获得了为 EJB 规范做出贡献的机会。如果我们真的在努力让世界变得更美好,而不在乎“收取许可费”,那他为什么不抓住这个机会呢?
  • 你可以。 web.xml 是可选的,faces-config.xml 是可选的,EJB 绝对不需要在什么地方有一行 XML。我可以在简单的战争中将 pojo 放入任意包中,只需将 @Stateless 放在它上面,并且我拥有 EJB 的全部功能。
猜你喜欢
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2011-04-28
  • 2020-09-28
相关资源
最近更新 更多