【问题标题】:Connecting two MySQL data source using a single Connection object使用单个 Connection 对象连接两个 MySQL 数据源
【发布时间】:2013-02-03 17:47:46
【问题描述】:

实际上我需要连接在我的应用服务器中创建的两个 mysql 数据源。我正在使用 JPA2.0

我尝试了以下代码。但我收到异常“java.lang.IllegalStateException:本地事务已经有 1 个非 XA 资源:无法添加更多资源。”。

import com.google.common.collect.Lists;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import javax.annotation.Resource;
import javax.sql.DataSource;


public class SampleClass {

@Resource(name = "jdbc/source1")
DataSource source1;

@Resource(name = "jdbc/source2")
DataSource source2;

final List<String> list = Lists.newArrayList("Source1", "Source2");

public void getresponse() throws Exception {

    for (String source : list) {
        Connection connection = null;
        Statement statement = null;
        try {
            connection = getConnection(source);
            statement = connection.createStatement();
        } catch (SQLException ex) {
        } finally {
            statement.close();
            connection.close();
        }
    }
}

public Connection getConnection(String source) {
    Connection conn = null;
    try {
    if(source.equalsIgnoreCase("Source1")){
        conn = source1.getConnection();
    } else if(source.equalsIgnoreCase("Source2")){
        conn = source2.getConnection();
    }
    } catch(SQLException se) {

    }

    return conn;
 }
}

对于我在代码中的逻辑。 我需要使用单个 Connection 对象连接所有数据源

如何关闭现有的连接(conn)对象并连接下一个数据源?

【问题讨论】:

标签: jdbc ejb-3.0 datasource glassfish-3 sqldatasource


【解决方案1】:

根据您的需要,您可以在其中一个数据源上启用“非事务性连接”,也可以在两个数据源上都使用 XA 数据源。

要在 Glassfish 3 管理员中启用“非事务连接”,导航到 JDBC -> JDBC 连接池 -> YourPoolYouWantToEbleNontransactional,然后单击事务部分下的启用复选框。请注意非事务性连接意味着什么。

您还可以使用本质上实现两阶段提交的 XA 数据源驱动程序。 Google 告诉我数据源类名是 'com.mysql.jdbc.jdbc2.optional.MysqlXADataSource' 但我不知道它是否分布在标准 mysql jdbc 分布中。

【讨论】:

  • 发布我的答案后,我意识到你想将同样的事情提交到同一个数据库。您可能必须使用 XA 数据源驱动程序来确保两个数据库都收到该语句。
猜你喜欢
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多