框架层面的可移植性

工程 | Juergen Hoeller | 2008 年 4 月 28 日 | ...

可移植性是 Spring 生态系统的关键因素。我们坚信在框架层面实现可移植性:应用程序组件是针对特定框架(或框架代)编写的,例如 Spring 2.5;然后,框架负责适应任何底层托管环境。但是,特定的应用程序框架独立于托管环境。只要环境的基本功能足够,一个新的框架版本就可以部署到现有的托管平台代上。这种方法与传统的将组件框架烘焙到部署平台本身的方法截然不同,在这种传统方法中,环境只支持特定版本的框架——而框架的预期更新需要更新整个平台。

当前的 Spring Framework 2.5 代明确支持广泛的部署环境。通用的 Spring 编程模型适用于所有这些平台,应用程序代码通常仅引用通用的框架 API 和特定的第三方 API。当然,实际的运行时能力差异很大,因此适用于应用程序组件的实际服务也可能有所不同。以下是典型的托管环境列表:

J2EE 1.3 应用服务器

Spring 2.5 仍尽可能支持 J2EE 1.3 服务器(如 WebSphere 5.1 和 WebLogic 8.1)。由于这些服务器通常运行在 JDK 1.4 上,因此显然无法使用注解支持和其他 Java 5+ 的特性。然而,基本的 Spring 编程模型以及围绕它的所有 Spring 2.5 支持特性都完全可用,许多流行的第三方库也同样如此,Spring 提供了开箱即用的集成代码(例如 Hibernate 3.2,Quartz 1.6)。

与服务器功能(如 Servlet 2.3 容器、JTA 子系统、服务器提供的 JDBC 和 JMS 资源等)的紧密集成非常简单。这可以通过相应的配置轻松实现,应用程序组件通过 Spring 的依赖注入和 AOP 功能透明地进行连接。例如,消息监听器可以作为 Spring Bean 进行管理;相应的配置考虑到了 J2EE 1.3 服务器上的 JMS 版本仅限于 1.0.2,并进行相应调整。

J2EE 1.4 应用服务器

如今,Spring 应用程序的主流部署环境是 J2EE 1.4 服务器,这仅仅是因为 J2EE 1.4 产品得到了广泛的应用。许多此类服务器(例如 WebSphere 6.1 和 WebLogic 9.2)运行在 JDK 1.5 上,因此 Spring 的 Java 注解支持的全部强大功能和灵活性在这些平台上可用——即使这些服务器的本机 API 和组件模型不提供专用的 Java 5 支持。当然,如果服务器平台仅限于 JDK 1.4(如 WebSphere 6.0),那么 Spring 也仅限于 JDK 1.4——幸运的是,仍有许多有用的功能可用。

Spring 2.5 提供了对 J2EE 1.4 API 和常用服务器扩展的深入支持。这包括 Servlet 2.4、JSP 2.0 和 JAX-RPC 1.1,以及 JMS 1.1 和 JCA 1.5。Spring 的 JMX 支持与 J2EE 1.4 在服务器环境中提供的 JMX 支持配合得非常好——可以通过 Spring 2.5 的“<context:mbean-export>”元素轻松配置。Spring 可以通过“<tx:jta-transaction-manager>”元素自动检测特定服务器的 JTA 功能;如果适用,这包括对 WebSphere 的 UOWManager API 和 WebLogic 的 JTA 扩展的自动支持。作为另一个常见的扩展,Spring 可能会委托给 CommonJ WorkManager(在 WebSphere 和 WebLogic 上)或 JCA WorkManager(在 GlassFish 和 JBoss 上),以便由托管环境管理异步任务,并在服务器的控制台中配置相应的线程池。

Java EE 5 应用服务器

Spring Framework 2.5 版本的一个核心主题是全面支持 Java EE 5 API。Spring 2.0 已经提供了对 Java Persistence API (JPA) 的全面支持。自 Spring 2.5 起,通过添加 JAX-WS 支持(在“remoting.jaxws”包中)、对 EJB 3 访问的显式支持(通过“<jee:local-slsb>”和“<jee:remote-slsb>”透明地实现)以及 JTA 1.1 支持(由“<tx:jta-transaction-manager>”自动检测)以及 JSF 1.2 支持(通过 SpringBeanFacesELResolver)来完成这项工作。此外,Spring 支持 JSR-250 Common Annotations 以及 Spring 管理的 Bean 组件中的通用 JAX-WS、JPA 和 EJB 3 注解(通过“<context:annotation-config/>”);这与 JSF 1.2 管理 Bean 和 EJB 3 会话 Bean 中对这些注解的支持是一致的。

