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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

用JDO替代CMP的應(yīng)用

2019-11-18 15:19:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  用JDO替代CMP的應(yīng)用

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

關(guān)于Castor JDO

Castor JDO是一個(gè)以RDBMS為中心的開(kāi)放源碼項(xiàng)目,雖然它與Sun的JDO有很多相似之處,但沒(méi)有完全遵循JSR規(guī)范。一些主要技術(shù)上的差異使它與Sun的JDO規(guī)范并不十分相符。每一個(gè)持久對(duì)象在Castor中都有一個(gè)被觀察的數(shù)據(jù)鎖,這意味著事物的超時(shí)和死鎖可以不被視為數(shù)據(jù)鎖定。而Sun的JDO規(guī)范卻隱藏了鎖的細(xì)節(jié)。

內(nèi)部的Castor JDO對(duì)每個(gè)事物活動(dòng)的持久對(duì)象都提供一個(gè)數(shù)據(jù)鎖的拷貝(包括緩存)維護(hù)。Sun的JDO未明確要求每一個(gè)事物的每一個(gè)對(duì)象用緩存,但它含蓄地要求具有字節(jié)碼修飾者,而Castor卻不需要。

Castor還提供一些Sun的JSR規(guī)范中沒(méi)有提到的其它特性,比如鍵值生成器(常用于ID自動(dòng)生成)、長(zhǎng)時(shí)事務(wù)支持和OQL等。

Castor JDO和EJB CMP

JDO和EJB Bean之間的關(guān)系很難用誰(shuí)比誰(shuí)更好來(lái)形容。實(shí)體Bean可以治理自身的持久性(EJB規(guī)范稱為Bean治理的持久性或BMP),也可以依靠EJB容器來(lái)治理它(稱為容器治理的持久性或CMP)。

對(duì)于BMP,實(shí)體Bean可以用Castor JDO作為持久性機(jī)制,或者使用其它的辦法,比如直接使用JDBC作為持久性機(jī)制。對(duì)于CMP,EJB容器供給商可以在Castor JDO之上實(shí)施CMP,這樣Castor JDO就被用來(lái)作為實(shí)體Bean的持久機(jī)制。

假如開(kāi)發(fā)者需要EJB的治理生存周期、安全性、“一次開(kāi)發(fā)隨意部署”的承諾和分布式商業(yè)應(yīng)用等特性,那么EJB是正確的選擇。然而事實(shí)上,Castor的簡(jiǎn)潔、開(kāi)放性、更多設(shè)計(jì)上的自由度和與Castor xml整合等特性,讓人有充分的理由選擇Castor JDO。慶幸的是,我們可結(jié)合EJB和Castor JDO的優(yōu)點(diǎn)來(lái)彌補(bǔ)它們各自的短處,這就是本文的目的。

Castor JDO結(jié)合sessionBean使用

選擇應(yīng)用服務(wù)器

目前只有JBoss有支持Castor JDO的包。Castor會(huì)在將來(lái)的版中提供對(duì)J2EE的支持。筆者使用JBoss-2.4.9作為測(cè)試。假如選擇Castor JDO完全替代CMP,可以不考慮使用支持最新CMP版本的應(yīng)用服務(wù)器。

選擇Castor JDO

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

配置JBoss

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

<!-增加JDBC驅(qū)動(dòng)-->

<mbean code="org.jboss.jdbc.Jdbc
<attribute name="Drivers">
Oracle.jdbc.

driver.OracleDriver,org.hsqldb.jdbcDriver</attribute>

</mbean>

...

<!--配置JDBC數(shù)據(jù)源-->

<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包c(diǎn)astor-0.9.4.jar、JBoss2.4.x的Castor JDO補(bǔ)丁包c(diǎn)astorjdoplugin.jar、JDBC驅(qū)動(dòng)(筆者使用的是Oracle 8.1.7)classes12.zip、XML解析包xerces-J_1.4.0.jar(筆者使用的是Castor推薦的xerces版本)。

配置Castor JDO

增加%JBOSS_HOME%jdoconfdatabase.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對(duì)應(yīng)-->

<jndi name="java:/NewsDS" />

<!--路徑可以由讀者指定,但父目錄必須是%JBOSS_HOME%-->

<mapping href="../jdo/conf/mapping.xml" />

</database>

安裝Ant

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

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

//ejbCreate方法中查詢JDO

ctx = new InitialContext();

jdo = (DataObjects) ctx.lookup("java:comp/env/jdo/CastortestnewsJDO");

//創(chuàng)建新對(duì)象,增加數(shù)據(jù)表中的一行

/**每一個(gè)查詢或更新的方法打開(kāi)新的db連接,使用后關(guān)閉,不關(guān)閉的連接會(huì)導(dǎo)致TransactionNotInProg

ress異常*/

db = jdo.getDatabase();

auxType.setAuxDesc(auxDesc);

db.create(auxType);

db.close();

在其它應(yīng)用服務(wù)器上使用Castor JDO

針對(duì)不同的應(yīng)用服務(wù)器,需要增加一個(gè)Castor JDO JNDI綁定的服務(wù),為Castor JDO配置參數(shù)。例如,JBoss增加了一個(gè)JMX MBean的服務(wù),提供了JBoss 實(shí)現(xiàn)Castor JDO MBean綁定服務(wù)的源碼。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 织金县| 万州区| 天柱县| 凌海市| 河池市| 武安市| 贵德县| 广汉市| 尖扎县| 南川市| 东平县| 新邵县| 会理县| 延安市| 蓬溪县| 汝南县| 通榆县| 建水县| 寻乌县| 和田市| 侯马市| 平远县| 青龙| 福州市| 贵南县| 祁连县| 承德县| 黄浦区| 葫芦岛市| 修武县| 高密市| 临安市| 乌拉特后旗| 芮城县| 高雄市| 富源县| 襄汾县| 明水县| 汨罗市| 清涧县| 长春市|