- 浏览: 1049464 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (228)
- Web开发 (72)
- 页面相关 (43)
- java (33)
- struts (3)
- spring (14)
- oracle (16)
- mysql (13)
- SqlServer (13)
- tomact (7)
- weblogic (2)
- groovy (3)
- JFreeChart (4)
- JNative (2)
- dll (2)
- myeclipse (6)
- eclipse (10)
- svn (1)
- 正则表达式 (2)
- 设计模式 (1)
- 行业积累和感悟 (9)
- c# (2)
- maven (4)
- Node.js (1)
- 网络相关 (1)
- ftp文件上传下载 (2)
- jQuery (6)
- html5 (1)
- linux (5)
- PowerDesigner (2)
- Python (5)
- php (1)
- web service (5)
- MyBatis (4)
- 缓存相关 (3)
- Work summary (3)
- git&github (1)
- dubbo (1)
最新评论
-
fj520lb:
[flash=200,200][url][img][list] ...
Eclipse中将web项目自动发布到Tomcat webapps下 -
追梦少年蒋富贵:
楼主 你这个有问题 在 mapper 配置那段代码之后 ,不通 ...
spring+Mybatis+Ehcache整合 -
Blod123:
如果不在mapper中写 <cache type=&qu ...
spring+Mybatis+Ehcache整合 -
birllove:
看到这个终于搞好了 多谢哈
The prefix "mvc" for element "mvc:annotation-driven" is not bound 的解决方法 -
ccwwdd:
很好用。O(∩_∩)O谢谢分享!!!
ajax异步文件上传,servlet处理,含demo
转自:http://www.blogjava.net/fanyingjie/archive/2008/05/22/202107.html
目前对于J2EE应用中的Persistence Layer的解决方案很多,其中,最近从Apache Turbine中剥离处理的Torque是一个优秀的ORM(Object Relational Mapping,对象角色建模) 解决方案。
主流的Persistence Layer解决方案
随着基于J2EE应用的日益增加,出现了很多Persistence Layer的解决方案。目前主要的解决方案有以下几种:
◆ 自己编写基于JDBC API的解决方案;
◆ 采用ObjectRational Mapping(ORM)工具或者是采用面向对象的数据库(ODBMS);
◆ J2EE/Entity Bean CMP (container-managed persistence);
◆ JDO。
JDBC
在很多情况下,尤其是没有采用良好的Persistence Layer解决方案的项目中,开发人员需要自己手动编写SQL语句,同时还要考虑事务处理等问题。从而使得SQL语句散落在代码中,可维护性很差。同时,由于每个项目都要重新编写Persistence 相关的代码,所以代码可重用性差。另外要求开发人员对于SQL语法必须非常熟悉,否则调试也比较困难。
使用JDBC的解决方案,数据必须存储在关系型数据库中。
ORM或者ODBMS
为了将开发人员从SQL语句中解脱出来,产生了很多ORM的工具。这些工具都比较简单,并且提供了API支持。
由于ORM工具比较多,它们采用的技术标准都不尽相同,而且没有统一的接口,因此,它们在为开发人员提供方便的同时,也增加了一定的束缚。ORM技术是比较成熟的,而且已经有很多产品了。
而ODBMS是近几年发展起来的,并不十分成熟,而且也没有得到广泛的应用。目前,众多ODBMS厂商正在关注JDO标准并加以实施。它可能在不久的将可以得到一定的推广。
使用ORM或者ODBMS的解决方案,数据也必须存储在关系或者面向对象数据库中。
EJB CMP
在J2EE的规范中,为EJB定义了两种Persistence的解决方案:一种是BMP,另一种是CMP。其中CMP不需要将SQL语句加入到代码中。
目前,在采用J2EE的应用中,EJB CMP方式得到了广泛应用。更加引人注意的是,随着EJB规范的发展,CMP也包含了一些高级关系的内容。但是,CMP的使用比较复杂,对很多开发人员来说比较难以掌握。而且,不是在所有的情况下都适合在系统中采用EJB。
EJB提供了除了关系型数据库以外,更多的存储支持。
JDO
目前,有两种类型的JDO实现,一种是Sun的JDO,另一种是Castor JDO,这两者并不兼容。
Sun JDO是Sun Java Community Process给出的规范和参照实现。尽管JDO还有些不成熟,但它很有发展前景,而且填补了数据库编程领域的一大空白。对Java开发人员而言,JDO为对象持久性提供了第一个标准化的、完全面向对象的方法。与此领域中的其它技术相比,JDO的优点是使用起来十分简单,而且对原始的Java源代码打乱程度最小。同时,Sun JDO对数据存储类型是透明的。
而Castor JDO是一个开源项目,从1999年开始开发。在开源的JDO项目中,它提供的功能是最强大的。尽管Castor JDO开发的比较早,但是,随着Sun JDO的日益成熟,它的优势越来越小。同时,Castor JDO只提供对RDMS的支持。
从上面的分析我们可以看到,由于目前绝大多数应用系统的数据都是存储在RDMS中,而且JDO目前还不十分完善,因此,在项目中还是应该采用成熟的ORM工具。
Torque
Torque是一种ORM的工具,它最早是Apache Jakarta Turbine项目的一部分,现在已经从Turbine中剥离出来,可以独立使用。目前,它的版本是3.0。
Torque的主要特性
Torque主要包含两部分:一部分是Generator,它可以产生应用需要的所有数据库资源,包括sql和java文件;另外,Torque还提供了一个运行环境来运行产生的类。下面主要讨论Torque 的Generator。
1. 三个核心文件
要利用Torque的Generator,必须配置好以下三个文件(Torque的安装路径为$Torque_home):
◆ $Torque_home/build.properties 存储数据库系统的属性,主要有项目名称、数据库类型、数据库链接URL、Driver、用户名、密码及主机名等。Torque利用该文件的属性,建立与数据库系统的连接。
◆ $Torque_home/schema/project-schema.xml、id-table-schema.xml 其中,project-schema.xml 存储表结构信息;而id-table-schema.xml由Torque的IDBroker服务调用。
◆ $Torque_home/Torque.properties 存储应用执行时,由Torque生成的对象模型代码使用的属性值。在生成数据库系统资源的时候不需要这个文件。
2. 核心任务
利用Torque提供的Generator,可以完成下面的主要任务:
◆ sql 解析$Torque_home/schema/*.xml,生成对应的$Torque_home/src/sql/*.sql文件;
◆ doc 解析$Torque_home/schema/*.xml,生成对应的$Torque_home/src/sql/*.html文件,描述数据库结构;
◆ create-db 生成不同平台上产生数据库系统的脚本;
◆ insert-sql 执行$Torque_home/schema/*-schema.sql文件到指定数据库;
◆ sql2xml 解析$Torque_home/schema/schema.sql文件,产生Torque对应的数据库文件$Torque_home/schema/schema.xml;
◆ id-table-init-sql 根据$Torque_home/schema/id-table-schema.xml文件产生id表的初始化脚本文件;
上述任务需要ANT的支持,运行命令为$Torque_home/ant-f build-torque.xml $taskname。
3 .Peer
Peer是Torque使用的ORM工具。它比其它的工具(例如Castor、Osage等)的层次要低。开发人员需要手工编写一些代码,但是这从一定意义上增加了灵活性。
Peer利用Torque数据库Adaptor类来建立与数据库的连接。因为它支持主流的数据库系统,所以,开发人员一般情况下不需要为数据库系统编写Adaptor。
在建立了项目数据库系统的Schema文件后,运行“ant -f build-torque.xml”。Torque为Schema 中的每个表的对象模型生成四个类,例如开发人员在project-schema.xml 中定义了Author表,则Torque生成的四个类为Author、AuthorPeer、 BaseAuthor、BaseAuthorPeer等。其中Author和AuthorPeer分别是BaseAuthor和BaseAuthorPeer 的子类。这两个基类(BaseAuthor、BaseAuthorPeer)包含了Torque的生成逻辑,在开发中不应该修改。因为Torque会在再次生成对象模型时覆盖这些文件,所以系统中的业务逻辑应该放在Author和AuthorPeer类中。
在Torque中,AuthorPeer和BaseAuthorPeer称为对等类(Peer Classes),而Author和BaseAuthor称为数据对象(Data Objects)。对等类和数据对象之间的区别是:“对等类”封装数据表信息,并提供静态方法对表进行增加、删除、修改记录的操作;“数据对象”封装表中的记录信息,并对每个字段提供getters/mutators方法。
4. Criteria
Criteria是一对SQL查询标准的抽象对象,开发人员利用它来封装特定的SQL语句。Criteria实际上是SQL语句中域名和值之间的映射,默认的Comparator是等于(=)。同时,它还提供基本的Comparator,以及Join、Order by、Distinct等。更多的方法及属性,请查看org.apache.torque.util.
Criteria。
Criteria提供了一般意义上的SQL功能,如果仍然不能满足开发的需要,开发人员仍然可以手写SQL语句。
Torque在J2EE中的应用
在Apache Jakarta的项目中,有很多Web 应用构架,其中Struts、Cocoon及Turbine是比较著名的几个。
Torque作为数据库抽象的工具,虽然是从Turbine中剥离出来的,但是它可以与其它的构架很好地结合,成为Persistence层的优秀解决方案。
应用步骤
在J2EE应用,使用Torque的步骤如下:
1. 系统分析和设计,直至Business Object;
2. 按照Business Object模型,形成数据库脚本文件database.sql;
3. 编写$Torque_home/build.properties;
4.编写$Torque_home/schema/project-schema.xml及$Torque_home/schema/id-table-schema.xml,或者将database.sql拷贝到$Torque_home/schema/schema.sql, 在$Torque_home下运行ANT生成对应的schema.xml文件运行语句为:ant -f build-torque.xml sql2xml;
5. 编写$Torque_home/Torque.properties;
6. 调用Torque生成对象模型,创建数据库和相关表(利用ANT):
◆ ant -f build-torque.xml
◆ ant -f build-torque.xml create-db
◆ ant -f build-torque.xml id-table-init-sql
◆ ant -f build-torque.xml insert-sql
7. 修改*.java和*Peer.java,加入业务逻辑处理;
8. 开发J2EE应用。
注意问题
Torque在文档中提供了一个教程,可以帮助开发人员了解Torque的用法,也提供了一个完整的示例。但是,在使用Torque的J2EE开发中,还需要注意以下问题:
◆ Torque的初始化只能进行一次:Torque.init(“Torque.properties”)。如果是采用Central Controller,则在Servlet的init方法中进行初始化比较合适。
◆ 需要配置运行时的数据库连接,配置信息在Torque.properties中。下面是采用Torque的old pool、Jdbc2Pool、JNDI及ConnectionPoolDataSource等各种形式的配置文件:
## Using torque''s old pool #torque.dsfactory.MMCycle.factory=org.apache. torque.dsfactory.TorqueDataSourceFactory #torque.dsfactory.MMCycle.pool.defaultMax-Connections=10 #torque.dsfactory.MMCycle.pool.maxExpiry-Time=3600 #torque.dsfactory.MMCycle.pool.connection-WaitTimeout=10 #torque.dsfactory.MMCycle.connection.driver= com.microsoft.jdbc.sqlserver.SQLServerDriver #torque.dsfactory.MMCycle.connection.url=jdbc:microsoft: sqlserver://DB1:1433;DatabaseName=MMCycle;SelectMethod=cursor #torque.dsfactory.MMCycle.connection.user = sa #torque.dsfactory.MMCycle.connection.password = (7MOR6pa2) ## Using Jdbc2Pool #torque.dsfactory.bookstore.factory=\ # org.apache.torque.dsfactory.Jdbc2PoolDataSourceFactory #torque.dsfactory.bookstore.pool.defaultMaxActive =10 #torque.dsfactory.bookstore.pool.testOnBorrow =true #torque.dsfactory.bookstore.pool.validationQuery =SELECT 1 #torque.dsfactory.bookstore.connection.driver = org.gjt.mm.mysql.Driver #torque.dsfactory.bookstore.connection.url = jdbc:mysql://localhost:3306/torque #torque.dsfactory.bookstore.connection.user = user #torque.dsfactory.bookstore.connection.password = password ## Using jndi #torque.dsfactory.bookstore.factory=org.apache. torque.dsfactory.JndiDataSourceFactory #torque.dsfactory.bookstore. jndi.path=jdbc/bookstore #torque.dsfactory.bookstore.jndi.java.naming. factory.initial = org.apache.naming.java.java-URLContextFactory #torque.dsfactory.bookstore.jndi.java.naming. factory.url.pkgs = org.apache.naming #torque.dsfactory.bookstore.datasource.classname= org.apache.torque.pool.TorqueClassicDataSource #torque.dsfactory.bookstore.datasource. dataSourceName=jdbc/DBbookstore #torque.dsfactory.bookstore.datasource.jndi-Environment.java.naming.factory.initial =org.apache.naming.java.javaURLContextFactory #torque.dsfactory.bookstore.datasource.jndi-Environment.java.naming.factory.url.pkgs =org.apache.naming #torque.dsfactory.bookstore.datasource.default-MaxConnections=10 ## ConnectionPoolDataSource #torque.dsfactory.bookstore.factory= org.apac-he.torque.dsfactory.JndiDataSourceFactory #torque.dsfactory.bookstore.jndi.path=jdbc/DBbookstore #torque.dsfactory.bookstore.jndi.java.naming. factory.initial = org.apache.naming.java. javaURLContextFactory #torque.dsfactory.bookstore.jndi.java.naming. factory.url.pkgs = org.apache.naming #torque.dsfactory.bookstore.datasource.classname= org.apache.commons.dbcp.cpdsadapter.Driver-AdapterCPDS #torque.dsfactory.bookstore.datasource.driver = org.gjt.mm.mysql.Driver #torque.dsfactory.bookstore.datasource.url = jdbc:mysql://localhost:3306/torque #torque.dsfactory.bookstore.datasource.user = user #torque.dsfactory.bookstore.datasource.password = password |
结论
对于大多数采用RDMS作为数据存储手段的J2EE项目来说,Torque简单、易用, 是Persistence层的优秀解决方案之一。
发表评论
-
Google开源项目ZXing(二维条码编解码)简单使用(Java版)
2015-02-11 23:14 1435ZXing (pronounced "zebra ... -
Java 8新特性,让你不要再用循环了
2015-02-09 20:23 1639Java 8中的新功能特性改变了游戏规则。对Java开发者来 ... -
java如何获取当前机器ip和容器port
2014-10-15 20:25 5114获取当前机器ip: private static Str ... -
DateConverter does not support default String to 'Date' conversion.
2014-07-21 13:55 2470在使用 beanutils 工具类时,因为beanUtils ... -
Java对List的排序
2014-07-16 16:47 887第一种方法,就是list中对象实现Comparable接口 ... -
JAVA与.NET的同步DES加解密
2014-06-16 09:50 1343.NET中DES加解密 #region DESEnCo ... -
Java中文字符所占的字节数
2014-03-02 15:54 750Java语言中,中文字符所占的字节数取决于字符的编码方式,一 ... -
Java反射教程
2014-02-08 17:24 605什么是反射?反射有什 ... -
java.lang.OutOfMemoryError: PermGen space
2013-10-09 14:22 866今天还碰到了PermGen Space 的异常,搜索了一下有 ... -
Java和C#通过DES加密得到相同数据
2013-09-06 23:39 6662早晨的时候,一个朋友在MSN上问我.NET的DES算法实现 ... -
利用IKVM在C#中调Java程序(总结版)
2013-09-05 20:36 16630IKVM.NET是一个针对Mono和微软.net框架的ja ... -
3des的加、解密过程
2013-08-29 23:28 93153DES(或称为Triple DES)是三重数据加密算法(TD ... -
将给定字符串倒序
2013-08-07 08:28 1106/** * @Description: 将给定字符串倒 ... -
java十进制和二进制相互转换
2013-08-05 22:09 4890/** * @Description: 十进制 ... -
String类型转换成boolean类型
2013-08-02 01:20 9951通过boolean包装类Boolean的parseBoolea ... -
String、StringBuffer、StringBuilder的区别
2013-07-27 11:28 982是 String , StringBuffer ... -
textarea内容换行输入,存入数据库,取出如何解析
2013-07-12 23:46 6910从数据库中取出来之后,我们要通过程序的split(&quo ... -
MD5实现加密解密
2013-04-01 21:17 1346import java.security.MessageD ... -
如何实现String型时间加一天和减一天
2013-01-21 10:23 9249增加一天和减少一天分别采用了两种方法,喜欢那种用哪种,代码 ... -
jnative在linux下对c程序的动态链接库的调用问题及解决方案
2013-01-02 23:34 1298本文参考自:http://blog.csdn.net/ ...
相关推荐
Linux-Torque是一个基于Bash shell脚本的 Transmission Daemon 图形用户界面(TUI)客户端,专为那些喜欢在命令行环境中工作但又想享受简单易用的交互式界面的Linux用户设计。Transmission是一个流行的BitTorrent...
maven-torque-plugin-3.3-rc2.jar
maven-torque-plugin-3.3.jar
maven-torque-plugin-3.2.jar
maven-torque-plugin-3.1.1.jar
maven-torque-plugin-3.2-rc2.jar
maven-torque-plugin-3.3-rc3.jar
maven-torque-plugin-3.3-rc1.jar
maven-torque-plugin-3.2-rc3.jar
maven-torque-plugin-3.2-rc1.jar
"前端开源库-torque-reference"是一个专注于扭矩参考的项目,旨在为前端工程师提供关于扭矩相关的功能和应用的知识。 **一、扭矩参考的概念** 在物理学中,扭矩(Torque)是指使物体发生转动的力矩,而在软件开发...
同时,Torque3D的社区活跃,有大量的教程、示例代码和插件资源,方便开发者解决问题和提升开发效率。 总的来说,Torque3D是一个功能强大且灵活的3D游戏开发平台,无论你是新手还是经验丰富的开发者,都能从中受益。...
**标题与描述解析** ...总结,Torque2D是一个强大且灵活的2D游戏开发工具,利用C++的优势,提供跨平台的解决方案。通过开源社区的支持,开发者可以获得丰富的资源和社区帮助,加速游戏的开发进程。
根据提供的文件信息,“dive-into-torque.pdf”主要探讨了与Torque相关的技术细节。Torque在这里指的是一种用于构建高效、灵活的JavaScript引擎的技术框架。以下将根据标题、描述、标签以及部分内容来深入分析并提取...
### 3D游戏引擎编程-Torque #### 引言 3D游戏引擎编程-Torque教程旨在引导初学者了解和掌握Torque游戏引擎的基础知识及应用技巧。本教程不仅适合那些希望独立开发3D游戏的个人开发者,也适用于游戏开发团队中的技术...
手机使用的通过蓝牙读取汽车OBD信息程序
扭矩测量是一门精确的技术,它对于确保机械设备运行的安全性和可靠性至关重要。在各种工业应用中,测量扭矩可以涉及到多个方面,包括扭矩的计算、测量方法、扭矩传感器的结构、信号传输方式、测量系统的选择、使用...
《Torque3D游戏开发实战指南》英文版.pdf 这本书主要涵盖了使用Torque3D引擎进行游戏开发的各种技术和策略。Torque3D是一款强大的、开源的游戏开发引擎,它提供了丰富的功能,让开发者能够快速构建2D和3D游戏。本书...