欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

TriActive JDO 實(shí)用簡(jiǎn)介

系統(tǒng) 1692 0
TriActive JDO (TJDO) 是 Sun Java Data Objects (JDO) 1.0 規(guī)范的一個(gè)輕型的、開(kāi)放源代碼的實(shí)現(xiàn)。通過(guò)它,開(kāi)發(fā)人員可以將一種透明的持久性機(jī)制用于任何JDBC 兼容的數(shù)據(jù)庫(kù)和任何 Java 對(duì)象。在本文中,Java 開(kāi)發(fā)人員 Jeff Gunther 通過(guò)一個(gè)例子介紹了 TJDO,這個(gè)例子示范了如何在MySQL 數(shù)據(jù)庫(kù)中持久存儲(chǔ)域模型。除了說(shuō)明 TJDO 的特定實(shí)現(xiàn)細(xì)節(jié)之外,本文還回顧了 JDO 規(guī)范的基本概念和組件。
<!--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 平臺(tái)快速延伸到現(xiàn)代企業(yè)的每個(gè)角落,開(kāi)發(fā)人員被淹沒(méi)在新技術(shù)和新規(guī)范的縮寫(xiě)詞中,每一個(gè)都許諾解除各種 IT 病痛。即使在 Java 社區(qū)內(nèi)部,對(duì)于開(kāi)發(fā)人員和管理者來(lái)說(shuō),也同樣難以斷定哪種技術(shù)只是曇花一現(xiàn),哪種技術(shù)能夠生存下去。如果抽查一些 Java 開(kāi)發(fā)人員,詢(xún)問(wèn)他們?cè)趹?yīng)用程序中如何持久存儲(chǔ)數(shù)據(jù),您可能會(huì)得到各種不同的答案。有些答復(fù)可能是對(duì)關(guān)系數(shù)據(jù)庫(kù)使用基本的 JDBC,有些可能使用純面向?qū)ο蟮臄?shù)據(jù)庫(kù),而另一些可能在應(yīng)用程序服務(wù)器中使用 Container Managed Persistence 2.0 (CMP) 。盡管這些方案能夠而且確實(shí)為開(kāi)發(fā)人員提供了持久性服務(wù),每種技術(shù)都有各自不同的缺點(diǎn)、局限和代價(jià)。

與 Java 社區(qū)中的其他項(xiàng)目類(lèi)似,JDO 規(guī)范是通過(guò) Java Community Process 按照 Java Specification Request 12 創(chuàng)建的。JDO 架構(gòu)師的主要目標(biāo)之一是,向開(kāi)發(fā)人員提供一種透明的機(jī)制,不考慮底層數(shù)據(jù)存儲(chǔ)方式處理和操作持久信息。從一開(kāi)始,它就被設(shè)計(jì)成讓開(kāi)發(fā)人員逃避開(kāi)發(fā)持久性基礎(chǔ)設(shè)施的苦差事。因?yàn)殚_(kāi)發(fā)人員使用的通用 API 可以跨越不同的數(shù)據(jù)存儲(chǔ)進(jìn)行互操作,開(kāi)發(fā)團(tuán)隊(duì)就可以延遲決定特定項(xiàng)目將使用或支持什么樣的數(shù)據(jù)存儲(chǔ)方式。這些好處都減少了編碼的工作量,使開(kāi)發(fā)人員能夠關(guān)注項(xiàng)目的其他相關(guān)領(lǐng)域。與 Java 家族中的其他規(guī)范相似,JDO 消除了鎖定到特定供應(yīng)商的危險(xiǎn)。每個(gè)供應(yīng)商的 JDO 實(shí)現(xiàn)都提供了一套不同的支持?jǐn)?shù)據(jù)源的特性和類(lèi)型。根據(jù)項(xiàng)目的要求和預(yù)算,與其他的相比某個(gè)供應(yīng)商可能更有吸引力。

源代碼

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

在不購(gòu)買(mǎi)許可證的前提下,為了讓您有機(jī)會(huì)嘗試 JDO,我們使用了 TriActive JDO (TJDO),JDO 1.0 規(guī)范的一個(gè)輕型的、開(kāi)放源代碼的實(shí)現(xiàn)。TJDO 支持多種 JDBC 兼容的數(shù)據(jù)庫(kù)作為數(shù)據(jù)存儲(chǔ)方式。

環(huán)境要求

為了使用提供的文件對(duì) TJDO 進(jìn)行完全測(cè)試,您的環(huán)境需要滿(mǎn)足以下最低要求:

  • 安裝有 Java 2 SDK, Standard Edition 1.4 或以上版本
  • 安裝有 Apache Ant 1.5.3 或以上版本
  • 安裝有 MySQL Server 4.0.14 或以上版本

這些技術(shù)的鏈接請(qǐng)參閱 參考資料 。 注意,盡管 Ant 構(gòu)造腳本應(yīng)該是跨平臺(tái)的,這些示例類(lèi)只在 Microsoft Windows XP 上測(cè)試和驗(yàn)證過(guò)。在開(kāi)始討論一些代碼和 JDO 基礎(chǔ)之前,我們首先要安裝并配置源代碼。



