Datanucleus - DBCP2 集成警告 - PoolableConnectionFactory 未链接到池

Datanucleus - DBCP2 integration warning - PoolableConnectionFactory not linked to pool

我想升级 GWT-JDO 应用程序以使用 DBCP2 而不是 DBCP。配置部分运行良好,但我在控制台中看到警告

WARN [org.apache.commons.dbcp2.PoolingDataSource] PoolableConnectionFactory not linked to pool. Calling setPool() to fix the configuration.

PersistenceManagerFactory 是使用 JDOHelper 构建的,因此我无法访问 DBCP2 对象来设置池。我们正在使用

JDOHelper.getPersistenceManagerFactory(properties)

我在 JDO 中进行了一些调试 类,我发现即使发出警告,池实际上也设置为连接工厂。 请从 org.apache.commons.dbcp2.PoolingDataSource

中找到下面的代码
// Verify that _pool's factory refers back to it.  If not, log a warning and try to fix.
        if (pcf.getPool() != _pool) {
            log.warn(Utils.getMessage("poolingDataSource.factoryConfig"));
            @SuppressWarnings("unchecked") // PCF must have a pool of PCs
            ObjectPool<PoolableConnection> p = (ObjectPool<PoolableConnection>) _pool;
            pcf.setPool(p);
        }

有人知道使用 JDOHelper 正确处理 JDO-Datanucleus-DBCP2 配置的方法吗?

似乎有些奇怪的 DBCP2 事情它应该自己做,但由于某种原因不是。在 DataNucleus DBCP2 connector code 他们有

connectionPool = new org.apache.commons.pool2.impl.GenericObjectPool(poolableCF);

我个人希望这足以让 DBCP2 知道池 DBCP2 库 returns 链接到 poolableCF(即传入的内容),但它给出了此日志消息如果你只是那样做。如果添加以下行

poolableCF.setPool(connectionPool);

在他们的代码中,您不会立即收到该日志消息。也许您想将其贡献给 DataNucleus 项目?