快速业务通道

如何使用Eclipse CNF的Saveable Protocol实现对View的保存 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-13
va:205) -    Acquired Connection [org.apache.commons.dbcp.PoolableConnection@32bd65]   for JDBC transaction logon method... updateLastLogonTime... ②直接执行updateLastLogonTime方法  16:25:04,781 DEBUG (JdbcTemplate.java:785) - Executing prepared SQL  update 16:25:04,781 DEBUG (JdbcTemplate.java:569) - Executing prepared SQL  statement    [UPDATE t_user u SET u.last_logon_time = ? WHERE user_name =?] 16:25:04,828 DEBUG (JdbcTemplate.java:794) - SQL update affected 0  rows 16:25:04,828 DEBUG (AbstractPlatformTransactionManager.java:470) -  Participating    in existing transaction  ③ScoreService#addScore方法加入到 UserService#logon的事务中 addScore... 16:25:04,828 DEBUG (JdbcTemplate.java:785) - Executing prepared SQL  update 16:25:04,828 DEBUG (JdbcTemplate.java:569) - Executing prepared SQL  statement    [UPDATE t_user u SET u.score = u.score + ? WHERE user_name =?] 16:25:04,828 DEBUG (JdbcTemplate.java:794) - SQL update affected 0  rows 16:25:04,828 DEBUG (AbstractPlatformTransactionManager.java:752) -    Initiating transaction commit ④提交事务 16:25:04,828 DEBUG (DataSourceTransactionManager.java:265) - Committing JDBC  transaction    on Connection [org.apache.commons.dbcp.PoolableConnection@32bd65] 16:25:04,828 DEBUG (DataSourceTransactionManager.java:323) - Releasing JDBC  Connection    [org.apache.commons.dbcp.PoolableConnection@32bd65] after  transaction 16:25:04,828 DEBUG (DataSourceUtils.java:312) - Returning JDBC Connection  to DataSource

从上面的输入日志中,可以清楚地看到 Spring 为 UserService#logon() 方法启动了一个 新的事务,而 UserSerive#updateLastLogonTime() 和 UserService#logon() 是在相同的类中 ,没有观察到有事务传播行为的发生,其代码块好像“直接合并”到 UserService#logon() 中 。接着,当执行到 ScoreService#addScore() 方法时,我们就观察到了发生了事务传播的行为 :Participating in existing transaction,这说明 ScoreService#addScore() 添加到 UserService#logon() 的事务上下文中,两者共享同一个事务。所以最终的结果是 UserService 的 logon(), updateLastLogonTime() 以及 ScoreService 的 addScore 都工作 于同一事务中。

Spring事务管理高级应用难点剖析,第1部分(11)

时间:2012-04-26 IBM 陈雄华

多线程的困惑

由于 Spring 的事务管理器是通过线程相关的 ThreadLocal 来保存数据访问基础设施,再 结合 IOC 和 AOP 实现高级声明式事务的功能,所以 Spring 的事务天然地和线程有着千丝万 缕的联系。

我们知道 Web 容器本身就是多线程的,Web 容器为一个 Http 请求创建一个独立的线程, 所以由此请求所牵涉到的 Spring 容器中的 Bean 也是运行于多线程的环境下。在绝大多数情 况下,Spring 的 Bean 都是单实例的(singleton),单实例 Bean 的最大的好处是线程无关 性,不存在多线程并发访问的问题,也即是线程安全的。

一个类能够以单实例的方式运行的前提是“无状态”:即一个类不能拥有状态化的成员变量 。我们知道,在传统的编程中,DAO 必须执有一个 Connection,而 Connection 即是状态化的 对象。所以传统的 DAO 不能做成单实例的,每次要用时

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号