NetBeans IDE 6.0 的開發是在 Java EE 和 Glassfish 工作組的密切合作下完成的,它實現了與新的 Java EE 5 規范的完美集成,從而可以在此 IDE 中輕松地使用新規范。NetBeans IDE 6.0 是您快速學習 Java EE 5 編程並使用它高效工作的最佳途徑。
本文檔介紹了 Java EE 5 規范的一些重要概念,以及它們如何與您目前的編程項目相關聯的。本文將 介紹以下主題:
標注取代部署描述符
簡化的 EJB 軟件開發
使用依賴關系注入來訪問資源
Java 持久性 API 模型
Web 服務
您可以在 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“刪除”, CRUD) 操作。
IDE 提供了處理新 Java 持久性 API 的工具。您可以通過數據庫自動生成實體類,或手動對實體類進 行編碼。IDE 還提供了用於創建和維護持久性單元的模板和圖形編輯器。
Web 服務
在 Java EE 5 平台中,通過使用標注顯著改進和簡化了 Web 服務支持。以下規范已應用於此領域中 :JSR 224,Java API for XML-Based Web Services (JAX-WS) 2.0;JSR 222Java 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 的信息,請參見 MTOM/XOP)。在 Java EE 5 技術出現之前,定義 Web 服務 需要使用很長且復雜的描述符。現在,定義它卻非常簡單,只需將 @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 服務中使用的標注。