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乐

    已采纳该答案
    打赏 评论
  • layer555 2009-07-01 14:07

    这位同学从你的配置中似乎只看到配置了一个txManager,但是没有配置事务的pointcut和advisor,你可以试下添加个tx:annotation-driven/试试

    打赏 评论
  • li28544071 2009-07-01 14:10

    配置文件中加上

    打赏 评论

相关推荐 更多相似问题