it-swarm.cn

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

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

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

这是我的问题:

  1. 赞成或反对EJB3与Spring的争论是什么?[。_____。]
    • 我可以期待哪些陷阱?
    • 我在哪里可以找到好的基准信息?
71
Justin Standard

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

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

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

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

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

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

37
PEELY

对于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基准测试结果 一段时间,但它们很受欢迎。似乎每个供应商(IBM,JBOSS,Oracle和Sun)对拥有兼容服务器的兴趣越来越小。从1.3,1.4开始,这些列表的认证供应商越来越短。 1.5 Java企业版。我认为完全符合所有规范的巨型服务器的时代已经结束。

18
Brian

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

  1. 从EJB3开始,您不再需要处理外部配置文件,并且每个数据库表只有一个POJO注释。此POJO可以毫无问题地传递到您的Web层。像Netbeans这样的IDE甚至可以为您自动生成这些POJO。我们现在使用EJB3作为很多大型应用程序的后端,并没有发现任何性能问题。您可以将会话Bean轻松地公开为可以向Flex前端公开的Web服务。会话bean很容易在方法或类级别锁定,以便在需要时分配角色和类似的东西。

我不能说春天这么多,因为我只试了几个星期。但我对它的整体印象非常糟糕。这并不意味着它是糟糕的框架,但我们的团队发现EJB3是持久性/业务层的最佳选择。

9
rustyshelf

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

例如您可以决定使用Guice代替IoC。

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

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

7
James Strachan

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

2
Soumitra

关于你的问题:

对于EJB3和Spring有什么争论?

我建议阅读专家的回复: 对Mark 3的EJB 3和SPRING比较分析的响应 。阅读评论以查找Reza Rahman的评论(EJB 3.0)。

1
krams

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

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

0
kamal.gs