网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  用jdo替代cmp的应用     
  文章作者:未知  文章来源:水木森林  
  查看:109次  录入:管理员--2007-11-17  
 
  用jdo替代cmp的应用

在大多数使用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%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对应-->

<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绑定服务的源码。
 
 
上一篇: 用jdom简化xml编程    下一篇: 用java设计面向对象的打印程序
  相关文档
applet事件响应 11-17
如何在非中文平台上安装中文字体 11-17
mod_security保障web services的安全一(图) 11-17
查找数据表的主键 11-17
jbuilder7+weblogic7+mysql开发ejb配置 04-23
如何用 hibernate 实现分页查询 11-17
myeclipse下struts2、spring、hibernate整合 11-17
使用java来实现域名和ip地址转换的操作 11-16
用java编制internet电子白板软件 11-17
sun的java学习之旅 11-17
java布局管理器深入讨论 11-17
java技巧: 推动jbuttongroup 11-17
was 6与websphere mq6的整合 11-17
jbuilder2005实现重构之重命名 11-16
java的前世今生 11-17
java中数组之间的比较 11-17
jbuilder+webservice之实战分析 11-17
weblogic60中打包时helper类的位置 11-17
教您如何成为 ejb 专家详解系列连载之四 11-17
使用java data object(jdo)存放持久性数据 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息