各位好,這次我們來聊聊jdo. jdo的全名是Java Data Object, 是JSR編號12的規格,這個規格的目的是在提供Object/Relational 的mapping,當然這不是唯一一個做O/R mapping的規格,只是 小弟在前年開過JDBC方面的課程,當時在準備教材的過程中,就有 看到這一份規格的草案,所以會特別感興趣,最近花了一些時間 來玩玩jdo的一些implementation,所以就寫了一些心得。 其實jdo這個東西和Entity Bean是常常被拿來做比較的,因為兩者 都提供了一個使用者與資料儲存媒體之間的一個中繼層,使用者 直接操作的是一個代表資料的物件,當使用者在物件上做操作(新增、 修改等等)的時候,從物件到儲存媒體之間這一段並不需要使用者 像以前一樣透過I/O操作或資料庫操作來處理,而是有一個service provider 來負責這個動作,這樣的做法除了大大的減低程式的複雜度之外, 更重要的是程式的可攜性會大幅度的增加。當然,service provider的好壞 就有相當大的影響。由於我在學習jdo的時候用的是ibm的lido這個 implementation,所以之後的敘述會以lido的操作為主。 在jdo裡面,最重要的觀念是enhancement,由使用者自行撰寫的 資料物件,如果要能由jdo service provider(實際上稱為persistence manager) 自動serialize和deserialize,必須要符合某些特定的interface,但是這樣的做法 會要求使用者改寫原有的原始碼,比較麻煩,而採用enhancement的做法, 就不需要原始碼,而是直接針對bytecode修改,這個enhancement的工具 通常由implementation的提供廠商來提供。這個時候通常還要提供一個meta data file,最簡單的寫法是像這樣: 上面的例子是告訴enhancement工具我們要處理的是school.Course這個類別 產生的資料物件,當然school.Course這個class必須在classpath裡面才行。 接著要建立資料的schema,通常也是使用implementation的提供廠商 所提供的工具,同時也要撰寫一個property檔案,這個檔案的內容看各別 的implementation不同而不同,lido的寫法是像這樣: ------------------------------------------------------------------------------ # jdo standard properties javax.jdo.option.connectionURL=jdbc:hsqldb:hsql://localhost javax.jdo.option.connectionDriverName=org.hsqldb.jdbcDriver javax.jdo.option.connectionUserName=userName javax.jdo.option.connectionPassword=passWord javax.jdo.option.msWait=5 javax.jdo.option.multithreaded=false javax.jdo.option.optimistic=false javax.jdo.option.retainValues=false javax.jdo.option.restoreValues=true javax.jdo.option.nontransactionalRead=true javax.jdo.option.nontransactionalWrite=true javax.jdo.option.ignoreCache=false # set to PM, CACHE, or SQL to have some traces # ex: #lido.trace=SQL,DUMP,CACHE # set the Statement pool size lido.sql.poolsize=10 lido.cache.entry-type=weak # set the max batched statement # 0: no batch # default is 20 lido.sql.maxbatch=0 lido.objectpool=90 # set for PersistenceManagerFactory pool limits lido.minPool=1 lido.maxPool=10 jdo.metadata=metadata.jdo ---------------------------------------------------------------------------- 執行工具之後會利用property所指定的方式連接資料庫,並建立 所需要的schema,然後就可以開始使用jdo的api來撰寫程式。 實際撰寫程式的方法,我們再下一期再來討論!