日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

TriActive JDO 實用簡介

系統 1753 0
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 實現都提供了一套不同的支持數據源的特性和類型。根據項目的要求和預算,與其他的相比某個供應商可能更有吸引力。

源代碼

如果您和多數開發人員一樣,學習一項新技術就是一個不斷嘗試和出錯的反復過程。為了幫助您迅速進入 TJDO 的探索之旅,拓展對 JDO 的一般了解,本文提供了一個完整的構造包、一系列配置文件和示例源代碼(資源包和其他相關技術的鏈接,請參閱 參考資料 )此外,如果需要把 TJDO 集成到其他項目中,提供的這些包和 Ant 構造腳本可以幫助您完成集成工作。

在不購買許可證的前提下,為了讓您有機會嘗試 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 基礎之前,我們首先要安裝并配置源代碼。



安裝和配置示例代碼

為了安裝源代碼包,需要完成以下步驟:

  1. 下載 源代碼 包。
  2. 將 j-tjdo.zip 文件解壓到一個臨時目錄。
  3. 在 MySQL 環境中創建名為 tjdo 的數據庫
  4. 打開 common.properties 文件,修改 MySQL 鍵/值對,以匹配您的環境。下面是一個例子:
                    ...
                    
    mysql.server=127.0.0.1
    mysql.database=tjdo
    mysql.user=root
    mysql.password=


使用 TJDO 的步驟

本文的基本目標是,為您在應用程序中開始使用 TJDO 提供必要的知識和信息。在討論如何測試提供的示例代碼之前,我首先回顧一些使用 TJDO 所需要的一般步驟。您會發現許多步驟也適用于其他的 JDO 實現。繼續閱讀本文之前并不需要完全了解這些步驟,這只是為您將來的項目勾勒一個大綱。本文提供的源代碼包,在其開發過程中經歷了其中的每個步驟。

  1. 用普通的原 Java 對象(POJO)創建域模型。
  2. 創建支持應用程序代碼。
  3. 編譯類。
  4. 創建 XML 元數據文件,描述域類的持久性行為。
  5. 增強編譯后的類的字節碼。
  6. 如果使用關系數據庫作為數據存儲,創建適當的數據庫架構。

示例域模型

為了便于回顧 JDO 的基本概念和 API,示例源代碼中包含一個簡單的域模型。圖 1 表示 POJO 的 UML 圖。在這個例子中, Developer 實例代表開發軟件的某個雇員。類似地, Manager 實例代表管理其他雇員的特殊雇員, Location 實例代表雇員、開發人員和管理人員工作的物理建筑物。


圖 1. Java 對象的 UML 圖

這些域類和支持類一起把數據持久存儲到 MySQL。

理解 JDO 概念

JAVA數據對象上機實踐 ”教程非常好地介紹了 JDO 的概念和該技術的背景。顧名思義,這篇教程也包括一些實際的動手練習,幫助開發人員迅速掌握這種強大的新技術。



JDO API 基礎

現在我們已經介紹了如何配置工作環境和基本的域模型,接下來將討論如何使用 JDO API 把這些對象及其關系持久存儲到 MySQL。因為本文只對 JDO 和 TJDO 進行一般性介紹,不會詳細討論 JDO API 的具體特性。如果希望進一步了解某些組件,您可以在 參考資料 中找到 JDO 1.0 規范的鏈接。

清單 1 中的代碼片段說明了連接 JDO 和 MySQL 所需的初始屬性。


清單 1. TJDOTest.java 文件
            0 ...
            
