EJB 3.1还是Spring 3.什么时候select哪一个?

EJB在3.x版本中取得了许多改进,Spring也是常用的,版本3是一个很好的select。

网上有很多文章,但是没有关于ejb3x和spring3x的完全比较。你有没有关于它们的任何想法,在现实世界的例子中哪个更好在哪些条件?

例如,我们要分开数据库和服务器,这意味着我们的应用程序将在服务器上,我们的数据库将在另一台服务器。EJB远程与Cluster4Spring等?

做每一个@Annotation总是好的? configuration不需要?

对于应用程序在一台服务器上运行并且数据库在另一台服务器上运行的用例,EJB和Spring之间的select是不相关的。 每个平台都支持这一点,无论是Java SE应用程序,简单的Servlet容器,如Tomcat或Jetty,PHP,Ruby on Rails或其他。

你不需要任何明确的远程处理。 您只需定义一个数据源,提供数据库服务器所在的URL,就是这样。

也就是说,EJB和Spring Beans都可以更容易地处理数据源。 它们都可以帮助你定义一个数据源,将它注入到bean中并pipe理与之相关的事务。

在这两者中,EJB(和一般的Java EE)更加轻量级,并且更多地遵循约定而不是configuration原则。 Spring需要更多的冗长来获取相同的东西,并且很大程度上依赖于XML文件,这些文件很快就会变得非常庞大而笨拙。 硬币的另一面是,spring可能不那么神奇,在你想要的东西拼出来之后,你可能会感觉到更多的控制力。

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

EJB是免费的(如免费啤酒),开源和非专有。 EJB的实现由非营利组织(Apache),开源公司(Redhat / JBoss)和深度商业封闭源代码企业(IBM)制定。 我个人会避免后者,但每个人都是自己的。

另一方面,Spring是免费和开源的,但是强有力的专有。 只有一个公司在制造Spring,这就是Springsource。 如果你不同意罗德,那么对你来说,运气不好。 这不一定是坏事,但你可能想知道的差异。

做每一个@Annotation总是好的? configuration不需要?

这真是一场无尽的争论。 有人认为XML很难维护,其他人认为注释会污染纯粹的POJO模型。

我认为使用注释更加干净地将bean注释为EJB无状态bean(@Stateless)或JPA实体(@Entity)。 @EJB或@Injectdependency injection也一样。 另一方面,我更喜欢JPQL将查询命名为XML文件而不是注释,以及表示纯粹的configuration数据的注入(如某些最大值)以XML格式。

在Java EE中,每个注释也可以用XML来指定。 如果注解和XML等价物都存在,那么XML将否决注释。 这使得对于默认情况下的注释开始非常方便,但是稍后通过XML为特定的用例覆盖它。

Java EE中的当前首选项似乎更倾向于(简单)注释以及大量常规重载configuration。

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

这通常不是Spring与EJB,而是Spring与Java EE。 EJB本身与Spring Beans相比较。 它们都是在一个容器(EJB容器和Spring容器)内运行的一种托pipebean。

总体而言,这两种技术非常相似。 雷扎·拉赫曼(Reza Rahman)在两人之间做了很好的比较。

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

在EJB环境中,当部署一个EAR('E'nterprise'AR'chive)时,可能会部署多个EJB bean,每个bean都可能有特定的用途。 假设你为用户pipe理编写了一个bean,并为产品pipe理编写了另一个bean。 也许有一天,你发现你的用户服务方式超过了你的产品访问服务,并且你想把你的用户bean移到不同的机器上的另一台服务器上。 这实际上可以在运行时完成而不会改变你的代码。 Bean可以在服务器和数据库之间移动,以适应群集和加载/数据平衡,而不会影响开发人员或用户,因为大部分可以在部署级别进行configuration。

支持标准的另一个原因是知道大多数大型第三方供应商可能会支持这个标准,从而减less与新标准/服务/技术集成时遇到的问题 – 让我们面对这些问题,就像新的冰激凌一样。 如果是在公开的规范中,新的创业公司或善良的开发者可以创build一个开源版本。

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

最不幸的是,即使是最聪明的devise师或程序员也无法预测开发团队可能或不会接受哪些特性,这是软件变得臃肿的主要原因…… Java EE绝对是这样的!

select一个或另一个,但不是两个。

我的个人喜好是spring。 在过去的六年中,我已经使用了很多成功的项目。 它和任何软件一样扎实。

如果您select在您的应用中使用EJB,那么Spring可以使用EJB,但我不相信相反情况。

如果您能负担得起,我会build议为networking,应用程序和数据库服务器分别安装物理机器。

Spring可以使用多个远程选项,包括SOAP和REST Web服务。 Spring bean与EJB的比较超出了这个问题的范围。 我没有看到它与你的实施有什么关系。 如果你使用Spring POJO服务,它们在内存中而不是像远程EJB那样需要另一个networking跳跃。 想想福勒的分布对象定律:“不要”。 只有很好的理由才引入延迟。

作为Java 6 EE应用程序的标准,EJB 3.1是最好的。

Spring仍然不支持Java 6 CDI(焊接)也依赖于XMLconfiguration。 EJB 3.1function强大且智能。

我认为Spring 3.1不需要任何XMLconfiguration。 您可以select使用注释进行configuration。

我在这里提到unit testing。 在常见的Web应用程序(controller-> service-> data – > …-> view)中,EJB和Spring都提供了类似的结果,但是Spring提供了更简单的testing。

在我的谦虚的经验中,你发展的方式在几个方面是不同的:

  • unit testing(春胜)。 在spring,它做得相当直接,而在ejb中,你必须使用Arqullian和ShrinkWrap(sic!),这在每个构build中运行都很慢。
  • 持久性(ejb获胜)。 在spring有围绕它的斗争,即谷歌“如何autowire实体监听器持久性” http://bit.ly/1P6u5WO
  • configuration(ejb获胜)。 作为新手来自ejbspring,我惊讶于注释和.xml文件群。