安裝和配置示例代碼

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

  1. 下載 源代碼 包。
  2. 將 j-tjdo.zip 文件解壓到一個(gè)臨時(shí)目錄。
  3. 在 MySQL 環(huán)境中創(chuàng)建名為 tjdo 的數(shù)據(jù)庫(kù)
  4. 打開(kāi) common.properties 文件,修改 MySQL 鍵/值對(duì),以匹配您的環(huán)境。下面是一個(gè)例子:
                    ...
                    
    mysql.server=127.0.0.1
    mysql.database=tjdo
    mysql.user=root
    mysql.password=


使用 TJDO 的步驟

本文的基本目標(biāo)是,為您在應(yīng)用程序中開(kāi)始使用 TJDO 提供必要的知識(shí)和信息。在討論如何測(cè)試提供的示例代碼之前,我首先回顧一些使用 TJDO 所需要的一般步驟。您會(huì)發(fā)現(xiàn)許多步驟也適用于其他的 JDO 實(shí)現(xiàn)。繼續(xù)閱讀本文之前并不需要完全了解這些步驟,這只是為您將來(lái)的項(xiàng)目勾勒一個(gè)大綱。本文提供的源代碼包,在其開(kāi)發(fā)過(guò)程中經(jīng)歷了其中的每個(gè)步驟。

  1. 用普通的原 Java 對(duì)象(POJO)創(chuàng)建域模型。
  2. 創(chuàng)建支持應(yīng)用程序代碼。
  3. 編譯類(lèi)。
  4. 創(chuàng)建 XML 元數(shù)據(jù)文件,描述域類(lèi)的持久性行為。
  5. 增強(qiáng)編譯后的類(lèi)的字節(jié)碼。
  6. 如果使用關(guān)系數(shù)據(jù)庫(kù)作為數(shù)據(jù)存儲(chǔ),創(chuàng)建適當(dāng)?shù)臄?shù)據(jù)庫(kù)架構(gòu)。

示例域模型

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


圖 1. Java 對(duì)象的 UML 圖

這些域類(lèi)和支持類(lèi)一起把數(shù)據(jù)持久存儲(chǔ)到 MySQL。

理解 JDO 概念

JAVA數(shù)據(jù)對(duì)象上機(jī)實(shí)踐 ”教程非常好地介紹了 JDO 的概念和該技術(shù)的背景。顧名思義,這篇教程也包括一些實(shí)際的動(dòng)手練習(xí),幫助開(kāi)發(fā)人員迅速掌握這種強(qiáng)大的新技術(shù)。



JDO API 基礎(chǔ)

現(xiàn)在我們已經(jīng)介紹了如何配置工作環(huán)境和基本的域模型,接下來(lái)將討論如何使用 JDO API 把這些對(duì)象及其關(guān)系持久存儲(chǔ)到 MySQL。因?yàn)楸疚闹粚?duì) JDO 和 TJDO 進(jìn)行一般性介紹,不會(huì)詳細(xì)討論 JDO API 的具體特性。如果希望進(jìn)一步了解某些組件,您可以在 參考資料 中找到 JDO 1.0 規(guī)范的鏈接。

清單 1 中的代碼片段說(shuō)明了連接 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 規(guī)范要求每個(gè) JDO 供應(yīng)商都提供一個(gè)類(lèi)實(shí)現(xiàn) PersistenceManagerFactory PersistenceManagerFactory 用于獲得 PersistenceManager 實(shí)例。 PersistenceManager 是開(kāi)發(fā)應(yīng)用程序支持代碼使用的主要接口,負(fù)責(zé)把數(shù)據(jù)持久存儲(chǔ)到 MySQL。
  • 第 7 到 10 行定義了和 MySQL 的連接細(xì)節(jié)。傳遞給該類(lèi)的每個(gè)參數(shù)都定義在 common.properties 文件中,該文件位于生成目錄的根目錄下。
  • 如果參數(shù)不存在,第 11 行要求 TJDO 在運(yùn)行時(shí)自動(dòng)在 MySQL 中創(chuàng)建支持表。
  • 第 13 到 14 行,屬性被傳遞給一個(gè)幫助器類(lèi),創(chuàng)建了一個(gè) PersistanceManagerFactory 和一個(gè) PersistanceManager
  • 第 16 到 20 行從 PersistanceManager 創(chuàng)建一個(gè) Transaction 對(duì)象并啟動(dòng)它,保證所有數(shù)據(jù)在事務(wù)級(jí)上是一致的。

清單 2 說(shuō)明了操作和用數(shù)據(jù)填充的域模型。首先要?jiǎng)?chuàng)建一個(gè) Location 對(duì)象,然后創(chuàng)建兩個(gè)雇員: 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 的優(yōu)美之處。清單 2 中創(chuàng)建的每個(gè)對(duì)象傳遞給 PersistanceManager makePersistent 函數(shù)。僅此而已。魔術(shù)般地,所有數(shù)據(jù)都被添加到數(shù)據(jù)庫(kù)中。您完全不需要擔(dān)心任何 SQL INSERT 語(yǔ)句、數(shù)據(jù)庫(kù)連接或者關(guān)系表。TJDO 全部完成了取得對(duì)象和向數(shù)據(jù)庫(kù)插入數(shù)據(jù)的工作。


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


