关闭

Spring声明式事务处理(下)

发表于:2009-9-30 10:51

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

#
java

  通过transactionManager对事务进行处理,包括异常抛出和正常的提交事务,具体的事务管理器由用户程序设定。

  Java代码

  protected void completeTransactionAfterThrowing(TransactionInfo txInfo, Throwable ex) {
  if (txInfo != null  txInfo.hasTransaction()) {
  if (txInfo.transactionAttribute.rollbackOn(ex)) {
  ……
  try {
  this.transactionManager.rollback(txInfo.getTransactionStatus());
  }
  ……
  }
  else {
  ……
  try {
  this.transactionManager.commit(txInfo.getTransactionStatus());
  }
  ……
  }
  protected void commitTransactionAfterReturning(TransactionInfo txInfo) {
  if (txInfo != null  txInfo.hasTransaction()) {
  ……
  this.transactionManager.commit(txInfo.getTransactionStatus());
  }
  }
  protected void completeTransactionAfterThrowing(TransactionInfo txInfo, Throwable ex) {
  if (txInfo != null  txInfo.hasTransaction()) {
  if (txInfo.transactionAttribute.rollbackOn(ex)) {
  ……
  try {
  this.transactionManager.rollback(txInfo.getTransactionStatus());
  }
  ……
  }
  else {
  ……
  try {
  this.transactionManager.commit(txInfo.getTransactionStatus());
  }
  ……
  }
  protected void commitTransactionAfterReturning(TransactionInfo txInfo) {
  if (txInfo != null  txInfo.hasTransaction()) {
  ……
  this.transactionManager.commit(txInfo.getTransactionStatus());
  }
  }

  Spring通过以上代码对transactionManager进行事务处理的过程进行了AOP包装,到这里我们看到为了方便客户实现声明式的事务处理,Spring还是做了许多工作的。如果说使用编程式事务处理,过程其实比较清楚,我们可以参考书中的例子:

  Java代码

  TransactionDefinition td = new DefaultTransactionDefinition();
  TransactionStatus status = transactionManager.getTransaction(td);
  try{
  ……//这里是我们的业务方法
  }catch (ApplicationException e) {
  transactionManager.rollback(status);
  throw e
  }
  transactionManager.commit(status);
  ……
  TransactionDefinition td = new DefaultTransactionDefinition();
  TransactionStatus status = transactionManager.getTransaction(td);
  try{
  ……//这里是我们的业务方法
  }catch (ApplicationException e) {
  transactionManager.rollback(status);
  throw e
  }
  transactionManager.commit(status);
  ……

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号