java ee技术_Java EE 6与Spring Framework:技术决策过程
java ee技術(shù)
在過(guò)去的幾個(gè)月中,我們經(jīng)歷了這個(gè)決策過(guò)程:為Java平臺(tái)上的企業(yè)開(kāi)發(fā)選擇哪種技術(shù)堆棧? 有多種選擇。 但是,我們深入討論的是:純Java EE 6堆棧與帶有Java EE的Spring。以下博客文章總結(jié)了當(dāng)您考慮這些技術(shù)堆棧選項(xiàng)之一時(shí)發(fā)現(xiàn)的有趣的關(guān)鍵問(wèn)題。 我不會(huì)試圖說(shuō)服某人選擇兩者之一。 這對(duì)我來(lái)說(shuō)很重要,我想分享的是決策過(guò)程和關(guān)鍵論點(diǎn)。
什么是“標(biāo)準(zhǔn)”? 在我們的討論中,“標(biāo)準(zhǔn)”一詞非常重要,特別是對(duì)于執(zhí)行管理層而言。 我認(rèn)為這使決策者對(duì)保護(hù)投資充滿熱情。 但是什么是標(biāo)準(zhǔn),在Java生態(tài)系統(tǒng)中我們可以認(rèn)為什么是標(biāo)準(zhǔn)? Codecentric AG的創(chuàng)始人兼董事會(huì)成員Mirko Novakovic寫(xiě)了一篇非常有趣的博客文章,名為:“ Java EE vs Spring。 或者:什么是標(biāo)準(zhǔn)? ” Mirko指出以下內(nèi)容:- 對(duì)他來(lái)說(shuō),標(biāo)準(zhǔn)是建立,接受和主導(dǎo)的東西
- 遵循此定義,僅將某些Java EE API(例如Servlet規(guī)范)視為標(biāo)準(zhǔn),因?yàn)樗鼈円褟V泛應(yīng)用于Java生產(chǎn)技術(shù)領(lǐng)域
- 他過(guò)去曾說(shuō)過(guò),某些Java EE標(biāo)準(zhǔn)API幾乎沒(méi)有投資保護(hù),例如EJB規(guī)范(過(guò)去十年中大量API發(fā)生了變化)
- 他還聲稱,JPA和JSF的1.0版本不足以滿足大型企業(yè)開(kāi)發(fā)項(xiàng)目中的技術(shù)要求。
- 他將CDI視為另一個(gè)年輕的標(biāo)準(zhǔn),它需要證明其長(zhǎng)期穩(wěn)定性,然后才能被視為Java企業(yè)應(yīng)用程序中的標(biāo)準(zhǔn)IOC機(jī)制。
- 因此,他目前的結(jié)論是:Sping和Hibernate仍然是Java企業(yè)開(kāi)發(fā)的“實(shí)際”標(biāo)準(zhǔn)。
這些階段的經(jīng)驗(yàn)教訓(xùn)進(jìn)入了后續(xù)的API版本,因此,API有時(shí)會(huì)變得不穩(wěn)定。 增加了功能,減少了采用,簡(jiǎn)化的API等。 如果客戶希望遵循該標(biāo)準(zhǔn),那么這種動(dòng)蕩且不確定的風(fēng)暴階段會(huì)導(dǎo)致遷移成本增加。 即使2.0版本向下兼容,使用不錯(cuò)的新功能代替許多變通辦法也意味著重構(gòu)工作。 如果該API并非沒(méi)有問(wèn)題,兼容的API更改會(huì)強(qiáng)制執(zhí)行遷移工作,則別無(wú)選擇。 過(guò)了一會(huì)兒,但是API變得成熟,這些重構(gòu),成本下降,該API進(jìn)入stabalization的階段。
一個(gè)成熟的 API始終具有較低的遷移和重構(gòu)成本,因?yàn)槲磻?yīng)用任何基本更改。 一段時(shí)間后,不再使用某種技術(shù),因?yàn)樗驯黄渌麆?chuàng)新的API所取代。 技術(shù)已死了–這些API不再投資,社區(qū) 停止了該項(xiàng)目。 圖1顯示了理想的API生命周期。
| 圖1:理想的Java EE API生命周期 |
該包裝器用作構(gòu)建業(yè)務(wù)應(yīng)用程序的API。 包裝器API可以是Spring框架,也可以是您自己的一組自定義框架API。 這樣,當(dāng)我們分別移動(dòng)到新的應(yīng)用程序服務(wù)器版本或Java EE版本時(shí),進(jìn)行所需的更改將更容易,更有效。 包裝器吸收了Java EE API的更改,使我們免去了更改50個(gè)應(yīng)用程序的負(fù)擔(dān)。 相反,我們只在中央位置進(jìn)行一次更改。 我們的開(kāi)發(fā)小組不受應(yīng)用程序服務(wù)器升級(jí)的影響。 OE供應(yīng)商和Java Communication Process(JCP)不會(huì)影響我們的決定和努力。
基礎(chǔ)架構(gòu)的生產(chǎn)就緒性(或:現(xiàn)在還是以后?) 您的應(yīng)用服務(wù)器是否有生產(chǎn)就緒版本,可以實(shí)現(xiàn)新的Java EE 6標(biāo)準(zhǔn)? 在我們的情況下(IBM WebSphere),Z系列上沒(méi)有任何Java EE 6版本。 因此,如果我們還不能在生產(chǎn)環(huán)境中運(yùn)行應(yīng)用程序,那么思考Java EE 6幾乎沒(méi)有任何意義。 您必須決定是現(xiàn)在還是以后使用某種技術(shù)。 例如,作為IOC機(jī)制的CDI(JSR 299/330)對(duì)于大型應(yīng)用程序還不夠成熟。 因此,你可能要選擇像Spring框架或谷歌吉斯的替代品來(lái)完成這項(xiàng)工作,如果你想現(xiàn)在已經(jīng)送到您的客戶端(效益分析)值。 投資保護(hù)(或:兼容性低下) 我已經(jīng)在前面提到過(guò):直接將Java EE API用于許多生產(chǎn)應(yīng)用程序(可能是50或100),可能會(huì)降低設(shè)計(jì)和實(shí)現(xiàn)決策的靈活性。 在研究投資保護(hù)時(shí),同樣的論點(diǎn)也適用。 對(duì)我而言,投資保護(hù)主要涉及在特定時(shí)期內(nèi)較低的技術(shù)(重構(gòu))成本。 您想花費(fèi)金錢(qián)來(lái)實(shí)現(xiàn)業(yè)務(wù)價(jià)值,您想專注于實(shí)現(xiàn)業(yè)務(wù)功能。 你不想花費(fèi)在生活必需品技術(shù)的精力(例如,發(fā)布版本升級(jí),平臺(tái)遷移,開(kāi)發(fā)自定義的API)。 為了實(shí)現(xiàn)這一點(diǎn),選擇正確的開(kāi)發(fā)API至關(guān)重要。 根據(jù)我們的生命周期模型,一個(gè)不錯(cuò)的選擇是在生命周期的長(zhǎng)期成熟階段開(kāi)始時(shí)選擇API。 這降低了重構(gòu)成本,從而增加了投資保護(hù)。 我們已經(jīng)解釋了Java EE不僅提供成熟的API。 例如,CDI在其JSR 299/330版本中還不成熟。 解決該難題的一種可能的方法是組合來(lái)自不同來(lái)源的API,您可以為業(yè)務(wù)應(yīng)用程序配置自己的API集。 如果您使用自己的一組 真實(shí)的標(biāo)準(zhǔn)API,則可以保護(hù)您的投資。我說(shuō)的是您自己的一套,因?yàn)槟赡軙?huì)使用混合技術(shù)堆棧 (圖2):一些成熟的Java EE API(例如Servlet,JPA 2.0),一些實(shí)際標(biāo)準(zhǔn)(例如Spring IOC)和一些專有的自定義API作為圍繞Newby Java EE API的包裝而開(kāi)發(fā)的。 最重要的是,這些API支持生產(chǎn)應(yīng)用程序的低兼容性 。 當(dāng)您要移至新的Java EE 應(yīng)用程序服務(wù)器版本 時(shí),必須找到一組API,這些API可使您免于繁重的遷移工作 。
| 圖2:用于Java企業(yè)開(kāi)發(fā)的混合技術(shù)堆棧 |
答案是:因?yàn)橛腥擞杏職馐褂盟?#xff0c;而其他人(包括Java EE)則緊隨其后。 “標(biāo)準(zhǔn)”是社區(qū)中很大一部分用來(lái)在生產(chǎn)中運(yùn)行大型應(yīng)用程序的工具。 標(biāo)準(zhǔn)不一定是Java EE標(biāo)準(zhǔn)。 過(guò)去,Java EE標(biāo)準(zhǔn)遵循事實(shí)上的標(biāo)準(zhǔn)框架(例如Hibernate,Spring)。 在開(kāi)源框架中,任何新技術(shù)很可能首先達(dá)到一定的成熟度。 然后它們將成為Java EE標(biāo)準(zhǔn)。 這是因?yàn)橹辽僭谧罱曛?#xff0c;絕大多數(shù)Java技術(shù)創(chuàng)新都源于社區(qū)。
參考: Java EE 6與Spring Framework:我們JCG合作伙伴 Niklas的技術(shù)決策過(guò)程。
相關(guān)文章 :
- 從Spring到Java EE 6
- Java EE6 CDI,命名組件和限定符
- Java EE6裝飾器:在注入時(shí)裝飾類(lèi)
- Spring Data JPA的持久層
- Spring MVC3 Hibernate CRUD示例應(yīng)用程序
翻譯自: https://www.javacodegeeks.com/2012/01/java-ee-6-vs-spring-framework.html
java ee技術(shù)
總結(jié)
以上是生活随笔為你收集整理的java ee技术_Java EE 6与Spring Framework:技术决策过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓狂野飙车8闪退怎么办(安卓狂野飙车8
- 下一篇: 如何使用Java,Maven,Jetty