框架級別的可移植性

工程 | 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 元件中(透過“<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。

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 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 完全由您支配!

訂閱 Spring 資訊

透過 Spring 資訊保持聯絡

訂閱

領先一步

VMware 提供培訓和認證,助力您快速進步。

瞭解更多

獲得支援

Tanzu Spring 透過一項簡單的訂閱,提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位制檔案。

瞭解更多

即將到來的活動

檢視 Spring 社群中所有即將到來的活動。

檢視全部