我的团队正在开发一种具有Web前端的面向服务的新产品。在讨论我们将使用哪些技术时,我们决定运行JBoss应用程序服务器,Flex前端(可能使用Adobe AIR进行桌面部署)和Web服务以连接客户端和服务器。
在将哪种服务器技术用于我们的业务逻辑方面,我们陷入了僵局。最大的争论是在EJB3和Spring之间,我们最大的担忧是可伸缩性和性能以及代码库的可维护性。
这是我的问题:
- 支持或反对EJB3 vs Spring的论据是什么?
- 我希望每个陷阱有什么陷阱?
- 在哪里可以找到良好的基准信息?
我的团队正在开发一种具有Web前端的面向服务的新产品。在讨论我们将使用哪些技术时,我们决定运行JBoss应用程序服务器,Flex前端(可能使用Adobe AIR进行桌面部署)和Web服务以连接客户端和服务器。
在将哪种服务器技术用于我们的业务逻辑方面,我们陷入了僵局。最大的争论是在EJB3和Spring之间,我们最大的担忧是可伸缩性和性能以及代码库的可维护性。
这是我的问题:
Answers:
基于性能,EJB3和Spring之间不会有太大区别。我们选择Spring的原因如下(问题中未提及):
显然,EJB3和Spring之间的差距比以前小得多。就是说,EJB3的缺点之一是您只能注入一个bean,因此最终可以将组件变成不需要的bean。
现在关于单元测试的争论已经不那么重要了-EJB3显然被设计为更容易进行单元测试。
上面的兼容性参数也是无关紧要的:无论您使用EJB3还是Spring,您仍然依赖于第三方提供的事务管理器,JMS等实现。
但是,对我来说,摇摆不定是社区的支持。去年从事EJB3项目的人们很少使用它并谈论他们的问题。无论是对是错,Spring在企业中无处不在,尤其如此,这使得查找与您要解决的问题相同的人变得更加容易。
支持或反对EJB3 vs Spring的论据是什么? Spring一直在创新,并认识到现实世界中的限制。Spring为Java 1.4应用程序服务器提供了简洁和优雅,并且不需要2004年至2006年没有人可以使用的J2EE规范版本。在这一点上,您几乎可以陷入一个宗教争论中-Spring +抽象+开源与Java Enterprise Edition(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企业版。我认为完全符合所有规格的巨型服务器的时代已经过去。
我肯定会在春季推荐EJB3。我们发现它更加精简,更易于编码并且得到了更好的支持。我过去使用过Spring,发现它非常令人困惑,并且没有EJB3(或我想在今天结束时的JPA)那样好的文档
关于春天,我只能说几周,所以我不能说太多。但是我对此的总体印象很差。这并不意味着它是一个糟糕的框架,但是我们的团队在这里发现EJB3是持久性/业务层的最佳选择。
我倾向于使用Spring而不是EJB3,但我的建议是无论采取哪种方法,都尽量坚持编写POJO并在可能的地方使用标准注释,例如@ PostConstruct,@ PreDestroy和@Resource之类的JSR注释,它们都可与EJB3一起使用或Spring,因此您可以选择自己喜欢的框架。
例如,您可以决定某个项目使用Guice代替IoC。
如果要在Web应用程序中使用请求前注入,则可能会发现Guice依赖注入比Spring快很多。
会话bean主要归结为依赖注入和事务。因此,EJB3和Spring确实有点类似。Spring的优势在于更好的依赖注入和对JMS之类的更好的抽象
关于您的问题:
支持或反对EJB3 vs Spring的论据是什么?
我建议阅读专家的回复:Mark Fisher的EJB 3和SPRING比较分析。阅读注释以查找Reza Rahman的评论(EJB 3.0)。
支持spring的另一件事是,那里的大多数其他工具/框架都对与spring的集成提供了更好的支持,其中大多数也都在内部使用spring(例如,activemq,camel,CXF等)。
它比EJB3更成熟,并且有更多的资源(书籍,文章,最佳实践等)和经验丰富的开发人员可用。
我认为EJB是一个很好的组件技术,但不是一个很好的框架.Spring是迄今为止可用的最好的框架,因此从框架的意义上讲,我应该将Spring视为JEE的最佳实现,我的建议是在每个框架中都使用spring该项目使我们可以轻松地与任何组件技术集成。