场景
如果你必须从头开始重写系统,你会再次使用EJB吗?
否:请勿回答此问题,而是回答this one。
是:根据您的个人经验,提供EJB解决的一个重要的实际问题。
让答案只包含一个问题。这将让其他读者对EJB的最佳功能进行投票。
答案 0 :(得分:5)
我认为这取决于您所谈论的EJB版本。我们来讨论仅有的两个相关(IMO)版本。
遗留系统中的某些人可能仍会使用EJB 2.1。它们确实最有用作RPC抽象。他们还提供了一个基本的ORM(对象 - 关系映射)系统。正如您所提到的,提供了事务支持。因此,如果您要构建一个您希望与远程系统通信的系统,传输面向对象的数据并以事务方式执行,您可能会发现EJB值得付出努力。否则,我会说远离。
但是,EJB 3.0得到了很大的改进。它具有以前版本的所有功能,但以更直接的方式进行。它还提供了一个相当简单的Inversion-Of-Control框架,与Spring不同,它是一个相当不错的ORM形式的JPA(Java Persistence API。)我使用过EJB 3.0并且实际上很喜欢它。您可以像使用Spring一样争论使用EJB 3.0,还有一些更高级或企业级的功能。答案 1 :(得分:2)
嗯,这实际上取决于我们正在谈论的EJB。我会说MDB甚至现在仍然有用。对于实体bean和会话bean,您肯定能找到更好的方法。 也许我在EJB中仍然喜欢的一个功能是可伸缩性。使用“远程”选项,您可以根据需要将EJB部署到不同的服务器。但是,我认为这不是必要的,而且我只看到了一个非常有用的大项目。
答案 2 :(得分:1)
过去使用EJB 2.1做了很多工作,很高兴将其抛在脑后。
EJB值命题仍然适用于3.0,并且带有一个很好的轻量级编程模型。事务管理,并发,数据版本控制,状态管理,这些都是正确解决的非平凡问题,Java EE框架继续做得很好。
不可否认,我使用Hibernate和Seam进一步构建了一些Java EE特性,因此对我来说说EJB 3.0本身就是圣地并不公平。然而,当我们完全放弃Java并转向像Rails这样更时尚的东西时,我发现有太多的开发人员将这个众所周知的宝宝扔掉了洗澡水。
Seam提供了一个很好的粘合框架,可以使程序员的工作量保持在相当低的水平。当EJB与POJO有意义时,还允许您逐个项目地决定项目,而不必改变您的编程风格。
答案 3 :(得分:1)
使用java ee平台的主要原因是定义。您需要一个平台,在完全审查,兼容和兼容的平台中解决并发性,可用性,事务管理,消息传递和管理问题。是的,你可以通过将一大堆库粘在一起并将其置于tomcat之上来完成所有这些工作,但是当你可以写入标准执行,经过全面审查的平台时,为什么要浪费所有时间审查和管理兼容性和功能集。任何ee容器必须通过tck,否则它不能携带Java EE monicker。
各种人提出的关于“轻量级”,“类型”的ejbs等的事情是多余的。如果您不需要平台的功能集或保证您的杠杆库的完全内部兼容性,那么ejb(也就是Java ee平台)是过度的。但如果你真的解决了企业质量问题(参见第一段),那么ejb和java ee平台将为你提供所需的东西。答案 4 :(得分:0)
在使用EJB或J2EE时,有一点困扰很多的事情是依赖于运行EJB的应用程序服务器。对于特定的操作系统版本和JVM版本,应用程序服务器往往受支持。没有源代码到运行时环境的重要部分也可能变成挑战。
虽然原则上可以从一个供应商迁移到另一个供应商,但您需要非常了解它们如何实施规范,并远离特定于供应商的扩展。
话虽这么说,我接触到的appservers可以处理其中运行的代码中的滥用行为并且表现非常好。
答案 5 :(得分:0)
约定优于配置。
EJB 3的默认行为通常是所需的行为。我认为EJB 2.1的主要问题是详细配置文件的必要性,新的基于注释的配置解决了大部分问题。