我应该将EJB3或Spring用于业务层吗?

时间:2008-09-16 01:25:17

标签: java performance spring ejb-3.0 scalability

我的团队正在开发一个带有Web前端的面向服务的新产品。在讨论我们将使用哪些技术时,我们决定运行JBoss应用程序服务器和Flex前端(可能使用Adobe AIR进行桌面部署),以及用于连接客户端和服务器的Web服务。

当涉及到我们的业务逻辑使用哪种服务器技术时,我们陷入了僵局。最重要的论点是EJB3和Spring之间,我们最关心的是可伸缩性和性能,以及代码库的可维护性。

以下是我的问题:

  1. 赞成或反对EJB3与Spring的争论是什么?
    • 我对每个人都有什么陷阱?
    • 我在哪里可以找到好的基准信息?

9 个答案:

答案 0 :(得分:72)

基于Performance,EJB3和Spring之间没有太大区别。我们选择Spring的原因如下(问题中未提及):

  • Spring将架构推向更容易支持单元测试的方向。例如,注入一个模拟DAO对象来对您的业务层进行单元测试,或者利用Spring的MockHttpRequest对象对servlet进行单元测试。我们为单元测试维护一个单独的Spring配置,允许我们将测试与特定层隔离开来。
  • 最重要的驱动程序是兼容性。如果你需要支持多个App Server(或者最终希望选择从JBoss转移到Glassfish等),你将基本上随身携带你的容器(Spring),而不是依赖于不同实现之间的兼容性。 EJB3规范。
  • Spring允许为持久性,对象远程处理等提供技术选择。例如,我们也使用Flex前端,并使用Hessian协议在Flex和Spring之间进行通信。

答案 1 :(得分:37)

显然,EJB3和Spring之间的差距远小于它。也就是说,现在EJB3的一个缺点是你只能注入一个bean,所以你最终可以将组件转换成不需要的bean。

关于单元测试的争论现在相当无关紧要 - EJB3显然是为了更容易进行单元测试。

上面的兼容性参数也是无关紧要的:无论您使用EJB3还是Spring,您仍然依赖于第三方提供的事务管理器,JMS等实现。

然而,对我而言,是什么让社区支持。去年在EJB3项目上工作,并没有很多人在那里使用它并谈论他们的问题。 Spring,无论是正确还是错误,在企业中都非常普遍,特别重要,这使得找到遇到同样问题的人更容易解决。

答案 2 :(得分:18)

赞成或反对EJB3与Spring的争论是什么? Spring始终在创新并认识到现实世界的限制。 Spring为Java 1.4应用程序服务器提供了简单和优雅,并且不需要在2004 - 2006年没有人可访问的J2EE规范版本。此时这几乎是一个宗教辩论,你可以被吸引到 - Spring +抽象+开源与Java企业版(Java EE)5.0规范。

我认为Spring 补充的不仅仅是竞争与Java EE规范。由于Spring曾经独有的功能继续被纳入规范,许多人会争辩说EJB 3为大多数内部业务应用程序提供了“足够好”的功能集。

我可以期待哪些陷阱? 如果你把它视为持久性问题(Spring + JPA)而不是EJB3,你真的没有做出那么大的选择。

我在哪里可以找到好的基准信息? 我有一段时间没有关注specj benchmark results,但它们很受欢迎。似乎每个供应商(IBM,JBOSS,Oracle和Sun)对拥有兼容服务器的兴趣越来越小。从1.3,1.4开始,这些列表的认证供应商越来越短。 1.5 Java企业版。我认为完全符合所有规范的巨型服务器的时代已经结束。

答案 3 :(得分:9)

我肯定会推荐EJB3超过春天。我们发现它更加简化,编码更好,更好地支持。我过去使用Spring并发现它非常令人困惑,并没有像EJB3那样详细记录(或者我认为在一天结束时是JPA)

  1. 从EJB3开始,您不再需要处理外部配置文件,并且每个数据库表只能注释一个POJO。此POJO可以毫无问题地传递到您的Web层。像Netbeans这样的IDE甚至可以为您自动生成这些POJO。我们现在使用EJB3作为很多大型应用程序的后端,并没有发现任何性能问题。 您可以将会话Bean轻松地公开为可以向Flex前端公开的Web服务。 如果需要,会话bean很容易在方法或类级别锁定,以分配角色和类似的东西。
  2. 我不能说春天,因为我只试了几个星期。但我对它的整体印象非常糟糕。这并不意味着它是糟糕的框架,但我们的团队发现EJB3是持久性/业务层的最佳选择。

答案 4 :(得分:7)

我倾向于选择Spring而不是EJB3,但我的建议是采用哪种方法,尽可能坚持编写POJO并尽可能使用标准注释,如@PostConstruct,@ PreDestroy和@Resource等JSR注释工作使用EJB3或Spring,您可以选择您喜欢的任何框架。

e.g。您可以决定使用Guice代替IoC。

如果你想在Web应用程序中使用预请求注入,你可能会发现Guice对于依赖注入要比Spring快得多。

会话bean主要归结为依赖注入和事务;所以EJB3和Spring真的有点类似。 Spring的优势在于更好的依赖注入和更好的抽象,如JMS

答案 5 :(得分:2)

我过去使用过非常相似的架构。与Flex Data Services结合使用时,Spring + Java 1.5 + Actionscript 2/3使代码变得非常简单(而且很有趣!)。 但是,Flex前端意味着您需要功能强大的客户端计算机。

答案 6 :(得分:1)

关于你的问题:

  

赞成或反对EJB3与Spring的争论是什么?

我建议阅读专家的回复:A RESPONSE TO: EJB 3 AND SPRING COMPARATIVE ANALYSIS by Mark Fisher。阅读评论以查找Reza Rahman的评论(EJB 3.0)。

答案 7 :(得分:0)

支持spring的另一个好处是大多数其他工具/框架都有更好的支持与spring集成,大多数内部也使用spring(例如activemq,camel,CXF等)。

它也更成熟,有更多的资源(书籍,文章,最佳实践等)和&经验丰富的开发人员,而不是EJB3。

答案 8 :(得分:-3)

我认为EJB是一个很好的组件技术,但不是一个好的框架.Spring是迄今为止最好的框架。所以我应该将Spring视为框架意义上的最佳JEE实现,我的建议是使用每个项目都有弹簧,使我们可以轻松地与任何组件技术集成。