j2ee项目实训spring框架技术——第9章spring中的事务管理技术及实现第2部分内容摘要:

管理实现的 模板 代码 示例 Connection conn = null。 try{ conn =。 (false)。 //(1) 缺省方式是自动提交 //完成对数据库的修改操作 ,在此没有列出细节代码 ()。 //(2)自己提交 (确认数据修改的行为) } catch(Exception e){ ()。 //(3) 恢复修改 (回滚) //进行异常处理 } finally{ try{ ()。 //(4) 关闭数据库连接 } catch(SQLException se){ //进行异常处理 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 8/18 页 } } ( 3) JDBC 标准的事务管理实现代码的主要缺点 从上面的 JDBC 标准的事务管理实现代码中可以了解到,不仅所编程实现的代码量比较长,而且也很容易疏忽或者忘掉一些异常捕获等的 try/catch 语句。 而且还必须在进行数据访问之前将 JDBC 的自动提交模式改变为手动提交模式( (false)。 的功能 )。 Spring 框架 DAO 组件中的 JdbcTemplate 类的缺省的 事务管理 模式 ( 1) Spring 框架对 JDBC 事务管理 方式进行了进一步的包装 对此读者通过前面的 【例 98】中的 DataSourceTransactionManager 类的部分代码示例中应该能够理解,这样将能够在一定的程度上简化标准的 JDBC 的编程实现。 因为,在Spring 框架中还提供了几个与编程实现的事务处理技术相关的一些帮助类。 1) TransactionDefinition,实现对 事务 的 属性 进行 定义 2) TranscationStatus,它 代表了当前的事务 运行的状态,辅助 事务提交 和 回滚 等操作 3) PlatformTransactionManager 接口,它具体实现对 事务 的管理和控制行为 这些 帮助 类是 Spring 框架 提供的用于管理事务的基础 API ,由于PlatformTransactionManager 为接口,因此对该接口提供如下的一个实现的抽象类AbstractPlatformTransactionManager,并且在该类的基础上又针对不同的事务资源提供了具体的实现类,比如在下面所要使用的事务管理类 DataSourceTransactionManager 等都是这个 AbstractPlatformTransactionManager 类的子类。 ( 2) JdbcTemplate 类的缺省的 事务管理 模式同样也采用 JDBC 默认的 AutoCommit 模式 由于在 Spring 框架的 DAO 组件中的 JdbcTemplate 类中的各种数据访问操作方法采用的是 JDBC 默认的自动提交( AutoCommit)模式,因此如果在实现某个转帐系统中采用下面的示例中的代码,将同样也无法保证数据操作的原子性。 【例 913】 本 示例中的代码将也无法保证数据 操作的原子性 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource)。 (Update InComeCount set money=money100 where id = 39。 123439。 )。 (Update OutComeCount set money=money100 where id = 39。 123439。 )。 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 9/18 页 其主要的错误原因是由于在 Spring 框架的 DAO 组件中的 JdbcTemplate 类采用了AutoCommit 模式,因此当第一条 update 的数据操作完成之后将被自动提交,此时的数据库表中用户 ID 号为“ 1234”的对应的记录中的数据已经被更新,如果第二条 SQL 语句的操作出现了失败,系统将无法使得整个事务回滚到最初的状态。 ( 3)利用 DataSourceTransactionManager 类实现代码控制的事务管理 类为 JDBC DataSource 类型的数据源的事务管理组件。 对于该组件的应用,开发者只需要在 Spring 框架 IoC 容器的 XML 配置的 Bean 的定义配置文件中对它进行简单的配置,然后将其通过属性依赖注入引入到应用系统的 DAO 组件类中。 使用 Spring 框架编程式的事务管理的基本流程 ( 1)首先声明一个 基于 DataSource接口的 数据源 的实现类的对象实例 ( 2)其次声明一个事务管理类,可以在下面的几种形式中根据应用系统的实际数据访问平台来合理地选择其一,例如 DataSourceTransactionManager、 HibernateTransactionManger和 JTATransactionManager 等事务管理的具体实现类。 ( 3)最后在应用系统的有关的组件代码中加入事务处理控制的相关的代码 使用 Spring 框架编程式的事务管理的代码示例 在下面的 【例 914】中的 Spring 框架 编程式的事务管理的代码示例中,其编程的代码基本上是按照前面所描述的流程来实现的。 其中的 dataSource对象实例是通过依赖注入而获得的。 当然, 开发者 也可以直接将 JdbcTemplate类的对象实例以属性注入的方式依赖注入 进来) 【例 914】 Spring 编程式的事务管理的代码示例 TransactionDefinition td = new TransactionDefinition()。 TransactionStatus status = (td)。 try{ 杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料 杨教授工作室,版权所有,盗版必究 , 10/18 页 JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource)。 (Update InComeCount set money=money100 where id = 39。 123439。 )。 (Update OutComeCount set money=money100 where id = 39。 123439。 )。 (status)。 } catch(Exception e){ (status)。 } 在 Spring 框架 中实现编程式的事务管理 的实例 下面通过某个项目中的 持 久层中的 DAO 组件中的某个数据访问方法中应用事务和不应用事务所出现的各种结果,让读者体验事务中的“原子性” 、“一致性” 和 Spring 框架中的编程式的事务管理的具体实现步骤。 对 DAO 组件中的某个数据访问方法不应用事务控制技术 在下面的 DAO 组件中的 updateOneUserInfo。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。