【IT168 分析評(píng)論】 又看到 Reza 同學(xué)為 Java EE 6 奔走呼告了。如同在浩浩蕩蕩的就業(yè)大軍中的一員, Reza 帶著自己的最新“簡(jiǎn)歷”—— Java EE 6 ,向咱們開發(fā)人員展示耳目一新的感覺(jué)。但從本文的字里行間中,隱隱約約還是能覺(jué)察到它的困惑和迷茫:“已經(jīng)付出了這么多, Java EE 6 能再次成功嗎?開發(fā)者會(huì)采納它嗎?如果不是,我們還應(yīng)該做什么?......”。當(dāng)年 EJB2.* 的垮臺(tái)掀起了反對(duì)使用 EJB 的浪潮。實(shí)際上我接觸 JavaEE 比較晚 ( 大概在 2007 年初 ) ,沒(méi)有使用過(guò) EJB2.* ,但也是不夠客觀的照著大家說(shuō)的抨擊 EJB ,天天嘴邊掛著 Struts , Spring , Hibernate 。但隨著對(duì) JavaEE 的不斷關(guān)注與了解,漸漸發(fā)現(xiàn)自己的盲從于無(wú)知。此次 Java EE 6 的特性預(yù)覽更有讓我渴望學(xué)習(xí)它的沖動(dòng)。“技術(shù)選型的抉擇政治因素往往大于技術(shù)本身 。” Java EE 6 的推廣還應(yīng)該要更多的成功實(shí)戰(zhàn)項(xiàng)目來(lái)贏得“政治因素”。但如同剛畢業(yè)的應(yīng)屆生,沒(méi)有經(jīng)驗(yàn)也要面對(duì)就業(yè),除實(shí)力本身外,靠的就是運(yùn)氣了......
簡(jiǎn)單回顧
Java EE 5 是一個(gè)相當(dāng)成熟,布署廣泛并且支持服務(wù)端友好開發(fā)的平臺(tái)。 EJB 3.0 的引用已經(jīng)顛覆了原有的業(yè)務(wù)組件開發(fā)模型,而原有 EJB2.x 的 Entiy Bean 模型由持久層的 JPA 來(lái)代替。 JSF 也被作為官方的標(biāo)準(zhǔn)展示層框架,當(dāng)然還有咱們的 JAX-WS 2.0 代替了 JAX-RPC 作為新的 SOAP web services API 。 Java EE 5 的目標(biāo)非常明確——通過(guò)引入 Annotation , POJO 編程模型,零配置 (zero-configuration) 等一系列概念從而降低開發(fā)的復(fù)雜度,幫助開發(fā)人員從 XML 地獄中解脫出來(lái)。盡管對(duì) Java EE 持觀望態(tài)度的還是大有人在,但是也許要證明“實(shí)際上 Java EE 5 已經(jīng)獲得成功”的最有利的證據(jù)就是由于上述提到的種種改變,使得很多家伙第一次開口說(shuō)他們已經(jīng)考慮接受 Java EE 。還是這幫家伙,在體驗(yàn) Java EE 編程模型后,不斷的向我們反饋他們的震驚。
大局觀
Java EE 6 又將是邁向理想中那簡(jiǎn)潔,高效以及整合完好平臺(tái)之旅的一大步。 Java EE 6 又有了一系列技術(shù)上的革新:有全新的 WebBeans1.0 和 JAX-RS 1.1 API ,也有更加成熟的老牌 API Servlet3.0 。
除少數(shù)相對(duì)較小的改變外 ( 比如說(shuō)標(biāo)準(zhǔn)的全局 JDNI 命名,本文將不會(huì)談到 ) ,大多數(shù) JSR 316 中的主題都是精挑細(xì)選出來(lái)的。現(xiàn)在咱們就一同來(lái)看看這些變化。想了解更多細(xì)節(jié),我推薦你把公眾審議草案下載下來(lái)看看。這是鏈接地址: http://jcp.org/en/jsr/detail?id=316 .
砍掉沒(méi)用的 API
Java EE 的第一版發(fā)布于 1999 年。在競(jìng)爭(zhēng)異常激烈的業(yè)界一直作為官方標(biāo)準(zhǔn),那時(shí)間也不算很短了。但在這段時(shí)期里, Java EE 只是一味的在成長(zhǎng),結(jié)果導(dǎo)致到現(xiàn)在平臺(tái)變得臃腫不堪,充斥著一堆毫無(wú)用處的過(guò)時(shí) API ,用起來(lái)不爽,布署起來(lái)也不方便。 Java EE 6 開始正兒八經(jīng)的處理這些 API ,確保平臺(tái)更加輕量級(jí),同時(shí)也是為了騰出更多的空間,更利于 Java EE 的健康成長(zhǎng)。表 1 顯示了那些被砍掉的 API ,當(dāng)然原因我們也做出了說(shuō)明:
被砍的 API
|
被砍原因
|
JAX-RPC
|
JAX-RPC 是早期通過(guò) RPC 調(diào)用和 SOAP web services 進(jìn)行交互的編程模型。由于 Web services 成熟后從 RPC 模型中分離出來(lái),更加健壯,更多特性和流行 JAX-WS API 實(shí)際上已經(jīng)代替了 JAX-RPC 。
|
EJB 2.x Entity Beans CMP
|
復(fù)雜,笨重,過(guò)度復(fù)雜的 EJB2.* 的 Entity Bean 模型已經(jīng)被 Java EE 5 的基于 POJO 的流行輕量級(jí) JPA 持久層模型所代替。
|
JAXR
|
JAXR 是 Java API 中少數(shù)幾個(gè)用于 UDDI 注冊(cè)服務(wù)的接口之一。遺憾的是,由于 UDDI 并沒(méi)有廣泛使用,現(xiàn)在 JAXR 已經(jīng)幾乎沒(méi)有啥應(yīng)用,而且供應(yīng)商支持的也很少,難免遭到被砍命運(yùn)。
|
Java EE Application Deployment (JSR-88)
|
JSR 88 是當(dāng)初是用于 J2EE 應(yīng)用程序在應(yīng)用
服務(wù)器
上進(jìn)行的配置和部署的標(biāo)準(zhǔn) API 。可是該 API 始終沒(méi)有得到眾供應(yīng)商的支持,不得不砍掉。
|
Java EE Management (JSR-77)
|
和 JSR 88 有著相似的命運(yùn), JSR77 原本是用于為應(yīng)用
服務(wù)器
創(chuàng)建監(jiān)控管理的
API
。可是各大供應(yīng)商熱情仍然并不高漲,難逃被砍命運(yùn)。
|
上述精簡(jiǎn) API 的原則上是,應(yīng)用服務(wù)器供應(yīng)商不需要強(qiáng)制的去支持這些技術(shù),但是不排除一些大型的供應(yīng)商仍就會(huì)對(duì)這些被砍 API 繼續(xù)維持一段時(shí)期。
對(duì)于此次調(diào)整你有什么看法?太過(guò)于激進(jìn)了?還是仍然過(guò)于保守?你還用上述表格中看得到的 API 嗎?還有其它你認(rèn)為也應(yīng)該被砍掉的 API 嗎?
對(duì)于 Java EE 主要抨擊之一就是它太龐大了。確實(shí)啊,大多數(shù)中小型的 Java web 應(yīng)用程序根本用不了所有 Java EE 技術(shù) (full Java EE stack) 。你可以想像一下,如果要構(gòu)建一個(gè)類似于 SOA 的應(yīng)用程序,會(huì)用到消息,事務(wù),持久化以及 Web Services ,但犯不著需要使用像 JSP 或 JSF 這類的展示層技術(shù)。
Profile 就是為解決這個(gè)問(wèn)題而設(shè)計(jì)的。 Profiles 其實(shí)就是一個(gè) Java EE API 的子集,對(duì)于特定的應(yīng)用程序有著各自的解決方案。比如說(shuō),被提議到的 Java EE Web Profile 僅僅只包含了一些最有可能大絕大多數(shù) Java web 應(yīng)用程序中使用的 API 。像 Profiles 這樣的理念已經(jīng)在標(biāo)準(zhǔn)化的世界上取得的成功也是由來(lái)已久。也許你早就知道, Java ME 其實(shí)就支持 Profiles ——支持每種特定的設(shè)備運(yùn)行環(huán)境。類似的, Profiles 可用來(lái)更好的組織日益復(fù)雜的 web services 世界 ( 比如說(shuō) WS-I Basic Security Profile 等等 ) 。
雖然 Java EE 6 通過(guò) JSR 來(lái)定義了一些規(guī)則用于創(chuàng)建新的 Profiles ,但這一次僅僅只有一個(gè) Profile 當(dāng)選—— Web Profile 。表 2 列出了 Web Profile 與 Java EE 完整平臺(tái)的比較情況:
API
|
Web Profile
|
Full Profile
|
Servlet 3.0
|
<!-- [if gte vml 1]> <![endif]-->
|
|
JSP 2.2
|
|
|
JSTL 1.2
|
|
|
EL 1.2
|
|
|
JSF 2.0
|
|
支持
|
WebBeans 1.0 (?)
|
支持
|
支持
|
EJB 3.1 (Lite)
|
支持
|
支持
|
EJB 3.1 (Full)
|
|
支持
|
JPA 2.0
|
支持
|
支持
|
JTA 1.1
|
支持
|
支持
|
JMS 1.1
|
|
支持
|
JavaMail 1.4
|
|
支持
|
JAX-WS 2.2
|
|
支持
|
JAX-RS 1.1
|
|
支持
|
JAXB 2.2
|
|
支持
|
JACC 1.0
|
|
支持
|
JCA 1.6
|
|
支持
|
WebBeans 為什么也能入圍的原因曾經(jīng)也是一個(gè)大大的問(wèn)號(hào),至今大家對(duì)是否應(yīng)該在 Java EE 6 中加入 WebBeans 仍然各執(zhí)一詞。圍繞 WebBeans 的爭(zhēng)論焦點(diǎn)是:它怎么適合加入 Java EE 體系?還有是不是 JSR 所研究的技術(shù)就一定是對(duì)的呢?對(duì)于你是否也是這么想的呢?也許你并不了解 WebBeans ,下面我會(huì)對(duì)此話題進(jìn)行延伸。是否 WebBeans 應(yīng)該納入到 Java EE 6 中呢?如果不這么做,那 JSR 應(yīng)該做出什么樣的改變?同時(shí)還應(yīng)留心一下 EJB Lite ,它是雖不是完整版的 EJB ,但此次也被加入到 Web Profile 中了。下面我也會(huì)簡(jiǎn)要的再提到 EJB Lite 。
對(duì)于 Java EE 的 Profiles 思想,你又有何看法?符合 Profile 的輕量級(jí)的應(yīng)用程序 服務(wù)器 是 否對(duì)你有用?關(guān)于 Web Profile 所涉及到的技術(shù)你又怎么看?是內(nèi)容太少了,太多了,還是剛剛好?光有它就足夠了,還是需要在 Java EE 6 中定義其它 Profile ?還是咱們應(yīng)當(dāng)考慮一下更簡(jiǎn)化的“ Java EE Basic Profile ”?
現(xiàn)在我們來(lái)來(lái)看看 JSR316 專家組所做的工作,看看哪些技術(shù)加入到了 Java EE 平臺(tái)上了。雖然這項(xiàng)工作非常重要并且我們也渴望聽到你對(duì)上文提到的內(nèi)容提出建議。從這一章節(jié)開始,我們來(lái)快速看看 Java EE 6 API 的改變。我是極力推薦你自己去深度發(fā)掘下列所提到的每一項(xiàng) API 。我認(rèn)為你會(huì)喜歡接來(lái)的內(nèi)容,所有的 API 都會(huì)因你時(shí)宜的反饋而更加精彩。
WebBeans 1.0
在 Java EE 6 的里程碑上, WebBeans 也許算得上是最具開創(chuàng)性的 API 了。 WebBeans 填補(bǔ)了 Java EE 的很多空白。盡管 WebBeans 由 Seam , Google Guice 以及 Spring 所進(jìn)化而來(lái),但它并不是直接的復(fù)制。實(shí)際上, WebBeans 本身就擁有許多獨(dú)一無(wú)二的創(chuàng)新。 WebBeans 由 JBoss/Red Hat 的 Gaving King 和 Google 的 Bob Lee 領(lǐng)導(dǎo)著。下面就對(duì) WebBeans 的特點(diǎn)進(jìn)行簡(jiǎn)要概括說(shuō)明:
WebBeans 將 JSF , JPA 和 EJB3 等編程模型統(tǒng)一了起來(lái),讓人感覺(jué)它們是一個(gè)整合完好的開發(fā)平臺(tái)。這一切是通過(guò)將 EJB3 的 beans , JPA 的 entity 以及普通 Java Bean 注冊(cè)為 WebBeans 的組件,然后通過(guò)使用 EL 表達(dá)式進(jìn)行訪問(wèn)。當(dāng)然,它們之間也可以在進(jìn)行“依賴注入”。實(shí)際上,如果你需要的話, WebBeans 完全可以讓你忽略 JSF 的 backing beans 。
通常在上下文中, WebBeans 隱式的管理著所有注冊(cè)組件的生命周期。除傳統(tǒng)的 request, session 和 application 等主要作用域外,它還添加了一些新作用域“ dependent ”和“ conversation ”。 dependent 顯式的“繼承”了調(diào)用者的作用域,而 conversation 則是一個(gè)全新的作用域,( conversation 上下文與一個(gè)瀏覽器窗口(或頁(yè)卡)聯(lián)系在一起,這個(gè)瀏覽器窗口(或頁(yè)卡)由隨每個(gè)請(qǐng)求提交的一個(gè)標(biāo)志來(lái)標(biāo)識(shí)。 conversation 作用域使用 HTTP Session 的一個(gè)單獨(dú)的區(qū)段在頁(yè)面之間遷移數(shù)據(jù) 。 )從 EJB3.1 來(lái)看,它又填補(bǔ)了客戶端組件作用域 ( 包括 stateless , stateful 和 shared) 與 Web 應(yīng)用程序中心端的空白。
WebBeans 為大家引入一組成熟的依賴注入特性,提供了一個(gè)完整的以 Java 為中心的類型 安全 開發(fā)平臺(tái)。這些特性包括:對(duì)任意非 EJB 的 Java 對(duì)象的整合,將非托管的對(duì)象注入到托管對(duì)象中去,使用對(duì)象工廠,指定組件化的布署環(huán)境并利用 stereotypes 去管理 annotations 。
WebBeans 可以通過(guò) Annotation 將攔截器 (interceptor) 綁定到目標(biāo)對(duì)象上,增強(qiáng)了 Java EE 的攔截器模型。通過(guò) Annotation 所綁定的攔截器會(huì)自動(dòng)的作用于目標(biāo)對(duì)象,這一點(diǎn)與現(xiàn)在的 Java EE 5 是不同的( Java EE 5 中目標(biāo)對(duì)象與攔截器之間還是通過(guò)間接方式進(jìn)行關(guān)聯(lián),比如說(shuō) xml 配置文件)。
列出的這些令人印象深刻的特性還只是 WebBeans 的冰山一角。 WebBeans 增加了許多其它非常棒的特性來(lái)制定下一代 Java EE 的整合方案。想更近一步了解 WebBeans 嗎,請(qǐng)點(diǎn)擊下面鏈接去下載已經(jīng) 公開草案吧: http://jcp.org/en/jsr/detail?id=299 .
原文地址: http://www.javaeye.com/news/5547-translation-java-ee-6-architecture-changes
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
