database - 如何使用普通 jdbc 来使用分布式事务 JTA

标签 database jpa jdbc struts2 jta

我对JTA一无所知,要了解整体场景,请点击此链接How to maintain acid property of 3 sequential transaction of three diffrenet databases ,但是根据帖子的建议,我必须使用分布式事务。我正在使用 apache-tomcat 服务器。

但是正如我所说,我对 JTA 不了解,所以我的问题是,我有超过 15 个数据库连接,并且根据某些条件,它们各自的数据库已连接。所以我无法为每个数据库创建 hibernate.cfg.xml 以及 session 工厂和实体。

所以我的问题是,我可以将 JTA 与普通 jdbc 一起使用吗? ,如果可能的话,请给我提供一些链接或示例。

最佳答案

是的。您可以将 JTA 与普通 JDBC 结合使用。总体思路是,不要使用 JDBC Connection对象来声明事务边界,您可以使用 JTA 实现提供的事务管理器对象来声明事务边界。

例如,在 Bitronix Transaction Manager 的情况下,声明跨多个数据库的事务边界 Connection可以通过以下代码完成:

        PoolingDataSource derbyDataSource1 = new PoolingDataSource();
        derbyDataSource1.setClassName("org.apache.derby.jdbc.EmbeddedXADataSource");
        derbyDataSource1.setUniqueName("derby1");  
        derbyDataSource1.getDriverProperties().setProperty("databaseName", "database1");
        derbyDataSource1.init();

        PoolingDataSource derbyDataSource2= new PoolingDataSource();
        derbyDataSource2.setClassName("org.apache.derby.jdbc.EmbeddedXADataSource");
        derbyDataSource2.setUniqueName("derby2");
        derbyDataSource2.getDriverProperties().setProperty("databaseName", "database2");
        derbyDataSource2.init();

        BitronixTransactionManager btm = TransactionManagerServices.getTransactionManager();

        btm.begin();
        try {
            Connection c1= derbyDataSource1.getConnection();
            Connection c2= derbyDataSource2.getConnection();

            /***Use c1 and c2 to execute statements again their corresponding DBs as usual**/


            btm.commit();
        } catch (SQLException ex) {
            ex.printStackTrace();
            btm.rollback();
        }

关于database - 如何使用普通 jdbc 来使用分布式事务 JTA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13283176/

相关文章:

c# - WPF - MVVM - 谁负责新的 DataProvider 连接?

javascript - HTML - Javascript 连接到数据库

java - 过滤掉 JPA 查询中的嵌套对象

php - 从sql表中创建一个列表

mysql - 设置Mysql参数group_concat_max_len

spring - 一个对象中的 DTO 和实体?

oracle - 如何使用 tnsname 从 Ant 连接到 Oracle 数据库?

java - JDBC 连接协议(protocol)不受支持

java - 关于结果集类型 JDBC

php - 如何在mysql中插入\N和带有字符串的制表符?