前一篇文章提到希望把事务从业务逻辑里面抽取出来,而且事务控制也是符合面向方面的规则的,通过artech的文章,我们可以很好的理解其中的原理,但是artech的事务辅助类还是需要参杂到业务里面,这里借助aop可以很方便的把事务的控制挪到业务的外围,实际上spring.net里面就是这样做的,spring.net在ado的事务控制方面借助的就是TransactionInterceptor这个方法拦截器,里面的代码大概如下
public object Invoke(IMethodInvocation invocation)
{
// Work out the target class: may be <code>null</code>.
// The TransactionAttributeSource should be passed the target class
// as well as the method, which may be from an interface.
Type targetType = ( invocation.This != null ) ? invocation.This.GetType() : null;
// If the transaction attribute is null, the method is non-transactional.
TransactionInfo txnInfo = CreateTransactionIfNecessary( invocation.Method, targetType );
object returnValue = null;
try
{
// This is an around advice.
// Invoke the next interceptor in the chain.
// This will normally result in a target object being invoked.
returnValue = invocation.Proceed();
}
catch ( Exception ex )
{
// target invocation exception
CompleteTransactionAfterThrowing( txnInfo, ex );
throw;
}
finally
{
CleanupTransactionInfo( txnInfo );
}
CommitTransactionAfterReturning( txnInfo );
return returnValue;
}
从代码和注释可以看到,事务的控制在业务方法执行的外围,在业务之前启动事务,如果有异常则回滚事务,正常情况下提交事务。里面的细节部分和artech的原理类似,但是spring.net里面略微复杂点,对于同一个数据库,他里面使用的是同一个连接以及连接上的事务,对于多数据库暂时还没明白,有空深入了解一下;同样对于artech的事务控制,由于自己对于CommittableTransaction不是很了解,虽然大意能明白,但是还是对于事务的细节不是特别了解,有空也得多学习。
分享到:
相关推荐
在IT行业中,数据库操作是应用程序的核心部分,而事务控制则是保证数据一致性与完整性的关键机制。本案例聚焦于`ibatis`(MyBatis前身)的事务管理,它是一个轻量级的Java持久层框架,提供了灵活的SQL映射功能。在...
当使用`JdbcTemplate`结合Spring框架时,可以采用与原生JDBC事务控制类似的方法,但在Spring环境中进行管理。以下是一个使用Druid数据库连接池的示例代码: ```java @RequestMapping("/druidData1") public String ...
总结来说,在C#程序中调用事务时,我们需要理解事务的基本原理和ACID属性,利用`System.Transactions`提供的工具来管理和控制事务。在VS2010环境下,通过ADO.NET与数据库交互,可以轻松地实现事务处理,确保数据操作...
通过以上步骤,我们可以在Spring4、SpringMVC和MyBatis集成环境中实现事务控制,确保数据操作的正确性和一致性。在实际项目中,还需要结合具体业务场景,选择合适的事务策略,例如,分布式事务可能需要引入其他技术...
本篇文章将深入探讨Spring中的事务控制,包括事务的基本概念、事务的特性、Spring事务管理的模式以及如何在实际应用中配置和使用事务。 首先,事务是数据库操作的基本单位,确保数据的一致性和完整性。ACID(原子性...
这个名为“分布式事务控制程序代码.rar”的压缩包显然提供了一个工具或者框架,帮助开发者轻松地管理和控制分布式环境中的事务。下面我们将深入探讨分布式事务的核心概念、相关技术以及该压缩包中可能包含的QDTC...
在JDBC中,`Connection`对象提供了事务控制的方法,如`setAutoCommit(false)`用于开启手动事务模式,`commit()`用于提交事务,而`rollback()`则用于回滚事务。在示例代码中,当数据库操作出现异常时,会调用`...
在 JDBC 中,事务控制主要依赖于 `java.sql.Connection` 接口的方法。默认情况下,JDBC 连接处于自动提交模式,这意味着每次执行 SQL 语句后都会自动提交事务。为了控制事务,我们需要关闭自动提交模式,然后手动...
6. **质量控制档案**:事务所应保留质量控制系统的相关记录,如人员招聘、专业发展和督导等,形成档案以便随时查阅和评估。 7. **质量控制的程序**:建立质量控制系统的步骤包括设立目标、了解现有系统、制定书面...
2. 一致性:一致性是非常重要的事务处理特性,它与原子性是密切相关的。一致性表示任何事务处理要将数据库从一种状态转变为另一种状态。 3. 隔离性:隔离性表示在事务处理提交之前,事务处理的执行不能被其他事务...
错误的观点认为只有大型事务所才需要关注质量控制,或者认为质量控制仅是质量控制部门的责任,这些都忽视了质量控制在整个事务所运营中的核心地位。质量控制不仅关乎生存,更影响着事务所的长远发展,它如同汽车的...
这份名为“事务所质量控制:制度、程序与方法”的PPT材料,由天健会计师事务所制作,深入探讨了质量控制在事务所中的重要性、目标以及相关的职业准则要求。 首先,质量控制与事务所的效益密切相关。一个良好的质量...
在本“spring AOP(声明式事务管理)小程序”中,我们将深入探讨Spring AOP如何实现声明式事务管理,以及相关的通知类型。 1. **什么是声明式事务管理**: 声明式事务管理是相对于编程式事务管理而言的,后者需要在...
我们将通过`Trans_RPG1.RPGLE`和`Trans_RPG2.RPGLE`两个示例程序来讲解相关概念,并参考`Trans_CL.CLLE`中的CL(Control Language)程序,理解它们在实际应用中的作用。 首先,事务处理是数据库操作的基本单元,...
这意味着`methodB`的操作不受事务控制。 6. **PROPAGATION_NEVER** `methodB`将以非事务方式执行。如果当前存在事务,那么将抛出异常。这种行为适用于那些不能在事务中执行的操作。 7. **PROPAGATION_NESTED** ...
在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...
springMVC框架事务控制,保证业务操作的完整性 防止在一些意外(例如说突然断电)的情况下出现乱数据,防止数据库数据出现问题。 如:银行转帐。A账户减少的钱要加到B账户上,若A这边减了钱,B那边却还是一样的数,这...
在本项目中,我们将讨论如何在Spring.NET中结合Oracle数据库实现事务控制,以及利用自定义异常处理来确保数据的一致性和完整性。 首先,让我们了解什么是事务。在数据库操作中,事务是一系列操作的集合,这些操作...