EJB 3的最佳function

场景

  • 您已使用EJB版本3开发了一个webapp。
  • 系统已部署,交付并由客户使用。

如果您必须从头开始重写系统,您会再次使用EJB吗?

:不回答这个问题,而是回答这个问题。

是的 :根据您的个人经验,提供EJB解决的一个重要的实际问题。

让答案只包含一个问题。 这将让其他读者投票支持EJB的最佳function。

我认为这取决于你所谈论的EJB的版本。 我们来讨论仅有的两个相关(IMO)版本。

遗留系统中的某些人仍可能使用EJB 2.1。 它们真的最有用作RPC抽象。 他们还提供了一个基本的ORM(对象 – 关系映射)系统。 正如您所提到的,提供了事务支持。 因此,如果您要构建一个您希望与远程系统通信的系统,传输面向对象的数据并以事务方式执行,您可能会发现EJB值得付出努力。 否则,我会说远离。

但是,EJB 3.0得到了很大的改进。 它具有以前版本的所有function,但是以更直接的方式实现。 它还提供了一个相当简单的Inversion-Of-Control框架,与Spring不同,它是一个相当不错的ORMforms的JPA(Java Persistence API)。我使用过EJB 3.0并且实际上很喜欢它。 您可以像使用Spring一样争论EJB 3.0的使用,此外它还有一些更高级或企业级的function。

嗯,这实际上取决于我们正在谈论的EJB。 我会说MDB甚至现在仍然有用。 对于实体bean和会话bean,您肯定能找到更好的方法。 也许我在EJB中仍然喜欢的一个function是可伸缩性。 使用“remote”选项,您可以根据需要将EJB部署到不同的服务器。 但是,我认为这不是必要的,我只看到一个非常有用的大项目。

根据定义,使用java ee平台的主要原因。 您需要一个平台,在完全审查,兼容和兼容的平台中解决并发性,可用性,事务管理,消息传递和管理问题。 是的,你可以通过将一大堆库粘在一起并将其置于tomcat之上来完成所有这些工作,但是当你可以写入标准执行,经过全面审查的平台时,为什么要浪费所有时间审查和管理兼容性和function集。 任何ee容器必须通过tck,否则它不能携带Java EE monicker。

各种人提出的关于“轻量级”,“类型”的ejbs等的事情是多余的。 如果您不需要平台的function集或保证您的杠杆库的完全内部兼容性,那么ejb(也就是Java ee平台)是过度的。 但如果你真的解决了企业质量问题(参见第一段),那么ejb和java ee平台将为你提供所需的东西。

在过去使用EJB 2.1做了大量工作,很高兴将其抛在后面。

EJB值命题仍然适用于3.0,并且带有一个很好的轻量级编程模型。 事务管理,并发,数据版本控制,状态管理,这些都是正确解决的非平凡问题,Java EE框架继续做得很好。

不可否认,我使用Hibernate和Seam来进一步构建一些Java EEfunction,因此对我来说说EJB 3.0本身就是麦加并不是完全公平的。 然而,当我们完全放弃Java并转向像Rails这样更时尚的东西时,我发现有太多的开发人员将这个众所周知的宝宝扔掉了洗澡水。

Seam提供了一个很好的粘合框架,可以使程序员的工作量保持在很低的水平。 当EJB与POJO有意义时,还允许您逐个项目地决定项目,而无需更改编程风格。

在使用EJB或J2EE时,有一点困扰很多的事情是依赖于运行EJB的应用程序服务器。 对于特定的操作系统版本和JVM版本,应用程序服务器往往受支持。 没有源代码到运行时环境的重要部分也可能变成挑战。

虽然原则上可以从一个供应商迁移到另一个供应商,但您需要非常了解它们如何实现规范的细微差别,并远离特定于供应商的扩展。

话虽这么说,我接触过的应用程序可以处理其中运行的代码中的滥用并且表现非常好。

约定优于配置。

EJB 3的默认行为通常是期望的行为。 我认为EJB 2.1的主要问题是详细配置文件的必要性,新的基于注释的配置解决了大部分问题。