论坛首页 Java企业应用论坛

Spring+weblogic在事务控制中出现的问题,请教

浏览 6109 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-03-22  
Spring+weblogic在事务控制中出现的问题,insertUser()里面的两条语句一句成功一句失败时候事务并没有回滚而是实实在在的提交到数据库了,具体的配置及代码如下:

spring配置文件如下:

〈?xml version="1.0" encoding="UTF-8"?〉
〈!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"〉
〈beans〉
〈!--定义JNDI数据源--〉
〈bean id="myDataSource"
class="org.springframework.jndi.JndiObjectFactoryBean"〉
〈property name="jndiName"〉
〈value〉jdbc/OracleDatasource〈/value〉
〈/property〉
〈property name="resourceRef"〉
〈value〉false〈/value〉
〈/property〉
〈property name="jndiEnvironment"〉
〈props〉
〈prop key="java.naming.provider.url"〉
t3://localhost:7001
〈/prop〉
〈prop key="java.naming.factory.initial"〉
weblogic.jndi.WLInitialContextFactory
〈/prop〉
〈/props〉
〈/property〉
〈/bean〉


〈!--定义基于JDBC的事务管理--〉

〈bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager"〉
〈property name="dataSource"〉
〈ref local="myDataSource" /〉
〈/property〉
〈/bean〉


〈!--定义具体的UserDao对象,基于JDBC操作模式--〉
〈bean id="UserDao" class="lyz.com.util.dao.UserDao"〉
〈property name="dataSource"〉
〈ref local="myDataSource" /〉
〈/property〉
〈/bean〉

〈!--对UserDao对象进行事务管理设定--〉
〈bean id="userDaoProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"〉
〈property name="proxyTargetClass"〉
〈value〉true〈/value〉
〈/property〉
〈property name="transactionManager"〉
〈ref local="transactionManager" /〉
〈/property〉
〈!--指定被管理的bean--〉
〈property name="target"〉
〈ref local="UserDao" /〉
〈/property〉
〈property name="transactionAttributes"〉
〈props〉
〈prop key="in*"〉PROPAGATION_REQUIRED〈/prop〉
〈prop key="*"〉PROPAGATION_REQUIRED,readOnly〈/prop〉
〈/props〉
〈/property〉
〈/bean〉


〈!--用来进行struts映射,具体填写方式同struts--〉
〈bean name="/login" class="com.lyz.struts.action.LoginAction"
singleton="false"〉
〈property name="userDao"〉
〈ref local="UserDao" /〉
〈/property〉
〈property name="hibUserDao"〉
〈ref local="hibUserDao" /〉
〈/property〉
〈/bean〉

〈/beans〉

源代码如下:

package lyz.com.util.dao;


import javax.sql.DataSource;


import org.springframework.jdbc.core.JdbcTemplate;

public class UserDao  {
   
    private JdbcTemplate jdbcTemplate;
    private DataSource dataSource;
    public void insertUser()   {
        jdbcTemplate = new JdbcTemplate(getDataSource());
        jdbcTemplate.update("insert into t_user values ('0007','xiaxin','001')");
        jdbcTemplate.update("insert into t_user values ('0008','erica','002')");
    }


    /**
     * @return Returns the datasource.
     */;
    public DataSource getDataSource() {
        return dataSource;
    }
    /**
     * @param datasource The datasource to set.
     */
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }
}


测试代码如下:
package test.lyz.com.util;

import junit.framework.TestCase;
import lyz.com.util.dao.UserDao;

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


public class TestUserDao extends TestCase {

ApplicationContext ctx = null;
/*
* @see TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
//PropertyConfigurator.configure("D:\\Develop\\Tools\\Eclips\\eclipse\\workspace\\SpringDev\\JavaSource\\log4j.properties");
ctx=new FileSystemXmlApplicationContext("D:\\Develop\\Tools\\Eclips\\eclipse\\workspace\\SpringWeb\\WebRoot\\WEB-INF\\applicationContext.xml");
}

/*
* @see TestCase#tearDown()
*/
protected void tearDown() throws Exception {
   
super.tearDown();
}

/**
* Constructor for TestUser.
* @param arg0
/
public TestUser(String arg0) {
super(arg0);
}
*/
public void testGetUserName() {
UserDao user = (UserDao)ctx.getBean("UserDao");
user.insertUser();
//org.springframework.transaction.interceptor.TransactionProxyFactoryBean


//
// assertEquals("测试user.getUserName()","liyongzhou",user.getUserName());
}

}
   发表时间:2005-03-22  
自己顶一下,期待有那位同仁能够予以协助
1 请登录后投票
   发表时间:2005-03-22  
UserDao user = (UserDao)ctx.getBean("UserDao");
从你配置文件来看,你应该使用proxy后的dao。
1 请登录后投票
   发表时间:2005-03-22  
rongsantang 写道
UserDao user = (UserDao)ctx.getBean("UserDao");
从你配置文件来看,你应该使用proxy后的dao。


不明白什么意思,请明示
1 请登录后投票
   发表时间:2005-03-23  
也就是说你应该UserDao user = (UserDao) ctx.getBean("userDaoProxy");
这样取出的才是经过proxy过的。
0 请登录后投票
   发表时间:2005-03-23  
action中
引用

〈property name="userDao"〉
〈ref local="UserDao" /〉
〈/property〉


修改成

〈property name="userDao"〉
〈ref local="userDaoProxy" /〉
〈/property〉
0 请登录后投票
   发表时间:2005-03-24  
谢谢楼上各位老大

终于搞定了

此问题可是迷惑了我好多天,谢谢!!!
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics