加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 01:35:57 所属栏目:大数据 来源:网络整理
导读:我对这个问题有点恼怒.让我们检查是否有人实现了类似的东西. 我有一个带有8个WS的java 8 Web应用程序.一些这样的WS,通过JDBCTemplate进行插入和更新(由于性能需要,Hibernate不是一个选择),如果执行因异常而崩溃,我需要它们回滚. 我在spring app上下文文件中

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

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

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

  

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

private NamedParameterJdbcTemplate jdbcTemplate;
private DataSource datasource;

@Autowired
public void setDataSource(DataSource dataSource) {
    this.datasource = dataSource;
    this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
}
@Override
public boolean queryForModifying(String query,SqlParameterSource parameters) {

  int modifiedRows= 0;
  try {
      modifiedRows= this.jdbcTemplate.update(query,parameters);
  } catch (Exception e) {
      e.printStackTrace();
      numRegistrosAfectados = 0;
  }
  return (modifiedRows> 0) ? true : false;
}

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

@WebService
public interface IService{

    @WebMethod
    public method(MethodRequestType request) throws IllegalArgumentException,IllegalAccessException;

}

实施:

@WebService(endpointInterface = "com.package.IService")
@HandlerChain(file = "handler-chain.xml")
public class Service implements IService{

    @Autowired
    IDBController dbController;

使用“交易”方法:

@Transactional
private boolean inserts(HashMap

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

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

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

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

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

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

@Service
public class Service1 {

    @Transactional
    public void method1() { ... }

    public void method2() {
        method1();
    }
}

@Service
public class Service2 {

    @Autowired
    private Service1 service1;

    public void method1() {
        service1.method1();
    }

    public void method2() {
        service1.method2();
    }
}

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读