为什么我的Spring的声明事务失效了?
DAO代码如下:
public class UserDAO extends BaseDAO {
public void insertTestData() {
Connection con = null;
PreparedStatement ps = null;
String sql = null;
try {
con = getConnection();
sql = "insert into oa_test_1(description) values(?)";
ps = con.prepareStatement(sql);
ps.setString(1, "TEST");
ps.execute();
String id = getIdentity(con);
if (1 == 1)
throw new RuntimeException();
sql = "insert into oa_test_2(description,parentid) values(?,?)";
ps = con.prepareStatement(sql);
ps.setString(1, "TEST_2");
setIntParam(ps, new Integer(id), 2);
ps.execute();
} catch (SQLException e) {
throw new RuntimeException();
} finally {
safeCloseStatementOrRs(ps);
safeCloseConnection(con);
}
}
}
public class BaseDAO {
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public Connection getConnection() {
try {
return dataSource.getConnection();
} catch (Exception e) {
throw new RuntimeException();
}
}
}
Service 代码如下:
public class UserManagerService {
private UserDAO userDao;
public void setUserDao(UserDAO userDao) {
this.userDao = userDao;
}
public User userLogon(String username, String password) {
userDao.insertTestData();
return null;
}
}
Controller 代码如下:
public class PublicController extends MultiActionController {
private UserManagerService userService;
public void setUserService(UserManagerService userService) {
this.userService = userService;
}
public ModelAndView handleLogin(HttpServletRequest request,
HttpServletResponse response) throws ServletException {
try {
userService.userLogon("james", "12345688");
//WebUtils.setSessionAttribute(request, "user", user);
return new ModelAndView(new RedirectView("/cm/index.htm"));
} catch (Exception e) {
System.out.println("transaction failed.........................");
}
return null;
}
}
配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">
<jee:jndi-lookup id="dataSource" jndi-name="jndi_cm"/>
<bean id="transactionManager" jndi-name="jndi_cm"/>得到的DataSource不可以?<property name="target">
<bean value="PROPAGATION_REQUIRED" />
</bean>
<bean id="matchAllTxInterceptor" ref="transactionManager" />
<property name="transactionAttributeSource" ref="matchAllWithPropReq" />
</bean>
<bean id="autoProxyCreator" />
</list>
</property>
<property name="beanNames">
<list>
<idref local="userService" />
</list>
</property>
</bean>
<bean id="userService" class="com.cm.main.service.UserManagerService">
<property name="userDao"><ref bean="userDao"/></property>
</bean>
还是失败,原来需要DataSourceUtils.getConnection(dataSource);方式取得数据库连接............ 3 楼 cnliuxj 2007-02-07 希望你解决问题了,我也遇到类似的问题不知怎么弄 4 楼 sinoalex 2007-08-21 不要自己抛异常,spring不知道那是什么异常,在catch中直接抛出原来的异常就可以了,如果想人为的话,我想也不应直接抛RuntimeException,换成DataAccessException试试。