【问题标题】:How to use distributed transactions JTA using plain jdbc如何使用普通 jdbc 使用分布式事务 JTA
【发布时间】:2023-03-16 03:45:01
【问题描述】:

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

但正如我所说,我对 JTA 一无所知,所以我的问题是,我有超过 15 个数据库连接,并且基于某些条件,它们各自的数据库已连接。所以我不能为每个数据库创建 hibernate.cfg.xml 和会话工厂和实体。

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

【问题讨论】:

    标签: database jpa jdbc struts2 jta


    【解决方案1】:

    是的。您可以将 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();
            }
    

    【讨论】:

    • 好的,看到我最近的帖子stackoverflow.com/questions/13269718/…,你的例子是否适用于分布式数据库。
    • 我也可以使用 JTA 代替 BitronixTransactionManager 或 BitronixTransactionManager 是更好的选择
    • 嗨,arvin,BitronixTransactionManager 是 JTA 的实现之一。
    猜你喜欢
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2020-11-23
    • 2012-05-24
    • 2023-03-16
    • 2011-06-10
    • 2012-06-28
    相关资源
    最近更新 更多