`

优秀的对象角色建模解决方案-Torque

    博客分类:
  • java
 
阅读更多

转自: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层的优秀解决方案之一。

分享到:
评论

相关推荐

    嵌入式八股文面试题库资料知识宝典-深圳禾苗通信科技有限公司.zip

    嵌入式八股文面试题库资料知识宝典-深圳禾苗通信科技有限公司.zip

    Arduino UART实验例程【正点原子EPS32S3】

    Arduino UART实验例程,开发板:正点原子EPS32S3,本人主页有详细实验说明可供参考。

    电力弹簧技术在主动配电网规划与运行优化调度中的应用研究

    内容概要:本文详细探讨了电力弹簧技术在主动配电网规划及运行优化调度中的应用。首先介绍了电力弹簧技术作为智能电网调控手段的优势,如自适应性强、响应速度快、节能环保等。接着阐述了主动配电网规划的目标和策略,包括优化电网结构、提高能源利用效率和降低故障风险。随后讨论了运行优化调度的原则和方法,强调了实时监测、智能调度策略以及优化调度模型的重要性。最后通过实际案例分析展示了电力弹簧技术在提升电网稳定性、可靠性和能效方面的显著效果,展望了其广阔的应用前景。 适合人群:从事电力系统规划、运行管理的研究人员和技术人员,以及对智能电网感兴趣的学者和学生。 使用场景及目标:适用于希望深入了解电力弹簧技术及其在主动配电网规划和运行优化调度中具体应用的专业人士。目标是掌握电力弹簧技术的工作原理、优势及其在实际项目中的实施方法。 其他说明:本文不仅提供了理论分析,还有具体的案例支持,有助于读者全面理解电力弹簧技术的实际应用价值。

    honor_1.145_testgray20250427.apk

    honor_1.145_testgray20250427.apk

    嵌入式八股文面试题库资料知识宝典-【开发】嵌入式开源项目&库&资料.zip

    嵌入式八股文面试题库资料知识宝典-【开发】嵌入式开源项目&库&资料.zip

    鸿蒙生态HarmonyOS:万物互联时代的操作系统革新与发展路径

    内容概要:本文详细介绍了华为推出的面向全场景的分布式操作系统HarmonyOS。HarmonyOS旨在打破设备间的壁垒,实现万物互联,通过分布式软总线和分布式任务调度等核心技术,让不同设备协同工作,如手机、平板、智能家居等设备间无缝流转任务。其应用生态涵盖教育、金融、出行等多个领域,华为通过资金、技术支持和流量扶持吸引开发者,推动生态繁荣。HarmonyOS从2019年首次发布至今,经历了多个版本迭代,性能和安全性不断提升,用户体验更加智能便捷。尽管面临应用生态丰富度不足、市场竞争压力等挑战,华为通过优化开发工具、加强市场推广等策略积极应对。未来,HarmonyOS将在分布式技术、AI融合和隐私安全等方面持续创新,并在智能家居、车联网、工业互联网等领域拓展生态。 适合人群:对操作系统技术感兴趣的专业人士、开发者、科技爱好者。 使用场景及目标:①了解HarmonyOS的技术架构和分布式技术的特点;②探讨HarmonyOS在智能家居、车联网等领域的应用前景;③评估HarmonyOS对现有操作系统市场的潜在影响。 阅读建议:HarmonyOS作为一款面向全场景的操作系统,不仅涉及技术实现,还包括生态建设和用户体验。因此,在阅读过程中,应重点关注其技术优势、应用场景及未来发展潜力,结合自身需求思考其在实际生活和工作中的应用价值。

    少儿编程scratch项目源代码文件案例素材-简单杀戮.zip

    少儿编程scratch项目源代码文件案例素材-简单杀戮.zip

    基于阻抗控制和工艺优化的机器人磨抛技术研究.pdf

    基于阻抗控制和工艺优化的机器人磨抛技术研究.pdf

    少儿编程scratch项目源代码文件案例素材-扛住别被压.zip

    少儿编程scratch项目源代码文件案例素材-扛住别被压.zip

    【操作系统领域】HarmonyOS架构解析:分布式设计与全场景智能应用的创新实践

    内容概要:本文详细介绍了华为自主研发的面向全场景的分布式操作系统——HarmonyOS的架构设计及其在智能家居、智能穿戴、智慧出行等领域的应用。HarmonyOS采用分层架构,包括内核层、系统服务层、框架层和应用层,各层分工明确,协同工作,为用户提供稳定、高效、智能的操作系统。其核心特性包括分布式架构、微内核设计、组件化开发和一次开发多端部署,这些特性使得不同设备能够实现互联互通和资源共享,为用户带来无缝的全场景智能体验。此外,文章还探讨了HarmonyOS面临的生态建设和兼容性挑战,以及未来的发展前景和技术创新方向。 适合人群:对操作系统架构感兴趣的科技爱好者、智能设备开发者及相关行业从业者。 使用场景及目标:①了解HarmonyOS架构设计及其在智能家居、智能穿戴、智慧出行等领域的具体应用;②掌握HarmonyOS的核心特性,如分布式架构、微内核设计、组件化开发和一次开发多端部署;③探讨HarmonyOS面临的挑战及其未来发展方向。 其他说明:HarmonyOS的出现不仅为华为在智能设备领域的发展提供了有力支撑,也为整个行业的创新发展注入了新的活力。作为科技爱好者和关注者,我们应持续关注HarmonyOS的发展,共同见证它在智能设备领域创造更多的辉煌。

    嵌入式八股文面试题库资料知识宝典-linux驱动开发.zip

    嵌入式八股文面试题库资料知识宝典-linux驱动开发.zip

    开关磁阻电机技术参数与建模技术深度解析:4kW电机性能详述

    内容概要:本文深入探讨了一款额定功率为4kW的开关磁阻电机,详细介绍了其性能参数如额定功率、转速、效率、输出转矩和脉动率等。同时,文章还展示了利用RMxprt、Maxwell 2D和3D模型对该电机进行仿真的方法和技术,通过外电路分析进一步研究其电气性能和动态响应特性。最后,文章提供了基于RMxprt模型的MATLAB仿真代码示例,帮助读者理解电机的工作原理及其性能特点。 适合人群:从事电机设计、工业自动化领域的工程师和技术人员,尤其是对开关磁阻电机感兴趣的科研工作者。 使用场景及目标:适用于希望深入了解开关磁阻电机特性和建模技术的研究人员,在新产品开发或现有产品改进时作为参考资料。 其他说明:文中提供的代码示例仅用于演示目的,实际操作时需根据所用软件的具体情况进行适当修改。

    嵌入式八股文面试题库资料知识宝典-新岸线.zip

    嵌入式八股文面试题库资料知识宝典-新岸线.zip

    基于支持向 量机和余弦相似度的故障诊断方法.pdf

    基于支持向 量机和余弦相似度的故障诊断方法.pdf

    Objective-C+ARKit实现图片识别、平面捕捉、人脸识别+源码(毕业设计&课程设计&项目开发)

    Objective-C+ARKit实现图片识别、平面捕捉、人脸识别+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 ARKit实现图片识别、平面捕捉、人脸识别 ARKit需要ios11 以及 A11处理器或更高版本设备支持 Objective-C+ARKit实现图片识别、平面捕捉、人脸识别+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 ARKit实现图片识别、平面捕捉、人脸识别 ARKit需要ios11 以及 A11处理器或更高版本设备支持~ Objective-C+ARKit实现图片识别、平面捕捉、人脸识别+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 ARKit实现图片识别、平面捕捉、人脸识别 ARKit需要ios11 以及 A11处理器或更高版本设备支持

    少儿编程scratch项目源代码文件案例素材-火柴人大战 中世纪战争.zip

    少儿编程scratch项目源代码文件案例素材-火柴人大战 中世纪战争.zip

    嵌入式八股文面试题库资料知识宝典-并行科技笔试题.zip

    嵌入式八股文面试题库资料知识宝典-并行科技笔试题.zip

    嵌入式八股文面试题库资料知识宝典-进程线程.zip

    嵌入式八股文面试题库资料知识宝典-进程线程.zip

    嵌入式八股文面试题库资料知识宝典-金山问题.zip

    嵌入式八股文面试题库资料知识宝典-金山问题.zip

    少儿编程scratch项目源代码文件案例素材-火柴人战争.zip

    少儿编程scratch项目源代码文件案例素材-火柴人战争.zip

Global site tag (gtag.js) - Google Analytics