diff options
Diffstat (limited to 'src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3PoolingDataSource.java')
| -rw-r--r-- | src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3PoolingDataSource.java | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3PoolingDataSource.java b/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3PoolingDataSource.java new file mode 100644 index 0000000000..df3e50ad07 --- /dev/null +++ b/src/interfaces/jdbc/org/postgresql/jdbc3/Jdbc3PoolingDataSource.java @@ -0,0 +1,96 @@ +package org.postgresql.jdbc3; + +import java.util.*; +import org.postgresql.jdbc2.optional.PoolingDataSource; +import org.postgresql.jdbc2.optional.ConnectionPool; + +import javax.naming.Reference; + +/** + * JDBC 3 implementation of a pooling DataSource. This is best + * used outside of an application server environment. Application + * servers generally prefer to deal with instances of + * ConnectionPoolDataSource (see ConnectionPool) or XADataSource + * (not available for PostgreSQL). + * + * @author Aaron Mulder (ammulder@alumni.princeton.edu) + * @version $Revision: 1.1 $ + */ +public class Jdbc3PoolingDataSource extends PoolingDataSource +{ + /** + * Store JDBC3 DataSources in different bucket than JDBC2 DataSources + */ + private static Map dataSources = new HashMap(); + + /** + * Store JDBC3 DataSources in different bucket than JDBC2 DataSources + */ + static Jdbc3PoolingDataSource getDataSource(String name) + { + return (Jdbc3PoolingDataSource) dataSources.get(name); + } + + /** + * Store JDBC3 DataSources in different bucket than JDBC2 DataSources + */ + protected void removeStoredDataSource() + { + synchronized (dataSources) + { + dataSources.remove(dataSourceName); + } + } + + /** + * Store JDBC3 DataSources in different bucket than JDBC2 DataSources + */ + public void setDataSourceName(String dataSourceName) + { + if (isInitialized()) + { + throw new IllegalStateException("Cannot set Data Source properties after DataSource has been used"); + } + if (this.dataSourceName != null && dataSourceName != null && dataSourceName.equals(this.dataSourceName)) + { + return; + } + synchronized (dataSources) + { + if (getDataSource(dataSourceName) != null) + { + throw new IllegalArgumentException("DataSource with name '" + dataSourceName + "' already exists!"); + } + if (this.dataSourceName != null) + { + dataSources.remove(this.dataSourceName); + } + this.dataSourceName = dataSourceName; + dataSources.put(dataSourceName, this); + } + } + + /** + * Generates a JDBC3 object factory reference. + */ + protected Reference createReference() + { + return new Reference(getClass().getName(), Jdbc3ObjectFactory.class.getName(), null); + } + + /** + * Creates a JDBC3 ConnectionPool to use with this DataSource. + */ + protected ConnectionPool createConnectionPool() + { + return new Jdbc3ConnectionPool(); + } + + /** + * Gets a description of this DataSource. + */ + public String getDescription() + { + return "JDBC3 Pooling DataSource from " + org.postgresql.Driver.getVersion(); + } +} |
