<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JFox

    The most lightwegith Java EE Application Server

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      9 隨筆 :: 0 文章 :: 27 評(píng)論 :: 0 Trackbacks
    隨著EJB3規(guī)范以及支持EJB3JavaEE應(yīng)用服務(wù)器的即將發(fā)布,全新Java EE體系架構(gòu)的新戰(zhàn)爭(zhēng)將拉開(kāi)帷幕,在過(guò)去3年中如火如荼的Spring占據(jù)了Java EE應(yīng)用開(kāi)發(fā)基礎(chǔ)平臺(tái)的大半江山,面對(duì)EJB3Spring你應(yīng)該如何選擇呢?


    作為一個(gè)架構(gòu)師,我對(duì)EJB是既愛(ài)且恨,對(duì)Spring又恨又愛(ài),現(xiàn)在我們來(lái)也把這兩大技術(shù)體系來(lái)做一個(gè)全面分析和對(duì)比,希望能給大家在進(jìn)行技術(shù)選型時(shí)一個(gè)更好的參考。

    1. 法制 VS “民主

    EJB規(guī)范一直由國(guó)際組織jcp(www.jcp.org)來(lái)制定,一經(jīng)通過(guò),即作為官方標(biāo)準(zhǔn),且各廠(chǎng)商都會(huì)不遺余力的推動(dòng),所以對(duì)于企業(yè)應(yīng)用來(lái)說(shuō),EJB就是法,以EJB為企業(yè)應(yīng)用的基礎(chǔ)架構(gòu)暫且稱(chēng)為法治; Spring來(lái)自開(kāi)源社區(qū),由眾多的開(kāi)源軟件開(kāi)發(fā)者參與,逐步形成的一種流行的體系標(biāo)準(zhǔn),它的設(shè)計(jì)以IoC(反轉(zhuǎn)控制)為核心,提倡所謂的侵入設(shè)計(jì)原則,這里暫且稱(chēng)之為民主。

     

    支持EJB的應(yīng)用服務(wù)器一般是一個(gè)大而全的產(chǎn)品,包括了構(gòu)建企業(yè)應(yīng)用需要的方方面面,如果需要額外擴(kuò)展一般不容易,如果對(duì)一個(gè)應(yīng)用服務(wù)器不滿(mǎn)意的話(huà),那么可以且也只能更換整個(gè)應(yīng)用服務(wù)器了,好在由于應(yīng)用服務(wù)器市場(chǎng)百花齊放,從免費(fèi)到低端再到高端,您可以任意選擇;

     

    SpringIoC容器發(fā)展而來(lái),通過(guò)不斷集成AOPMVCOR/Mapping以及幾乎您能想到的各項(xiàng)服務(wù)而提供完善的企業(yè)應(yīng)用架。對(duì)于一個(gè)應(yīng)用,你可以自由選擇具體的技術(shù)框架的實(shí)現(xiàn),SSH就是最常用一套組合,然而且不說(shuō)是否每個(gè)架構(gòu)師擁有正確選擇的能力,無(wú)論如何,最終的選擇在設(shè)計(jì)之初一旦確定,要想更換便不那么容易,你不可能輕松的將一個(gè)基于Spring + Structs的應(yīng)用輕松的移植到Spring + WebWork,更不能輕松的將一個(gè)基于Spring + Hibernate的應(yīng)用輕松的移植到Spring + iBatis,所以對(duì)于需要長(zhǎng)期維護(hù)和發(fā)展的應(yīng)用來(lái)說(shuō),將只能寄希望于你采用的框架都能夠很好的發(fā)展,并且能在升級(jí)的同時(shí)保證向前的兼容性。

     

    綜上所述,EJB由于對(duì)于整個(gè)世界是標(biāo)準(zhǔn)的,就好像是一部國(guó)際法,一旦遵循,全球通用,你可以比較輕松的在WebSphereWebLogic甚至JBoss之間進(jìn)行切換,所以如果選擇EJB,你將在一個(gè)法制的環(huán)境下獲得最大的民主;而Spring對(duì)于整個(gè)世界看似民主的,然而一旦整套架構(gòu)確定下來(lái),卻成了專(zhuān)制,猶如美國(guó)式的民主,一旦被它征服,就成為它的專(zhuān)政統(tǒng)治了,想掙脫它的控制可就不那么容易了,其中的利害,大家細(xì)細(xì)品味吧。

    2. 輕量級(jí)組件 VS 輕量級(jí)內(nèi)核 VS輕量級(jí)容器

    關(guān)于輕量級(jí)內(nèi)核,不論屬實(shí)是否,現(xiàn)今的應(yīng)用服務(wù)器都宣稱(chēng)采用了微內(nèi)核技術(shù),在此基礎(chǔ)上建立Java EE的各項(xiàng)服務(wù)構(gòu)建成完善的應(yīng)用服務(wù)器;而Spring本身就是一個(gè)基于IoC的輕量?jī)?nèi)核,然后通過(guò)集成第三方的服務(wù)器來(lái)提供完整的架構(gòu)。

     

    EJB組件曾經(jīng)被認(rèn)為是一個(gè)重量級(jí)的組件,而備受批評(píng),EJB3規(guī)范的重要目標(biāo)就是簡(jiǎn)化EJB的開(kāi)發(fā),提供一個(gè)容器管理的輕量級(jí)的組件方案。

     

    但是有必要提醒一下,輕量級(jí)的組件,并不意味著提供服務(wù)的容器是輕量的,不管是EJB2還是EJB3,應(yīng)用服務(wù)器因?yàn)樾枰芾斫M件的負(fù)責(zé)生命周期以及行為,并且內(nèi)置提供了各項(xiàng)服務(wù),容器自然是一個(gè)重量級(jí)的服務(wù);至少現(xiàn)在看來(lái),現(xiàn)有的Application Server提供的容器都還不足夠的輕量,從個(gè)人偏好來(lái)說(shuō),我就非常喜歡JBoss 2.4這個(gè)版本,它有我需要的功能,同時(shí)又夠簡(jiǎn)單,而現(xiàn)在, JBoss 4的啟動(dòng)速度已經(jīng)逐漸讓我對(duì)它對(duì)失去了耐心。

     

    而對(duì)于Spring,也有同樣的問(wèn)題,輕量級(jí)的內(nèi)核,也不意味著整個(gè)框架是輕量的,更不意味著基于Spring的整個(gè)應(yīng)用架構(gòu)是輕量的。對(duì)于Spring,你需要去尋找并粘合各種服務(wù),然后讓他們能夠穩(wěn)定的在一起工作,如果應(yīng)用對(duì)技術(shù)的需求較多,伸縮性要求也較高,你就會(huì)不斷的在應(yīng)用服務(wù)中加入其他服務(wù),如:資源池、消息隊(duì)列、集群等。當(dāng)加入這些后,Spring的解決方案已經(jīng)和Java EE Application Server解決方案一樣重量級(jí)了。

     

    追求簡(jiǎn)單、輕量,是每一個(gè)應(yīng)用架構(gòu)的目標(biāo),對(duì)于企業(yè)應(yīng)用的構(gòu)建來(lái)說(shuō),輕量級(jí)組件標(biāo)準(zhǔn)+輕量的內(nèi)核+輕量級(jí)的容器,并以此構(gòu)建輕量級(jí)的應(yīng)用平臺(tái),才是最終需要的。如果有輕量級(jí)的容器出現(xiàn),將幫助EJB3在企業(yè)應(yīng)用中重新占據(jù)有利的地位。

    3. 可管理性與可控性

    這個(gè)問(wèn)題對(duì)于一次性交付的項(xiàng)目也許不是問(wèn)題,但是對(duì)于質(zhì)量要求更高、生命周期更長(zhǎng)的產(chǎn)品,卻是衡量平臺(tái)和架構(gòu)的重要因素。

     

    基于 Spring 架構(gòu)的應(yīng)用,由于過(guò)分的自由和靈活,隨著項(xiàng)目的進(jìn)展,逐漸集成的第三方框架越來(lái)越多,很難保證集成的服務(wù)和編寫(xiě)的組件中有沒(méi)有漏洞,甚至相互之間有嚴(yán)重的沖突,那么,掌控整個(gè)項(xiàng)目的質(zhì)量成了難題,光是一頁(yè)接一頁(yè)的配置文件,就知道今后的維護(hù)成本也就隨之增高,回想一下EJB2.0時(shí)代的ejb-jar.xml吧;而EJB因?yàn)榧傻亩际菢?biāo)準(zhǔn)服務(wù),而且組件模型也是固定的,加之應(yīng)用服務(wù)器一般提供控制臺(tái),用來(lái)查看運(yùn)行時(shí)的各項(xiàng)屬性,并可對(duì)服務(wù)進(jìn)行實(shí)時(shí)的管理,顯然比Spring開(kāi)發(fā)的應(yīng)用可控性更好。

     

    4. 功能性對(duì)比

    4.1 IoC容器,AOP能力

    IoC的能力Spring要略強(qiáng)一些,但是在EJB3中可以完全用Annotation方式進(jìn)行注入,在開(kāi)發(fā)上要簡(jiǎn)單很多,對(duì)于一些相對(duì)比較固定的注入,采用Annotation更好,而對(duì)于一些可能需要經(jīng)常變動(dòng)的注入,XML更加靈活,EJB3剛好提供了這樣的兩種解決方案。如果你已經(jīng)患有XML恐懼癥,那么EJB3無(wú)疑將給您以解脫。

     

    同時(shí),EJB3組件中,支持多種方式注入,比如依賴(lài)于名稱(chēng)、接口或者JNDI名,另外還支持使用@PersistenceContext注入EntityManager@Resource注入服務(wù)器資源,如EJBContextTimerService等,而一些Annotation已經(jīng)成為JDK6的一部分,將來(lái)可能直接被JDK支持。

     

    AOP方面,如果您需要徹底的AOP,并且在Spring中集成了AspectJ 那么EJB3自然無(wú)法比擬,但是如果您的項(xiàng)目以夠用為原則,只需要一般方法攔截意義上的AOPEJB3提供的各種回調(diào)方法應(yīng)該可以滿(mǎn)足您的要求了。

    4.2 事務(wù)處理

    EJB的看家本領(lǐng),Spring也通過(guò)提供TransactionTemplate以及集成第三方事務(wù)處理器來(lái)支持JTA,都支持申明式事務(wù),可以BMTCMT,但無(wú)論如何,移植的器官總也沒(méi)有自身長(zhǎng)的好吧。

    4.3 分布式能力

    一般使用Java EE體系的公司都認(rèn)為這是EJB的最大長(zhǎng)處,但是實(shí)施并不如想象那樣,一來(lái)絕大多數(shù)都是Web應(yīng)用,依賴(lài)Web提供的分布式能力已經(jīng)可以滿(mǎn)足90%的需要了,二來(lái)大家基本上都是Web容器和EJB容器整體部署,EJB組件的分布部署少之又少。當(dāng)然如果您需要Web層和應(yīng)用層分開(kāi)部署,那么Spring一定不在你的考慮范圍之內(nèi)了。

    4.4 Cluster能力

    Cluster也是EJB的傳統(tǒng)優(yōu)勢(shì),但是老師說(shuō),能夠發(fā)揮EJB集群優(yōu)勢(shì)的地方并不多,因?yàn)榧词鬼?xiàng)目中采用了EJB,一般也采用Stateless SessionBean,而使用HttpSession Cluster,既然如此,無(wú)論EJB還是Spring,大家都是平等的。當(dāng)然,如果您正在構(gòu)建一個(gè)大型的應(yīng)用,對(duì)集群的能力要求非常高,比如需要事務(wù)級(jí)的Cluster,而且還有分布式的需求,那么估計(jì)沒(méi)有多少因素會(huì)讓您考慮Web Server + Spring的架構(gòu)了。

     

    4.5 Web Service

    EJB3中的Web ServiceEJB組件集成得如此之好,使用起來(lái)再簡(jiǎn)單不過(guò)了,如下面實(shí)例所示,JAX-WS也將逐步成為Java Web Service事實(shí)標(biāo)準(zhǔn);至于Spring可以實(shí)現(xiàn)各種基于Http的遠(yuǎn)程調(diào)用方法,其優(yōu)勢(shì)并不明顯。

     

    @Stateless

    @Remote

    @Local

    @WebService(endpointInterface = "jfox.test.ejb3.webservice.Calculator")

    public class CalculatorBean implements CalculatorRemote, CalculatorLocal {

     

        public int add(int x, int y) {

            return x + y;

        }

     

        public int subtract(int x, int y) {

            return x - y;

        }

     

    }

    4.6 集成第三方框架

    如果需要集成第三方框架的時(shí)候,估計(jì)您需要Spring了,當(dāng)然前提是Spring 已經(jīng)給出很好的集成方案;而如果采用EJB,則需要視特定的應(yīng)用服務(wù)器了,推薦當(dāng)類(lèi)庫(kù)來(lái)用,或者使用context listener來(lái)啟動(dòng),是在不行,只能基于特定的應(yīng)用服務(wù)器來(lái)進(jìn)行集成,一般來(lái)說(shuō),應(yīng)用服務(wù)器均提供了JMX集成能力。

    5. 總結(jié)

    縱觀人類(lèi)歷史,官方過(guò)于強(qiáng)勢(shì),則必然官逼民反;而民間力量過(guò)于強(qiáng)大,社會(huì)必將不穩(wěn)定,這都是我們不愿看到的,在技術(shù)世界里也一樣。對(duì)于EJB3Spring這兩種方案,Spring現(xiàn)在處于壓倒性的優(yōu)勢(shì)一方,希望EJB3的出現(xiàn),一來(lái)能為官方挽回一些失去的領(lǐng)地,二來(lái)也能繼續(xù)引發(fā)更多的探討,不再拘束于一家之言,只有百家爭(zhēng)鳴的環(huán)境,才能讓開(kāi)發(fā)人員和架構(gòu)人員對(duì)企業(yè)應(yīng)用的構(gòu)建認(rèn)識(shí)得更加完善,所以最好的方式是EJB3Spring互相促進(jìn),和諧發(fā)展。

     

    期待一個(gè)輕量的真正以開(kāi)發(fā)需求為中心的EJB3應(yīng)用服務(wù)器的出現(xiàn),為疲軟的EJB市場(chǎng)注入新的活力!

    Infoq鏈接:  http://www.infoq.com/cn/articles/ejb3-spring-compare


    posted on 2007-04-01 23:39 JFox 閱讀(1358) 評(píng)論(7)  編輯  收藏

    評(píng)論

    # re: EJB3 再戰(zhàn) Spring[未登錄](méi) 2007-04-02 13:59 Kelvin
    同意民主與專(zhuān)制的論點(diǎn)。本人還是看好ejb3  回復(fù)  更多評(píng)論
      

    # re: EJB3 再戰(zhàn) Spring[未登錄](méi) 2007-04-02 17:35 Allen
    期待 EJB3 和 Spring 的和諧共處,為和諧"社會(huì)"的創(chuàng)建貢獻(xiàn)各自力量 :)  回復(fù)  更多評(píng)論
      

    # re: EJB3 再戰(zhàn) Spring 2007-04-26 17:47 王志猛
    兄弟,你的語(yǔ)言有點(diǎn)偏向呦,不過(guò)道理倒是真的。
    現(xiàn)在ejb功能是不錯(cuò)。但是服務(wù)器實(shí)在讓人受不了,個(gè)人定制能力太差了。
    如果ejb能夠想spring那樣,任何小S都能支持,那我馬上轉(zhuǎn)過(guò)去。呵呵  回復(fù)  更多評(píng)論
      

    # re: EJB3 再戰(zhàn) Spring[未登錄](méi) 2007-06-22 09:51 test
    個(gè)人覺(jué)得,ejb和spring對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),含義是不同的,ejb是組件標(biāo)準(zhǔn),一套開(kāi)發(fā)模型,至于服務(wù)器是什么樣子,可以不去關(guān)心。但是spring以ioc為核心,主要提供組件的生命周期管理和依賴(lài)管理,實(shí)現(xiàn)自動(dòng)注入等功能。正因?yàn)橛辛诉@個(gè)ioc框架,集成其他服務(wù)才變得非常簡(jiǎn)單,使開(kāi)發(fā)人員可以自由的選擇各層的框架,如果喜歡ejb或則會(huì)ws同樣可以在spring進(jìn)行集成,而不再需要其他的容器。  回復(fù)  更多評(píng)論
      

    # re: EJB3 再戰(zhàn) Spring 2007-06-22 10:10 JFox
    學(xué)習(xí)EJB/Java EE,學(xué)習(xí)的不光是 EJB 編程技術(shù),而是整個(gè)企業(yè)應(yīng)用的服務(wù)器端架構(gòu),可以說(shuō)幾乎所有企業(yè)應(yīng)用的架構(gòu)問(wèn)題在Java EE都能找到解決方案;而學(xué)習(xí)Spring學(xué)習(xí)到的則多是編程技術(shù),頂多涉及到設(shè)計(jì)技巧,所以如果要成為一名架構(gòu)師,系統(tǒng)的學(xué)習(xí)Java EE體系結(jié)構(gòu)是必修課。
      回復(fù)  更多評(píng)論
      

    # re: EJB3 再戰(zhàn) Spring 2007-08-06 15:38 mashiguang
    的確,用ejb3的方式開(kāi)發(fā)web service是我用過(guò)最簡(jiǎn)單的了.  回復(fù)  更多評(píng)論
      

    # re: EJB3 再戰(zhàn) Spring 2007-09-18 09:48 BeanSoft
    Spring 除了不用 new JavaBean, 別的功能還不得靠裝其它服務(wù)器? 它頂多就是一個(gè)單機(jī)版業(yè)務(wù)層的封裝包, Web 層它也作不了.  回復(fù)  更多評(píng)論
      


    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产免费拔擦拔擦8x| 免费人成大片在线观看播放| 久久久久亚洲av毛片大| 毛片免费在线观看网址| 99在线观看视频免费| 精品乱子伦一区二区三区高清免费播放| 狠狠色香婷婷久久亚洲精品| 激情内射亚洲一区二区三区| 亚洲老妈激情一区二区三区| 免费大香伊蕉在人线国产 | 亚洲五月午夜免费在线视频| 在线观看视频免费国语| 四虎成年永久免费网站| 一级毛片免费播放| 久久久国产精品福利免费| 国产99久久久久久免费看| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲三级电影网址| 日本亚洲欧洲免费天堂午夜看片女人员 | 亚洲AV无码一区二三区| 免费观看午夜在线欧差毛片| 国产精品免费视频网站| 四虎影院免费在线播放| 大陆一级毛片免费视频观看| 成人免费无码大片a毛片软件| 无码永久免费AV网站| 国产精品久久永久免费| 无码国产精品一区二区免费| 成年人网站免费视频| 亚洲一级毛片免费在线观看| 亚洲一区在线免费观看| 中国在线观看免费高清完整版| 免费看片在线观看| 手机在线免费视频| 日本免费人成黄页在线观看视频 | 亚洲AV无码乱码在线观看富二代 | 日本道免费精品一区二区| 久久久久亚洲av成人无码电影| 啊灬啊灬别停啊灬用力啊免费看| 国产一区二区三区在线免费 | 亚洲一区二区三区在线观看蜜桃|