FAT0708 2009-03-11 09:17
浏览 170
已采纳

spring+aop事务配置失败问题,大家帮忙分析下(入门区没人回)

接口:


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);
}


接口的实现:

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:

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 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">
&lt;bean id="dataSource"    
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;   
    &lt;property name="driverClassName"&gt;   
        &lt;value&gt;org.logicalcobwebs.proxool.ProxoolDriver&lt;/value&gt;   
    &lt;/property&gt;   
    &lt;property name="url"&gt;   
        &lt;value&gt;proxool.foodManage&lt;/value&gt;   
    &lt;/property&gt;   
&lt;/bean&gt;   

&lt;bean id="jdbcTemplate"  
    class="org.springframework.jdbc.core.JdbcTemplate"&gt;   
    &lt;property name="dataSource" ref="dataSource"&gt;&lt;/property&gt;   
&lt;/bean&gt;   
&lt;!-- 事务管理 --&gt;   
&lt;bean id="txManager"  
    class="org.springframework.jdbc.datasource.DataSourceTransactionManager"&gt;   
    &lt;property name="dataSource" ref="dataSource"/&gt;   
&lt;/bean&gt;   

&lt;tx:advice id="txAdvice" transaction-manager="txManager"&gt;   
    &lt;tx:attributes&gt;   
        &lt;tx:method name="query*" propagation="REQUIRED" read-only="true" rollback-for="Exception"/&gt;   
        &lt;tx:method name="*" propagation="REQUIRED" rollback-for="Exception"/&gt;   
    &lt;/tx:attributes&gt;   
&lt;/tx:advice&gt;   

&lt;aop:config&gt;   
    &lt;aop:pointcut id="userServiceOperation" expression="execution(* cn.com.xy.service.*.*(..))"/&gt;   
    &lt;aop:advisor advice-ref="txAdvice" pointcut-ref="userServiceOperation"/&gt;   
&lt;/aop:config&gt;   

&lt;bean id="userService" class="cn.com.xy.imp.UserServiceImpl"&gt;   
    &lt;property name="dataSource" ref="dataSource" /&gt;   
&lt;/bean&gt;   

</beans>


做了一个简单的测试,使用上述的配置和测试代码,运行后,没有更新成功,但还是插入了一条新数据,事务回滚没有起作用,正确的应该是既不更新也不插入,编程式事务测试是好的,但是声明式事务就不对了,可能spring的配置不对,还望大家帮忙看看。
问题补充:
KimShen的方法:
<aop:pointcut id="userServiceOperation" expression="target(UserServiceImpl)"/>
我测试了,还是不行。
问题补充:
lib里有aspectjweaver.jar这个jar包,KimShen说的“启动”是什么意思?
问题补充:
我是服务器模式,使用KimShen的方法还是没有回滚。
问题补充:
-javaagent:d:/aspectjweaver.jar
这个语句在哪里执行?能具体一点吗?谢谢。
  • 写回答

4条回答 默认 最新

  • Download_Man 2009-03-11 11:38
    关注

    保守估计可能是aspectj表达式错误了

    你可以转成用target来测试下配置是否启动了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析