熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

實體CMP-EJB和Hibernate大比拼

2013-11-23 20:13:10  來源: Java開源技術 

  JEE領域熱切的盼來了一種非常流行的開源技術它就是Hibernate這個技術被提升到JCP(一種Java規范組織)標准中去了從JEE開發者反饋的信息來看掌握Hibernate知識是所有想在JEE領域有所作為的人的必修課

  Hibernate是一個對象關系映射的技術它是一個開源並且免費的技術由SourceForge Net開發在過去有許多的類似的對象關系映射技術TopLink就是這樣的一種工具後來被Oracle所采用來自SourceForge的Hibernate和Apache的OJB也都是非常知名的對象關系工具開源並且免費JDO也要被歸為這一類

  Gavin King是Hibernate的負責人而Craig Russell 和David Jordan是JDO的主要設計者JDO是由SUN牽頭做的由於一些技術的原因今天JCP規范中的大多數成分有利於Hibernate而不是JDO從表面上它們沒有什麼區別語法和一些處理方法看起來大多數相同但是Hibernate的語法更簡單易學

  非常有趣的是Craig Russell為SUN工作而Gavin King 為JBoss工作資料表明JCP是一個非常民主的社區組織SUN並沒有強制規定一些條條款款保護自己的語言和企業級的用戶

  EJB是目前最新的版本很大程度上受到了Hibernate的影響一些讀者將EJB 和Hibernate等同起來Oracle支持EJB提議而它是jee領域中重要的數據庫公司那麼EJB前景就會很好從JEE這個名字本身就能看出它是一種企業級的技術並且EJB本質上就是針對這些企業級的應用由於存在提供的內置容器服務只有Hibernate和EJB聯合使用Hibernate才能凸顯其重要性因此Hibernate轉向到EJB是不可避免的

  EJB有三種類型的Bean一種類型是會話Bean存在於企業容器中可以被認為是一種功能Bean以RMIIIOP方式調用

  ORM工具有時和會話Bean一起使用最近主要的問題是過去ORM工具具有所有權的價格昂貴的問題但是現在可靠開源的ORM工具可以得到並且Richard Monson Haefel承認使用ORM工具替代實體bean是一種非常安全並且很有開發效率的方法

  另外一個類型實體Bean就沒有這麼走運了EJB EJB 和隨後的EJB 在關於實體Bean規范方面做了許多的改變

  我們能夠說實體bean是一個Attribute bean或者propertybean帶有setter 和getter方法以RMIIIOP方式調用存在於企業容器中定義一個Javabean的方式是Java中經常提到的話題同樣的方式也要出現在BDKEJBEntity beansStrutsJSF 和現在的Hibernate技術中所以如何定義Javabean是非常重要並且很有藝術性的

  第三中類型就是通信和MDB從企業這兩個字就看出這裡面應用程序裡面涉及了很多的用戶和並發事務RPC形式非常像打電話容易導致占線問題如果你所呼叫的人正在給別人的打電話那麼這個時候就導致了線路阻塞但是通信的樣式中如在email中至少要保證信息發送出去很明顯RPC是不合適的被誇大了有時我需要即時響應由於一些原因即使像XML web服務如果問題很嚴重的話也應該采用同新樣式MDB(消息驅動bean)事實上越來越被接受

  因此為什麼單單實體bean發現不合格並且規范老在變呢?

  實體bean有兩種類型CMP和BMP兩種

  CMP指的是容器管理持久化而BMP指的是Bean管理持久化理論上說EJB規范並沒有規定你采用何種方法來持久化你的對象你也可以簡單的將對象串行化數據庫可以是對象數據庫或者是關系對象數據庫或者是XML的但是在實際中數據庫經常是指關系數據庫使用SQL

  在CMP中編碼員只是在存儲器中處理對象創建新對象修改它們刪除它們和查詢它們所有都是在存儲器中進行的保存這些對象到關系數據庫表格中去的任務由容器自動完成編碼員不需要些任何的與SQL相關的代碼

  在BMP中編碼員不得不寫SQL語句來持久化對象到關系數據庫中

  EJB 版本的CMP適合簡單的表格和其它的表格沒有復雜的關系CMP避免對底層數據庫的引用因此它是很具有可移植的CMP除了能將數據庫持久化到關系數據庫中之外還能持久化到對象數據庫中去

  但是CMP並不是適合所有的情況如果數據庫是先前遺留的類型的話如不能使用SQL數據庫公司提供了自己的代碼來持久化並且這些代碼在我們的編程中用來持久化數據這樣的情況就不適合了

  但是真正的問題在於CMP使用了ORM概念雖然很多的實現迫切需要它並沒有暴露EJB開發商到底實現了多少規范Weblogic Oracle IBM WebSphere SUN JBoss都是實現了CMP中他們認為適合的部分使用CMP是不錯的並不僅僅因為它使得代碼可移植很容易寫如果我們采用CMP更多的原因是EJB容器能夠極大優化性能因此開發社區希望采用CMP但是發現CMP不適合復雜的任務

  雖然做了一些改進但是發現CMP不能成為最終的解決方案它裡面沒有繼承性

  雖然EJB容器所提供的服務在真正大的企業級的應用程序中是不可或缺的但是JEE陣營仍讓垂直的劃分為兩個層Web層和EJB層支持Web層的聲稱EJB的陡峭的學習曲線和容易發生錯誤的開發環境對於大多數的應用程序是不需要的他們喜歡有一個對象關系映射工具構建到JEE規范中並不是只有在EJB存在ORM任務甚至在ServletsJSP也在使用他們只不過JEE規范沒有對此做規定ORM工具如OJB JDO 和 Hibernate不只是能夠用在EJB容器還可以用在web容器和一個獨立的容器中使用這樣的工具JEE標准就會使得開發任務簡單無論是開發web層的應用程序還是ejb層的應用程序

  在嚴厲的攻擊EJB實體Bean的復雜性和性能時Rod Johnson預言在今後幾年JEE將會終止EJB的使用無論我們同不同意他的觀點我們還是很有價值去看看他對EJB實體Bean的一些批判他提議將Spring框架作為EJB容器的替代品並且這個觀念影響力正在擴大


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28136.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.