Spring 用户中最流行的 Java EE 5 产品是 Sun 的 GlassFish V2——已发布两年。最近,WebLogic 10 和 Geronimo 2.0 也加入了完全认证的 Java EE 5 服务器的行列,而这些服务器之前的(J2EE 1.4 兼容)版本仍然非常流行。Spring 2.5 还支持 J2EE 1.4 服务器,并为特定的 Java EE 5 API 提供了早期支持:例如,WebSphere 6.1 及其 JAXB/JAX-WS 和 JPA/EJB3 功能包,以及 JBoss 4.2 及其 JPA/EJB3 支持。

Servlet 容器,又名 Web 应用程序服务器

Spring 非常常见的部署环境是 Tomcat,通常是其 5.5 或 6.0 代。Jetty 和 Caucho 的 Resin 也同样很受欢迎。这些产品的最新一代支持 Servlet 2.5 和 JSP 2.1,即 Java EE 5 级别的 Web 容器规范。Spring 2.5 可以很好地运行在所有这些 Servlet 容器上,并在每个 Java EE Web 应用程序(WAR 文件)中提供完整的应用程序容器服务。

在这种环境中的典型设置选择包括本机 JDBC 事务和本机 Java 5 线程池。然而,Spring——作为一个开放的框架——也支持嵌入专用的 JTA 事务协调器产品(例如 Atomikos 或 Geronimo Transaction Manager),或任何其他第三方中间件。此外,Spring 在这种环境中提供了完整的 JPA 容器支持,允许在纯 Servlet 容器中实现“Java EE 级别”的 JPA 支持。

Servlet 容器通常允许完全控制底层 JVM。这可以在这种容器的 Spring 环境中得到利用,例如,通过无限制地使用 AspectJ load-time weaving(在传统的 Java EE 环境中存在限制),或者通过选择 Java 6(而大多数 Java EE 服务器仅限于 Java 5 平台)。请注意,Spring 2.5 明确支持 Java 6 环境,允许使用 JMX MXBeans、JDBC 4.0、JAX-WS 2.1 等!

自定义环境——纯粹的或基于 OSGi 的

除了面向 Java EE 的环境之外,Spring 还非常适合在 Java 基础上进行自定义环境。这包括从命令行引导的纯 JVM,可能与企业管理基础设施集成。这种“简单”的进程通常用于在后台运行的无头系统,例如消息处理主干。Spring 为这些环境提供了全面的框架服务,包括组件生命周期管理、声明式事务和消息监听器管理。虽然这种架构很少被谈论,但一些非常有趣的系统已经以这种方式在大型企业核心中实现。

近年来,OSGi 越来越多地成为此类环境的明显选择。OSGi 提供了基础的部署和运行时服务,能够很好地满足模块化企业系统的需求。在这种设置中,Spring 管理每个 OSGi bundle 中的应用程序组件,而 OSGi 平台则负责对所有已部署的 bundle 进行整体管理。随着即将推出的 Spring Dynamic Modules 1.1,即使是基于 OSGi 的 Web 应用程序场景也将变得像主流使用所需要的那样简单。Spring on OSGi 是一个非常有前途的组合,它才刚刚开始展现其全部的广度和深度!

在任何类型的部署环境中都采用相同的模型

Spring 基本上将其通用编程模型带到了任何基于 Java 的部署环境中——实际上,不仅是编程模型,还有全面的配置模型。这种通用的框架不仅限于“兼容”的托管环境;它也可以部署到现有平台——运行时平台,这些平台最初并没有预期支持这个特定的框架(或者事实上任何特定的框架)。Spring 重新定义了“组件可移植性”的概念,使其能够跨越比 Java EE 曾经(并且将永远)打算的更多的托管环境,组件模型和核心框架服务与特定的托管环境和特定的部署单元完全无关。

这种安排的一个重要好处是,它允许框架和托管环境独立发展——特别是,一个全新的框架版本可以部署到一个现有的托管环境中。Spring 专注于应用程序组件和配置便利性;托管环境专注于部署单元和共享服务的通用管理。如果这样的部署平台恰好已经集成到您的企业环境中,您就可以保留投资,同时充分利用最新的应用程序框架创新……另一方面,如果出现部署平台方面的新创新,Spring 允许您在不根本改变编程模型的情况下立即利用它们。

在不同的托管环境之间切换应该对应用程序组件和应用程序配置造成的影响尽可能小,即使在不同的部署模型之间切换也是如此。这是 Spring 愿景的核心要素,我们比以往任何时候都更致力于实现这一承诺!从传统的 J2EE 服务器到基于 OSGi 的部署环境——Spring Framework 为所有这些环境带来了许多共性,同时又与相关的平台服务深度集成,以最大限度地利用您选择的特定环境。无论您运行在哪个平台——您都可以确信 Spring Framework 完全为您服务!

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有