笔记代码学习_第1页
笔记代码学习_第2页
笔记代码学习_第3页
笔记代码学习_第4页
笔记代码学习_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

developerWorks中国>Javatechnology中用JDBC进行事务JTA简JTA的事务界定控制事务developerWorks中国>Javatechnology中用JDBC进行事务JTA简JTA的事务界定控制事务JTA方法使用JTA和JDBC日志记录和DAODAO中的异常处理实现实例:关于对本文的评学习编译更好的DAO的技级别:初SeanCSullivan(dao-article@),软件工程20031015J2EE开发人员使用数据访问对象(DataAccessObjectDAO)设计模式,以便将低级别的数据访问逻辑与高级别的业务逻辑分离。实现DAO模式涉及比编写数据访问代码更多的内容。在本文中,Java开发人员SeanC.Sullivan讨论了DAO编程中三个常常被忽略的方面:事务界定、异常处理和日志记录18个月中,我参加了一个由有才华的软件工程师组成的小组,构建定制Web的(metrics)、库存、货运发票、项目管理数据和用户信息。我们用JDBCAPI连接到我们公司的不同数据库平台上,并在整个应用程序中使用DAO设计模式文档图1显示了应用程序和数据源之间的关系图1.应用程序和数据在整个应用程序中使用数据访问对象(DAO)使我们可以将底层数据访问逻辑与业务逻辑分离来。我们构建了为每一个数据源提供GRUD(创建、读取、更新、删除)操作的DAO类在本文中,我将为您介绍构建更好的DAO类的DAO实现策略和技术。更确切地说,我将讨论日志、异常处理和事务界定。您将学到如何将这三者结合到自己的DAO类中。本文假定您熟JDBCAPI、SQL和关系数据库编程我们将以对DAO设计模式和数据访问对象的概述开始file:///E|/scrapbook/data/20071126181813/index.html(第1/12页)[2007-11-30文档中国[选择 使用条首 产 服务与解决方 支持与下 个性化服DAO模式是标准J2EE设计模式之一。开发人员用这种模式将底层数DAO模式是标准J2EE设计模式之一。开发人员用这种模式将底层数据访问操作与高层辑分离开。一个典型的DAO实现有以下DAO工厂DAO接一个实现了DAO接口的具体数据传输对象(有时称为值对象具体的DAO类包含访问特定数据源的数据的逻辑。在下面一节中您将学习设计和实现数据访问对象的技术。有关DAO设计模式的更多内容请参阅参考资料。DAO要记住的重要一点是它们是事务性对象。DAO所执行的每一个操--如创建、更新或者删除数据--都与一个事务相关联。因此,事务界定的概念就变得特别重要了。事务界定是定义事务边界的方式。规范描述了两种事务界定的模型:编程(programmatic)和声明式(declarative)。1分析了这两种模型1.两种事务界定的模声明式事务界编程式事务界程序员用EJB部署描述符声明事务属性程序员负责编写事务逻辑运行时环境容器)用这些属性自动管理事务应用程序通过一个API控制事我们将侧重于编程式事设计考如前所述,DAO是事务性对象。一个典型的作。在设计DAO时,首先要问自己以下执行像创建、更新和删除这样的事务事务要如何开始事务应如何结束哪一个对象将负责开始一个事务哪一个对象将负责结束一个事务 是否要负责事务的开始和结束应用程序是否需要通过多个DAO访问数据事务涉及到一个DAO还是多个DAO是否调DAO的方法了解上述问题的答案将有助于您选择最适合的DAO的事务界定策略。在DAO中有两种主要的界定事务的策略。一种方式是让DAO负责界定事务,另一种将事务界定交给调用这个DAO方法的对象处理。如果选择了前一种方式,那么就将事务代码嵌入到DAO中。如果选择式,那么事务界定代码就是在DAO类外面。我们将使用简单的代码示例帮助您更好理解每一file:///E|/scrapbook/data/20071126181813/index.html(第2/12页)[2007-11-30方式是如何清单1显示了一个有两种数据操作的方式是如何清单1显示了一个有两种数据操作的DAO:创建和更新1.DAO方清单2显示了一个简单的事务。事务界定在DAO类外面。注意在这个例子中调用者一个事务中结合多个DAO操作的清单2.调用者管理的这种事务界定策略对于需要在一个事务中访问多个 的应用程序特别有用可以JDBCAPIJavaAPI(JavaTransactionAPIJTA)实现事务界定JDBC务界定比JTA事务界定要简单,但是JTA提供了更多的灵活性。在下面一节中我将更深入地分JDBC进行事务JDBC事务是Connection对象控制的。JDBCConnection接口(java.sql.Connection)提供了两种事务模式:自动提交和手工提交java.sql.Connection提供了voidsetAutoCommit(boolean)booleangetAutoCommit()voidcommit()void3显示了如何JDBCAPI界定一个事务3.JDBCAPI进行事务界file:///E|/scrapbook/data/20071126181813/index.html(第3/12页)[2007-11-30 //startthetransactiondao.updateWarehouseStatus(id2, //endthepublicvoidcreateWarehouseProfile(WHProfilepublicvoidupdateWarehouseStatus(WHIdentifierid,StatusInfo使用JDBC事务界定时,您可以将多个SQL语使用JDBC事务界定时,您可以将多个SQL语句结合到一个事务中。JDBC事务的一个缺点事务的范围局限于一个数据库连接。一个JDBC事务不能跨越多个数据库。在下面,我们将看一下如何JTA进行事务界定。因为JTA不像JDBC那样有名,所以我们首先做一个简介。JavaAPI(JTA)及其同门Java事务服务(JavaTransactionServiceJTS)J2EE平台提供了分布式事务服务。一个分布式的事务涉及一个事务管理器和一个或者多个资源管理器。一个资源管理器是任何类型的持久性的数据存储。事务管理器负责协调所有事务参与者间的通信。事务管理器与资源管理器之间的关系如图2所示图2.一个事务管理器和资源管理JTA事务JDBC事务功能更强。JTA事务可以有多事务局限为一个数据库连参与者。所有下列Java平台组件都可以参与JTAJDBC连file:///E|/scrapbook/data/20071126181813/index.html(第4/12页)[2007-11-30importjava.sql.*;//DataSourceds=obtainDataSource();Connectionconn=ds.getConnection();//pstmt=conn.prepareStatement("UPDATEMOVIES...");pstmt.setString(1,"TheGreatEscape");//...//JDOPersistenceManager对JMS队JMS主符合J2EEJDOPersistenceManager对JMS队JMS主符合J2EE连接体系结构(J2EEConnectorArchitecture)规范的资源适配JTA的事务JTA进行事务界定,应用程序要调用javax.transaction.UserTransaction接口中的方法。清单4显示了对UserTransaction对象的典型JNDI查询:4.UserTransaction对象JDNI查对象后,就可以开始事务了,如清单5当应用程序找到了5.JTA开始一个事当应用程序调用commit()时,事务管理器用一个两阶段的提交协议结束事务控制事务JTA 接口提供了以下事务控publicvoidfile:///E|/scrapbook/data/20071126181813/index.html(第5/12页)[2007-11-30//DataSourceds=obtainXADataSource();Connectionconn=pstmt=conn.prepareStatement("UPDATEMOVIES...");pstmt.setString(1,"SpinalTap");////importjavax.naming.*;//InitialContextctx=newUserTransactionutx=(UserTransaction)txObj;voidvoidrollback()int应用程序调voidvoidrollback()int应用程序调用begin()开始事务。应用程序调用commit()或者rollback()结束事务。阅参考资料以了解更多关于用JTA进行事务管理的内JTA和开发人员通DAO类中JDBC进行底层数据操作。如果计划JTA界定事务,那么就需要有一个实现javax.sql.XADataSource、javax.sql.XAConnection和javax.sql.XAResource接口的JDBC驱动程序。一个实现了这些接口的驱动程序将可以参与JTA事务。XADataSource对象就是一XAConnection对象的工厂XAConnection是参JTA事务JDBC连接您将需要用应用服务器的管理工具设置XADataSource。从应用服务器和JDBC文档中可以了解到相关J2EE应用程序用JNDI查询数据源。一旦应用程序找到了数据源对象,它就调用以获得到数据库的XA连接与XA连接不同。一定要记XA连接参JTA事务。这意味XA连接不支持JDBC的自动提交功能。同时,应用程序一定不要对XA连接调用java.sql.Connection.commit()或者java.sql.Connection.rollback()。相反,应用程序应该使用UserTransaction.begin()、UserTmit()和serTransaction.rollback()我们讨论了如何用JDBC和JTA界定事务。每一种方式都有其优点,您需要决定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论