java – Spring事务不能正常运行JAX WS JDBC

前端之家收集整理的这篇文章主要介绍了java – Spring事务不能正常运行JAX WS JDBC前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我对这个问题有点恼怒.让我们检查是否有人实现了类似的东西.

我有一个带有8个WS的java 8 Web应用程序.一些这样的WS,通过JDBCTemplate进行插入和更新(由于性能需要,Hibernate不是一个选择),如果执行因异常而崩溃,我需要它们回滚.

我在spring app上下文文件中有以下数据源和事务管理器配置(Tomcat的server.xml / context.xml中的jndi资源):

  1. diobjectfactorybean">

另一方面,我有一个dataBase DBcontroller.class的唯一访问点,它有一个插入,删除和更新的通用方法

  1. private NamedParameterJdbcTemplate jdbcTemplate;
  2. private DataSource datasource;
  3. @Autowired
  4. public void setDataSource(DataSource dataSource) {
  5. this.datasource = dataSource;
  6. this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
  7. }
  8. @Override
  9. public boolean queryForModifying(String query,sqlParameterSource parameters) {
  10. int modifiedRows= 0;
  11. try {
  12. modifiedRows= this.jdbcTemplate.update(query,parameters);
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. numRegistrosAfectados = 0;
  16. }
  17. return (modifiedRows> 0) ? true : false;
  18. }

最后我有一个WS接口这样:

  1. @WebService
  2. public interface IService{
  3. @WebMethod
  4. public method(MethodRequestType request) throws IllegalArgumentException,IllegalAccessException;
  5. }

实施:

  1. @WebService(endpointInterface = "com.package.IService")
  2. @HandlerChain(file = "handler-chain.xml")
  3. public class Service implements IService{
  4. @Autowired
  5. IDBController dbController;

使用“交易”方法

  1. @Transactional
  2. private boolean inserts(HashMap

它应该在非WS项目上正常工作,但正如我发现没有那么简单的方法来完成这项工作.

首先我认为它没有回滚,但现在我很确定它不会创建交易.

stackoverflow中有一些类似的帖子,但没有一个能解决我的问题.我已经谷歌了很多,建议的唯一方法是WS-AtomicTransactions,我从未听说过.

我已经尝试了几乎所有的XML配置文件,我甚至尝试以编程方式管理事务,但由于它是一个连接池,我无法将自动提交设置为false,因此我可以强制回滚.

因为如果它对任何人都有用,我为每个WS实现了肥皂处理程序,看起来像这样:

  1. public class ServiceHandler implements SOAPHandler
最佳答案
重要的是你调用@Transactional注释的方法.例如,如果你有:

  1. @Service
  2. public class Service1 {
  3. @Transactional
  4. public void method1() { ... }
  5. public void method2() {
  6. method1();
  7. }
  8. }
  9. @Service
  10. public class Service2 {
  11. @Autowired
  12. private Service1 service1;
  13. public void method1() {
  14. service1.method1();
  15. }
  16. public void method2() {
  17. service1.method2();
  18. }
  19. }

>调用service2.method2()不会创建事务.
>调用service2.method1()将创建一个.

由于Spring处理Proxies和AOP的方式.

猜你在找的Spring相关文章