Database 如何使用普通jdbc使用分布式事务JTA
我不知道JTA,为了理解整个场景,请遵循此链接,但是根据帖子的建议,我必须使用分布式事务。我正在使用ApacheTomcat服务器 但正如我所说的,我不知道JTA,所以我的问题是,我有超过15个数据库连接,根据某些条件,它们各自的数据库是连接的。因此,我无法为每个数据库创建hibernate.cfg.xml和会话工厂及实体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与普通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的实现之一。