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