我想在我的Web应用程序(由Spring MVC 3提供支持)中设置一个TransactionManager,因为我需要一个注释为@Transactional的组件方法。TransactionManager和注解弹簧3问题
这是我的情况:
- web.xml中:为Spring的ContextLoaderListener(applicationContext.xml中和database.xml)
- applicationContext.xml的负载2 XML文件:包含一些豆类,我可以” t通过注释定义,加上注解的标签,加上通常的上下文:注释配置和上下文:组件扫描(这个组件扫描包括包含@Transactional方法的包)
- database.xml:包含数据源(我使用commons-dbcp的BasicDataSource),事务管理器定义和tx:annotat离子驱动。
我有一个@Component(DeleteComponent),它有一个接口和一个实现(DeleteComponentImpl)。实现类用@Component注释,并且有一个公共方法用@Transactional注解(我注释了具体类而不是接口,如Spring文档所述)。对于@Transactional我没有提出任何参数,因为默认情况很好。这个类有一些DAO(用@Repository注解)通过@Autowired注入。我只使用普通的JDBC(没有Hibernate或其他ORM)。这个@Component被注入一个@Controller(在spring-servlet.xml中定义)。
但是,如果注解为@Transactional的方法抛出异常(未选中,如RuntimeException),则不会回滚任何内容。数据库在异常之前保留更改。我使用Jetty Web服务器在本地测试我的应用程序。我注意到的事实是,似乎没有设置事务管理器。实际上,我的事务管理器被命名为“transactionManager”。该XML行成立注解驱动的事务是
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
如果我改变它使用一个不存在的bean的名字一样
<tx:annotation-driven transaction-manager="fake"/>
应用程序仍然部署正确,不抱怨。
我应该检查哪些技巧以使其工作?
谢谢。
为什么不从您的主appcontext.xml导入database.xml?如何在spring-servlet.xml中定义appcontext?组件扫描基础包与您的impl类的包相匹配? – abalogh