Java 带有ConnectionInitializationCallback的UCP PoolDataSourceImpl

Java 带有ConnectionInitializationCallback的UCP PoolDataSourceImpl,java,oracle,pooling,ucp,Java,Oracle,Pooling,Ucp,我正在尝试使用ConnectionInitializationCallback配置UCP PoolDataSourceImpl。以下是我的配置: private static DataSource createDataSource(Properties properties) throws SQLException, UniversalConnectionPoolException { UniversalConnectionPoolManager ucpm = Univer

我正在尝试使用ConnectionInitializationCallback配置UCP PoolDataSourceImpl。以下是我的配置:

private static DataSource createDataSource(Properties properties) throws SQLException, UniversalConnectionPoolException {
    UniversalConnectionPoolManager ucpm        = UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager();
    PoolDataSource                 pds         = PoolDataSourceFactory.getPoolDataSource();
    final String                   editionName = properties.getProperty("jdbc.editionName", "ora$base");

    pds.registerConnectionInitializationCallback(new oracle.ucp.jdbc.ConnectionInitializationCallback() {
        public void initialize(Connection connection) throws SQLException {
            LOG.debug("Attempting to set edition to: {}", editionName);
            try (Statement statement = connection.createStatement()) {
                statement.executeUpdate("ALTER SESSION SET EDITION = " + editionName);
            }
            LOG.debug("Edition set to: {}", editionName);
        }
    });

    pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
    pds.setUser(properties.getProperty("jdbc.username"));
    pds.setPassword(properties.getProperty("jdbc.password"));
    pds.setURL(properties.getProperty("jdbc.url"));
    pds.setConnectionPoolName("demo-pool");
    pds.setInitialPoolSize(3);
    pds.setMaxPoolSize(3);
    pds.setValidateConnectionOnBorrow(true);

    LOG.debug("Created DataSource Pool");
    ucpm.createConnectionPool((UniversalConnectionPoolAdapter)pds);
    ucpm.startConnectionPool("demo-pool");

    return pds;
}
但是,从未调用initialize方法。我将java 1.7.0_51与以下Oracle JAR一起使用:

ojdbc6.jar-v12.1.0.1.0 ucp.jar-v12.1.0.0.0

我通过删除对registerConnectionInitializationCallback的调用并替换为对registerConnectionLabelingCallback的调用来实现这一点,但据我所知,这将在每次从池中请求连接时而不是在实际创建连接时执行ALTER会话

如果您能帮助ConnectionInitializationCallback正常工作,我们将不胜感激


连接初始化回调机制似乎是12c发布的功能的一部分。应用程序连续性要求您使用以下数据源实现之一:

oracle.jdbc.replay.OracleDataSourceImpl oracle.jdbc.replay.OracleConnectionPoolDataSourceImpl 我自己还没有尝试过,但我猜如果您使用这些数据源实现之一,您的ConnectionInitializationCallback将工作

如果将其作为标准UCP实现的一部分,就像连接标签一样,那就太好了