JAVA—咖啡館

          ——?dú)g迎訪問(wèn)rogerfan的博客,常來(lái)《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗(yàn),分享JAVA帶來(lái)的快樂(lè)!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問(wèn)題請(qǐng)與我聯(lián)系。

          BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks
          網(wǎng)上關(guān)于JDO的文章已經(jīng)不少了,關(guān)于JDO的優(yōu)點(diǎn)也講了很多,我看了一些文章后,自己也研究了一段時(shí)間,忽然很想寫(xiě)一個(gè)系列文章全面的介紹一下JDO,今天先寫(xiě)下第一篇算是個(gè)開(kāi)頭。呵呵,有些內(nèi)容是我對(duì)JDO規(guī)范的理解,如果有不對(duì)的地方請(qǐng)大家指正。
            
            Java開(kāi)發(fā)人員已經(jīng)有好幾種存取數(shù)據(jù)庫(kù)的方法:序列化,JDBC,面向?qū)ο笥成涔ぞ撸瑢?duì)象數(shù)據(jù)庫(kù),以及實(shí)體EJB。那為什么還要介紹其他的存儲(chǔ)架構(gòu)呢?答案是,上面每一種實(shí)現(xiàn)存儲(chǔ)的方案都存在一定的限制。JDO正在嘗試解決這些限制。
            
            序列化 是Java建立的一種傳輸機(jī)制,它能夠把對(duì)象的信息轉(zhuǎn)換成一系列的字節(jié)碼,這些字節(jié)碼可以可以被傳輸?shù)骄W(wǎng)絡(luò)或者存儲(chǔ)到一個(gè)文件中。序列化的使用非常簡(jiǎn)單,但他還是有限制的。它必須立即存取對(duì)象的特征,而且它不適合存取大批量的數(shù)據(jù)。在它更改一個(gè)對(duì)象的屬性時(shí)如果有錯(cuò)誤發(fā)生他不能回滾錯(cuò)誤的修改,因此不適于應(yīng)用程序的數(shù)據(jù)完整性要求。多個(gè)線程或程序不能同時(shí)互不干擾的讀寫(xiě)序列化數(shù)據(jù)。所有這些不足是的序列化無(wú)法滿(mǎn)足大多數(shù)數(shù)據(jù)存儲(chǔ)要求。
            
            許多程序員使用 JDBC  API來(lái)操作關(guān)系數(shù)據(jù)庫(kù)。JDBC克服了許多序列化中存在的缺點(diǎn):它可以操作大批量的數(shù)據(jù),有確保數(shù)據(jù)一致性的機(jī)制,支持信息的并發(fā)存取,可以使用已經(jīng)非常成熟的SQL語(yǔ)言。不幸的是,JDBC使用起來(lái)并不像序列化那么簡(jiǎn)單。JDBC使用的關(guān)系范例不是被設(shè)計(jì)用于存儲(chǔ)對(duì)象的,因此,它迫使你放棄代碼中使用面向?qū)ο蟪绦虼鎯?chǔ)數(shù)據(jù)的可能。
            
            由軟件廠商創(chuàng)建的架構(gòu)可以為你實(shí)現(xiàn)對(duì)象和關(guān)系數(shù)據(jù)庫(kù)之間的映射。 這種對(duì)象-關(guān)系映射支持可以是的你專(zhuān)注于對(duì)象模型的設(shè)計(jì)而不必關(guān)心面向?qū)ο蠛完P(guān)系數(shù)據(jù)庫(kù)之間的匹配。不幸的是每一種對(duì)象-關(guān)系映射支持都有一套他自己廠商實(shí)現(xiàn)的API。你不得不使自己的代碼遷就某一個(gè)單獨(dú)廠商的實(shí)現(xiàn)。假如這個(gè)廠商提高價(jià)格或者停止對(duì)bug更改的支持,如果你想用其他的廠商實(shí)現(xiàn)架構(gòu)時(shí),你就不得不重寫(xiě)你的代碼。
            
            比對(duì)象關(guān)系數(shù)據(jù)庫(kù)映射更好的是,一些軟件廠商開(kāi)發(fā)了一種新的存儲(chǔ)對(duì)象到數(shù)據(jù)庫(kù)的方法。這種對(duì)象數(shù)據(jù)庫(kù)使用起來(lái)常常比對(duì)象關(guān)系映射軟件簡(jiǎn)單。ODMG組織成立的目的就是創(chuàng)建一個(gè)訪問(wèn)對(duì)象數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)API。一些廠商也尊崇ODMG組織的要求,因此由于廠商實(shí)現(xiàn)不同帶來(lái)的麻煩也解決了。一些公司對(duì)于從關(guān)系數(shù)據(jù)庫(kù)轉(zhuǎn)向?qū)ο髷?shù)據(jù)庫(kù)顯得猶豫不決,因?yàn)橛写罅康臄?shù)據(jù)存儲(chǔ)在傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)中。個(gè)別數(shù)據(jù)庫(kù)分析工具可以用于對(duì)象數(shù)據(jù)庫(kù),然而大量的數(shù)據(jù)存儲(chǔ)使用的仍然是關(guān)系數(shù)據(jù)庫(kù)。由于這些原因,對(duì)象數(shù)據(jù)庫(kù)被很好的利用。
            
            Java平臺(tái)的企業(yè)級(jí)應(yīng)用中引入了實(shí)體EJB。 實(shí)體EJB是一個(gè)組件,他描述了數(shù)據(jù)庫(kù)中的持久性數(shù)據(jù)信息。EJB使用類(lèi)似于“對(duì)象-關(guān)系”映射的辦法,它提供了一個(gè)持久性數(shù)據(jù)的面向?qū)ο蟮谋硎尽2煌趯?duì)象關(guān)系軟件,EJB對(duì)于關(guān)系數(shù)據(jù)庫(kù)沒(méi)有限制;它描述的持久性信息可以來(lái)自一個(gè)企業(yè)信息系統(tǒng)(EIS)或者其他的存儲(chǔ)設(shè)備。而且,EJB使用了一個(gè)嚴(yán)格標(biāo)準(zhǔn),實(shí)現(xiàn)它的廠商必須遵循這個(gè)標(biāo)準(zhǔn)。不幸的是,EJB標(biāo)準(zhǔn)在面向?qū)ο蠓矫嫔晕⒂行┣啡保热缫恍└呒?jí)的特性:繼承、多態(tài)和復(fù)合關(guān)系等。另外,EJB的代碼編寫(xiě)很復(fù)雜,而且它是一個(gè)重量級(jí)組建需要消耗應(yīng)用服務(wù)器很很多的資源來(lái)運(yùn)行。但是,EJB中的會(huì)話Bean和消息驅(qū)動(dòng)Bean有很多優(yōu)勢(shì),所以JDO規(guī)范詳細(xì)定義了JDO如何與他們進(jìn)行集成。
            
            JDO集成了很多上述持久性機(jī)制的特性,這使得在JDO中創(chuàng)建一個(gè)持久類(lèi)就像創(chuàng)建一個(gè)序列化類(lèi)一樣簡(jiǎn)單。JDO還支持批量數(shù)據(jù)的存儲(chǔ),數(shù)據(jù)一致性,并發(fā)處理和JDBC的查詢(xún)功能。就像“對(duì)象-關(guān)系”映射軟件和對(duì)象數(shù)據(jù)庫(kù)一樣,它允許使用面向?qū)ο蟮母呒?jí)概念,比如“繼承”。它避免了像EJB中實(shí)體Bean一樣必須依賴(lài)于來(lái)自廠商定義的嚴(yán)格規(guī)范的限制。像EJB一樣,JDO也不限定任何特定的后端數(shù)據(jù)庫(kù)。
            
            但是,這里還是要說(shuō)一下,世界上從來(lái)就沒(méi)有“萬(wàn)靈丹”。所以,JDO并不是對(duì)于每一個(gè)應(yīng)用程序都是有好處的。很多應(yīng)用程序完全可以使用其他更理想的存儲(chǔ)機(jī)制。
          posted on 2008-05-27 10:19 rogerfan 閱讀(352) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 【JDO學(xué)習(xí)】
          主站蜘蛛池模板: 华宁县| 江陵县| 肇源县| 思茅市| 岐山县| 民和| 文昌市| 金塔县| 河南省| 南宁市| 呈贡县| 石嘴山市| 临湘市| 老河口市| 溆浦县| 通州区| 长治市| 明水县| 奉贤区| 德钦县| 松滋市| 玉山县| 娄烦县| 紫云| 日照市| 万荣县| 屏南县| 仪征市| 通州市| 旺苍县| 尚志市| 新津县| 汝州市| 达日县| 永嘉县| 慈利县| 开江县| 梓潼县| 东乌| 大同县| 阿图什市|