Spring实现iBATIS事务回滚~

转载 2012年03月28日 22:30:17

Spring 实现iBATIS事务回滚是怎么实现的呢?让我们开始这篇文章的学习,这篇文章将会想你介绍Spring 实现iBATIS事务回滚的相关消息

AD:

Spring 实现ibatis事务回滚是怎么回事呢?

这两天做一个网站需要在数据报错时自动对数据进行回滚,在此期间遇到一些问题,现做下笔记

这里使用spring-Aop代理机制来实现事务的回滚:

配置如下:

Spring实现iBATIS事务回滚之Web.xml 

  1. ﹤?xml version="1.0" encoding="UTF-8"?﹥  
  2.  
  3. ﹤web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
  4.  
  5.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" 
  6.  
  7.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"﹥  
  8.  
  9.     ﹤context-param﹥  
  10.  
  11.        ﹤param-name﹥contextConfigLocation﹤/param-name﹥  
  12.  
  13.        ﹤param-value﹥classpath:applicationContext.xml﹤/param-value﹥  
  14.  
  15.     ﹤/context-param﹥  
  16.  
  17.     ﹤listener﹥  
  18.  
  19.        ﹤listener-class﹥  
  20.  
  21.            org.springframework.web.context.ContextLoaderListener  
  22.  
  23.        ﹤/listener-class﹥  
  24.  
  25.     ﹤/listener﹥  
  26.  
  27.    
  28.  
  29.     ﹤servlet﹥  
  30.  
  31.        ﹤servlet-name﹥AppConfigServlet﹤/servlet-name﹥  
  32.  
  33.        ﹤servlet-class﹥com.test.ConfigServlet﹤/servlet-class﹥  
  34.  
  35.        ﹤load-on-startup﹥2﹤/load-on-startup﹥  
  36.  
  37.     ﹤/servlet﹥  
  38.  
  39.    
  40.  
  41.     ﹤welcome-file-list﹥  
  42.  
  43.        ﹤welcome-file﹥index.jsp﹤/welcome-file﹥  
  44.  
  45.     ﹤/welcome-file-list﹥  
  46.  
  47. ﹤/web-app﹥ 

Spring实现iBATIS事务回滚之ApplicationContext.xml

  1. ﹤bean id="transactionManager" 
  2.  
  3. class="org.springframework.jdbc.datasource.DataSourceTransactionManager"﹥  
  4.  
  5.        ﹤property name="dataSource" ref="dataSource" /﹥  
  6.  
  7.     ﹤/bean﹥  
  8.  
  9. ﹤bean id="businessTarget" 
  10.  
  11.        class="com.test.BusinessInterfaceImpl" /﹥  
  12.  
  13.          
  14.  
  15.     ﹤bean id="businessBean" 
  16.  
  17.        class="org.springframework.aop.framework.ProxyFactoryBean"﹥  
  18.  
  19.        ﹤property name="singleton"﹥  
  20.  
  21.            ﹤value﹥true﹤/value﹥  
  22.  
  23.        ﹤/property﹥  
  24.  
  25.        ﹤property name="proxyInterfaces"﹥  
  26.  
  27.            ﹤value﹥com.test.BusinessInterface﹤/value﹥  
  28.  
  29.        ﹤/property﹥  
  30.  
  31.        ﹤property name="interceptorNames"﹥  
  32.  
  33.            ﹤list﹥  
  34.  
  35.               ﹤value﹥transactionInterceptor﹤/value﹥  
  36.  
  37.               ﹤value﹥businessTarget﹤/value﹥  
  38.  
  39.            ﹤/list﹥  
  40.  
  41.        ﹤/property﹥  
  42.  
  43.        ﹤property name="proxyTargetClass"﹥﹤value﹥true﹤/value﹥﹤/property﹥  
  44.  
  45.     ﹤/bean﹥  
  46.  
  47.       
  48.  
  49.     ﹤bean id="transactionInterceptor" 
  50.  
  51.        class="org.springframework.transaction.interceptor.TransactionInterceptor"﹥  
  52.  
  53.        ﹤property name="transactionManager"﹥  
  54.  
  55.            ﹤ref local="transactionManager" /﹥  
  56.  
  57.        ﹤/property﹥  
  58.  
  59.        ﹤property name="transactionAttributes"﹥  
  60.  
  61.            ﹤props﹥  
  62.  
  63.               ﹤prop key="*"﹥PROPAGATION_REQUIRED,-Exception﹤/prop﹥  
  64.  
  65.            ﹤/props﹥  
  66.  
  67.        ﹤/property﹥  
  68.  
  69.     ﹤/bean﹥  
  70.  
  71.     ﹤bean id="dataSource" 
  72.  
  73.        class="org.springframework.jndi.JndiObjectFactoryBean"﹥  
  74.  
  75.        ﹤property name="jndiName"﹥  
  76.  
  77.            ﹤value﹥gissys﹤/value﹥  
  78.  
  79.        ﹤/property﹥  
  80.  
  81.     ﹤/bean﹥  
  82.  
  83. ﹤bean id="sqlMapClient" 
  84.  
  85.        class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"﹥  
  86.  
  87.        ﹤property name="configLocation"﹥  
  88.  
  89.            ﹤value﹥  
  90.  
  91.               classpath:com/emaptech/persistence/SqlMapConfig.xml  
  92.  
  93.            ﹤/value﹥  
  94.  
  95.        ﹤/property﹥  
  96.  
  97.        ﹤property name="dataSource" ref="dataSource"﹥﹤/property﹥  
  98.  
  99.     ﹤/bean﹥ 

