Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何使用普通jdbc使用分布式事务JTA_Database_Jpa_Jdbc_Struts2_Jta - Fatal编程技术网

Database 如何使用普通jdbc使用分布式事务JTA

Database 如何使用普通jdbc使用分布式事务JTA,database,jpa,jdbc,struts2,jta,Database,Jpa,Jdbc,Struts2,Jta,我不知道JTA,为了理解整个场景,请遵循此链接,但是根据帖子的建议,我必须使用分布式事务。我正在使用ApacheTomcat服务器 但正如我所说的,我不知道JTA,所以我的问题是,我有超过15个数据库连接,根据某些条件,它们各自的数据库是连接的。因此,我无法为每个数据库创建hibernate.cfg.xml和会话工厂及实体 所以我的问题是,我可以将JTA与普通jdbc一起使用吗,如果可能,请提供一些链接或示例。是。您可以将JTA与普通JDBC一起使用。一般的想法是,不使用JDBC对象来声明事务边

我不知道JTA,为了理解整个场景,请遵循此链接,但是根据帖子的建议,我必须使用分布式事务。我正在使用ApacheTomcat服务器

但正如我所说的,我不知道JTA,所以我的问题是,我有超过15个数据库连接,根据某些条件,它们各自的数据库是连接的。因此,我无法为每个数据库创建hibernate.cfg.xml和会话工厂及实体


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

是。您可以将JTA与普通JDBC一起使用。一般的想法是,不使用JDBC对象来声明事务边界,而是使用JTA实现提供的事务管理器对象来声明事务边界

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

        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();
        }

对。您可以将JTA与普通JDBC一起使用。一般的想法是,不使用JDBC对象来声明事务边界,而是使用JTA实现提供的事务管理器对象来声明事务边界

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

        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();
        }

好的,我看了这篇我最近的文章,你的例子可以很好地处理分布式数据库。我也可以用JTA代替BitronixtTransactionManager,或者BitronixtTransactionManager是更好的选择Hi arvin,BitronixtTransactionManager是JTA的实现之一。好的,我看了这篇我最近的文章,您的示例是否可以很好地使用分布式数据库。此外,我是否可以使用JTA而不是BitronixtTransactionManager,或者BitronixtTransactionManager是更好的选择Hi arvin,BitronixtTransactionManager是JTA的实现之一。