EJB 3.1或Spring 3 ..何时选择哪一个?

asy*_*ard 41 comparison ejb-3.0 ejb-3.1 spring-3

EJB在3.x版本中实现了许多改进,Spring也是常用的,而版本3是一个很好的选择.

网上有很多文章,但没有关于ejb3x与spring3x的确切比较.你对它们有什么想法,在现实世界的例子中哪个更好的条件?

例如,我们想要分离数据库和服务器,这意味着我们的应用程序将在服务器上,我们的数据库将在另一个服务器上.. EJB远程控制与Cluster4Spring等?

做每一个@Annotation总是好的?配置永远不需要?

aki*_*ira 56

对于应用程序在一台服务器上运行而数据库在另一台服务器上运行的用例,EJB和Spring之间的选择无关紧要.每个平台都支持这一点,无论是Java SE应用程序,简单的Servlet容器,如Tomcat或Jetty,PHP,Ruby on Rails,还是其他任何平台.

你不需要任何明确的远程处理.您只需定义数据源,提供数据库服务器所在的URL即可.

也就是说,EJB和Spring Beans都可以更轻松地使用数据源.它们都可以帮助您定义数据源,将其注入bean并管理与它们相关的事务.

在这两者中,EJB(和一般的Java EE)更加轻量级,并且更符合约定优于配置原则.Spring需要更多的冗长才能获得相同的东西,并且很大程度上取决于XML文件,这些文件很快就会变得非常庞大和笨拙.硬币的另一面是Spring可以不那么神奇,在你想要拼出的所有内容之后你可能会感觉更有控制力.

另一个问题是EJB和Spring的开发方式.

EJB是免费的(如免费啤酒),开源和非专有.EJB的实现由非营利组织(Apache),开源公司(Redhat/JBoss)和深度商业化的闭源企业(IBM)构成.我个人会避免后者,但他自己会.

另一方面,Spring是免费的开源软件,但具有强大的专有性.只有一家公司制造Spring,那就是Springsource.如果你不同意罗德,那么你的运气不错.这不一定是坏事,但你可能想要注意的差异.

做每一个@Annotation总是好的?配置永远不需要?

真的是一场无休止的辩论.一些人认为XML难以维护,其他人认为注释污染了其他纯粹的POJO模型.

我认为使用注释将bean注释为EJB无状态bean(@Stateless)或JPA实体(@Entity)更加干净.@EJB或@Inject依赖注入也是如此.另一方面,我更喜欢将JPQL命名查询放在XML文件而不是注释中,并且将表示纯配置数据(如某些东西的最大值)的注入也放在XML中.

在Java EE中,每个注释也可以在XML中指定.如果注释和XML等效项都存在,则XML会否决注释.这使得从默认情况的注释开始非常方便,但稍后通过XML覆盖它以用于特定用例.

Java EE中的当前首选项似乎更倾向于(简单)注释与大量约定优于配置相结合.

  • akira,谢谢你的详细解答,我对远程处理有点困惑.什么时候需要?在需要远程处理的情况下,Spring是否具有EJB可以对@remote bean执行的功能? - 如果你想要,我可以在另一个问题上问它. (2认同)

Dav*_*ins 14

你应该问的真正问题是CDI/EJB或Spring


Mik*_*aun 6

它通常不是Spring vs EJB,而是Spring vs Java EE.EJB本身与Spring Beans相比.它们都是在容器内运行的一种托管bean(EJB容器和Spring容器).

总的来说,这两种技术非常相似.Reza Rahman在前两阵进行了很好的比较.


小智 6

由于标准化,EJB更有优势.如果您正在使用轻量级应用程序,我认为使用Spring很好但是如果您希望您的应用程序很大并且需要大量内存访问和数据连接访问,那么您可以考虑使用EJB开始开发.集群和负载平衡的主要原因是内置于EJB框架中.

在EJB环境中,当部署EAR('E'nterprise'AR'chive)时,可以部署多个EJB bean,每个EJB都可以具有特定目的.假设您为用户管理编写了一个bean,为产品管理编写了另一个bean.也许有一天,您发现您的用户服务方式超出了您的产品访问服务,并且您希望将用户bean移动到另一台计算机上的其他服务器.这实际上可以在运行时完成,而无需更改代码.可以在服务器和数据库之间移动Bean,以适应群集和负载/数据平衡,而不会影响您的开发人员或用户,因为大多数都可以在部署级别进行配置.

支持标准的另一个原因是知道大多数大型第三方供应商可能会支持它,因此在与新标准/服务/技术集成时会产生更少的问题 - 让我们面对它,那些就像新的冰淇淋口味一样.如果它是在公共规范中,新的初创公司或善良的开发人员可以创建一个开源版本.

http://www.onjava.com/pub/a/onjava/2005/06/29/spring-ejb3.html

最不幸的是,即使是最聪明的设计师或程序员也无法预测开发社区可能会或不会接受哪些功能,这是软件变得臃肿的主要原因...... Java EE绝对是这样!