kodojdo指南第七章

第七章 PersistenceManagerFactory

PersistenceManagerFactory 創建PersistenceManager實例以供應用程序使用.它允許你配置數據連接方

式和指定所創建的PersistenceManager的默認設置.你也可以通過它在編程中獲知你當前廠商支持的JDO選項

.使你能使用產品的全部特性來最優化你的程序.

7.1. 獲得PersistenceManagerFactory

  JDO廠商實現PersistenceManagerFactory 時也許支持公開的構造函數,但推薦你使用JDOHelper的

getPersistenceManagerFactory 方法來獲得PersistenceManagerFactory方法.這個方法的屬性參數提

供了工廠的配置信息.從getPersistenceManagerFactory 返回的PersistenceManagerFactory 對象是"

冰凍的",試圖改變它的屬性設置會導致JDOUserException.這是因爲返回的工廠可能來自連接池,和其他應用

程序組建共享.
  JDO要求具體的PersistenceManagerFactory 類實現Serializable 接口.這允許你創建和配置

PersistenceManagerFactory,然後序列化到文件或者存儲到JNDI樹供日後取出和使用.

7.2. PersistenceManagerFactory 屬性

  多數PersistenceManagerFactory 接口包含JAVA BEAN風格的getter 和setter方法來讀取和設置屬性

.這些屬性按照功能可以分爲兩類:數據連接配置,默認持久化管理者和事務選項.

  下面章節介紹了每一種屬性,許多可以通過傳給getPersistenceManagerFactory 方法的屬性參數來設置

.這是一種情況.在方法聲明後列出了屬性的配置代碼.
 

7.2.1. 連接配置
  使用下面的屬性告訴JDO如何連接你的數據庫

1)指定數據連接的用戶名

2)指定數據連接的密碼

3)數據連接的URL

4)數據連接的驅動類名稱

5)連接工廠的JNDI位置用來取得數據連接.這個屬性會覆蓋上面列出的數據連接屬性.

  連接工廠可以取得連接.這個屬性覆蓋所有其他的數據連接屬性,包括連接工廠名稱.工廠的準確類型是和具

體實現相關的,許多JDO實現品要求標準JAVA連接器體系連接工廠(JCA).在JDBC層上實現的JDO要求給出JDBC

數據源,其他的實現品會使用其他的工廠類型.

  在一個受管制的環境,從主要連接工廠取得的連接會自動加入到正在進行的任一全局事務.JDO會要求一個另

外沒有配置爲參與全局事務的連接工廠.例如,Kodo默認的數據存儲標識生成算法要求一個自身的非管制事務.

工廠的JNDI位置可以在這個屬性中指定.


7.2.2. 默認的PersistenceManager 和事務

  下面的設定會作爲PersistenceManagers 和PersistenceManagerFactory生成的事務的默認屬性值.一

些實現品可能不支持所有這些屬性,如果你設置不支持屬性的值,會導致JDOUnsupportedOptionException


1)設置這個屬性爲true.這樣在你的程序裏,  PersistenceManagers 和它所管理的能持久類能被多線程的

訪問.如果屬性設爲false,那麼一些JDO實現品會通過避免同步的方式來優化性能.

2)默認值爲true以使用最優化的事務.在事務的章節我們會討論最優化事務.

3)如果這個屬性值爲true,那麼在事務提交之後,持久對象的字段值不會被清空.否則,持久字段會被清空,在下

次訪問它們的時候它們會再從數據庫中讀取值.

4)管理事務回滾時持久事務字段的行爲.如果設爲true,那麼它們的值會被設爲事務沒有開始時的值.

5)指定是否在事務外讀持久狀態.如果屬性爲false,在事務之外,任何枚舉extent, 執行查詢或者訪問非主鍵

行爲都會導致JDOUserException

6)指定是否在事務外寫持久狀態.如果設爲false,任何在事務外的修改持久字段行爲都會導致

JDOUserException
  注意事務外的更改並不會存儲到數據庫.當被修改對象一進入事務後更改就馬上被忽略.

7)這個屬性控制當執行查詢時是否考慮持久實例的更改.設爲true,則表示當前事務的更改可以忽略.這通常使

實現品可以使用數據庫的本地接口來執行查詢.如果設爲false,JDO會在執行查詢前保存數據的更改,或者在內

存中執行事務性查詢.兩者都會影響性能.


7.3. 獲得PersistenceManagers

  PersistenceManagerFactory 接口包含兩個getPersistenceManager 方法.一個版本以用戶名和密碼

設置PersistenceManager的數據連接,另一個無參,依賴於PersistenceManagerFactory的連接用戶名和連

接密碼.
兩個方法都會返回一個新構造的PersistenceManager對象或者返回連接池的一個PersistenceManager實例

.

  從PersistenceManagerFactory獲得第一個PersistenceManager 之後,工廠的配置進入"冰凍"狀態.任

何對屬性的改變都會導致JDOUserException.
 
VendorName: JDO廠商

VersionNumber: 產品版本號

The supportedOptions method returns a Collection of Strings enumerating the JDO

options supported by the implementation. The following option names are recognized:

  除了支持PersistenceManagers,PersistenceManagerFactory 還支持當前JDO實現品的元數據

.getProperties 方法返回一個屬性對象,至少包含下列關鍵字值:

  VendorName: JDO廠商
  VersionNumber: 產品版本號

  supportedOptions 方法返回一個字符串集合,列舉該JDO實現品所支持的配置選項.以下選項名是承認的:

 javax.jdo.option.TransientTransactional
 javax.jdo.option.NontransactionalRead
 javax.jdo.option.NontransactionalWrite
 javax.jdo.option.RetainValues
 javax.jdo.option.Optimistic
 javax.jdo.option.ApplicationIdentity
 javax.jdo.option.DatastoreIdentity
 javax.jdo.option.NonDurableIdentity
 javax.jdo.option.ArrayList
 javax.jdo.option.HashMap
 javax.jdo.option.Hashtable
 javax.jdo.option.LinkedList
 javax.jdo.option.TreeMap
 javax.jdo.option.TreeSet
 javax.jdo.option.Vector
 javax.jdo.option.Map
 javax.jdo.option.List
 javax.jdo.option.Array
 javax.jdo.option.NullCollection
 javax.jdo.option.ChangeApplicationIdentity
 javax.jdo.query.JDOQL

Kodo支持除javax.jdo.option.ChangeApplicationIdentity和

javax.jdo.option.NonDurableIdentity. 之外的所有選項

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章