-
Spring 2.5.5 @Transactional 的问题10
这个问题可能有点初级,要是看着不顺眼打新手贴吧。
在一个新项目里打算开始用Spring 2.5.5和大量使用annotation,可是@Transactional总是玩不转。
在applicationContext.xml里面:
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"> </bean> <context:annotation-config> <context:component-scan base-package="se.posten.ida"> <context:include-filter type="regex" expression=".*DAOImpl"> <context:include-filter type="regex" expression=".*ServiceImpl"> </context:component-scan> <tx:annotation-driven transaction-manager="transactionManager">
定义一个Business Interface:
public interface SomeService { void foobar(); }
实现类:
@Service("someService") public class SomeServiceImpl implements SomeService { @Resource(name="someDAO") private SomeDAO someDAO; @Transactional (readOnly=false, isolation = Isolation.READ_COMMITTED) public void foobar() { someDAO.foobar(); } }
Web Controller
public class SomeController { @Resource(name="someService") private SomeService someService; }
这里面用的是普通的JdbcTemplate, 结构是经典的Controller-Service-DAO.
换回经典的TransactionProxyFactoryBean, 工作的好好的。
我是不是什么地方忘配置了?
Classpath下面只有spring.jar 和 spring-mvc.jar,试了把 cglib-nodep-2.1_3.jar 拷贝过去也没用。
折腾了一天,实在黔驴技穷了。
问题补充:
比如说我这个business method 调用DAO两个方法,第一个成功了,第二个违反数据库的constraint,失败了,那么事务回滚应该把第一个DAO的更改rollback,但是这里@Transactional一点作用都没有,打开Spring的logging发现它根本就没调用任何和Transaction有关的Interceptor.
这里没有什么异常好贴的,比如我在business method里面,调用DAO方法后,写个throw new RuntimeException,那么如果事务配置好了,应该rollback, 但是这里Transaction一点作用没有。
如果把配置改成在XML里用TransactionProxyFactoryBean, 就工作了。
这个Transactional annotation就不工作。
问题补充:
实在不好意思,作为老会员,没有关心网站的新进展,前两天在Java论坛先发了个帖子问这个问题,发完了发现问题该发到问答频道去,于是又重发了一份,本来想发个短信给管理员删掉论坛帖子的,但当时已经半夜三点了,太困了,想第二天起来发,第二天起来管理员已经把论坛帖子移到问答频道去了,结果问答频道有两个同样的问题,
http://www.iteye.com/problems/2646
http://www.iteye.com/problems/2649
请大家去问题2646跟踪最新更新吧,特别感谢小疯子还自己写了程序试验。
我已经请求管理员删除这个2649号问题,把大家的回答搬到2646去。
2008年8月13日 09:05
3个答案 按时间排序 按投票排序
-
楼主提供的信息很乱, 不知道怎么看!不过我做了个简单的例子试了下, 没有发现楼主的问题, 很简单, 帖出来, 供楼主参考:
CREATE TABLE `user` ( `id` int(11) NOT NULL auto_increment, `name` varchar(64) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
接口和实现:public interface UserDao { void save(String name); } /************************************* @Service public class UserDaoImpl extends JdbcDaoSupport implements UserDao { @Transactional(readOnly = false) public void save(String name) { getJdbcTemplate().execute("insert into user(name) values ('" + name + "')"); // throw new IllegalStateException();//rollback } }
service层:@Service("service") public class UserService { private UserDao userDao; public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void exe() { userDao.save("fuxueliang"); } }
spring配置:<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-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/context http://www.springframework.org/schema/context/spring-context-2.5.xsd" default-autowire="byType"> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="minPoolSize" value="5" /> <property name="idleConnectionTestPeriod" value="3600" /> <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1/javaeye?useUnicode=true&characterEncoding=UTF-8" /> <property name="user" value="root" /> <property name="password" value="root" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> <context:component-scan base-package="com.rondy.application.jdbc"> <context:include-filter type="regex" expression=".*DaoImpl" /> <context:include-filter type="regex" expression=".*Service" /> </context:component-scan> </beans>
测试类:public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("com/rondy/application/jdbc/application.jdbc.xml"); UserService service = (UserService) applicationContext.getBean("service"); service.exe(); }
楼主可以修改注释掉的exception部分,看看是不是rollback了.2008年8月13日 10:57
相关推荐
Spring 2.5.5是该框架的一个重要版本,它提供了许多关键特性和改进,以提高开发效率和应用程序的稳定性。以下是对Spring 2.5.5的详细解析: 1. **依赖注入(DI)增强**:Spring的核心特性之一就是依赖注入,它允许...
Spring 2.5.5 版本是该框架的一个较早版本,但仍然包含了许多关键特性,是学习和理解Spring框架原理的好起点。 在Spring框架中,最重要的概念之一是依赖注入(Dependency Injection,DI)。这个版本的Spring已经...
4. **JDBC抽象和事务管理**:Spring 2.5.5提供了更高级别的JDBC抽象层,简化了数据库访问代码,并且支持声明式事务管理,通过@Transactional注解实现事务控制。 5. **DAO支持**:对于ORM框架如Hibernate和iBatis,...
Spring Framework 2.5.5是该框架的一个历史版本,这个版本在当时包含了众多功能改进和优化,为开发者提供了更强大的工具和更灵活的配置选项。 Spring 框架的核心特性包括依赖注入(Dependency Injection,DI)和...
2.5.5 版本是 Spring 框架的一个较旧版本,尽管如此,它仍然包含了许多重要的功能和概念,对于理解 Spring 的发展历程以及其基本原理非常有帮助。 首先,Spring 框架的核心特性之一是依赖注入(Dependency ...
2.5版本在AOP方面也有所提升,支持更多的注解驱动的切面,如@Transactional,使得事务管理更加便捷。 5. **数据访问/集成**: Spring 2.5提供了对各种数据源(如JDBC、ORM框架如Hibernate、JPA等)的支持。在2.5中...
提供的`spring2.5.5_API.chm`文件是Spring 2.5的官方API文档,包含了详细的类和接口描述,是学习和参考的重要资料。而`Spring2.5开发简明教程中文版.pdf`则可能是针对这个版本的一本实用教程,可以帮助读者深入理解...
2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务...
2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态语言支持 2.6.2. 增强的测试支持 2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务...
- Spring:spring-framework-2.5.5-with-dependencies.zip - Hibernate:hibernate-distribution-3.3.1.GA-dist.zip - **其他依赖**:MySQL JDBC驱动包 mysql-connector-java-5.0.8-bin.jar #### 三、Hibernate ...