Java 數據對象(JDO)介紹(一)

<script language=javascript>showbanner(6,6);</script> <script type=text/javascript>google_ad_client ="pub-2141342037947367";google_ad_width = 120;google_ad_height =240;google_ad_format = "120x240_as";google_ad_channel="3662469727";google_color_border = "CCCCCC";google_color_bg ="FFFFFF";google_color_link = "000000";google_color_url ="666666";google_color_text = "333333";</script> <SCRIPT src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type=text/javascript></SCRIPT>
介紹
Java 數據對象 (JDO)  是一個存儲Java對象的規範.   它已經被JCP組織定義成JSR12規範。JDO的第一個版本在2000年6月6日提交併在2002年4月30日正式發佈1.0版本規範。
規範的兩個主要目的是提供數據處理和訪問機制的API以及允許規範的實現作爲應用服務器的一部分。 

JDO 和 JDBC
JDBC和JDO都是Java調用數據庫的APIs。區別在於,他們訪問數據存儲的具體方法不同。JDBC提供了一種非常好的機制,它可以使應用程序代碼與具體的數據庫廠商和數據庫位置無關。在大多數情況下數據存儲使用的是關係數據庫。但是當使用JDBC驅動運行在一個非關係數據庫時就不是很好了。而對於JDO來說,運行在它之下的數據庫就可以是一個關係數據庫,面向對象的數據庫或者其他完全不同的數據庫。在JDO運行於關係數據庫之上時,它可以通過JDBC很好的完成數據存儲。而這一切對於開發人員來說都是透明的,所有實現都有JDO本身來完成。

JDBC不支持面向對象的數據庫表示。JDBC數據庫表示完全圍繞關係數據庫模型。這常常導致書寫代碼時在應用程序和數據庫之間存在一箇中間層。這個層的作用也許是分解Java對象。分解Java對象的過程會對使用的對象稍作改變,這樣對象才能存儲到關係數據庫之中。同樣的必須存在一種機制來把數據庫中的記錄轉換成適當的Java對象。JDO與JDBC剛好相反,他的數據庫標示完全面向對象。這種機制並不新奇,在一些面向對象數據庫中已經使用了這種機制。
JDBC的查詢語言一般都是用SQL。JDO的查詢語言看起來與Java更接近。使用JDO無需再專門學習一種查詢語言比如SQL。如果你會用Java那麼你就能夠使用JDO的查詢語言。 

JDO實現JDO規範定義了JDO實現的接口已經JDO實現的內容。SUN提供了一個JDO規範的參考實現,但是在2002年5月份發佈的版本中它並沒有完全實現規範中所要求的內容。還有衆多的廠商提供的JDO實現可以使用。在下面的表格中列出了一部分。 

廠商 產品 
SolarMetric Kodo JDO  
Signsoft intelliBO  
Poet FastObjects  

API
javax.jdo.spi.PersistenceCapable
任何被JDO實現控制的類都必須擴展PersistenceCapable接口。任何擴展PersistenceCapable接口的類的實例都可以看作是一個“JDO實例”。這個接口定義了JDO實現使用的方法來控制類的實例。 

    public abstract javax.jdo.PersistenceManager jdoGetPersistenceManager();
    public abstract void jdoReplaceStateManager(javax.jdo.spi.StateManager) 
            throws SecurityException;
    public abstract void jdoProvideField(int);
    public abstract void jdoProvideFields(int[]);
    public abstract void jdoReplaceField(int);
    public abstract void jdoReplaceFields(int[]);
    public abstract void jdoReplaceFlags();
    public abstract void jdoCopyFields(Object, int[]);
    public abstract void jdoMakeDirty(String);
    public abstract Object jdoGetObjectId();
    public abstract Object jdoGetTransactionalObjectId();
    public abstract boolean jdoIsDirty();
    public abstract boolean jdoIsTransactional();
    public abstract boolean jdoIsPersistent();
    public abstract boolean jdoIsNew();
    public abstract boolean jdoIsDeleted();
    public abstract javax.jdo.spi.PersistenceCapable 
            jdoNewInstance(javax.jdo.spi.StateManager);
    public abstract javax.jdo.spi.PersistenceCapable 
            jdoNewInstance(javax.jdo.spi.StateManager, Object);
    public abstract Object jdoNewObjectIdInstance();
    public abstract Object jdoNewObjectIdInstance(String);
    public abstract void jdoCopyKeyFieldsToObjectId(Object);
    public abstract void jdoCopyKeyFieldsToObjectId(
            javax.jdo.spi.PersistenceCapable.ObjectIdFieldSupplier, Object);
    public abstract void jdoCopyKeyFieldsFromObjectId(
            javax.jdo.spi.PersistenceCapable.ObjectIdFieldConsumer, Object);
    
通常會有一個由JDO實現廠商提供的工具來完成普通的Java類到“JDO實例”類的轉化。這個工具可能通過不同的方法來實現。第一種方法是通過字節碼增強器來實現。一個JDO字節碼增強器把普通的Java類轉換成“JDO實例”類的過程就是把擴展PersistenceCapable接口的方法的代碼加到類中。第二種方法是使用一個代碼生成器,它解析現有的普通Java代碼然後輸出一個擴展了PersistenceCapable接口的新版本的代碼。如果通過手工方式來擴展這個接口是沒有好處的。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章