kapok

          垃圾桶,嘿嘿,我藏的這么深你們還能找到啊,真牛!

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            455 隨筆 :: 0 文章 :: 76 評(píng)論 :: 0 Trackbacks
          http://dev2dev.bea.com.cn/techdoc/webplat/2004122804.htm
          窗外,一些 BMX (自行車越野賽)車手們正努力訓(xùn)練一種新特技。他們不能再把賽車摔壞了,因?yàn)樵谒麄兊木毩?xí)斜坡旁邊損壞的賽車已經(jīng)堆了三個(gè)星期了。那堆生銹扭曲的金屬讓我聯(lián)想到 Java 持久性的前景。


            Java 開發(fā)社區(qū)正在為持久性的問題傷腦筋,而且已經(jīng)持續(xù)很長的一段時(shí)間了。只要您仔細(xì)觀察,就會(huì)發(fā)現(xiàn)我們自己的那堆扭曲的金屬:
          • 面向?qū)ο髷?shù)據(jù)庫的供應(yīng)商都奄奄一息。
          • EJB 1.0 持久性很是嚇人。
          • Oracle 收購了 TopLink,震動(dòng)了關(guān)系映射市場(chǎng)。
          • 制定 JDO 規(guī)范和取得一些發(fā)展整整花費(fèi)了很長的一段時(shí)間。

            盡管如此,我們還是有理由保持樂觀。小型廠商和開放源代碼社區(qū)正在合作為 EJB 持久性模型尋找合適的替代品。

          什么是持久性?
            在深入討論之前,我們應(yīng)當(dāng)給持久性下個(gè)定義。在其最廣泛的形式中,持久性涉及到獲取臨時(shí)數(shù)據(jù)(比如內(nèi)存里的程序數(shù)據(jù))并存儲(chǔ)為更持久的形式。本文中我們將使用一種更加通用的定義:
            持久性框架將以最原始形式存在的臨時(shí)程序數(shù)據(jù)轉(zhuǎn)換成持久的數(shù)據(jù)存儲(chǔ),或執(zhí)行相反的操作。
            在我們的示例中,持久的數(shù)據(jù)存儲(chǔ)很可能是關(guān)系數(shù)據(jù)庫,而其原始形式是內(nèi)存中的對(duì)象組成的 Java 程序。持久性框架負(fù)責(zé)管理數(shù)據(jù)庫和在數(shù)據(jù)庫與對(duì)象之間建立映射。
            圍繞持久性問題發(fā)生了很多激烈的爭論,這并不會(huì)使我們驚奇。持久性本身就是一個(gè)棘手的問題。持久性框架應(yīng)當(dāng)允許關(guān)系數(shù)據(jù)庫和對(duì)象之間靈活的建立映射,使模型之間產(chǎn)生沖突。持久性框架還必須提供惟一標(biāo)識(shí),而不會(huì)產(chǎn)生瓶頸效應(yīng)。本文主要討論這兩個(gè)在 Java 中差別最大的問題。
            持久性框架在其他方面也會(huì)有差異,但是他們似乎是 Java 的主要戰(zhàn)場(chǎng)。這些是通用的持久性框架,他們各有優(yōu)缺點(diǎn)。持久性框架都在為實(shí)現(xiàn)透明性而努力,并盡可能的模仿 Java語言。它們還必須引入諸如 lazy loading 和 aggressive caching 等性能特性來彌補(bǔ)抽象化關(guān)系數(shù)據(jù)庫存取所帶來的固定管理費(fèi)用。
          四種框架
            本文將重點(diǎn)介紹四種不同的框架。每一種都在市場(chǎng)上占有一席之地。每一種也都有各自的缺點(diǎn)。我們將盡量介紹他們的優(yōu)缺點(diǎn)。

          可行的 EJB CMP
            
          如果您正在用 EJB,那么就假設(shè)您只有一種選擇:具有容器管理持久性(CMP)的 EJB 實(shí)體。由于 CMP 與 J2EE 應(yīng)用程序服務(wù)器一起出售,因而它比市場(chǎng)上的其他產(chǎn)品更有優(yōu)勢(shì)。IBM、Sun 和 BEA 為制定了強(qiáng)大的政策支持。CMP 具備其作為市場(chǎng)領(lǐng)導(dǎo)者和作為 J2EE 標(biāo)準(zhǔn)組成部分的所有優(yōu)勢(shì)。
            在很多客戶通過 CMP 實(shí)現(xiàn)了成功地解決方案的同時(shí),EJB 持久性很早就備受爭議。在 EJB 2.0 之前,規(guī)范托管遠(yuǎn)程界面,而且不能表現(xiàn)對(duì)象之間的關(guān)系。這兩個(gè)問題嚴(yán)重影響了性能,但是在 EJB 2.0 中都得到了解決?,F(xiàn)在,一些 J2EE 客戶可以高效的使用 EJB CMP,借助了合理的的性能。盡管如此,問題依舊存在。一些研究人員和客戶正確地指出,EJB 持久性模型過于復(fù)雜并且存在基礎(chǔ)缺陷:

          • 組件導(dǎo)向。EJB 實(shí)體模型是一種組件模型,具有開發(fā)復(fù)雜度。也就是說,您無法表達(dá)繼承這樣的概念。您還必須為創(chuàng)建大部分實(shí)體編寫六個(gè) class(雖然一些開發(fā)環(huán)境和諸如 Xdoclets 的工具可以幫助您完成部分工作)。
          • 粗糙。EJB 容器適合解決粗粒度(coarse-grained)問題,比如大段代碼的安全性問題。而對(duì)解決細(xì)粒度(fine-grained)問題則不是很有效,比如小段代碼的持久性問題。(BEA 的應(yīng)用程序服務(wù)器可以通過優(yōu)化減輕問題,允許您關(guān)閉部分容器服務(wù)。)
          • 靜態(tài)。EJB 查詢必須在部署時(shí)就綁定,所以您無法建立動(dòng)態(tài)查詢。

            總之,EJB 實(shí)體 bean 不能解決所有的問題,諸如復(fù)雜對(duì)象模型的持久性問題。但是,我們還擁有一些優(yōu)秀解決方案。

          專有的關(guān)系對(duì)象(OR)映射程序
            
          兩到三年之前,本文不會(huì)是一篇讓人很感興趣的文章。如果您想使用一種非常正式的 Java 持久性框架,那么就會(huì)選擇 TopLink,它是以前市場(chǎng)的主宰。TopLink 速度快,并且可以快速的建立復(fù)雜關(guān)系映射,并且提供類似EJB 的幾乎透明的 Java 模型。不過 Oracle 最近收購了 TopLink,而且 Oracle既是數(shù)據(jù)庫供應(yīng)商又是應(yīng)用程序服務(wù)器供應(yīng)商。如果您是一個(gè) WebLogic 用戶或者使用非 Oracle 的數(shù)據(jù)庫,您就會(huì)在買 TopLink 之前仔細(xì)考慮一下。對(duì)于 Oracle 的用戶來說這是個(gè)很好的產(chǎn)品,但是對(duì)于其他人來說就必須考慮 TopLink 潛在的方向性改變。當(dāng)然了,您也可以購買其他的專有的 OR 映射程序。隨之帶來的問題是您購買了一種具有較低市場(chǎng)占有率的專有產(chǎn)品。您就不得不為此付出更多的資金來培訓(xùn)員工、聘請(qǐng)經(jīng)驗(yàn)豐富的開發(fā)人員和購買配套工具。盡管用戶會(huì)尋找專有的關(guān)系映射程序之外的產(chǎn)品,TopLink 還是市場(chǎng)的主宰。

          JDO 是一個(gè)開放的替代產(chǎn)品
            1998年,推廣 JDO 的 Java Specification Request (JSR)被提交到 Java Community Process (JCP)。這是第12個(gè) JSR,完成于2002年8月份。JDO 是一種透明持久性的規(guī)范。它沒有規(guī)定數(shù)據(jù)存儲(chǔ)的類型:為面向關(guān)系數(shù)據(jù)庫和面向?qū)ο髷?shù)據(jù)庫都提供了解決方案。
            JDO 的優(yōu)點(diǎn)之一是它能很好的與大部分應(yīng)用程序服務(wù)器結(jié)合使用。例如,SolarMetric 的 KodoJDO就是一個(gè)主流的 JDO 實(shí)現(xiàn)。您可以將其與 WebLogic 相結(jié)合,您的聲明事務(wù)可以通過容器工作,正如您使用 CMP 一樣。JDO 還有一些強(qiáng)大的功能:

          • JDO 是一種標(biāo)準(zhǔn)界面。它由 JCP 正式制訂,因此它比其他大部分的專有解決方案更權(quán)威。
          • JDO 是透明的。您可以更自由地持久性 Java 對(duì)象模型。用 JDO 可以更容易地持久性抽象 class 和繼承關(guān)系。
          • JDO 具有靈活性。您可以持久性到多個(gè)數(shù)據(jù)源。您可以從多種商業(yè)實(shí)現(xiàn)中選擇,或者使用開放源代碼替代產(chǎn)品。(OJB 就很不錯(cuò)。)

            盡管 JDO 是一個(gè)快速靈活的標(biāo)準(zhǔn)持久性框架,它仍然有反對(duì)者。有些人不喜歡大部分的 JDO 實(shí)現(xiàn)通過字節(jié)碼增強(qiáng)來實(shí)現(xiàn)透明性。在使用 JDO 時(shí),Java 源文件被編譯成 class 文件。當(dāng)需要持久性 class 時(shí),為了產(chǎn)生可持久性的 class,必須通過字節(jié)碼增強(qiáng)程序來運(yùn)行這個(gè) class。一些架構(gòu)師認(rèn)為字節(jié)碼增強(qiáng)程序使構(gòu)造過程復(fù)雜化,使調(diào)試更困難。然而,我至今還沒有找到一位經(jīng)歷過這些問題的開發(fā)人員。需要注意的是,Java 字節(jié)碼是基于開放規(guī)范的,正如 sJava 語言一樣。
            JDO 的另一個(gè)缺點(diǎn)是它沒有市場(chǎng)沖擊力?;蛟S真是如此,但是 SolarMetric 最近將兩項(xiàng)強(qiáng)大的技術(shù)廉價(jià)地整合到它的 JDO 產(chǎn)品中。注意,JDO 規(guī)范的1.0版本發(fā)布只有一年。那還只是很短的時(shí)間,現(xiàn)在下結(jié)論還為時(shí)過早。
            最后,JDO 標(biāo)準(zhǔn)并沒有規(guī)定對(duì)象到關(guān)系的映射。這就意味著您的映射文件在各種實(shí)現(xiàn)之間并不是可移植的。專有解決方案也存在這個(gè)問題。

          Hibernate 是一個(gè)開源的寵兒
            
          如果您正在尋求一個(gè)優(yōu)秀的持久性框架,并且您喜歡開源軟件的話,試試 Hibernate。它是個(gè)輕量級(jí)的持久性框架,功能卻非常豐富。和 JDO 一樣,用 EJB 或者不用 EJB,它都能與 Weblogic 結(jié)合得很好。其基本優(yōu)勢(shì)如下:

          • Hibernate 使用 Java 反射機(jī)制 而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明性。
          • Hibernate 的性能非常好,因?yàn)樗莻€(gè)輕量級(jí)框架。
          • 映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫,從一對(duì)一到多對(duì)多的各種復(fù)雜關(guān)系。

            Hibernate 也有一些缺點(diǎn)。它限制您所使用的對(duì)象模型。(例如,一個(gè)持久性類不能映射到多個(gè)表)其獨(dú)有的界面和可憐的市場(chǎng)份額也讓人不安,盡管如此,Hibernate 還是以其強(qiáng)大的發(fā)展動(dòng)力減輕了這些風(fēng)險(xiǎn)。其他的開源持久性框架也有一些,不過都沒有 Hibernate 這樣有市場(chǎng)沖擊力。

          沒有明確的選擇
            當(dāng)然,您可以自己寫一個(gè)持久性框架,甚至壓根就不用。您也可能會(huì)將注意力集中在另一個(gè)興起的市場(chǎng):數(shù)據(jù)聯(lián)合(data federation),不過那是另一篇文章需要討論的。
            只要市場(chǎng)領(lǐng)頭羊出現(xiàn)一些實(shí)際的或是被察覺到的問題,混亂的情況就會(huì)隨之而來。Java 持久性也不例外。CMP是市場(chǎng)的領(lǐng)導(dǎo)者,但是 EJB 這一后盾正在開始走向某種輪回的死亡階段。而作為替代品,TopLink 面臨消退,Hibernate 則迅速上升。擁有許多優(yōu)秀供應(yīng)商的 JDO 是個(gè)好的選擇,它也開始有所作為。
            從窗戶還能看到那堆生銹的自行車,不過那幫年輕人已經(jīng)完成了一些特技。Java 行業(yè)也剛剛開始解決持久性的問題。
          參考資料

          • 此文很好地描述了持久性框架的根本問題。
          • 您可以在這里獲得關(guān)于 JDO 更深入的了解。

          關(guān)于作者
            
          Bruce 是位于德克薩斯州奧斯汀的 J2Life,LLC 公司的獨(dú)立顧問。他擁有15年軟件開發(fā)經(jīng)驗(yàn),并且是4本書的作者,包括暢銷書《Bitter Java》和最近出版的《Bitter EJB》。他擅長技術(shù)技術(shù)寫作和設(shè)計(jì)審計(jì),特別是數(shù)據(jù)。
          原文出處 http://dev2dev.bea.com/products/wlplatform81/articles/Java_Persistence.jsp

          posted on 2005-07-13 00:57 笨笨 閱讀(286) 評(píng)論(0)  編輯  收藏 所屬分類: J2EE 、ALL
          主站蜘蛛池模板: 集贤县| 桐庐县| 高青县| 平和县| 大兴区| 阿勒泰市| 潞城市| 墨玉县| 冕宁县| 合肥市| 高碑店市| 萝北县| 大新县| 阿巴嘎旗| 凤冈县| 南郑县| 冀州市| 尉氏县| 龙山县| 三原县| 孟连| 灵武市| 游戏| 苍南县| 龙江县| 锡林浩特市| 南通市| 涿州市| 康马县| 攀枝花市| 湘潭县| 杨浦区| 彩票| 岳阳市| 庄河市| 防城港市| 左权县| 苍梧县| 包头市| 儋州市| 漾濞|