創(chuàng)建 XML 元數(shù)據(jù)文件

為了把支持應(yīng)用程序代碼和域模型結(jié)合起來(lái),首先要?jiǎng)?chuàng)建一個(gè) XML 元數(shù)據(jù)文件,描述具有持久性能力的類(lèi)。在字節(jié)碼增強(qiáng)過(guò)程中和運(yùn)行期間將使用這些文件。必須為每個(gè)類(lèi)創(chuàng)建名為 <類(lèi)名>.jdo 的文件。清單 4 給出了這個(gè)域模型中所用的 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>

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

  • 第 6 到 23 行定義了類(lèi)屬性和適當(dāng)?shù)淖侄卧亍n?lèi)元素的第二個(gè)屬性稱(chēng)為 identity-type 。TJDO 只支持 datastore 作為它的 identity 類(lèi)型。
  • 第 7 到 10 行定義了一個(gè)集合字段。這個(gè)字段用于存儲(chǔ)在特定辦公地點(diǎn)工作的雇員。集合元素的 element-type 屬性定義存儲(chǔ)在集合中的類(lèi)的類(lèi)型。
  • 第 11 到 22 行定義各種字符串字段,TJDO 使用 extension 元素確定 MySQL 表的屬性。

關(guān)于 JDO 元數(shù)據(jù)文件各種元素和屬性的更多信息,請(qǐng)參閱 參考資料


生成、改進(jìn)和測(cè)試示例代碼

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

  1. 檢查 MySQL 數(shù)據(jù)庫(kù)服務(wù)器中是否已經(jīng)建立了稱(chēng)為 tjdo 的數(shù)據(jù)庫(kù)。
  2. 在解壓源代碼的目錄中鍵入 ant clean 以清理環(huán)境。
  3. 鍵入 ant 啟動(dòng)生成過(guò)程。

如果環(huán)境滿(mǎn)足要求并且配置正確,您將看到與清單 5 類(lèi)似的結(jié)果:


清單 5. 生成過(guò)程成功地輸出結(jié)果
            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 測(cè)試給出的代碼。如果環(huán)境設(shè)置正確,MySQL 中的 tjdo 數(shù)據(jù)庫(kù)將包含所有的 Location Developer Manager 數(shù)據(jù)。


結(jié)束語(yǔ)

TJDO 是 Sun Java Data Objects (JDO) 1.0 規(guī)范的一個(gè)開(kāi)放源代碼的實(shí)現(xiàn),為開(kāi)發(fā)人員提供了一種很棒的方式,無(wú)論底層數(shù)據(jù)存儲(chǔ)如何都可以透明地持久存儲(chǔ)數(shù)據(jù)。盡管 JDO 規(guī)范的發(fā)展還剛剛起步,它已經(jīng)填補(bǔ)了 Java 社區(qū)中的一個(gè)空白。JDO 實(shí)現(xiàn)(比如 TJDO)把關(guān)系數(shù)據(jù)庫(kù)和面向?qū)ο蟮?Java 語(yǔ)言相結(jié)合,為開(kāi)發(fā)人員提供了一個(gè)現(xiàn)在就可以使用的功能強(qiáng)大的工具。為了幫助您完成這項(xiàng)任務(wù),示例程序包提供了一個(gè)生成和打包的框架,可用于把 TJDO 合并到您的項(xiàng)目中。



參考資料



關(guān)于作者

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

TriActive JDO 實(shí)用簡(jiǎn)介


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 成人年鲁鲁在线观看视频 | 奇米影视第七色 | 免费观看视频91 | 狠狠干狠狠操 | 欧美综合国产精品久久丁香 | 狠狠躁日日躁夜夜躁A片小说按摩 | 超碰国产在线 | 久久99国产亚洲精品观看 | 色狠狠色综合吹潮 | 91免费观看视频 | 日韩男女做性高清在线观看 | 欧美精品国产第一区二区 | 少妇特黄a一区二区三区88av | 免费网站看av片 | 97风流梦电影 | 欧美国产精品一区二区 | 精品日韩视频 | 黄色三级视频网站 | 亚洲一视频 | 小明看片成人永久在线观看 | 欧美日本一道本 | 天天看天天干 | 成人黄色一级视频 | 欧美伊人久久综合网 | 午夜精品久久久 | 精品一区二区三区在线观看视频 | 在线成人 | 亚洲综合一二三区 | a在线观看网站 | 亚洲男人天堂网 | 在线一级片 | 免费观看国产大片资源视频 | 亚洲精品小视频 | 性香港xxxxx免费视频播放 | 国产成人视屏 | 欧美日韩色综合网站 | 99久久精品免费看国产免费 | 欧美成人免费全网站大片 | 二区三区在线 | 亚洲精品久久久久久一区二区 | 国产人妻人伦精品潘金莲 |