@Override
 protected ConnectionQueryServices getConnectionQueryServices(String url, Properties info)
     throws SQLException {
   try {
     closeLock.readLock().lock();
     checkClosed();
     ConnectionInfo connInfo = ConnectionInfo.create(url);
     QueryServices services = getQueryServices();
     ConnectionInfo normalizedConnInfo = connInfo.normalize(services.getProps());
     ConnectionQueryServices connectionQueryServices =
         connectionQueryServicesMap.get(normalizedConnInfo);
     if (connectionQueryServices == null) {
       if (normalizedConnInfo.isConnectionless()) {
         connectionQueryServices =
             new ConnectionlessQueryServicesImpl(services, normalizedConnInfo);
       } else {
         connectionQueryServices =
             new ConnectionQueryServicesImpl(services, normalizedConnInfo, info);
       }
       ConnectionQueryServices prevValue =
           connectionQueryServicesMap.putIfAbsent(normalizedConnInfo, connectionQueryServices);
       if (prevValue != null) {
         connectionQueryServices = prevValue;
       }
     }
     boolean success = false;
     SQLException sqlE = null;
     try {
       connectionQueryServices.init(url, info);
       success = true;
     } catch (SQLException e) {
       sqlE = e;
     } finally {
       if (!success) {
         try {
           connectionQueryServices.close();
         } catch (SQLException e) {
           if (sqlE == null) {
             sqlE = e;
           } else {
             sqlE.setNextException(e);
           }
         } finally {
           // Remove from map, as initialization failed
           connectionQueryServicesMap.remove(normalizedConnInfo);
           if (sqlE != null) {
             throw sqlE;
           }
         }
       }
     }
     return connectionQueryServices;
   } finally {
     closeLock.readLock().unlock();
   }
 }
 @Override
 protected ConnectionQueryServices getConnectionQueryServices(String url, Properties info)
     throws SQLException {
   ConnectionInfo connInfo = ConnectionInfo.create(url);
   ConnectionInfo normalizedConnInfo = connInfo.normalize(getQueryServices().getProps());
   ConnectionQueryServices connectionQueryServices =
       connectionQueryServicesMap.get(normalizedConnInfo);
   if (connectionQueryServices == null) {
     if (normalizedConnInfo.isConnectionless()) {
       connectionQueryServices = new ConnectionlessQueryServicesImpl(getQueryServices());
     } else {
       connectionQueryServices =
           new ConnectionQueryServicesImpl(getQueryServices(), normalizedConnInfo);
     }
     connectionQueryServices.init(url, info);
     ConnectionQueryServices prevValue =
         connectionQueryServicesMap.putIfAbsent(normalizedConnInfo, connectionQueryServices);
     if (prevValue != null) {
       connectionQueryServices = prevValue;
     }
   }
   return connectionQueryServices;
 }