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