Spring实现iBATIS事务回滚之Ibatis.xml

  1. ﹤insert id="testInsert" parameterClass="string"﹥  
  2.  
  3.    insert into corebase.cc select 6,#value# from dual  
  4.  
  5. ﹤/insert﹥  
  6.  
  7.  
  8.  
  9. ﹤insert id="testInsertWrong" parameterClass="string"﹥  
  10.  
  11.    insert into corebase.cc select 6,#value#,7 from dual  
  12.  
  13. ﹤/insert﹥ 

Spring实现iBATIS事务回滚之ConfigServlet.java

  1. package com.test;  
  2.  
  3. import javax.servlet.ServletException;  
  4.  
  5. import javax.servlet.http.HttpServlet;  
  6.  
  7. import org.springframework.context.ApplicationContext;  
  8.  
  9. import org.springframework.web.context.support.WebApplicationContextUtils;  
  10. public class ConfigServlet extends HttpServlet {  
  11.  
  12.     /**  
  13.  
  14.      * UID  
  15.  
  16.      */ 
  17.  
  18.     private static final long serialVersionUID = 5118794568550751611L;  
  19.  
  20.     public void init() throws ServletException {  
  21.  
  22.        ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(this.getServletContext());  
  23.  
  24.        BaseService.getInstance().init(ctx);  
  25.        super.init();  
  26.     }  

Spring实现iBATIS事务回滚之BaseService.java

  1. package com.test;  
  2.  
  3. import org.springframework.beans.BeansException;  
  4.  
  5. import org.springframework.beans.factory.xml.XmlBeanFactory;  
  6.  
  7. import org.springframework.context.ApplicationContext;  
  8. import org.springframework.context.ApplicationContextAware;  
  9.  
  10. import org.springframework.core.io.ClassPathResource;  
  11. import com.ibatis.sqlmap.client.SqlMapClient;  
  12.    
  13. public class BaseService implements ApplicationContextAware {  
  14.  
  15.     private static ApplicationContext ctx;  
  16.  
  17.     private static SqlMapClient sqlMapClient;  
  18.  
  19.     private static SqlMapClient sqlMapClientProxy;  
  20.  
  21.     private static BusinessInterface businessBean;  
  22.       
  23.     private static BaseService instance = new BaseService();  
  24.     
  25.  
  26.     /**  
  27.  
  28.      * @return 返回 静态类  
  29.  
  30.      */ 
  31.  
  32.     public static BaseService getInstance(){  
  33.  
  34.        return instance;  
  35.  
  36.     }  
  37.  
  38.     /**  
  39.  
  40.      * @return 返回 初始化BaseService,存于内存  
  41.  
  42.      */ 
  43.  
  44.     public void init(ApplicationContext ctx) {  
  45.  
  46.        setApplicationContext(ctx);  
  47.  
  48.        setSqlMapClient(ctx);  
  49.  
  50.        setBusinessBean(ctx);  
  51.  
  52. //     setSqlMapClientProxy(ctx);  
  53.  
  54.        System.out.println(" INFO - 初始化baseservice成功");  
  55.  
  56.     }  
  57.     public void setSqlMapClient(ApplicationContext ctx){  
  58.  
  59.        sqlMapClient = (SqlMapClient) ctx.getBean("sqlMapClient");  
  60.  
  61.     }      
  62.  
  63.     /**  
  64.  
  65.      * @return 返回 sqlMapClient。  
  66.  
  67.      */ 
  68.  
  69.     public SqlMapClient getInstanceSqlMapClient() {  
  70.       return this.sqlMapClient;  
  71.     }  
  72.  
  73.     /**  
  74.  
  75.      * 通过spring注入ApplicationContext  
  76.      *   
  77.      * @param ApplicationContext  
  78.  
  79.      * @return null  
  80.  
  81.      */ 
  82.  
  83.     public void setApplicationContext(ApplicationContext arg0) throws BeansException {  
  84.  
  85.        ctx = arg0;  
  86.  
  87.     }  
  88.  
  89.     public Object getBean(String beanName) {  
  90.  
  91.        return ctx.getBean(beanName);  
  92.  
  93.     }  
  94.     /**  
  95.  
  96.      * @return 返回 sqlMapClient。  
  97.  
  98.      */ 
  99.  
  100.     public SqlMapClient getSqlMapClient() {  
  101.  
  102.        return (SqlMapClient) ctx.getBean("sqlMapClient");  
  103.  
  104.     }  
  105.  
  106.     public void setSqlMapClientProxy(ApplicationContext ctx) {  
  107.  
  108.        sqlMapClientProxy= (SqlMapClient) ctx.getBean("sqlMapClientProxy");  
  109.  
  110.     }  
  111.     public SqlMapClient getSqlMapClientProxy() {  
  112.        return sqlMapClientProxy;  
  113.  
  114.     }  
  115.     public static BusinessInterface getBusinessBean() {  
  116.        return businessBean;  
  117.     }  
  118.  
  119.     public static void setBusinessBean(ApplicationContext ctx) {  
  120.  
  121.        businessBean = (BusinessInterface) ctx.getBean("businessBean");  
  122.  
  123.     }  
  124.  

Spring实现iBATIS事务回滚之BusinessInterface.java

  1. package com.test;  
  2. import java.sql.SQLException;  
  3.  
  4. public interface BusinessInterface {  
  5.  
  6.     public void hello() throws SQLException;  
  7.  

Spring实现iBATIS事务回滚之BusinessInterfaceImpl.java

  1. package com.test;  
  2.  
  3.    
  4.  
  5. import java.sql.SQLException;  
  6. import com.ibatis.sqlmap.client.SqlMapClient;  
  7.  
  8. public class BusinessInterfaceImpl implements BusinessInterface {  
  9.     public void hello() throws SQLException {  
  10.        System.out.println("hello Spring AOP.");  
  11.        SqlMapClient sqlMapClient = BaseService.getInstance().getInstanceSqlMapClient();  
  12.            sqlMapClient.startTransaction();  
  13.  
  14.            sqlMapClient.insert("testInsert","7");  
  15.  
  16.            System.out.println("1");  
  17.  
  18.            sqlMapClient.insert("testInsert","8");  
  19.  
  20.            System.out.println("2");  
  21.  
  22.            sqlMapClient.insert("testInsert","9");  
  23.  
  24.            System.out.println("3");  
  25.  
  26.            sqlMapClient.insert("testInsertWrong","10");  
  27.  
  28.            sqlMapClient.commitTransaction();   
  29.  
  30.     }  
  31.  

Spring实现iBATIS事务回滚之测试页面

  1. ﹤%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%﹥  
  2.  
  3. ﹤%  
  4.  
  5. String path = request.getContextPath();  
  6.  
  7. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  8.  
  9. %﹥  
  10.  
  11. ﹤!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"﹥  
  12.  
  13. ﹤html﹥  
  14.  
  15.   ﹤head﹥  
  16.  
  17.     ﹤base href="﹤%=basePath%﹥"﹥  
  18.  
  19.     ﹤title﹥My JSP 'index.jsp' starting page﹤/title﹥  
  20.  
  21.     ﹤meta http-equiv="pragma" content="no-cache"﹥  
  22.  
  23.     ﹤meta http-equiv="cache-control" content="no-cache"﹥  
  24.  
  25.     ﹤meta http-equiv="expires" content="0"﹥      
  26.  
  27.     ﹤meta http-equiv="keywords" content="keyword1,keyword2,keyword3"﹥  
  28.  
  29.     ﹤meta http-equiv="description" content="This is my page"﹥  
  30.  
  31.     ﹤!--  
  32.  
  33.     ﹤link rel="stylesheet" type="text/css" href="styles.css"﹥  
  34.  
  35.     --﹥  
  36.  
  37.   ﹤/head﹥  
  38.  
  39.   ﹤body﹥  
  40.  
  41.     This is my JSP page. ﹤br﹥  
  42.  
  43.   ﹤/body﹥  
  44.  
  45. ﹤/html﹥ 

Spring实现iBATIS事务回滚的相关信息就向你介绍到这里,希望对你了解Spring实现iBATIS事务回滚有所帮助。

相关文章推荐

项目开发-iBatis事务源码之事务提交和回滚

接上篇继续事务的提交和结束流程如下。    commitTransaction       SqlMapClientImpl的commitTransaction操作,类似startTransacti...

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数

给定A, B两个整数,不使用除法和取模运算,求A/B的商和余数。 1.   最基本的算法是,从小到大遍历: for (i = 2 to A -1)          if (i * B > A)...

利用K-means聚类算法根据经纬度坐标对中国省市进行聚类

K-means聚类算法是一种非层次聚类算法,在最小误差的基础上将数据划分了特定的类,类间利用距离作为相似度指标,两个向量之间的距离越小,其相似度就越高。程序读取全国省市经纬度坐标,然后根据经纬度坐标进...

Radon变换理论介绍与matlab实现--经验交流

本人最近在研究Radon变换,在查阅了各种资料之后在此写下个人的理解,希望与各位牛牛进行交流共同进步,也使得理解更加深刻些。 Radon变换的本质是将原来的函数做了一个空间转换,即,将原来的XY平...

Matlab绘图-很详细,很全面

Matlab绘图强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到所需图形,这类函数称为高层绘图函数。此外,Ma...

CT图像重建技术

由于csdn贴图不方便,并且不能上传附件,我把原文上传到了资源空间CT图像重建技术 1.引言 计算机层析成像(Computed Tomography,CT)是通过对物体进行不同角度的射线投影测量而...

linux查找目录下的所有文件中是否含有某个字符串

查找目录下的所有文件中是否含有某个字符串  find .|xargs grep -ri "IBM"  查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名  find .|xargs g...

Radon变换入门matlab CT原理

http://hi.baidu.com/hi9394/blog/item/0d492b8bfd714700c8fc7aa9.html 简介 图像投影,就是说将图像在某一方向上做线性积分(或理解为累...

Intel系列处理器的三种工作模式

Intel系列处理器的三种工作模式 微机中常用的Intel系列微处理器的主要发展过程是:8080,8086/8088,80186, 80286,80386,80486,Pentium,Pen...

js弹出框、对话框、提示框、弹窗总结

js弹出框、对话框、提示框、弹窗总结 一、JS的三种最常见的对话框 [javascript] view plaincopy //=...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring实现iBATIS事务回滚~
举报原因:
原因补充:

(最多只允许输入30个字)