lovejianglan 2009-07-01 11:56
浏览 208
已采纳

spring 下事务控制失败- -

applicationContext.xml配置如下:

[code="java"]<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">

 <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
    <constructor-arg><ref bean="dataSource"/></constructor-arg>
 </bean>





oracle.jdbc.driver.OracleDriver





jdbc:oracle:thin:@192.168.1.111:1521:ORA11





scott





tiger










[/code]

测试代码为:

[code="java"]package com.mycom.dwr;

import java.sql.PreparedStatement;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
public void test(){
String [] conf = new String[1];

    conf[0]="applicationContext.xml";

    ApplicationContext appContext = new ClassPathXmlApplicationContext(conf); 
    TestDwr us = (TestDwr)appContext.getBean("testDwr");
    us.getval();

}

}[/code]

[code="java"]package com.mycom.dwr;

import java.sql.Connection;
import java.sql.PreparedStatement;

import javax.naming.InitialContext;
import javax.sql.DataSource;
import javax.annotation.Resource;
import org.springframework.stereotype.Component;
import org.springframework.beans.factory.annotation.*;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.mycom.dao.BaseDao;

//@Component("BaseDao")
@Transactional
public class TestDwr implements BaseDao {
@Resource(name="simpleJdbcTemplate")
private SimpleJdbcTemplate simpleJdbcTemplate;
@Resource(name="dataSource")
private DataSource ds ;

@Resource(name="dataSource")
public void setDataSource(DataSource ds){
    this.ds=ds;
}

@Transactional
public String getval(){
    try {           
        String sql1 = "insert into dept(deptno,dname,loc) values (13,'eagle11','bj11')";
        String sql2 = "inser into dept(deptno,dname,loc) values (15,'eagle2','bj22')";
        simpleJdbcTemplate.update(sql1);
        simpleJdbcTemplate.update(sql2);
    } catch (Exception e) {
     e.printStackTrace();
    }
    return ret;
}

}[/code]

BaseDao.java:

[code="java"]package com.mycom.dao;

import javax.sql.DataSource;

public interface BaseDao {

public String getval();

}[/code]

执行测试程序Test。发现事务没有被控制

[b]问题补充:[/b]
谢谢,我增加
tx:annotation-driven/

测试时代码执行到
TestDwr us = (TestDwr)appContext.getBean("BaseDao");

就不继续了。点解
[b]问题补充:[/b]
我测试时 //@Component("BaseDao") 是没注释的。 - -

如果启动事务控制tx:annotation-driven/ 执行到getbean那就不执行了。如果没有这句,代码可以执行,但没事务控制 - -

  • 写回答

3条回答 默认 最新

  • layer555 2009-07-01 18:05
    关注

    TestDwr us = (TestDwr)appContext.getBean("BaseDao"); ? getBean应该按照bean的id来获取,BaseDao不是一个父类吗? 改成(TestDwr)appContext.getBean("testDwr");应该就OK乐

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

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题