国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

Kodo EJB:符合EJB3規(guī)范的持久層框架

2024-07-21 02:14:47
字體:
供稿:網(wǎng)友
  kodo是bea公司收購solarmetric公司后獲得的持久層框架項目,以前只是支持jdo標(biāo)準(zhǔn),2006年2月13日,bea公司宣布發(fā)布kodo項目的最新版本--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是基于注釋機制的框架,我們必須使用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實例

  上面的工作完成以后,我們就可以開發(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)用的典型步驟,實例中我們將創(chuàng)建名為book的持久化對象,該對象將被持久化到本地的mysql數(shù)據(jù)庫中。

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

  1. 建立工程目錄

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

  2. 創(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屬性是該實體在查詢中對應(yīng)的唯一名稱,默認(rèn)是類名 */ (name = "book") /* table注釋的name屬性指定該持久化類對應(yīng)的數(shù)據(jù)表的名稱,默認(rèn)數(shù)據(jù)表名和類名保持一致,為了增強代碼的可移植性,建議大家在name屬性中使用大寫英文字母 */ (name = "books") /* inheritance注釋的strategy確定了持久化對象和數(shù)據(jù)表之間的關(guān)系,可選擇項包括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ù)庫之前的獨立性,建議使用大寫字符 */  (name = "id")  public int id;  /* basic注釋表示該屬性是基本屬性 */    /* column注釋的name屬性定義了該類屬性對應(yīng)的數(shù)據(jù)字段的名稱,為了最大限度保持系統(tǒng)和數(shù)據(jù)庫之前的獨立性,建議使用大寫字符 */  (name = "name")  public string name = null; 
  3. 準(zhǔn)備數(shù)據(jù)庫

      在mysql數(shù)據(jù)庫中新建名為kodo的數(shù)據(jù)庫。

  4. 準(zhǔn)備配置文件

      在c:kodoexamples新建meta-inf目錄,隨后在該目錄下新建kodo.xml和persistence.xml文件。

    a) kodo.xml文件中提供訪問數(shù)據(jù)庫所需要的細(xì)節(jié)信息、使用kodo所需要的授權(quán)(license)內(nèi)容、kodo運行時的日志管理等。 <?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運行過程中的日志級別 -->    <property name="kodo.log"     value="defaultlevel=warn, runtime=info, tool=debug" />   </properties>  </persistence-unit> </persistence> b) persistence.xml提供ejb實體管理所需要的信息,比如確定使用哪種持久化管理器和需要被管理的持久化類。 <?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>
  5. 編譯持久化類

      打開一個命令行窗口,進(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編譯持久化類。

  6. 加強(enhancer)持久化類

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

      我們可以使用kodoc c:kodoexamplesorgvivianjkodoxampleseans*.java這樣的命令來完成持久化類的加強工作。

  7. 生成數(shù)據(jù)庫表

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

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

  8. 測試一下

  現(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的實體管理器 */   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)加強(enhancer)持久化類和 6)生成數(shù)據(jù)表和字段無法在eclipse中直接實現(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配置文件。

  1. 基本配置內(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="" />   <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> 
  2. 編寫完成步驟 6)加強(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=".">     <!--  指定需要被加強的持久化類,可以使用通配符* ?     <include name="**/book.java" />    </fileset>    <!--  引用上面步驟中定義的build_classpath作為classpath ?    <classpath refid="build_classpath" />   </kodoc>  </target> 
  3. 編寫完成步驟 7)生成數(shù)據(jù)庫表所需要的任務(wù)

  kodo包中為這個任務(wù)提供的任務(wù)類kodo.jdbc.ant.mappingtooltask在eclipse中執(zhí)行時有點問題,我將它修改了一下,主要是修改執(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)容就可以完成項目中生成持久化類對應(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ù),完成加強持久化類和創(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.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 翁源县| 通辽市| 郸城县| 齐河县| 临安市| 武隆县| 晋州市| 阿克| 南岸区| 岳池县| 湄潭县| 长海县| 孟州市| 八宿县| 竹溪县| 泰州市| 兴义市| 赞皇县| 长沙县| 滦南县| 电白县| 纳雍县| 桃江县| 宁河县| 周宁县| 苍梧县| 荃湾区| 游戏| 龙山县| 永城市| 康马县| 和林格尔县| 皮山县| 宿迁市| 太保市| 淮安市| 古交市| 建平县| 嘉义县| 大城县| 新巴尔虎左旗|