架構層級的可移植性

工程 | 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 Common Annotations 和常見的 JAX-WS、JPA 和 EJB 3 註解的支援(通過 "<context:annotation-config/>");這與 JSF 1.2 管理的 Bean 和 EJB 3 Session 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 伺服器:例如,具有 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 MXBean、JDBC 4.0、JAX-WS 2.1 等!

自訂環境 - 基於 Plain 或 OSGi

除了面向 Java EE 的環境之外,Spring 還非常適合於基於 Java 的自訂環境。這包括從命令行引導的 Plain JVM,可能與企業管理基礎設施整合。這種“簡單”的進程通常用於在後台運行的 headless 系統,例如訊息處理骨幹。Spring 為此類環境提供全面的框架服務,包括元件生命週期管理、宣告式事務和訊息監聽器管理。雖然這種架構不常被提及,但一些位於大型企業核心的非常有趣的系統就是這樣實現的。

近年來,OSGi 越來越成為此類環境的顯而易見的選擇。OSGi 提供基礎的部署和執行階段服務,這些服務與模組化企業系統的需求非常匹配。在這樣的設定中,Spring 管理每個 OSGi 捆綁包中的應用程式元件,而 OSGi 平台提供對所有已部署捆綁包的總體管理。隨著即將推出的 Spring Dynamic Modules 1.1,即使是基於 OSGi 的 Web 應用程式場景也變得像主流用法所需的那樣簡單直接。OSGi 上的 Spring 是一個非常有前途的組合,它才剛剛開始展現其全部的廣度和深度!

在任何類型的部署環境中都使用相同的模型

Spring 本質上將其常見的程式設計模型帶到任何基於 Java 的部署環境中 - 實際上,不僅僅是一個程式設計模型,而且還是一個全面的配置模型。這種常見的框架不限於“符合標準”的託管環境;它也可以部署到現有平台上 - 這些執行階段平台從未期望支援這個特定的框架(或者事實上是任何特定的框架)。Spring 重新定義了“元件可移植性”的概念,使其跨越比 Java EE 曾經(並且將永遠)預期的更多託管環境,元件模型和中心框架服務完全獨立於特定的託管環境和特定的部署單元。

這種安排的一個重要好處是,它允許框架和託管環境獨立發展 - 特別是,一個全新的框架版本可以部署到已建立的託管環境上。Spring 關注應用程式元件和配置便利性;託管環境關注部署單元和共享服務的通用管理。如果這樣的部署平台恰好已經整合到您的公司環境中,您可以保留投資,同時仍然充分利用最新的應用程式框架創新......另一方面,如果部署平台方面出現新的創新,Spring 允許您立即利用這些創新,而無需對程式設計模型進行根本性的更改。

在不同的託管環境之間切換應該對應用程式元件和應用程式配置的影響盡可能小,即使在不同的部署模型之間切換也是如此。這是 Spring 願景的核心要素,我們比以往任何時候都更致力於實現這一承諾!從傳統的 J2EE 伺服器到基於 OSGi 的部署環境 - Spring Framework 為所有這些環境帶來了很多共性,同時又與相關的平台服務深度整合,以便從您選擇的特定環境中獲得最大的收益。無論您在哪個平台上運行 - 您都可以確信 Spring Framework 將完全供您使用!

訂閱 Spring 電子報

隨時關注 Spring 電子報

訂閱

搶先一步

VMware 提供培訓和認證,以加速您的進度。

了解更多

獲得支援

Tanzu Spring 在一個簡單的訂閱中提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進制檔案。

了解更多

即將到來的活動

查看 Spring 社群中的所有即將到來的活動。

查看全部