領先一步
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 支援 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 支援。
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 等!
除了面向 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 完全為您服務!