Java EE 5 技術簡介
Java EE 5 教程
|
NetBeans IDE 5.5 的開發是在 Java EE 和 Glassfish 工作組的密切合作下完成的,它實現了與新的 Java EE 5 規范的完美集成,從而可以在此 IDE 中輕松地使用新規范。NetBeans IDE 5.5 是您快速學習 Java EE 5 編程并使用它高效工作的最佳途徑。
本文檔介紹了 Java EE 5 規范的一些重要概念,以及它們如何與您目前的編程項目相關聯的。下面將介紹以下主題:
您可以在 Java EE 5 教程中找到有關開發 Java EE 5 應用程序并在 Sun Java System Application Server Platform Edition 9 上部署該應用程序的信息。
標注取代部署描述符
Java EE 5 平臺不需要任何部署描述符(Servlet 規范所需的部署描述符 web.xml 文件除外),從而簡化了部署過程。其他部署描述符(如 ejb-jar.xml 以及在 web.xml 中與 Web 服務相關的條目)已過時。J2EE 1.4 部署描述符通常很復雜,在填充它們時很容易出錯。但是,Java EE 5 平臺使用的是“標注”。標注是 Java 修飾符,與代碼中指定的 public 和 private 類似。例如,EJB 3 規范(Java EE 5 規范的子集)為 Bean 類型、接口類型、資源引用、事務屬性、安全性等定義了標注。JAX-WS 2.0 規范為 Web 服務提供了一組類似的標注。有些標注用來生成工件,另外一些標注用來描述代碼,還有一些標注用來提供增強的服務,如安全性或特定于運行時的邏輯。總之,Java EE 5 平臺為以下任務(以及其他任務)提供了標注:
- 定義和使用 Web 服務
- 開發 EJB 軟件應用程序
- 將 Java 技術類映射到 XML
- 將 Java 技術類映射到數據庫
- 將方法映射到操作
- 指定外部依賴關系
- 指定部署信息,其中包括安全屬性
標注使用 @ 字符來標記。在 IDE 中,當您創建了使用 Java EE 5 中的標注的類型時,將在生成的代碼中提供相關的占位符。例如,當您使用 IDE 創建無態會話 Bean 時,將生成以下代碼,其中包括 @Stateless() 標注:
package mypackage; import javax.ejb.*; @Stateless() public class HelloWorldSessionBean implements mypackage.HelloWorldSessionLocal { }通過代碼完成,您可以對特定于光標下的項的標注屬性進行訪問。例如,在 @WebService() 標注的括號中按 Ctrl-空格鍵時,將看到以下內容:
每個屬性都具有缺省值。因此,除非您需要使用缺省值以外的其他值,否則不必指定任何屬性。在一些簡單的示例中,使用缺省值就可以了,這意味著您根本不需要提供屬性。
簡化的 EJB 軟件開發
使用新的 EJB 3.0 API,可以減少并簡化開發者需要完成的工作量,從而可以更輕松地進行軟件開發。換句話說,就是使用了更少的類和代碼。這是因為現在容器承擔了更多的工作,從而實現了這一目的。下面是新 EJB 3.0 API 的一些功能和優點:
- 只需很少的類和接口。您不再需要 EJB 組件的 Home 接口和對象接口,因為現在容器負責公開必要的方法。您只需提供業務接口。您可以使用標注來聲明 EJB 組件,并且通過容器來管理事務。
- 不再需要部署描述符。您可以在類中直接使用標注,為容器提供以前在部署描述符中定義的依賴關系和配置信息。如果沒有任何特殊說明,容器將使用缺省規則來處理最常見的情況。
- 查找簡單。您可以通過
EJBContext
直接在類中查找 JNDI 名稱空間中的對象。 - 簡化了對象關系映射。新的 Java 持久性 API 允許您使用 POJO 中的標注將 Java 對象映射到關系數據庫,從而使對象關系映射變得更簡單透明。
在 IDE 中,您可以對 Enterprise Beans 進行編碼,就像對其他 Java 類進行編碼一樣,方法是:使用代碼完成和編輯器提示實現正確的方法并使類與其接口保持同步。您不必使用特殊命令和對話框生成諸如業務方法或 Web 服務操作之類的內容,雖然這些命令仍可以幫助您熟悉 Java EE 5 代碼的語法。
使用依賴關系注入來訪問資源
通過依賴關系注入,對象可以使用標注直接請求外部資源。這樣代碼會更簡潔,因為您不再需要將代碼與資源創建和查找代碼混雜在一起。您可以在 EJB 組件、Web 容器和客戶端中使用資源注入。
要請求資源注入,組件需要使用 @Resource
標注或針對一些專用資源的 @EJB
和 @WebServiceRef
標注。您可以注入以下資源:
SessionContext
對象DataSources
對象EntityManager
接口- 其他 Enterprise Beans
- Web 服務
- 消息隊列和主題
- 資源適配器的連接工廠
在 IDE 中,源代碼編輯器為 Java EE 5 平臺提供的資源注入標注提供了完整的代碼完成。此外,當您運行諸如“調用 EJB”和“使用數據庫”之類的命令時,IDE 會自動將資源注入到文件中。
Java 持久性 API 模型
Java EE 5 平臺引入了新的 Java 持久性 API(它是作為 JSR-220 的一部分開發的)。Java 持久性 API 不但可以在 EJB 組件外部使用(例如,在 Web 應用程序和應用程序客戶端中使用),而且還可以在 Java EE 平臺之外的 Java SE 應用程序中使用。
Java 持久性 API 具有以下主要功能:
- 實體是 POJO。與使用容器管理持久性 (Container-Managed Persistence, CMP) 的 EJB 組件不同,使用新 API 的實體對象不再是組件,并且它們不再需要位于 EJB 模塊中。
- 標準化的對象關系映射。新規范將對對象關系映射的處理方式進行標準化,從而使開發者不再需要了解特定于供應商的策略。Java 持久性 API 使用標注來指定對象關系映射信息,但它仍支持 XML 描述符。
- 命名查詢。現在命名查詢是用元數據表示的靜態查詢。查詢可以是 Java 持久性 API 查詢或本地查詢。這樣會使重用查詢變得非常簡單。
- 簡單的打包規則。由于實體 Bean 是簡單的 Java 技術類,因此幾乎可以在 Java EE 應用程序中的任意位置將其打包。例如,實體 Bean 可以是 EJB
JAR
、應用程序客戶端JAR
、WEB-INF/lib
、WEB-INF/classes
的一部分,甚至是企業應用程序歸檔 (Enterprise Application Archive, EAR) 文件中實用程序JAR
的一部分。通過這些簡單的打包規則,您不再需要創建 EAR 文件以使用來自 Web 應用程序或應用程序客戶端的實體 Bean。 - 分離的實體。由于實體 Bean 是 POJO,因此可以對它們執行序列化,通過網絡將其發送到其他地址空間,并在不識別持久性的環境中使用它們。這樣,您就不再需要使用數據傳輸對象 (Data Transfer Object, DTO)。
- EntityManager API。現在,應用程序編程人員可以使用標準 EntityManager API 來執行涉及實體的
創建、讀取、更新和刪除
(Create Read Update Delete, CRUD) 操作。
IDE 提供了處理新 Java 持久性 API 的工具。您可以通過數據庫自動生成實體類,或手動對實體類進行編碼。IDE 還提供了用于創建和維護持久性單元的模板和圖形編輯器。有關使用新 Java 持久性 API 的詳細信息,請參見 Java EE 5 平臺中的 Java 持久性。
Web 服務
在 Java EE 5 平臺中,通過使用標注顯著改進和簡化了 Web 服務支持。以下規范已應用于此領域中:JSR 224,Java API for XML-Based Web Services (JAX-WS) 2.0;JSR 222,Java Architecture for XML Binding (JAXB) 2.0 以及 JSR 181,Web Services Metadata for the Java Platform。
JAX-WS 2.0
JAX-WS 2.0 是 Java EE 5 平臺中用于 Web 服務的新 API。作為 JAX-RPC 1.1 的后繼者,JAX-WS 2.0 保留了自然的 RPC 編程模型,同時在以下幾個方面進行了改進:數據綁定、協議和傳輸的獨立性、對 Web 服務的 REST
樣式的支持以及易開發性。
與 JAX-RPC 1.1 的主要區別在于,現在所有數據綁定都委托給了 JAXB 2.0。這樣,基于 JAX-WS 的 Web 服務就可以使用百分之百的 XML 架構,從而提高了互操作性和易使用性。這兩種技術已很好地集成在一起了,因此用戶不必再為使用兩套不同的工具而勉為其難了。從 Java 技術類開始開發時,JAXB 2.0 可以生成自動嵌入到 Web 服務描述語言 (Web Service Description Language, WSDL) 文檔內的 XML 架構文檔,從而用戶無需手動執行這一容易出錯的集成。
現成的 JAX-WS 2.0 本身可以支持 SOAP 1.1、SOAP 1.2 和 XML/HTTP 協議。協議可擴展性從一開始就是人們所希望實現的目標,JAX-WS 2.0 允許供應商支持其他協議和編碼來獲取更佳的性能(例如 FAST Infoset)或專用的應用程序。Web 服務(使用附件來優化大型二進制數據的發送和接收)可以利用 W3C 制訂的 MTOM/XOP(“消息傳輸優化機制/XML 二進制優化打包”的簡稱)標準,且對編程模型沒有任何不利的影響(有關 MTOM/XOP 的信息,請參見此頁)。在 Java EE 5 技術出現之前,定義 Web 服務需要使用很長且復雜的描述符?,F在,定義它卻非常簡單,只需將 @WebService
標注放置在 Java 技術類上即可。類上的所有公共方法會自動發布為 Web 服務操作,并且其所有參數都將使用 JAXB 2.0 映射到 XML 架構數據類型。
異步 Web 服務
由于 Web 服務調用是通過網絡來實現的,因此這種調用所花費的時間是無法預測的。許多客戶端(特別是交互式客戶端,如基于 JFC/Swing 的桌面應用程序)由于必須等待服務器的響應而嚴重地影響了它們的性能。為了避免出現性能降低,JAX-WS 2.0 提供了新的異步客戶端 API。使用此 API,應用程序編程人員不再需要自己創建線程,而是依賴于 JAX-WS 運行時為他們管理長時間運行的遠程調用。
異步方法可以與 WSDL 生成的任何接口以及動態性更強的 Dispatch
API 聯合使用。為了方便起見,在導入 WSDL 文檔時,您可以要求為 Web 服務定義的任何操作生成異步方法。
以下提供了兩種使用模型:
- 在輪詢模型中,發出調用。準備就緒后,請求結果。
- 在回調模型中,注冊處理程序。在響應到達后,立即向您發出通知。
請注意,異步調用支持是完全在客戶端上實現的,因此不需要對目標 Web 服務進行任何更改。
IDE 提供了處理 JAX-WS 的工具。您可以使用“新建文件”向導中的模板生成 JAX-WS 工件。異步 Web 服務可以通過 Web 服務定制編輯器來創建。代碼完成功能包括可以在 Web 服務中使用的標注。
后續步驟
有關使用 NetBeans IDE 5.5 開發 Java EE 應用程序的更多信息,請參見以下資源:
要發送意見和建議、獲得支持以及隨時了解 NetBeans IDE Java EE 開發功能的最新開發情況,請加入 nbj2ee@netbeans.org 郵件列表。