领先一步
VMware 提供培训和认证,助力您快速进步。
了解更多可移植性是 Spring 世界中的一个关键因素。我们信奉框架级别的可移植性:应用程序组件针对特定框架(或框架代)编写,例如 Spring 2.5;然后框架负责适应任何底层托管环境。然而,特定的应用程序框架高于托管环境并与之不同。全新的框架版本可以部署到既有的托管平台代上,只要环境的基本能力足够即可。这种方法与将组件框架内置到部署平台本身中的传统方法有很大不同,在传统方法中,环境仅支持框架的特定版本 - 并且框架的预期更新需要更新整个平台。
当前的 Spring Framework 2.5 版明确支持广泛的部署环境。通用的 Spring 编程模型适用于所有这些平台,应用程序代码通常仅引用通用框架 API 和特定的第三方 API。当然,实际的运行时能力差异很大,因此适用于您的应用程序组件的实际服务也可能有所不同。以下是典型的托管环境列表
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,并进行相应调整。
如今,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 上),以便由托管环境管理异步任务,并在服务器控制台中配置相应的线程池。
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 组件中(通过“<context:annotation-config/>”)提供了对 JSR-250 常用注解和常见 JAX-WS、JPA 和 EJB 3 注解的支持;这与 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 的早期支持:例如,带有 JAXB/JAX-WS 和 JPA/EJB3 功能包的 WebSphere 6.1,以及带有 JPA/EJB3 支持的 JBoss 4.2。
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 等!
除了面向 Java EE 的环境外,Spring 也非常适合基于 Java 的自定义环境。这包括从命令行启动的普通 JVM,可能与企业管理基础设施集成。这种“简单”的进程通常用于在后台运行的无头系统,例如消息处理骨干。Spring 为此类环境提供了全面的框架服务,包括组件生命周期管理、声明式事务和消息监听器管理。虽然这种架构不常被谈论,但一些大型企业核心中非常有趣的系统就是这样实现的。
近年来,OSGi 越来越成为此类环境的明显选择。OSGi 提供了基础的部署和运行时服务,非常适合模块化企业系统的需求。在这种环境下,Spring 在每个 OSGi bundle 中管理应用程序组件,而 OSGi 平台提供所有已部署 bundle 的整体管理。随着即将发布的 Spring Dynamic Modules 1.1,即使是基于 OSGi 的 Web 应用场景也变得像主流使用一样简单直接。Spring 在 OSGi 上是一个非常有前途的组合,其强大功能的广度和深度才刚刚开始展现!
Spring 本质上将其通用编程模型带入任何基于 Java 的部署环境 - 实际上,不仅是编程模型,也是一个全面的配置模型。这个通用框架不仅限于“兼容”的托管环境;它也可以部署到现有平台上 - 那些最初从未期望支持这个特定框架(或任何特定框架)的运行时平台。Spring 重新定义了“组件可移植性”的概念,使其涵盖比 Java EE 预期(将来也预期)的更多托管环境,组件模型和核心框架服务完全独立于特定的托管环境和特定的部署单元。
这种安排的一个重要好处是它允许框架和托管环境独立演进 - 特别是,全新的框架版本可以部署到既有的托管环境上。Spring 专注于应用程序组件和配置的便捷性;托管环境专注于部署单元和共享服务的通用管理。如果这样的部署平台已经集成到您的企业环境中,您可以保留投资,同时仍然充分利用最新的应用程序框架创新……另一方面,如果部署平台出现了新的创新,Spring 允许您立即利用这些创新,而无需对编程模型进行根本性更改。
在不同的托管环境之间切换时,即使在不同的部署模型之间切换,也应该对应用程序组件和应用程序配置的影响尽可能小。这是 Spring 愿景中的核心要素,我们比以往任何时候都更致力于实现这一承诺!从传统的 J2EE 服务器到基于 OSGi 的部署环境 - Spring Framework 为所有这些环境带来了很多共性,同时又与相关的平台服务深度集成,以从您选择的特定环境中获得最大益处。无论您运行在哪种平台上 - 您都可以确信 Spring Framework 完全由您支配!