<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-109  評論-187  文章-25  trackbacks-0
    ?
    Kodo是BEA公司收購SolarMetric公司后獲得的持久層框架項(xiàng)目,以前只是支持JDO標(biāo)準(zhǔn),2006年2月13日,BEA公司宣布發(fā)布Kodo項(xiàng)目的最新版本——Kodo 4.0.0 Early Access 4,Kodo 4.0.0 EA4支持EJB3和JDO2兩個標(biāo)準(zhǔn),本文中,我們將首先學(xué)習(xí)和了解KODO EJB,了解如何使用Kodo EJB完成開發(fā)工作。

    ??? 我們將按照兩種不同的情況講述如何使用Kodo EJB進(jìn)行開發(fā),一種是通過命令行工具,另外一種是在Eclipse中使用Ant任務(wù)。

    ??? 關(guān)于EJB3和JDO2的更多內(nèi)容請大家查看文章最后參考資源中的相關(guān)內(nèi)容。

    ??? 為什么使用Kodo EJB

      
    在Kodo EJB框架中,對象和關(guān)系數(shù)據(jù)庫之間的映射(對象-表,對象屬性-字段等)都是使用JDK5.0中的最新特性—注釋(Annotation)來提供,不再需要提供額外的配置文件。

    ??? 根據(jù)EJB3規(guī)范的要求,Kodo EJB除了支持在EJB容器中使用滿足重量級企業(yè)應(yīng)用的需求之外,也支持在普通Java應(yīng)用中采用,提供輕量級的持久層框架。只不過當(dāng)我們在EJB容器中使用Kodo EJB時我們需要更多的工作以便滿足EJB容器的要求。

    ??? 下載、安裝Kodo

      準(zhǔn)備工作

      
    由于Kodo是基于注釋機(jī)制的框架,我們必須使用JDK5.0完成開發(fā)工作。所以下載、安裝Kodo之前,請確保您已經(jīng)下載和安裝了JDK5.0.

    ??? 為了演示的需要,我們選擇MySQL數(shù)據(jù)庫作為持久化的目標(biāo)數(shù)據(jù)庫,請大家自己到www.mysql.com下載最新的MySQL數(shù)據(jù)庫后安裝。

    ??? 下載、安裝Kodo

      Kodo的最新版本是Kodo 4.0.0 Early Access 4,目前大家可以到http://www.solarmetric.com/去下載試用版本,下載時需要注冊,你會得到30天的License.

    ??? 將下載的壓縮文件解壓到c:/kodo4目錄下(后面將使用%KODO_HOME%來引用這個目錄),打開%KODO_HOME%/bin/kodocmd.cmd文件,將其中的KODODIR設(shè)置為您的Kodo的安裝目錄,將JDKHOME設(shè)置為Java的安裝目錄。

    ??? Kodo EJB實(shí)例

      
    上面的工作完成以后,我們就可以開發(fā)Kodo EJB應(yīng)用了,下面的例子將主要講述如何開發(fā)一個輕量級的Kodo EJB例子,支持在Java應(yīng)用中的調(diào)用,而不依賴于EJB容器,關(guān)于如何在EJB容器中配置使用Kodo EJB是一個大的課題,作者將另外撰文詳細(xì)論述。

    ??? 下面我們將用一個簡單的例子來說明創(chuàng)建Kodo EJB應(yīng)用的典型步驟,實(shí)例中我們將創(chuàng)建名為Book的持久化對象,該對象將被持久化到本地的MySQL數(shù)據(jù)庫中。

    ??? 請大家注意的是,下面的說明都基于Windows 2000操作系統(tǒng),如果您使用其它操作系統(tǒng),可能需要做出相應(yīng)的變更。

    ??? 建立工程目錄在C:盤根目下創(chuàng)建名為KodoExamples的目錄,我們所有的類文件和配置都放在這個目錄下。

    ??? 創(chuàng)建持久化類新創(chuàng)建持久化類Book,為了說明的簡單,該類只有兩個屬性:id和name,其中id是書的編號(編號由MySQL數(shù)據(jù)庫自動生成),name屬性表示書的名稱。持久化類的全部代碼、注釋和說明如下: ackage org.vivianj.kodo.examples.beans;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Inheritance;import javax.persistence.InheritanceType;import javax.persistence.Table;

    ??? /** * Book 用于表征系統(tǒng)中的書籍對象,他有兩個屬性id - 書籍編號,書籍編號將由MySQL數(shù)據(jù)庫自動生成name - 書名*/ /* Entity注釋表示該類是持久化類,的name屬性是該實(shí)體在查詢中對應(yīng)的唯一名稱,默認(rèn)是類名 */(name = "Book")

    ??? /* Table注釋的name屬性指定該持久化類對應(yīng)的數(shù)據(jù)表的名稱,默認(rèn)數(shù)據(jù)表名和類名保持一致,為了增強(qiáng)代碼的可移植性,建議大家在name屬性中使用大寫英文字母 */(name = "BOOKS")

    ??? /* Inheritance注釋的strategy確定了持久化對象和數(shù)據(jù)表之間的關(guān)系,可選擇項(xiàng)包括SINGLE_TABLE、JOINED和TABLE_PER_CLASS,我們這里采用TABLE_PER_CLASS */(strategy = InheritanceType.TABLE_PER_CLASS)

    ??? public class Book { /* Id注釋表示該字段是標(biāo)識字段 */

    ??? /* GeneratedValue注釋定義了該標(biāo)識字段的產(chǎn)生方式,我們的演示系統(tǒng)中id由MySQL數(shù)據(jù)庫字段自動生成,因此選擇GenerationType.IDENTITY */(strategy = GenerationType.IDENTITY)

    ??? /* Column注釋的name屬性定義了該類屬性對應(yīng)的數(shù)據(jù)字段的名稱,為了最大限度保持系統(tǒng)和數(shù)據(jù)庫之前的獨(dú)立性,建議使用大寫字符 */(name = "ID")

    ??? public int id;

    ??? /* Basic注釋表示該屬性是基本屬性 */

    ??? /* Column注釋的name屬性定義了該類屬性對應(yīng)的數(shù)據(jù)字段的名稱,為了最大限度保持系統(tǒng)和數(shù)據(jù)庫之前的獨(dú)立性,建議使用大寫字符 */(name = "NAME")

    ??? public String name = null;準(zhǔn)備數(shù)據(jù)庫在MySQL數(shù)據(jù)庫中新建名為Kodo的數(shù)據(jù)庫。

    ??? 準(zhǔn)備配置文件在C:KodoExamples新建META-INF目錄,隨后在該目錄下新建kodo.xml和persistence.xml文件。

    ??? a)

    ??? Kodo.xml文件中提供訪問數(shù)據(jù)庫所需要的細(xì)節(jié)信息、使用Kodo所需要的授權(quán)(License)內(nèi)容、Kodo運(yùn)行時的日志管理等。

    ??? <?xml version="1.0"?> <persistence> <persistence-unit name=""> <properties> <!—— Kodo的序列號,請輸入您下載或者購買Kodo時得到的License ——> <property name="kodo.LicenseKey" value="093D-BF3F-C10E-0F8F-0F00" />

    ??? <!—— 以下是訪問數(shù)據(jù)庫時需要提供的信息 ——> <property name="kodo.ConnectionURL" value="jdbc:mysql://localhost/kodo" /> <property name="kodo.ConnectionDriverName" value="org.gjt.mm.mysql.Driver" /> <property name="kodo.ConnectionUserName" value="root" /> <property name="kodo.ConnectionPassword" value="root" />

    ??? <!—— 設(shè)置Kodo運(yùn)行過程中的日志級別 ——> <property name="kodo.Log" value="DefaultLevel=WARN, Runtime=INFO, Tool=DEBUG" /> </properties> </persistence-unit> </persistence>

    ??? b)

    ??? persistence.xml提供EJB實(shí)體管理所需要的信息,比如確定使用哪種持久化管理器和需要被管理的持久化類。

    ??? <?xml version="1.0"?> <persistence> <persistence-unit name=""> <provider>kodo.persistence.PersistenceProviderImpl</provider> <!—— 需要被Kodo EJB管理的持久化類 ——> <class>org.vivianj.kodo.examples.beans.Book</class> </persistence-unit> </persistence>編譯持久化類打開一個命令行窗口,進(jìn)入%KODO_HOME%/bin目錄下,執(zhí)行kodocmd.cmd命令,然后將MySQL的驅(qū)動文件使用set classpath=%classpath%;c:/mysql-connector-java-3.1.8-bin.jar這樣的方式加入到CLASSPATH中。

    ??? 執(zhí)行javac C:KodoExamplesorgvivianjkodoxampleseans*.java編譯持久化類。

    ??? 加強(qiáng)(Enhancer)持久化類KODO中使用加強(qiáng)工具(Enhancer)對持久化類進(jìn)行調(diào)整,支持性能優(yōu)化、懶惰式裝載等特性。

    ??? 我們可以使用kodoc C:KodoExamplesorgvivianjkodoxampleseans*.java這樣的命令來完成持久化類的加強(qiáng)工作。

    ??? 生成數(shù)據(jù)庫表KODO中提供了專門的MappingTool工具,能夠自動的根據(jù)持久化類及他們之間的關(guān)系為我們生成創(chuàng)建數(shù)據(jù)庫所需要的SQL語句或者直接創(chuàng)建數(shù)據(jù)表。

    ??? 演示實(shí)例中,我們使用kodoc C:KodoExamplesorgvivianjkodoxampleseans*.java完成數(shù)據(jù)表的創(chuàng)建,命令執(zhí)行完成后,我們訪問MySQL中的kodo數(shù)據(jù)庫,可以看到里面已經(jīng)創(chuàng)建了名為books的數(shù)據(jù)表。

    ??? 測試一下現(xiàn)在,所有的工作都已經(jīng)完成,我們可以編寫一段代碼測試一下上面的工作是否有效,在C:kodoExamples目錄下新建Test.java,然后輸入如下內(nèi)容:

    ??? import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;import javax.persistence.PersistenceContextType;

    ??? import org.vivianj.kodo.examples.beans.Book;

    ??? public class Test {

    ??? public static void main(String[] args) { /* 獲得EJB的實(shí)體管理器 */ EntityManagerFactory emf = Persistence.createEntityManagerFactory(null);EntityManager em = emf。createEntityManager(PersistenceContextType.EXTENDED);/* 開始事務(wù) */ em.getTransaction()。begin();

    ??? /* 創(chuàng)建新的持久化對象 */ Book book = new Book();/* 設(shè)置Book對象的name屬性 */ book.name = "Kodo入門";/* 持久化對象 */ em.persist(book);

    ??? /* 結(jié)束事務(wù) */ em.getTransaction()。commit();em.close();emf.close();}

    ??? }執(zhí)行Test類,執(zhí)行完后會發(fā)現(xiàn)books表中已經(jīng)增加了一條新的記錄。

    ??? 在Eclipse中開發(fā)Kodo EJB上面的步驟都是基于命令行的,操作起來不是很方便,因此我們需要考慮將Kodo的開發(fā)過程和Eclipse開發(fā)工具進(jìn)行集成。

    ??? 分析上面開發(fā)Kodo EJB的整個過程,只有步驟 5)加強(qiáng)(Enhancer)持久化類和 6)生成數(shù)據(jù)表和字段無法在Eclipse中直接實(shí)現(xiàn),查看Kodo的幫助文檔,發(fā)現(xiàn)Kodo的發(fā)布包中已經(jīng)提供了對應(yīng)命令的Ant任務(wù)腳本,因此我們可以使用Ant來完成Eclipse和Kodo的集成。

    ??? 我們?nèi)匀皇褂蒙厦娴睦觼硌菔救绾卧贓clipse中開發(fā)Kodo EJB,我們打開Eclipse,新建立KodoExamples工程,將%KODO_HOME%ib下面所有jar文件加入到該工程的引用中,將您所使用的數(shù)據(jù)庫的JDBC驅(qū)動jar文件也加入到該工程的引用中。然后請大家參考上面的說明完成前5步工作,下面我們主要描述如何完成Ant配置文件。

    ??? 基本配置內(nèi)容在工程的當(dāng)前目錄下,新建build.xml文件,輸入如下內(nèi)容:

    ??? <project name="kodo enhance" basedir="." default="enhance"> <!— 請將value的值設(shè)置為您安裝kodo時選擇的目錄 ——> <property name="KODO_HOME" value="C:kodo4" /> <property name="src" value="." /> <property name="classes" value="." />

    ??? <!——? 準(zhǔn)備公用的CLASSPATH路徑 ?

    ??? <path id="build_classpath"> <pathelement location="" /> <!—此處請輸入數(shù)據(jù)庫驅(qū)動文件的路徑,作者使用的MySQL數(shù)據(jù)庫驅(qū)動 ?

    ??? <pathelement location="C:/ mysql-connector-java-3.1.8-bin.jar" />

    ??? <fileset dir="/lib"> <include name="**/*.jar" /> </fileset> </path> </project>編寫完成步驟 6)加強(qiáng)(Enhance)持久化類所需要的任務(wù)和這個步驟對應(yīng)的任務(wù)是kodo.ant.PCEnhancerTask類,在%KODO_HOME%srckodont下面我們可以看到PCEnhancerTask類的源代碼。首先使用taskdef加入新的任務(wù)類型kodoc,然后調(diào)用該任務(wù)完成工作。

    ??? 在build.xml文件中增加如下內(nèi)容:

    ??? <target name="enhance"> <!——? 引入新的Ant任務(wù) ?

    ??? <taskdef name="kodoc" classname="kodo.ant.PCEnhancerTask"> <!——? 引用上面步驟中定義的build_classpath作為CLASSPATH ?

    ??? <classpath refid="build_classpath" /> </taskdef>

    ??? <kodoc jdoEnhance="true"> <fileset dir="."> <!——? 指定需要被加強(qiáng)的持久化類,可以使用通配符* ?

    ??? <include name="**/Book.java" /> </fileset> <!——? 引用上面步驟中定義的build_classpath作為CLASSPATH ?

    ??? <classpath refid="build_classpath" /> </kodoc> </target>編寫完成步驟 7)生成數(shù)據(jù)庫表所需要的任務(wù)Kodo包中為這個任務(wù)提供的任務(wù)類kodo.jdbc.ant.MappingToolTask在Eclipse中執(zhí)行時有點(diǎn)問題,我將它修改了一下,主要是修改執(zhí)行該任務(wù)時使用的ClassLoader,現(xiàn)在可以滿足要求了。

    ??? 在當(dāng)前工程中新建kodo.jdbc.ant.MappingToolTask類(目錄中的類比lib文件中的類有更高的執(zhí)行級別),類的代碼可以在%KODO_HOME%/src/kodo/jdbc/ant目錄下找到。在類源代碼中找到這兩行。

    ??? if (!MappingTool.run (conf, files, flags, loader))

    ??? throw new BuildException (_loc.get ("bad-conf", "MappingToolTask"));將它修改為:if (!MappingTool.run (conf, files, flags, MappingTool.class.getClassLoader ()))

    ??? throw new BuildException (_loc.get ("bad-conf", "MappingToolTask"));

    ??? 現(xiàn)在,我們在build.xml文件中增加如下內(nèi)容就可以完成項(xiàng)目中生成持久化類對應(yīng)的數(shù)據(jù)庫表了:<target name="create-schema"> <!——? 引入新的Ant任務(wù) ?

    ??? <taskdef name="mappingtool" classname="kodo.jdbc.ant.MappingToolTask"> <!——? 引用上面步驟中定義的build_classpath作為CLASSPATH ?

    ??? <classpath refid="build_classpath" /> </taskdef>

    ??? <mappingtool action="refresh"> <!——? 引用上面步驟中定義的build_classpath作為CLASSPATH ?

    ??? <classpath refid="build_classpath" /> <fileset dir=""> <!——? 指定需要生成數(shù)據(jù)表的持久化類,可以使用通配符* ?

    ??? <include name="**/Book.java" /> </fileset> </mappingtool> </target>現(xiàn)在你可以將打開Eclipse中的Ant視圖,然后再其中執(zhí)行Enhance和create-schema任務(wù),完成加強(qiáng)持久化類和創(chuàng)建數(shù)據(jù)庫表的工作,最后,你可以使用同樣的測試代碼完成代碼的測試工作。

    ??? 總結(jié)

      Kodo是BEA最新發(fā)布的持久層框架,屏蔽了開發(fā)者訪問數(shù)據(jù)庫的眾多細(xì)節(jié),為開發(fā)者提供了更加簡單的編程模式,大大較少了開發(fā)量,目前Kodo支持EJB3和JDO2標(biāo)準(zhǔn)。BEA承諾在不久的將來將Kodo的核心代碼開源。

    ??? 本文中,作者通過一個簡單的例子,詳細(xì)地講解了如何完成Kodo EJB的開發(fā)工作,同時講解了如何在Eclipse中集成Kodo完成開發(fā)的步驟,并且解決了集成過程中還存在的一個小問題,希望能夠幫助大家更好的學(xué)習(xí)和使用Kodo.

    ??? 參考資源:

      
    EJB3規(guī)范:http://jcp.org/aboutJava/communityprocess/pfd/jsr220/index.html
      JDO2規(guī)范:http://jcp.org/aboutJava/communityprocess/pfd/jsr243/index.html
      Kodo在線文檔:http://solarmetric.com/kodo/Documentation/4.0.0EA4/docs/full/html/index.html

    ??? 作者簡介

      
    唯J族(www.vivianj.org)創(chuàng)始人,BEA 杭州User Group負(fù)責(zé)人,自由撰稿人,開源項(xiàng)目BuildFileDesigner(buildfiledesign.sourceforge.net)和V-Security(v-security.sourceforge.net)創(chuàng)始人。

    posted on 2006-04-13 09:03 小小程序程序員混口飯吃 閱讀(252) 評論(0)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 免费观看美女裸体网站| 91在线免费观看| 亚洲爆乳少妇无码激情| 33333在线亚洲| 亚洲偷偷自拍高清| 亚洲熟妇无码AV| 亚洲字幕AV一区二区三区四区| 亚洲国产精品综合久久20| 亚洲伊人久久大香线蕉啊| 亚洲喷奶水中文字幕电影| 亚洲专区一路线二| 亚洲狠狠成人综合网| 亚洲丶国产丶欧美一区二区三区| 亚洲6080yy久久无码产自国产| 国产精品亚洲专区无码不卡| 免费国产污网站在线观看不要卡| 成人嫩草影院免费观看| 大妹子影视剧在线观看全集免费| 岛国精品一区免费视频在线观看| 久草免费福利资源站| 蜜桃AV无码免费看永久| 在线a级毛片免费视频| 成人免费视频国产| 精品国产亚洲男女在线线电影| 亚洲一区二区三区自拍公司| 亚洲国产一区在线| 亚洲国产成人99精品激情在线| 亚洲欧美一区二区三区日产| 青青草97国产精品免费观看 | 亚洲色自偷自拍另类小说| 国产AV无码专区亚洲AV男同| 亚洲精品在线不卡| 亚洲精品无码高潮喷水A片软| 免费国产va在线观看| 久久国产精品2020免费m3u8| 一二三四影视在线看片免费 | 最近中文字幕大全中文字幕免费| 毛片免费在线视频| 亚洲色偷偷综合亚洲AV伊人| 久久精品国产96精品亚洲 | 亚洲精品免费视频|