【发布时间】: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)对象并连接下一个数据源?
【问题讨论】:
-
您没有使用 JPA 是否有任何具体原因。
-
对不起,我忘了添加这个。我正在使用 JPA2.0。
-
那你为什么不使用 EntityManager 指向为不同数据源配置的相应持久性单元。可以参考这个链接stackoverflow.com/a/4601469/366964了解更多详情。
-
不能用mysql复制吗? mysql代理库怎么样:dev.mysql.com/doc/refman/5.1/en/mysql-proxy.html?
标签: jdbc ejb-3.0 datasource glassfish-3 sqldatasource