• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用JDO替代CMP的應用

    發布: 2007-6-08 17:45 | 作者: 網絡轉載 | 來源: 網絡 | 查看: 45次 | 進入軟件測試論壇討論

    領測軟件測試網

     

    在大多數使用EJB的項目中,O/R Mapping一直是Java開發者關注的問題。自從有了CMP(Container Managed Persistence),數據庫映射需要做的工作輕松多了。然而,CMP仍然有不完善的地方——針對不同的應用服務器,CMP的映射描述文件不同,這在一定程度上阻礙了EJB的移植;CMP/CMR與數據表的映射關系比較復雜。經筆者測試,使用Castor JDO(Java數據對象)比使用CMP性能有很大的提高,而且能滿足大多數應用的需求。

    關于Castor JDO


    Castor JDO是一個以RDBMS為中心的開放源碼項目,雖然它與Sun的JDO有很多相似之處,但沒有完全遵循JSR規范。一些主要技術上的差異使它與Sun的JDO規范并不十分相符。每一個持久對象在Castor中都有一個被觀察的數據鎖,這意味著事物的超時和死鎖可以不被視為數據鎖定。而Sun的JDO規范卻隱藏了鎖的細節。

    內部的Castor JDO對每個事物活動的持久對象都提供一個數據鎖的拷貝(包括緩存)維護。Sun的JDO未明確要求每一個事物的每一個對象用緩存,但它含蓄地要求具有字節碼修飾者,而Castor卻不需要。

    Castor還提供一些Sun的JSR規范中沒有提到的其它特性,比如鍵值生成器(常用于ID自動生成)、長時事務支持和OQL等。

    Castor JDO和EJB CMP


    JDO和EJB Bean之間的關系很難用誰比誰更好來形容。實體Bean可以管理自身的持久性(EJB規范稱為Bean管理的持久性或BMP),也可以依賴EJB容器來管理它(稱為容器管理的持久性或CMP)。

    對于BMP,實體Bean可以用Castor JDO作為持久性機制,或者使用其它的辦法,比如直接使用JDBC作為持久性機制。對于CMP,EJB容器供應商可以在Castor JDO之上實施CMP,這樣Castor JDO就被用來作為實體Bean的持久機制。

    如果開發者需要EJB的管理生存周期、安全性、“一次開發隨意部署”的承諾和分布式商業應用等特性,那么EJB是正確的選擇。然而事實上,Castor的簡潔、開放性、更多設計上的自由度和與Castor XML整合等特性,讓人有充分的理由選擇Castor JDO。慶幸的是,我們可結合EJB和Castor JDO的長處來彌補它們各自的短處,這就是本文的目的。

    Castor JDO結合SessionBean使用


    選擇應用服務器

    目前只有JBoss有支持Castor JDO的包。Castor會在將來的版中提供對J2EE的支持。筆者使用JBoss-2.4.9作為測試。如果選擇Castor JDO完全替代CMP,可以不考慮使用支持最新CMP版本的應用服務器。

    選擇Castor JDO

    為了獲得最新版本的支持,可以選擇最新的Castor JDO包。筆者測試時使用的版本是0.9.4。

    配置JBoss

    1.修改conf/default/jboss.jcml文件

    <!-增加JDBC驅動-->
    <mbean code="org.jboss.jdbc.JdbcProvider" name="DefaultDomain:service=JdbcProvider">
         <attribute name="Drivers">oracle.jdbc. 
    driver.OracleDriver,org.hsqldb.jdbcDriver</attribute>
    </mbean>
    ...
    <!--配置JDBC數據源-->
    <mbean code="org.jboss.jdbc.XADataSourceLoader" 
    name="DefaultDomain:service=XADataSource,name=NewsDS">
        <attribute name="PoolName">NewsDS</attribute>
     <attribute name="DataSourceClass">org.jboss.pool.j 
    dbc.xa.wrapper.XADataSourceImpl</attribute>
        <attribute name="Properties"></attribute>
        <attribute name="URL">jdbc:oracle:thin:@192.168.1.7:1521:NEWS</attribute>
        <attribute name="GCMinIdleTime">1200000</attribute>
        <attribute name="JDBCUser">scott</attribute>
        <attribute name="MaxSize">10</attribute>
    <attribute name="Password">tiger</attribute>
    ...
    </mbean>
    ...
    <!-在文件最后配置CastorJDO-->
    <mbean code="org.jboss.jdo.castor.CastorJDOImpl"  
    name="DefaultDomain:service=CastorJDO,name=castortestnews">
        <attribute name="Configuration">file:../jdo/conf/database.xml</attribute>
        <attribute name="JndiName">jdo/castortestnews</attribute>
        <attribute name="LockTimeout">10000</attribute>
        <attribute name="LoggingEnabled">true</attribute>
        <attribute name="CommonClassPath">false</attribute>
    <attribute name="AutoStore">false</attribute>
    <!-Castor JDO新版本中提供連接池-->
    <attribute name="DatabasePooling">true</attribute>
    </mbean>


    2.修改conf/default/standardjaws.xml文件

    <datasource>java:/NewsDS</datasource>
    <type-mapping>Oracle8</type-mapping>
    <debug>true</debug>


    3.拷貝必要的jar包到lib/ext目錄下

    這些包包括:Castor JDO包castor-0.9.4.jar、JBoss2.4.x的Castor JDO補丁包castorjdoplugin.jar、JDBC驅動(筆者使用的是Oracle 8.1.7)classes12.zip、XML解析包xerces-J_1.4.0.jar(筆者使用的是Castor推薦的xerces版本)。

    配置Castor JDO

    增加%JBOSS_HOME%\jdo\conf\database.xml文件,文件代碼如下:

    <!DOCTYPE databases PUBLIC "-//EXOLAB/Castor JDO Configuration DTD Version 1.0//EN" 
     "http://castor.exolab.org/jdo-conf.dtd">
    <database name="news" engine="oracle">
        <!-下面的jndi name與standardjaws.xml中的datasource對應-->
        <jndi name="java:/NewsDS" />
       <!--路徑可以由讀者指定,但父目錄必須是%JBOSS_HOME%-->
        <mapping href="../jdo/conf/mapping.xml" />
    </database>


    安裝Ant

    使用Ant編譯部署EJB應用,可以下載安裝Ant的最新版本(筆者使用的是Ant-1.5.1)。

    在SessionBean中封裝JDO的方法,可以參考Castor的文檔。注意,作為參數傳遞的JDO Bean,需要實現Java串行化接口。封裝JDO的代碼如下:

    //ejbCreate方法中查詢JDO
    	ctx = new InitialContext();
    	jdo = (DataObjects) ctx.lookup("java:comp/env/jdo/CastortestnewsJDO");
      //創建新對象,增加數據表中的一行
     /**每一個查詢或更新的方法打開新的db連接,使用后關閉,不關閉的連接會導致TransactionNotInProg
    ress異常*/
    	db = jdo.getDatabase();
    	auxType.setAuxDesc(auxDesc);
    	db.create(auxType);
    	db.close();


    在其它應用服務器上使用Castor JDO

    針對不同的應用服務器,需要增加一個Castor JDO JNDI綁定的服務,為Castor JDO配置參數。例如,JBoss增加了一個JMX MBean的服務,提供了JBoss 實現Castor JDO MBean綁定服務的源碼。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: cmp 應用 jdo 替代


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>