关于java:我应该在业务层中使用EJB3还是Spring?

关于java:我应该在业务层中使用EJB3还是Spring?

Should I use EJB3 or Spring for my business layer?

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

在将哪种服务器技术用于我们的业务逻辑方面,我们陷入了僵局。 最大的争论是在EJB3和Spring之间,我们最大的担忧是可伸缩性和性能以及代码库的可维护性。

这是我的问题:

  • 支持或反对EJB3 vs Spring的论据是什么?

    • 我希望每个陷阱有什么陷阱?
    • 在哪里可以找到良好的基准信息?

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

    • Spring朝着更容易支持单元测试的方向驱动架构。例如,注入模拟DAO对象以对业务层进行单元测试,或者利用Spring的MockHttpRequest对象对Servlet进行单元测试。我们为单元测试维护一个单独的Spring配置,使我们可以将测试隔离到特定的层。
    • 首要的驱动因素是兼容性。如果您需要支持多个App Server(或者最终希望从JBoss迁移到Glassfish等),则实际上将随身携带容器(Spring),而不是依赖于不同实现的兼容性。 EJB3规范。
    • Spring允许为持久性,对象远程处理等选择技术。例如,我们还使用Flex前端,并且使用Hessian协议在Flex和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开始,您不再需要处理外部配置文件,并且每个数据库表仅注释一个POJO。此POJO可以毫无问题地传递到您的Web层。像Netbeans这样的IDE甚至可以为您自动生成这些POJO。现在,我们已经将EJB3用作许多大型应用程序的后端,并且尚未注意到任何性能问题。
    您的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相结合,使编写代码变得非常容易(而且很有趣!)。
    但是,Flex前端意味着您需要足够强大的客户端计算机。


    关于您的问题:

    What are the arguments for or against 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该项目使我们可以灵活轻松地与任何组件技术集成。


    推荐阅读

      linux服务器分区命令?

      linux服务器分区命令?,系统,管理,信息,设备,时间,命令,基础,首次,平均,情况,l

      vim运行linux命令?

      vim运行linux命令?,系统,工作,信息,地址,命令,标准,时间,情况,工具,基础,linu

      linux服务器上传命令?

      linux服务器上传命令?,服务,软件,平台,数据,工具,系统,手机,电脑,设备,官网,

      linux下并行运行命令?

      linux下并行运行命令?,系统,服务,工作,命令,环境,网络,暂停,文件,脚本,参数,l

      linux网络服务器命令?

      linux网络服务器命令?,地址,网络,系统,名称,信息,工具,状态,中心,灵活,基础,l

      linux下并行运行命令?

      linux下并行运行命令?,系统,服务,工作,命令,环境,网络,暂停,文件,脚本,参数,l

      linux服务器基本命令?

      linux服务器基本命令?,地址,系统,设备,网络,工作,标准,信息,电脑,命令,密码,l

      linux服务器下载命令?

      linux服务器下载命令?,服务,密码,系统,档案,工具,网络,公共,百度,地址,认证,l

      linux命令行后台运行?

      linux命令行后台运行?,服务,状态,标准,暂停,命令,后台,连续,地方,工作,方法,l

      脚本运行linux命令?

      脚本运行linux命令?,系统,环境,工具,工作,位置,底部,代码,发行,官网,终端,lin

      linux进程运行命令?

      linux进程运行命令?,系统,工作,状态,地址,信息,进程,基础,命令,管理,软件,lin

      linux显示运行命令?

      linux显示运行命令?,系统,服务,状态,信息,工具,数据,电脑,标准,管理,时间,如

      linux服务器常用命令?

      linux服务器常用命令?,工作,系统,地址,信息,命令,目录,管理,标准,设备,功能,

      linux运行vim命令?

      linux运行vim命令?,系统,工具,官方网站,模式,基础,数据,代码,环境,入口,命令

      linux监控命令运行?

      linux监控命令运行?,系统,工作,地址,信息,工具,情况,标准,环境,命令,状态,lin

      linux中命令停止运行?

      linux中命令停止运行?,系统,代码,第一,命令,进程,指令,程序,方法,接线,硬盘,l

      linux服务器保存命令?

      linux服务器保存命令?,时间,状态,档案,电脑,命令,信息,位置,编辑,文件,模式,L

      linux服务器扫盘命令?

      linux服务器扫盘命令?,地址,工作,命令,目录,数据,单位,名称,系统,管理,信息,L

      linux命令切换服务器?

      linux命令切换服务器?,地址,名称,系统,环境,实时,命令,服务器,脚本,路径,版