2008-09-16 37 views
71

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

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

这里是我的问题:

  1. 什么是赞成或反对EJB3 VS春的观点?
    • 我可以期待什么每一个陷阱?
    • 我在哪里可以找到好的基准信息?
+3

恕我直言,春天将是有益的,将有助于在任何环境下你的开发工作。 我认为我将在每种场景中使用Spring,并且我将考虑仅在特殊情况下使用EJB3(例如,我有一些我需要的应用程序服务器功能(如管理选项))。 – 2008-09-17 12:15:21

回答

71

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

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

我肯定会推荐Spring3以上的EJB3。我们发现它更简化,编码更好,并得到更好的支持。我已经在过去使用Spring和发现它是非常混乱,并没有得到很好的记录为EJB3(或JPA我想在这一天结束)

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

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

+0

@rustyshelf:您可以评论您的数据库大小和同时登录的用户数量,或每秒交易次数? – 2008-09-16 02:13:28

+0

我们的一个应用程序有2500个注册用户,其中可能最多只有100个会一次登录。其他人同时使用的用户较少,但自从他们上线以来一直受到不断的打击。我们在前面使用Glassfish作为我们的容器,但有时只是GF。 – rustyshelf 2008-09-16 02:55:41

+0

就数据库大小而言,你的意思是表格或表格中的行吗?我假设你的意思是数据,如果是这样的话,我们的表格非常“小”。我会说我们的表中没有超过20,000行。 – rustyshelf 2008-09-16 02:57:09

18

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

我认为Spring 与Java EE规范相比竞争对手更多。由于Spring特有的功能不断被纳入规范,许多人会认为EJB 3为大多数内部业务应用程序提供了“足够好”的功能集。

我可以期待什么每一个陷阱? 如果您将此视为持久性问题(Spring + JPA)与EJB3对待,那么您确实没有做出如此大的选择。

我在哪里可以找到很好的基准信息? 我有一段时间没有跟着specj benchmark results,但它们很受欢迎。看起来,每个供应商(IBM,JBOSS,Oracle和Sun)都对合规服务器越来越不感兴趣。从1.3,1.4开始,列表会变得更短,更短的认证供应商。 1.5 Java企业版。我认为完全符合所有规范的巨型服务器的日子已经结束了。

+0

不错。基准没有考虑到春天,不幸的是。但这是一个很好的信息。 – 2008-09-17 00:31:01

2

我过去曾经使用过非常类似的架构。与Flex Data Services结合使用时,Spring + Java 1.5 + Actionscript 2/3使编码变得非常简单(而且非常有趣)。尽管如此,Flex前端意味着您需要足够强大的客户端机器。

+1

Flex Data Services是BlazeDS的专有版本吗? – 2008-09-16 14:21:18

6

我倾向于选择在春季,但EJB3我的建议是两者接近你走,试着坚持写作的POJO,并尽可能使用标准的注释,如JSR注释,比如@PostConstruct,@PreDestroy和@与EJB3或Spring一起工作的资源,因此您可以选择您喜欢的任何框架。

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

如果您想要使用Web应用程序中的预请求注入,您可能会发现Guice比Spring更容易进行依赖注入。

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

34

EJB3和Spring之间的差距比它明显小得多。也就是说,现在EJB3的缺点之一是只能注入一个bean,所以你最终可以将组件转变为不需要的bean。关于单元测试的争论现在是相当不相关的 - EJB3显然被设计为更容易单元测试。

上面的兼容性参数也是那种无关紧要:不管你使用EJB3还是春天,你仍然在事务管理器,JMS等第三方提供的实现依赖

什么会摇摆它为我但是,这是社区的支持。去年在一个EJB3项目上工作时,并没有很多人在使用它并讨论他们的问题。春天,无论正确还是错误,在企业中都是非常普遍的,特别是,这使得找到有问题的人更容易找到你想要解决的问题。

-1

赞成春天的另一件事是,大多数的其他工具/框架存在有集成带弹簧更好的支持,大多采用弹簧内部以及(如ActiveMQ的,骆驼,CXF等)。

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

-4

我觉得EJB是一个很好的组件技术,但不是一个好framework.Spring是最好的框架可以作为today.So的我应该考虑Spring作为JEE的一个框架的感觉最好的实现和我的建议是在每个项目中都使用弹簧,这使我们可以轻松地与任何组件技术集成。

相关问题