我想升级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库返回的库链接到
poolableCF
(即传入的内容),但是如果您这样做,它会给出此日志消息。如果添加以下行poolableCF.setPool(connectionPool);
在他们的代码之后,您不会立即收到该日志消息。也许您想将其贡献给DataNucleus项目?