public DatabaseConnectionFactory getConnectionFactory(String databaseName) throws DatabaseConfigException { // check if we already have a reference DatabaseConnectionFactory factory = connectionFactories.get(databaseName); if (factory != null) { return factory; } ConfigurationDBRef config = mapDatabaseRef.get(databaseName); if (config == null) { throw new DatabaseConfigException("Cannot locate configuration information for database '" + databaseName + '\''); } ConfigurationDBRef.ConnectionSettings settings = (ConfigurationDBRef.ConnectionSettings) config.getConnectionSettings(); if (config.getConnectionFactoryDesc() instanceof ConfigurationDBRef.DriverManagerConnection) { ConfigurationDBRef.DriverManagerConnection dmConfig = (ConfigurationDBRef.DriverManagerConnection) config.getConnectionFactoryDesc(); factory = new DatabaseDMConnFactory(dmConfig, settings); } else { ConfigurationDBRef.DataSourceConnection dsConfig = (ConfigurationDBRef.DataSourceConnection) config.getConnectionFactoryDesc(); factory = new DatabaseDSConnFactory(dsConfig, settings); } connectionFactories.put(databaseName, factory); return factory; }