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