java - DataSourceTransactionManager with myBatis roll back not work -


i trying write demo learn spring transaction. here configuration in spring-config.xml:

<bean id="datasource" class="org.apache.tomcat.jdbc.pool.datasource" destroy-method="close" scope="prototype">         <property name="driverclassname" value="com.mysql.jdbc.driver"/>         <property name="url" value="jdbc:mysql://localhost/test"/>         <property name="username" value="root"/>         <property name="password" value="#bugsfor$"/>    </bean>          <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager">           <property name="datasource" ref="datasource" />    </bean>      <tx:advice id="txadvice" transaction-manager="transactionmanager">           <tx:attributes>                                       <tx:method name="get*" read-only="true"/>                  <tx:method name="*"/>           </tx:attributes>    </tx:advice>     <aop:config>           <aop:pointcut id="categorydaooperation" expression="execution(* com.ea.test.dao.categorydao.*(..))"/>           <aop:advisor advice-ref="txadvice" pointcut-ref="categorydaooperation"/>    </aop:config>     <!-- define sqlsessionfactory -->    <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean">           <property name="datasource" ref="datasource"/>           <property name="mapperlocations">                  <list>                         <value>classpath:mapper/categorymapper.xml</value>                  </list>           </property>    </bean>     <bean id="categorymapper" class="org.mybatis.spring.mapper.mapperfactorybean">           <property name="mapperinterface" value="com.ea.test.mapper.categorymapper"/>           <property name="sqlsessionfactory" ref="sqlsessionfactory"/>    </bean>    <bean id="categorydao" class="com.ea.test.dao.categorydao">           <property name="categorymapper" ref="categorymapper"/>    </bean> 

the following categorydao.java

public class categorydao { categorymapper categorymapper;  public void setcategorymapper(categorymapper categorymapper) {     this.categorymapper = categorymapper; }   public categorydb get(int id) {     logger.info("start category id: {}", id);     categorydb retvalue = categorymapper.get(id);     logger.info("get category id: {} successfully", id);     return retvalue; }  public void save(categorydb categorydb) {     categorymapper.save(categorydb);     throw  new unsupportedoperationexception("unsupported");  }  } 

categoryservice.java

public class categoryservice { public static void main(string[] args) throws exception {     applicationcontext context = new classpathxmlapplicationcontext(new string[] {             "spring-config.xml"     });      categorydao categorydao = (categorydao) context.getbean("categorydao");     categorydb categorydb = new categorydb();     categorydb.setid(1);     categorydb.setname("aaa");     categorydao.save(categorydb);  } } 

here debug log when run it

