框架级别的可移植性

工程 | 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 还支持 Spring 托管 Bean 组件中的 JSR-250 通用注释和通用 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 还支持具有特定 Java EE 5 API 早期支持的 J2EE 1.4 服务器:例如,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 加载时编织(在传统的 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 捆绑包中管理应用程序组件,而 OSGi 平台提供所有已部署捆绑包的整体管理。随着即将推出的 Spring Dynamic Modules 1.1,即使基于 OSGi 的 Web 应用程序场景也变得像主流使用所需的那样简单。Spring 在 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 社区中所有即将举行的活动。

查看全部