【发布时间】:2021-05-15 01:46:03
【问题描述】:
我不太了解 Java 中的 DataSource/Connection 是如何工作的。
这是我使用的类:
import javax.naming.InitialContext;
import javax.sql.DataSource;
import java.sql.Connection;
这是一个代码示例。这不是我真正的代码,而是一个简单的例子来解释我的问题:
InitialContext context = new InitialContext();
DataSource dataSource1 = (DataSource) context.lookup(JNDI_ORACLE_1);
dataSource1.getConnection().close();
DataSource dataSource2 = (DataSource) context.lookup(JNDI_ORACLE_2);
dataSource2.getConnection();
我认为它应该工作的方式:
- 我初始化了第一个数据源
- 我打开与此数据源的连接并立即关闭它。关闭连接应该允许打开其他连接。
- 我初始化了第二个数据源
- 我打开了到第二个数据源的连接,第一个连接已经关闭,它应该能够毫无问题地打开这个新连接。
但是:
当第二个 getConnection() 被调用时,我得到一个“java.lang.IllegalStateException:本地事务已经有 1 个非 XA 资源:无法添加更多资源。”
第一次连接似乎还没有结束,我不知道为什么。
我错过了什么?
编辑
有关数据源配置的更多信息
两个DataSource都在Glassfish的“JDBC Connection Pools”中配置,参数相同:
【问题讨论】:
-
将数据源的配置以及异常的完整堆栈跟踪添加到您的问题中会很有用。
标签: java datasource