如何为使用dbcp2的XA连接创建基于连接池的数据源?

时间:2020-08-15 12:36:31

标签: apache-commons-dbcp javax.sql

我正在使用dbcp2(2.7)进行连接池。所有数据源对象都是通过代码创建的(然后绑定到JNDI)。

对于非XA连接,一切正常。要求数据库适配器创建ConnectionPoolDataSource实例,该实例可用于产生数据库池连接。然后,创建一个SharedPoolDataSource实例以从该连接池数据源中获取(该实例仅产生PooledConnection个实例,这些实例是常规连接的包装,但适用于连接池)。 SharedPoolDataSource的实例是进一步馈送的(即绑定到JNDI并提供给JPA等),因此获取使用的连接来自我配置的池。一切都很好。

现在,我想更改它以使用XA。因此,为合并数据源而返回的连接是XA连接,并且在检索时会被征入事务中。

我在dbcp2中看到的唯一数据源是SharedPoolDataSource。我在org.apache.commons.dbcp2.managed中看到了一整套与XA相关的类,但是它们都不产生适合于池化的连接或实现池化的数据源。

有一个BasicManagedDataSource,但没有合并,它来自数据库驱动程序提供的XADataSource

在这一点上,我什至还不太了解如何协调池连接和XA连接。 XAConnection确实扩展了PooledConnection,所以我可以在池中使用它,但是XADataSource不扩展ConnectionPoolDataSource,所以我不能将其用作池化连接的源

显然,我缺少正确的方法来堆叠这些数据源,但是我无法解决这个问题。

0 个答案:

没有答案