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

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

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

    posts - 7, comments - 3, trackbacks - 0, articles - 26

    EJB(EJB1和EJB2)到底有什么問題

    Posted on 2010-07-16 16:35 delvin 閱讀(2070) 評論(3)  編輯  收藏


    EJB儼然成為了一個任人打扮的小姑娘?,F(xiàn)在你只要和一個國內(nèi)Java開發(fā)人員交流,基本都能聽到他們說EJB的缺點,即使他沒有使用過。
    為此我花了點時間,試圖分析下EJB的優(yōu)點和缺點,以及EJB對Java技術(shù)社區(qū)的貢獻。

    我使用了EJB有6年時間,從接觸Java就開始學習EJB,使用過EJB1,EJB2和EJB3。

    我總結(jié)的EJB(EJB1和EJB2)存在的問題有:

    目標定位不清
    編成模型復雜
    開發(fā)和移植困難
    部署描述符陷阱
    類加載陷阱
    測試困難
    破壞面向?qū)ο笤O計
    部署慢
    運行時需要EJB容器,代價高
    維護困難
    學習曲線大

    下面我們逐一分析
    一 目標定位不清
    假如你看過EJB早期規(guī)范,你會發(fā)現(xiàn),規(guī)范中隊EJB的目標定位有11項之多。為了分析方便,我引用了EJB2.1版本中有關(guān)EJB目標定義的內(nèi)容(注:序號是我加上的)。
    The Enterprise JavaBeans (EJB) architecture has the following goals:
     1)The Enterprise JavaBeans architecture will be the standard component architecture for build-
    ing distributed object-oriented business applications in the Java programming language.
     2)The Enterprise JavaBeans architecture will support the development, deployment, and use of
    web services.
    3)The Enterprise JavaBeans architecture will make it easy to write applications: Application
    developers will not have to understand low-level transaction and state management details,
    multi-threading, connection pooling, or other complex low-level APIs.
    4) Enterprise JavaBeans applications will follow the Write Once, Run Anywhere? philosophy of
    the Java programming language. An enterprise bean can be developed once, and then
    deployed on multiple platforms without recompilation or source code modi?cation.
    5) The Enterprise JavaBeans architecture will address the development, deployment, and runtime
    aspects of an enterprise application’s life cycle.
    6) The Enterprise JavaBeans architecture will define the contracts that enable tools from multiple
    vendors to develop and deploy components that can interoperate at runtime.
    7)The Enterprise JavaBeans architecture will make it possible to build applications by combin-
    ing components developed using tools from different vendors.
    8) The Enterprise JavaBeans architecture will provide interoperability between enterprise beans
    and Java 2 Platform, Enterprise Edition (J2EE) components as well as non-Java programming
    language applications.
    9) The Enterprise JavaBeans architecture will be compatible with existing server platforms. Ven-
    dors will be able to extend their existing products to support Enterprise JavaBeans.
    10) The Enterprise JavaBeans architecture will be compatible with other Java programming lan-
    guage APIs.
    11)The Enterprise JavaBeans architecture will be compatible with the CORBA protocols

    從這些目標中我們可以發(fā)現(xiàn),幾乎沒有目標是針對開發(fā)人員效率的。從這次目標中我們就可以隱約的感到EJB不是對開發(fā)者友好的技術(shù)。
    從這些目標中,我們可以發(fā)現(xiàn)EJB的雄心過于龐大,而EJB出現(xiàn)的時代,還不足以在一個規(guī)范中解決這些問題。從EJB后來被人詬病最多的實體Bean,只是EJB的一小部分,但恰恰就這點就要了EJB的命。

    EJB目標中把本不應該放在一起的東西給放在了一起,比如分布式和實體映射。而且錯誤的假定了使用分布式的場合。按照Spring創(chuàng)始人的說法
    ,分布式只有20%的應用要用,而80%是不需要的。
    我們現(xiàn)在知道EJB目標不清楚,那我們免不了要問,當初Sun為什么要這樣定位EJB?
    也許除了EJB早期規(guī)范組的人,沒有人真正清楚為什么,我們此處只能留到以后事后諸葛亮下(注:此處我以后會用一片文章來分析產(chǎn)生的原因)。

    編成模型復雜

    EJB組成復雜:
     一個EJB有好幾個東西組成,具體有主接口 ,遠程/本地接口,Bean類,部署描述符
    雖然開發(fā)社區(qū)發(fā)展了Xdoclet技術(shù),但也只是解決了一部分問題。用Xdoclet,編譯時需要產(chǎn)生代碼,當EJB多時,這是很耗時的。

    有過開發(fā)經(jīng)驗的人都知道要是修改一個小東西需要修改幾個文件的話,那工作效率是上不去的,另外在考慮到EJB的需要部署,啟動服務器的時間,修改EJB簡直是痛苦啊。這樣必然導致開發(fā)周期長。
      編寫(定義接口,  實現(xiàn)Bean, 編寫部署描述符)-》打包部署-》     啟動服務器-》測試。

    早期開發(fā)中,我們還遵守規(guī)范中按角色編程的要求,導致角色多,溝通成本高,比如Bean開發(fā)者開發(fā)Bean,部署員打包部署,系統(tǒng)管理者管理服務器。



    移植困難(特別是Entity Bean)
    規(guī)范中說的編寫一次,到處部署的承諾,基本是一句空話。結(jié)果變成了編寫一次,到處重寫。特別是實體Bean,基本上遷移一個服務器,就相當于用HIbernate重新的工作量,還不考慮測試的困難性。規(guī)范中對實體映射定義的太過于寬泛,導致每個廠商都需要自己的ORM實現(xiàn),引入 特定廠商的部署描述符,又因為J2EE中除web外,類加載的定義沒有明確,導致產(chǎn)生特定廠商的類加載機制和打包方式,還有就是特定廠商的服務查找方式。

    部署描述符陷阱
     1)EJB采用了當時流行的使用Xml作為粘合劑,并且實現(xiàn)廠商都引入了自己的配置文件。結(jié)果導致編寫過多的配置文件。以JBoss為例要寫要寫三個配置文件。XML配置文件復雜,手工編寫比較困難,早期IDE中可視化編寫XML效率有不高,導致開發(fā)人員開發(fā)效率大大降低。更痛苦的是修改后,不能及時生效。大家想象一下,如果你有多個EJB,修改一個需要重新部署和啟動服務器,那是怎樣的浪費時間。以我曾經(jīng)的一個項目為例,約有100個EJB,部署和重啟JBoss需要幾分鐘,重要不是浪費時間,而是那種挫折感。
     2)標準的ejb-jar.xml部署描述符把一些重要的信息(比如指定EJB的JNDI名字和配置實例池)都留給容器提供商,
    我們一般都需要一個額外,特定于容器的的部署描述符,比如weblogic-ejb-jar.xml。這樣導致編寫和移植的困難。

    類加載陷阱(類加載器復雜,并且不清晰)

    J2EE規(guī)范(Java EE)對EAR中web和ejb的加載沒有明確定義。比如一個EAR有多個EJB,每個EJB都依賴一些其他類庫,那么對這些被依賴的類庫到底是怎么被加載的,類的可見性怎么樣,規(guī)范沒有規(guī)定。這樣每個廠商都有自己的一套東西,導致不同服務上,要用不同的打包方式。

    六   測試困難
    J2EE測試難是有目共睹的,其中EJB測試困難時出了名的。測試困難的原因時,EJB運行需要容器插入什么服務,而啟動服務器是很高昂的代價。
    后來雖然開發(fā)社區(qū)采用Mock等技術(shù)試圖解決這個問題,但從開發(fā)實踐來說,還是有難度的。

    : 以下幾點問題,還需要詳細分析,由于時間問題,暫時只是列出來。
    七   破壞面向?qū)ο笤O計
    八  開發(fā)周期長,部署慢
    九  運行時需要EJB容器,代價高
     維護困難

    但說實話EJB也是有貢獻,當然它的貢獻更多是理念層次,在實現(xiàn)層面很失敗。另外,也正是他的失誤,在批判EJB的基礎上發(fā)展起Spring,給開發(fā)人員帶來一股新風。

    Feedback

    # re: EJB(EJB1和EJB2)到底有什么問題  回復  更多評論   

    2010-07-17 13:55 by rox
    感覺EJB是一個承上啟下的產(chǎn)品,也是個失敗品。
    cobar、com+
    ejb
    .net spring

    # re: EJB(EJB1和EJB2)到底有什么問題  回復  更多評論   

    2010-07-18 19:54 by Agrael
    EJB3已經(jīng)脫胎換骨了,在國外還是很多人使用的,只是在中國,很多程序員人云亦云,一個說EJB不好,即便沒用過,也說EJB不好。

    # re: EJB(EJB1和EJB2)到底有什么問題[未登錄]  回復  更多評論   

    2010-07-19 08:51 by aa
    ejb3 用著還行

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 无码国产亚洲日韩国精品视频一区二区三区| 四虎成年永久免费网站| 永久免费视频v片www| 亚洲国产日韩视频观看| 国产成人免费网站| 亚洲中文字幕无码久久| 毛片免费视频在线观看| 亚洲国产精品18久久久久久| 四色在线精品免费观看| 亚洲AV噜噜一区二区三区| 国产精品公开免费视频| 人妻仑刮八A级毛片免费看| 精品国产日韩亚洲一区| 久久免费99精品国产自在现线| 亚洲欧洲精品成人久久奇米网| 一级有奶水毛片免费看| 久久精品国产精品亚洲艾 | 亚洲一区精彩视频| 国产精品美女午夜爽爽爽免费| 亚洲国产欧美国产综合一区| 免费a级毛片永久免费| 成年免费a级毛片免费看无码| 亚洲高清无在码在线无弹窗| 久久精品免费一区二区| 色在线亚洲视频www| 日本免费福利视频| 和老外3p爽粗大免费视频| 亚洲av无码不卡一区二区三区 | 热99RE久久精品这里都是精品免费| 情人伊人久久综合亚洲| 亚洲视频免费在线播放| 亚洲精品国产suv一区88| AV在线亚洲男人的天堂| 在线观看免费中文视频| 自拍偷自拍亚洲精品播放| 亚洲精品乱码久久久久66| 中国在线观看免费国语版| 亚欧洲精品在线视频免费观看| 亚洲视频.com| 免费观看日本污污ww网站一区| 三级黄色片免费看|