TriActive JDO (TJDO) 是 Sun Java Data Objects (JDO) 1.0 規范的一個輕型的、開放源代碼的實現。通過它,開發人員可以將一種透明的持久性機制用于任何JDBC 兼容的數據庫和任何 Java 對象。在本文中,Java 開發人員 Jeff Gunther 通過一個例子介紹了 TJDO,這個例子示范了如何在MySQL 數據庫中持久存儲域模型。除了說明 TJDO 的特定實現細節之外,本文還回顧了 JDO 規范的基本概念和組件。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
隨著 Java 平臺快速延伸到現代企業的每個角落,開發人員被淹沒在新技術和新規范的縮寫詞中,每一個都許諾解除各種 IT 病痛。即使在 Java 社區內部,對于開發人員和管理者來說,也同樣難以斷定哪種技術只是曇花一現,哪種技術能夠生存下去。如果抽查一些 Java 開發人員,詢問他們在應用程序中如何持久存儲數據,您可能會得到各種不同的答案。有些答復可能是對關系數據庫使用基本的 JDBC,有些可能使用純面向對象的數據庫,而另一些可能在應用程序服務器中使用 Container Managed Persistence 2.0 (CMP) 。盡管這些方案能夠而且確實為開發人員提供了持久性服務,每種技術都有各自不同的缺點、局限和代價。
與 Java 社區中的其他項目類似,JDO 規范是通過 Java Community Process 按照 Java Specification Request 12 創建的。JDO 架構師的主要目標之一是,向開發人員提供一種透明的機制,不考慮底層數據存儲方式處理和操作持久信息。從一開始,它就被設計成讓開發人員逃避開發持久性基礎設施的苦差事。因為開發人員使用的通用 API 可以跨越不同的數據存儲進行互操作,開發團隊就可以延遲決定特定項目將使用或支持什么樣的數據存儲方式。這些好處都減少了編碼的工作量,使開發人員能夠關注項目的其他相關領域。與 Java 家族中的其他規范相似,JDO 消除了鎖定到特定供應商的危險。每個供應商的 JDO 實現都提供了一套不同的支持數據源的特性和類型。根據項目的要求和預算,與其他的相比某個供應商可能更有吸引力。
![]() |
|
在不購買許可證的前提下,為了讓您有機會嘗試 JDO,我們使用了 TriActive JDO (TJDO),JDO 1.0 規范的一個輕型的、開放源代碼的實現。TJDO 支持多種 JDBC 兼容的數據庫作為數據存儲方式。
為了使用提供的文件對 TJDO 進行完全測試,您的環境需要滿足以下最低要求:
- 安裝有 Java 2 SDK, Standard Edition 1.4 或以上版本
- 安裝有 Apache Ant 1.5.3 或以上版本
- 安裝有 MySQL Server 4.0.14 或以上版本
這些技術的鏈接請參閱 參考資料 。 注意,盡管 Ant 構造腳本應該是跨平臺的,這些示例類只在 Microsoft Windows XP 上測試和驗證過。在開始討論一些代碼和 JDO 基礎之前,我們首先要安裝并配置源代碼。
為了安裝源代碼包,需要完成以下步驟:
- 下載 源代碼 包。
- 將 j-tjdo.zip 文件解壓到一個臨時目錄。
- 在 MySQL 環境中創建名為 tjdo 的數據庫
-
打開
common.properties
文件,修改 MySQL 鍵/值對,以匹配您的環境。下面是一個例子:...
mysql.server=127.0.0.1
mysql.database=tjdo
mysql.user=root
mysql.password=
本文的基本目標是,為您在應用程序中開始使用 TJDO 提供必要的知識和信息。在討論如何測試提供的示例代碼之前,我首先回顧一些使用 TJDO 所需要的一般步驟。您會發現許多步驟也適用于其他的 JDO 實現。繼續閱讀本文之前并不需要完全了解這些步驟,這只是為您將來的項目勾勒一個大綱。本文提供的源代碼包,在其開發過程中經歷了其中的每個步驟。
- 用普通的原 Java 對象(POJO)創建域模型。
- 創建支持應用程序代碼。
- 編譯類。
- 創建 XML 元數據文件,描述域類的持久性行為。
- 增強編譯后的類的字節碼。
- 如果使用關系數據庫作為數據存儲,創建適當的數據庫架構。
為了便于回顧 JDO 的基本概念和 API,示例源代碼中包含一個簡單的域模型。圖 1 表示 POJO 的 UML 圖。在這個例子中,
Developer
實例代表開發軟件的某個雇員。類似地,
Manager
實例代表管理其他雇員的特殊雇員,
Location
實例代表雇員、開發人員和管理人員工作的物理建筑物。
圖 1. Java 對象的 UML 圖
這些域類和支持類一起把數據持久存儲到 MySQL。
![]() |
|
現在我們已經介紹了如何配置工作環境和基本的域模型,接下來將討論如何使用 JDO API 把這些對象及其關系持久存儲到 MySQL。因為本文只對 JDO 和 TJDO 進行一般性介紹,不會詳細討論 JDO API 的具體特性。如果希望進一步了解某些組件,您可以在 參考資料 中找到 JDO 1.0 規范的鏈接。
清單 1 中的代碼片段說明了連接 JDO 和 MySQL 所需的初始屬性。
清單 1. TJDOTest.java 文件
0 ... |
讓我們看一看代碼中的主要部分:
-
JDO 規范要求每個 JDO 供應商都提供一個類實現
PersistenceManagerFactory
。PersistenceManagerFactory
用于獲得PersistenceManager
實例。PersistenceManager
是開發應用程序支持代碼使用的主要接口,負責把數據持久存儲到 MySQL。
-
第 7 到 10 行定義了和 MySQL 的連接細節。傳遞給該類的每個參數都定義在
common.properties
文件中,該文件位于生成目錄的根目錄下。
- 如果參數不存在,第 11 行要求 TJDO 在運行時自動在 MySQL 中創建支持表。
-
第 13 到 14 行,屬性被傳遞給一個幫助器類,創建了一個
PersistanceManagerFactory
和一個PersistanceManager
。
-
第 16 到 20 行從
PersistanceManager
創建一個Transaction
對象并啟動它,保證所有數據在事務級上是一致的。
清單 2 說明了操作和用數據填充的域模型。首先要創建一個
Location
對象,然后創建兩個雇員:
Developer
和
Manager
。最后,我們向
Location
增加新建的雇員。
清單 2. TJDOTest.java 文件
... |
清單 3 中的代碼片段展示了 JDO 的優美之處。清單 2 中創建的每個對象傳遞給
PersistanceManager
的
makePersistent
函數。僅此而已。魔術般地,所有數據都被添加到數據庫中。您完全不需要擔心任何
SQL INSERT
語句、數據庫連接或者關系表。TJDO 全部完成了取得對象和向數據庫插入數據的工作。
清單 3. TJDOTest.java 文件
... |
為了把支持應用程序代碼和域模型結合起來,首先要創建一個 XML 元數據文件,描述具有持久性能力的類。在字節碼增強過程中和運行期間將使用這些文件。必須為每個類創建名為
<類名>.jdo
的文件。清單 4 給出了這個域模型中所用的
Location.jdo
文件:
清單 4. Location.jdo 文件
1 <?xml version="1.0" encoding="UTF-8"?> |
讓我們分析一下這個 XML 文件中的重要成分:
-
第 6 到 23 行定義了類屬性和適當的字段元素。類元素的第二個屬性稱為
identity-type
。TJDO 只支持datastore
作為它的 identity 類型。
-
第 7 到 10 行定義了一個集合字段。這個字段用于存儲在特定辦公地點工作的雇員。集合元素的
element-type
屬性定義存儲在集合中的類的類型。
- 第 11 到 22 行定義各種字符串字段,TJDO 使用 extension 元素確定 MySQL 表的屬性。
關于 JDO 元數據文件各種元素和屬性的更多信息,請參閱 參考資料 。
要編譯、生成和測試程序包,按以下步驟:
-
檢查 MySQL 數據庫服務器中是否已經建立了稱為
tjdo
的數據庫。 -
在解壓源代碼的目錄中鍵入
ant clean
以清理環境。 -
鍵入
ant
啟動生成過程。
如果環境滿足要求并且配置正確,您將看到與清單 5 類似的結果:
清單 5. 生成過程成功地輸出結果
Buildfile: build.xml |
鍵入
ant test
測試給出的代碼。如果環境設置正確,MySQL 中的
tjdo
數據庫將包含所有的
Location
、
Developer
和
Manager
數據。
TJDO 是 Sun Java Data Objects (JDO) 1.0 規范的一個開放源代碼的實現,為開發人員提供了一種很棒的方式,無論底層數據存儲如何都可以透明地持久存儲數據。盡管 JDO 規范的發展還剛剛起步,它已經填補了 Java 社區中的一個空白。JDO 實現(比如 TJDO)把關系數據庫和面向對象的 Java 語言相結合,為開發人員提供了一個現在就可以使用的功能強大的工具。為了幫助您完成這項任務,示例程序包提供了一個生成和打包的框架,可用于把 TJDO 合并到您的項目中。
-
您可以參閱本文在 developerWorks 全球站點上的
英文原文
.
-
下載本文中所用的示例
源代碼
。
-
SourceForge 上的
TJDO 項目頁
,提供了您開始使用這一 JDO 實現所需要的全部信息。
-
請參閱
Java Data Objects specification
。
-
訪問
IBM developer kits
頁面,查看 IBM 所提供的 Java 技術 SDK 列表。
-
從 Apache Software Foundation 下載
Ant 1.5.4
。
-
從 MySQL AB 下載
MySQL 4.0.14
。
-
作為 JDO 的優秀入門讀物,Paul Monday 的教程“
JAVA數據對象上機實踐
” (
developerWorks
,2002 年 7 月)是一個很好的起點。
-
JDO Central
是內容豐富的 JDO 開發者資源網站,無論是經驗豐富的開發老手還是初學者都很適合。尤其是,基于 Web 的論壇更是交流和分享 JDO 觀點的一種極好方式。
-
在
developerWorks
Java 技術專區
可以找到數百篇有關 Java 編程各個方面的文章。
![]() |
||
![]() |
Jeff Gunther 是 Studio B 的作者,也是 Intalgent Technologies 的總經理和創始人,這家公司是新興的軟件產品和解決方案提供商,其產品采用 Java 2 Enterprise Edition 和 Lotus Notes/Domino 平臺。Jeff 是一位應用程序和基礎設施架構師,具有架構、設計、開發、部署和維護復雜軟件系統的經驗。他豐富的經驗包括運行于多平臺上的軟件的整個生命期的開發,從 Web 服務器直到嵌入式設備。Jeff 從早期的“Mosaic 以前”時代開始就投身于因特網行業。可以通過 jeff.gunther@intalgent.com 和 Jeff 聯系。 |
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