1 public static void main(String[] args)
2 {
3 Properties props = new Properties();
4
5 props.setProperty("javax.jdo.PersistenceManagerFactoryClass",
"com.triactive.jdo.PersistenceManagerFactoryImpl");
6
7 props.setProperty("javax.jdo.option.ConnectionDriverName",
"com.mysql.jdbc.Driver");
8 props.setProperty("javax.jdo.option.ConnectionURL",
"jdbc:mysql://" + args[0] + "/tjdo?autoReconnect=yes");
9 props.setProperty("javax.jdo.option.ConnectionUserName", args[1]);
10 props.setProperty("javax.jdo.option.ConnectionPassword", args[2]);
11 props.setProperty("com.triactive.jdo.autoCreateTables", "true");
12
13 PersistenceManagerFactory pmf =
JDOHelper.getPersistenceManagerFactory(props);
14 PersistenceManager pm = pmf.getPersistenceManager();
15
16 Transaction tx = pm.currentTransaction();
17
18 try
19 {
20 tx.begin();
21 ...

讓我們看一看代碼中的主要部分:

  • 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 文件
            ...
            
Location location = new Location();
location.setName("SomeLocation");
location.setAddressLine1("1234 Some Street");
location.setAddressLine2("Suite 111");
location.setZipcode("12345");
ArrayList employees = new ArrayList();
ArrayList developers = new ArrayList();
Developer developer = new Developer();
developer.setFirstName("Jane");
developer.setLastName("Doe");
developer.setLocation(location);
employees.add(developer);
developers.add(developer);
Manager manager = new Manager();
manager.setFirstName("John");
manager.setLastName("Smith");
manager.setLocation(location);
manager.setEmployees(developers);
employees.add(manager);
location.setEmployees(employees);
...

清單 3 中的代碼片段展示了 JDO 的優美之處。清單 2 中創建的每個對象傳遞給 PersistanceManager makePersistent 函數。僅此而已。魔術般地,所有數據都被添加到數據庫中。您完全不需要擔心任何 SQL INSERT 語句、數據庫連接或者關系表。TJDO 全部完成了取得對象和向數據庫插入數據的工作。


清單 3. TJDOTest.java 文件
            ...
            
pm.makePersistent(developer);
pm.makePersistent(manager);
pm.makePersistent(location);
tx.commit();
...


創建 XML 元數據文件

為了把支持應用程序代碼和域模型結合起來,首先要創建一個 XML 元數據文件,描述具有持久性能力的類。在字節碼增強過程中和運行期間將使用這些文件。必須為每個類創建名為 <類名>.jdo 的文件。清單 4 給出了這個域模型中所用的 Location.jdo 文件:


清單 4. Location.jdo 文件
            1   <?xml version="1.0" encoding="UTF-8"?>
            
2 <!DOCTYPE jdo PUBLIC "-//Sun Microsystems, Inc.//DTD Java Data Objects
Metadata 1.0//EN"
"http://java.sun.com/dtd/jdo_1_0.dtd">
3
4 <jdo>
5 <package name="test">
6 <class name="Location" identity-type="datastore">
7 <field name="employees">
8 <collection element-type="Employee">
9 </collection>
10 </field>
11 <field name="name">
12 <extension vendor-name="triactive" key="length" value="max 50"/>
13 </field>
14 <field name="addressLine1">
15 <extension vendor-name="triactive" key="length" value="max 100"/>
16 </field>
17 <field name="addressLine2">
18 <extension vendor-name="triactive" key="length" value="max 100"/>
19 </field>
20 <field name="zipcode">
21 <extension vendor-name="triactive" key="length" value="max 5"/>
22 </field>
23 </class>
24 </package>
25 </jdo>

讓我們分析一下這個 XML 文件中的重要成分:

  • 第 6 到 23 行定義了類屬性和適當的字段元素。類元素的第二個屬性稱為 identity-type 。TJDO 只支持 datastore 作為它的 identity 類型。
  • 第 7 到 10 行定義了一個集合字段。這個字段用于存儲在特定辦公地點工作的雇員。集合元素的 element-type 屬性定義存儲在集合中的類的類型。
  • 第 11 到 22 行定義各種字符串字段,TJDO 使用 extension 元素確定 MySQL 表的屬性。

關于 JDO 元數據文件各種元素和屬性的更多信息,請參閱 參考資料


生成、改進和測試示例代碼

要編譯、生成和測試程序包,按以下步驟:

  1. 檢查 MySQL 數據庫服務器中是否已經建立了稱為 tjdo 的數據庫。
  2. 在解壓源代碼的目錄中鍵入 ant clean 以清理環境。
  3. 鍵入 ant 啟動生成過程。

如果環境滿足要求并且配置正確,您將看到與清單 5 類似的結果:


清單 5. 生成過程成功地輸出結果
            Buildfile: build.xml
            
init:
[mkdir] Created dir: D:/TJDO/tjdo/dist
compile-common:
compile-module:
[echo] Compiling ...
[mkdir] Created dir: D:/TJDO/tjdo/build
[mkdir] Created dir: D:/TJDO/tjdo/build/classes
[javac] Compiling 5 source files to D:/TJDO/tjdo/build/classes
enhance:
[copy] Copying 4 files to D:/TJDO/tjdo/build/classes
[apply] Enhancing class test.Employee
[apply] Enhancing class test.Developer
[apply] Enhancing class test.Location
[apply] Enhancing class test.Manager
[apply] done.
package-common:
[jar] Building jar: D:/TJDO/tjdo/dist/tjdo-demo.jar
default:
BUILD SUCCESSFUL
Total time: 5 seconds

鍵入 ant test 測試給出的代碼。如果環境設置正確,MySQL 中的 tjdo 數據庫將包含所有的 Location Developer Manager 數據。


結束語

TJDO 是 Sun Java Data Objects (JDO) 1.0 規范的一個開放源代碼的實現,為開發人員提供了一種很棒的方式,無論底層數據存儲如何都可以透明地持久存儲數據。盡管 JDO 規范的發展還剛剛起步,它已經填補了 Java 社區中的一個空白。JDO 實現(比如 TJDO)把關系數據庫和面向對象的 Java 語言相結合,為開發人員提供了一個現在就可以使用的功能強大的工具。為了幫助您完成這項任務,示例程序包提供了一個生成和打包的框架,可用于把 TJDO 合并到您的項目中。



參考資料



關于作者

Jeff Gunther 是 Studio B 的作者,也是 Intalgent Technologies 的總經理和創始人,這家公司是新興的軟件產品和解決方案提供商,其產品采用 Java 2 Enterprise Edition 和 Lotus Notes/Domino 平臺。Jeff 是一位應用程序和基礎設施架構師,具有架構、設計、開發、部署和維護復雜軟件系統的經驗。他豐富的經驗包括運行于多平臺上的軟件的整個生命期的開發,從 Web 服務器直到嵌入式設備。Jeff 從早期的“Mosaic 以前”時代開始就投身于因特網行業。可以通過 jeff.gunther@intalgent.com 和 Jeff 聯系。

TriActive JDO 實用簡介


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 遂昌县| 民和| 敦化市| 衡东县| 合山市| 乐平市| 余干县| 无为县| 麻栗坡县| 共和县| 兴山县| 布尔津县| 扶绥县| 武乡县| 盐源县| 正定县| 城口县| 遵义市| 界首市| 泾阳县| 体育| 通海县| 邻水| 扶余县| 慈利县| 安仁县| 嘉祥县| 民权县| 嵊泗县| 新泰市| 霍州市| 泊头市| 和硕县| 宜兰市| 六盘水市| 奉新县| 龙泉市| 贵南县| 泰宁县| 游戏| 云霄县|