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

2022-08-31 13:39:06

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

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

以下是我的问题:

  1. 支持或反对EJB3与Spring的论点是什么?
    • 每个陷阱我都会遇到什么陷阱?
    • 在哪里可以找到好的基准信息?

答案 1

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

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

答案 2

显然,EJB3和Spring之间的差距比以前小得多。也就是说,现在EJB3的缺点之一是你只能注入到bean中,所以你最终可以将组件变成不需要的bean。

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

上面的兼容性论证也无关紧要:无论你使用EJB3还是Spring,你仍然依赖于第三方提供的事务管理器,JMS等实现。

然而,对我来说,摇摆不定的是社区的支持。去年在一个EJB3项目上工作时,没有很多人使用它并谈论他们的问题。春天,无论对错,在企业中都非常普遍,特别是,这使得更容易找到一个与你试图解决的相同问题的人。


推荐