簡介
Java EE 技術是 Java 語言平台的擴充,支援開發人員建立可伸縮的強大的可移植公司專屬應用程式程式。它為應用程式組件定義了四種容器:Web、Enterprise JavaBean(EJB)、應用程式客戶機和 applet。一個應用伺服器規範詳細描述了這些容器和它們必須支援的 Java API,這促使 Java EE 產品相互競爭,同時保證符合這個規範的應用程式可以在伺服器之間移植。
這個平台的最新版本 Java EE 5 已經於 2006 年 5 月發布。Java EE 5 主要關注提高開發人員的生產率,它提供了更簡單的編程模型,而沒有犧牲平台的任何功能。更簡單的開發模型主要由兩個機制提供 —— Java 註解和更好的預設行為。主要的功能性改進包括改進了 Web 服務支援以及在平台中整合了 JavaServer Faces(JSF)和 Java Standard Tag Library(JSTL)。
本文介紹 Java EE 5 中的特性,重點介紹自上一個 J2EE 版本以來的變化。(超出本文範圍的改進包括 StAX API — 一個用來解析 XML 的 API — 和跨許多 API 的中小程度的改進。)我將全面討論四個屬性類別別:Web 服務、Web 應用程式、公司專屬應用程式程式以及管理和安全性。然後,為了避免讀者覺得厭煩,我們討論一個使用 Java EE 5 特性的小應用程式,以此說明新的開發模型如何簡化面向服務架構(SOA) Web 應用程式的開發。
本文假設讀者熟悉企業級軟體系統,並希望全面瞭解 Java EE 5 的概況。瞭解 Java 編程和 J2EE 對於理解特性的意義會有協助,但不是必需的。對應用程式範例的討論涉及一些技術細節,有 J2EE(至少是 Java 編程)背景可能比較容易理解。
Web 服務技術
在 Java EE 5 中引入了註解(annotation)特性,這簡化了複雜 Web 服務端點和客戶機的開發,與以前的 Java EE 版本相比,代碼更少,學習過程更短了。註解(最早在 Java SE 5 中引入)是可以作為中繼資料添加到代碼中的修飾性代碼。它們並不直接影響程式的語義,但是編譯器、開發工具和執行階段程式庫可以通過處理它們產生額外的 Java 語言源檔案、XML 文檔或其他工件和行為,這些對包含註解的程式起輔助作用。在本文後面,會看到如何通過添加簡單的註解,將常規的 Java 類轉換為 Web 服務。
Web 服務支援方面的飛躍
Java EE 5 中 Web 服務支援的基礎是 JAX-WS 2.0,它是一種替代 JAX-RPC 1.1 的技術。這兩種技術都支援建立 REST 風格和基於 SOAP 的 Web 服務,而不必直接處理 Web 服務固有的 XML 處理和資料繫結細節。開發人員可以繼續使用 JAX-RPC(這仍然需要 Java EE 5 容器),但是強烈建議遷移到 JAX-WS。剛開始學習 Java Web 服務的開發人員可以跳過 JAX-RPC,直接使用 JAX-WS。它們都支援 SOAP 1.1 over HTTP 1.1,所以完全相容:JAX-WS Web 服務客戶機可以訪問 JAX-RPC Web 服務端點,反之亦然。
與 JAX-RPC 相比,JAX-WS 有許多優點。JAX-WS:
支援 SOAP 1.2 標準(以及 SOAP 1.1)。
支援 XML over HTTP。如果願意,可以不使用 SOAP。
使用 Java Architecture for XML Binding(JAXB)作為資料對應模型。JAXB 完全支援 XML 模式,而且效能更好(更多資訊見下文)。
為客戶機和伺服器引入了一個動態編程模型。客戶機模型支援面向訊息方式和非同步方式。
支援 Message Transmission Optimization Mechanism(MTOM),這是一個用於最佳化 SOAP 訊息傳輸和格式的 W3C 建議規範。
升級了 Web services interoperability(WS-I)支援。(它支援 Basic Profile 1.1;JAX-WS 只支援 Basic Profile 1.0。)
升級了 SOAP 附件支援。(它支援 Attachments API for Java [SAAJ] 1.3:JAX-WS 只支援 SAAJ 1.2。)
JAX-WS 中的 wsimport 工具自動地處理 Web 服務開發的許多細節,並以跨平台方式整合到構建過程中,這讓開發人員可以將注意力集中於實現或使用服務的應用程式邏輯。它產生各種工件,包括服務、服務端點介面(SEI)、非同步響應代碼、基於 WSDL 錯誤的異常以及通過 JAXB 綁定到模式類型的 Java 類。
JAX-WS 還能夠提高 Web 服務的效能。在文章 “Implementing High Performance Web Services Using JAX-WS 2.0”中,對基於 JAX-WS 的 Web 服務實現(使用了 Java EE 5 中的另外兩個 Web 服務特性 — JAXB 和 StAX)和基於 J2EE 1.4 中的 JAX-RPC 的服務實現做了效能對比。這項研究發現在不同負載下 JAX-WS 在各個功能領域產生了 40% 到 1000% 的效能改進。