代码之家  ›  专栏  ›  技术社区  ›  Justin Standard

我应该为我的业务层使用EJB3还是Spring?

  •  71
  • Justin Standard  · 技术社区  · 17 年前

    我的团队正在开发一种新的面向服务的Web前端产品。在讨论我们将使用哪些技术时,我们已经决定运行JBoss应用服务器、Flex前端(可能使用Adobe Air进行桌面部署)和Web服务来连接客户机和服务器。

    当涉及到用于业务逻辑的服务器技术时,我们已经陷入了僵局。EJB3和Spring之间存在很大的争论,我们最关心的是可伸缩性和性能,以及代码库的可维护性。

    以下是我的问题:

    1. 支持或反对EJB3与Spring的论点是什么?
      • 我能指望每个人都有什么陷阱吗?
      • 在哪里可以找到好的基准信息?
    9 回复  |  直到 9 年前
        1
  •  72
  •   John Stauffer    17 年前

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

    • Spring推动体系结构朝着更容易支持单元测试的方向发展。例如,注入一个模拟DAO对象来单元测试您的业务层,或者使用Spring的mockhttpRequest对象来单元测试servlet。我们为单元测试维护一个单独的Spring配置,它允许我们将测试隔离到特定的层。
    • 最重要的驱动程序是兼容性。如果您需要支持多个应用服务器(或者最终希望选择从jboss迁移到glassfish等),那么实际上您将随身携带容器(spring),而不是依赖于EJB3规范不同实现之间的兼容性。
    • Spring允许对持久性、对象远程处理等进行技术选择。例如,我们还使用了一个flex前端,并且正在使用hessian协议在flex和Spring之间进行通信。
        2
  •  37
  •   PEELY    17 年前

    显然,EJB3和Spring之间的间隙要小得多。也就是说,现在EJB3的一个缺点是您只能注入到bean中,这样您就可以最终将组件转换成不需要的bean。

    关于单元测试的争论现在已经相当无关紧要了——EJB3的设计显然更容易进行单元测试。

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

    然而,对我来说,最重要的是社区的支持。去年在一个EJB3项目上工作,只是没有太多人在那里使用它并谈论他们的问题。无论对错,Spring在企业中都是非常普遍、特别的,这使得找到和你试图解决的问题相同的人变得更加容易。

        3
  •  18
  •   Mehdi LAMRANI    9 年前

    支持或反对EJB3与Spring的论点是什么? 春天总是在创新,认识到现实世界的限制。Spring为Java 1.4应用服务器提供了简单和优雅,并且不需要在2004到2006中没有人能够访问的J2EE规范版本。在这一点上,这几乎是一个宗教辩论,你可以被吸入- Spring +抽象+开源与Java企业版(JavaEE)5规范。

    我想春天 补充多于竞争 使用JAVA EE规范。由于曾经是Spring独有的特性继续纳入规范,许多人会认为EJB3为大多数内部业务应用程序提供了“足够好”的特性集。

    我能指望每个人都有什么陷阱吗? 如果您将其视为持久性问题(Spring+JPA)而不是EJB3,那么您就没有那么大的选择余地。

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

        4
  •  9
  •   Mehdi LAMRANI    9 年前

    我绝对会在春季推荐EJB3。我们发现它更流线型,更好地编码,更好地支持。我在过去使用过Spring,发现它非常令人困惑,而且没有EJB3(或JPA,我想是在一天结束时)那样有充分的文档记录。

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

    我不能说那么多关于春天的事,因为我只试了几个星期。但我对它的总体印象很差。这并不意味着它是一个糟糕的框架,但是我们的团队发现EJB3对于持久性/业务层来说是最好的。

        5
  •  7
  •   James Strachan    17 年前

    我倾向于选择Spring而不是EJB3,但是我的建议是无论采用哪种方法,尽量坚持编写pojos并尽可能使用标准的注释,比如jsr注释,比如@postconstruct、@predstroy和@resource,它们与EJB3或Spring一起使用,这样您就可以选择您喜欢的框架。

    例如,你可以决定在某个项目上使用Guice代替IOC。

    如果您想使用预请求注入(如在Web应用程序中),您可能会发现依赖注入的guice比spring快得多。

    会话bean主要归结为依赖注入和事务;因此EJB3和Spring在这方面有点类似。Spring的优势在于更好的依赖注入和更好的JMS抽象。

        6
  •  2
  •   Anon    17 年前

    我过去用过一种非常相似的建筑。Spring + Java 1.5 + ActionScript 2/3与Flex数据服务结合后,一切都变得非常简单(有趣!)编码。 不过,灵活的前端意味着您需要足够强大的客户机。

        7
  •  1
  •   krams    14 年前

    关于你的问题:

    支持或反对EJB3与Spring的论点是什么?

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

        8
  •  0
  •   kamal.gs    17 年前

    另一件有利于Spring的事情是,现有的大多数其他工具/框架对与Spring的集成都有更好的支持,其中大多数在内部也使用Spring(例如ActiveMQ、Camel、CXF等)。

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

        9
  •  -3
  •   HARIKRISHNAN RAMAKRISHNA PILLA    15 年前

    我认为EJB是一种好的组件技术,但不是一个好的框架。从框架的意义上来说,Spring是目前可用的最好的框架。所以我应该把Spring看作是JEE的最佳实现,我的建议是在每个项目中使用Spring,这给了我们与任何组件技术轻松集成的灵活性。