08/07/15 12:22:40:344: [main]: debug org.springframework.jdbc.datasource.datasourcetransactionmanager  - acquired connection [proxyconnection[pooledconnection[com.mysql.jdbc.jdbc4connection@325dc1bc]]] jdbc transaction   08/07/15 12:22:40:348: [main]: debug org.springframework.jdbc.datasource.datasourcetransactionmanager  - switching jdbc connection [proxyconnection[pooledconnection[com.mysql.jdbc.jdbc4connection@325dc1bc]]] manual commit   08/07/15 12:22:40:374: [main]: debug org.mybatis.spring.sqlsessionutils  - creating new sqlsession   08/07/15 12:22:40:377: [main]: debug org.mybatis.spring.sqlsessionutils  - registering transaction synchronization sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@27589aa5]   08/07/15 12:22:40:407: [main]: debug org.springframework.jdbc.datasource.datasourceutils  - fetching jdbc connection datasource   08/07/15 12:22:40:407: [main]: debug org.springframework.jdbc.datasource.datasourceutils  - registering transaction synchronization jdbc connection   08/07/15 12:22:40:407: [main]: debug org.mybatis.spring.transaction.springmanagedtransaction  - jdbc connection [proxyconnection[pooledconnection[com.mysql.jdbc.jdbc4connection@1d10e937]]] managed spring   08/07/15 12:22:40:408: [main]: debug com.ea.test.mapper.categorymapper.save  - ooo using connection [proxyconnection[pooledconnection[com.mysql.jdbc.jdbc4connection@1d10e937]]]   08/07/15 12:22:40:416: [main]: debug com.ea.test.mapper.categorymapper.save  - ==>  preparing: insert category ( category_id, category_name ) values ( ?, ? )    08/07/15 12:22:40:456: [main]: debug com.ea.test.mapper.categorymapper.save  - ==> parameters: 1(integer), aaa(string)   08/07/15 12:22:40:492: [main]: debug org.mybatis.spring.sqlsessionutils  - releasing transactional sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@27589aa5]   08/07/15 12:22:40:493: [main]: debug org.springframework.jdbc.datasource.datasourcetransactionmanager  - initiating transaction rollback   08/07/15 12:22:40:493: [main]: debug org.springframework.jdbc.datasource.datasourcetransactionmanager  - rolling jdbc transaction on connection [proxyconnection[pooledconnection[com.mysql.jdbc.jdbc4connection@325dc1bc]]]   08/07/15 12:22:40:494: [main]: debug org.mybatis.spring.sqlsessionutils  - transaction synchronization rolling sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@27589aa5]   08/07/15 12:22:40:494: [main]: debug org.mybatis.spring.sqlsessionutils  - transaction synchronization closing sqlsession [org.apache.ibatis.session.defaults.defaultsqlsession@27589aa5]   08/07/15 12:22:40:494: [main]: debug org.springframework.jdbc.datasource.datasourceutils  - returning jdbc connection datasource   08/07/15 12:22:40:495: [main]: debug org.springframework.jdbc.datasource.datasourcetransactionmanager  - releasing jdbc connection [proxyconnection[pooledconnection[com.mysql.jdbc.jdbc4connection@325dc1bc]]] after transaction   08/07/15 12:22:40:495: [main]: debug org.springframework.jdbc.datasource.datasourceutils  - returning jdbc connection datasource exception in thread "main" java.lang.unsupportedoperationexception: unsupported @ com.ea.test.dao.categorydao.save(categorydao.java:40) @ com.ea.test.dao.categorydao$$fastclassbycglib$$c0f75c81.invoke(<generated>) @ net.sf.cglib.proxy.methodproxy.invoke(methodproxy.java:191) @ org.springframework.aop.framework.cglib2aopproxy$cglibmethodinvocation.invokejoinpoint(cglib2aopproxy.java:689) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:150) @ org.springframework.transaction.interceptor.transactioninterceptor.invoke(transactioninterceptor.java:110) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172) @ org.springframework.aop.interceptor.exposeinvocationinterceptor.invoke(exposeinvocationinterceptor.java:90) @ org.springframework.aop.framework.reflectivemethodinvocation.proceed(reflectivemethodinvocation.java:172) @ org.springframework.aop.framework.cglib2aopproxy$dynamicadvisedinterceptor.intercept(cglib2aopproxy.java:622) @ com.ea.test.dao.categorydao$$enhancerbycglib$$4d1a773e.save(<generated>) @ com.ea.test.service.categoryservice.main(categoryservice.java:25) @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) @ sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57) @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) @ java.lang.reflect.method.invoke(method.java:606) @ com.intellij.rt.execution.application.appmain.main(appmain.java:134) 

the categorydao throw unsupportedoperationexecption, think catetegorymapper.save rollback. not. datasource.defaultautocommit true, catetegorymapper.save should commit before throw unsupportedoperationexecption. , set datasource.defaultautocommit false, found catetegorymapper.save never commit, not matter throwing unsupportedoperationexecption or not. don't know why.

is there wrong in config file or did have misunderstand it. many thanks

i know wrong configuration. make stupid mistake. config scope of datasource prototype. , there 2 different datasource in sqlsessionfactory , transactionmanager. , remove scope works

<bean id="datasource" class="org.apache.tomcat.jdbc.pool.datasource">     <property name="driverclassname" value="com.mysql.jdbc.driver"/>     <property name="url" value="jdbc:mysql://localhost/test"/>     <property name="username" value="root"/>     <property name="password" value="#bugsfor$"/> </bean>  

Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -