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

spring+aop事务配置失败有关问题,大家帮忙分析下

2012-04-14 
spring+aop事务配置失败问题,大家帮忙分析下接口:Java codepublic interface UserService {public void ad

spring+aop事务配置失败问题,大家帮忙分析下
接口:

Java code
 
public interface UserService {   
public void addUser(String username, String password);   
 
public void deleteUser(int id);   
 
public void updateUser(int id, String username);   
 
public List queryUser(String username);   


接口的实现:
Java code
 
public class UserServiceImpl implements UserService {     
    private DataSource dataSource;     
    public void addUser(String username, String password) {     
        //正确的sql     
        String sql = "insert into aaa (t1,t2,t3) values (seq_food.nextval,'"+username+"','"+password+"')";     
        System.out.println(sql);     
        JdbcTemplate jdbcTemplate = new JdbcTemplate(getDataSource());     
        jdbcTemplate.update(sql); 
    }     
   
    public void deleteUser(int id) {     
   
    }     
   
    public void updateUser(int id, String username) {     
        //错误的sql,测试回滚     
        String sql = "update aa set t2='"+username+"' where t1='"+id+"'";     
        System.out.println(sql);     
        JdbcTemplate jdbcTemplate = new JdbcTemplate(getDataSource());     
        jdbcTemplate.update(sql);     
    }     
   
    public List queryUser(String username) {     
   
        return null;     
    }     
   
    public DataSource getDataSource() {     
        return dataSource;     
    }     
   
    public void setDataSource(DataSource dataSource) {     
        this.dataSource = dataSource;     
    }     
   
}

测试servlet:
Java code
public class UserServlet extends HttpServlet {                         public void doGet(HttpServletRequest request, HttpServletResponse response)                  throws ServletException, IOException {                   doPost(request, response);          }                         public void doPost(HttpServletRequest request, HttpServletResponse response)                  throws ServletException, IOException {              request.setCharacterEncoding("utf-8");              response.setContentType("text/html; charset=utf-8");              ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());              try {                  UserService userService = (UserService) ctx.getBean("userService");                  userService.addUser("1", "2");                  userService.updateUser(10032190, "zf");              } catch (DataAccessException e) {                  e.printStackTrace();              }                        }           } 


spring配置文件:
XML code
<?xml version="1.0" encoding="GB2312"?>      <beans xmlns="http://www.springframework.org/schema/beans"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"            xmlns:aop="http://www.springframework.org/schema/aop"            xmlns:tx="http://www.springframework.org/schema/tx"            xsi:schemaLocation="             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd             http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">                    <bean id="dataSource"               class="org.springframework.jdbc.datasource.DriverManagerDataSource">              <property name="driverClassName">                  <value>org.logicalcobwebs.proxool.ProxoolDriver</value>              </property>              <property name="url">                  <value>proxool.foodManage</value>              </property>          </bean>                    <bean id="jdbcTemplate"             class="org.springframework.jdbc.core.JdbcTemplate">              <property name="dataSource" ref="dataSource"></property>          </bean>          <!-- 事务管理 -->          <bean id="txManager"             class="org.springframework.jdbc.datasource.DataSourceTransactionManager">              <property name="dataSource" ref="dataSource"/>          </bean>                    <tx:advice id="txAdvice" transaction-manager="txManager">              <tx:attributes>                  <tx:method name="query*" propagation="REQUIRED" read-only="true" rollback-for="Exception"/>                  <tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/>              </tx:attributes>          </tx:advice>                    <aop:config>              <aop:pointcut id="userServiceOperation" expression="execution(* cn.com.xy.service.*.*(..))"/>              <aop:advisor advice-ref="txAdvice" pointcut-ref="userServiceOperation"/>          </aop:config>                    <bean id="userService" class="cn.com.xy.imp.UserServiceImpl">              <property name="dataSource" ref="dataSource" />          </bean>      </beans>

做了一个简单的测试,使用上述的配置和测试代码,运行后,没有更新成功,但还是插入了一条新数据,事务回滚没有起作用,正确的应该是既不更新也不插入,编程式事务测试是好的,但是声明式事务就不对了,可能spring的配置不对,还望大家帮忙看看。

[解决办法]
如果你把事务加载action上,那么模型不是模型,控制器不是控制,这样才复杂

而且action是与web服务器相关联的,加上一层事务代理,不知道会有什么问题发生

我的回答到此结束,呵呵

热点排行