首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

Spring集成Ibatis时事务没有回滚!该怎么处理

2012-02-08 
Spring集成Ibatis时事务没有回滚!!!Spring ApplicationContext 配置文件:XML code!-- 定义DataSource --

Spring集成Ibatis时事务没有回滚!!!
Spring ApplicationContext 配置文件:

XML code
 
    <!-- 定义DataSource -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
        <property name="url" value="jdbc:oracle:thin:@10.132.224.203:1521:myorcl" />
        <property name="username" value="*****" />
        <property name="password" value="*****" />
    </bean>
   
    <bean id="sqlmapclient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation">
            <value>classpath:com/test/ibatis/sqlmap/sqlMapConfig.xml </value>
        </property>
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- Ibatis DAO 实现类 -->
    <bean id="iBatisDao" class="com.test.dao.impl.UserImpl">
        <property name="sqlMapClient">
            <ref local="sqlmapclient" />
        </property>
    </bean>   
       
    <!-- Struts Action类 注入业务类 -->
    <bean id="useraction" class="com.test.struts.action.UserAction">
<property name="user" ref="user_service"> </property>
    </bean>

    <!-- 业务类 注入dao实现类 -->
    <bean id="user_service" class="com.test.struts.service.UserService">
    <property name="dao" ref="iBatisDao"> </property>
    </bean>
       
    <!-- 事务管理 -->
    <bean id="transactionManage"
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"> </property>
    </bean>
   
    <!-- 装配事务 -->
    <bean id="transactionInterceptor"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="target" ref="user_service"> </property>
    <property name="transactionManager" ref="transactionManage"> </property>
    <property name="transactionAttributes">
    <props>
    <prop key="get*">PROPAGATION_REQUIRED,readOnly </prop>
    <prop key="*">PROPAGATION_REQUIRED,-MyException,-RemoteException,-SocketException </prop>
    </props>
    </property>
    </bean>


其中涉及的重要类:
UserImpl 数据层实现类:
Java code
public class UserImpl extends SqlMapClientDaoSupport implements IUserDao {    public void addUserInfo() {        UserModel umodel = new UserModel();        umodel.setId("4");        umodel.setName("lalala");        umodel.setPassword("123456789");        umodel.setState(1);        this.getSqlMapClientTemplate().insert(StaticSqlString.getADD_USER(), umodel);                //故意再插入一条数据导致错误        this.getSqlMapClientTemplate().insert(StaticSqlString.getADD_USER(), umodel);    }    public List getUserInfo() {        List list = null;        list = this.getSqlMapClientTemplate().queryForList(StaticSqlString.getSELECT_ALL_USER());        System.out.println(list.size());                return list;    }} 



UserService 业务类(事务控制):
Java code
    public List getUserInfo()    {        List list = null;        list = dao.getUserInfo();        return list;    }        public void addUser()throws RuntimeException{        try{            dao.addUserInfo();        }catch(DataAccessException es){            System.out.println("错误了");                        //抛出自定义错误MyException,继承自RuntimeException            throw new MyException(es.toString());        }    }


MyException:自定义错误类:
Java code
public class MyException extends RuntimeException{    public MyException(String msg){        super(msg);    }}


UserAction 中调用业务类方法新增数据:
Java code
    public String execute() throws Exception {        String type = request.getParameter("type").toString();        if(type.equals("1")){            List list = new ArrayList();            list = user.getUserInfo();            this.setUserlist(list);        }else{                user.addUser();        }        return "testok";    }


但不知道为什么在Spring中装配的声明事务似乎同空气一般不起任何作用,不知道是哪里设置错误还是代码上出错了,我有些怀疑是事务控制层对应不上事务装配中指定的类,但又不是非常确定,还请高手帮忙看看是哪里的问题了?多谢多谢!!

[解决办法]
没有申明切面,事务控制没有切进去。

热点排行