summaryrefslogtreecommitdiff
path: root/src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java')
-rw-r--r--src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java996
1 files changed, 508 insertions, 488 deletions
diff --git a/src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java b/src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java
index 62ee87ae9f8..26dddfbf3de 100644
--- a/src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java
+++ b/src/interfaces/jdbc/org/postgresql/PostgresqlDataSource.java
@@ -1,47 +1,47 @@
/**
- * Redistribution and use of this software and associated documentation
- * ("Software"), with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * 1. Redistributions of source code must retain copyright
- * statements and notices. Redistributions must also contain a
- * copy of this document.
- *
- * 2. Redistributions in binary form must reproduce the
- * above copyright notice, this list of conditions and the
- * following disclaimer in the documentation and/or other
- * materials provided with the distribution.
- *
- * 3. The name "Exolab" must not be used to endorse or promote
- * products derived from this Software without prior written
- * permission of Exoffice Technologies. For written permission,
- * please contact info@exolab.org.
- *
- * 4. Products derived from this Software may not be called "Exolab"
- * nor may "Exolab" appear in their names without prior written
- * permission of Exoffice Technologies. Exolab is a registered
- * trademark of Exoffice Technologies.
- *
- * 5. Due credit should be given to the Exolab Project
- * (http://www.exolab.org/).
- *
- * THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
- * ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
- * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
- * EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * Copyright 1999 (C) Exoffice Technologies Inc. All Rights Reserved.
- *
- * $Id: PostgresqlDataSource.java,v 1.2 2000/11/10 22:06:26 momjian Exp $
- */
+* Redistribution and use of this software and associated documentation
+* ("Software"), with or without modification, are permitted provided
+* that the following conditions are met:
+*
+* 1. Redistributions of source code must retain copyright
+* statements and notices. Redistributions must also contain a
+* copy of this document.
+*
+* 2. Redistributions in binary form must reproduce the
+* above copyright notice, this list of conditions and the
+* following disclaimer in the documentation and/or other
+* materials provided with the distribution.
+*
+* 3. The name "Exolab" must not be used to endorse or promote
+* products derived from this Software without prior written
+* permission of Exoffice Technologies. For written permission,
+* please contact info@exolab.org.
+*
+* 4. Products derived from this Software may not be called "Exolab"
+* nor may "Exolab" appear in their names without prior written
+* permission of Exoffice Technologies. Exolab is a registered
+* trademark of Exoffice Technologies.
+*
+* 5. Due credit should be given to the Exolab Project
+* (http://www.exolab.org/).
+*
+* THIS SOFTWARE IS PROVIDED BY EXOFFICE TECHNOLOGIES AND CONTRIBUTORS
+* ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
+* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+* EXOFFICE TECHNOLOGIES OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+* OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+* Copyright 1999 (C) Exoffice Technologies Inc. All Rights Reserved.
+*
+* $Id: PostgresqlDataSource.java,v 1.3 2001/10/25 05:59:59 momjian Exp $
+*/
package org.postgresql;
@@ -79,13 +79,13 @@ import org.postgresql.xa.XADataSourceImpl;
* <p>
* The supported data source properties are:
* <pre>
- * description (optional)
- * databaseName (required)
- * loginTimeout (optional)
- * user (optional)
- * password (optional)
- * serverName (optional)
- * portNumber (optional)
+ * description (optional)
+ * databaseName (required)
+ * loginTimeout (optional)
+ * user (optional)
+ * password (optional)
+ * serverName (optional)
+ * portNumber (optional)
* transactionTimeout (optional for XA connections)
* </pre>
* This data source may be serialized and stored in a JNDI
@@ -93,7 +93,7 @@ import org.postgresql.xa.XADataSourceImpl;
* register it with JNDI:
* <pre>
* PostgresqlDataSource ds;
- * InitialContext ctx;
+ * InitialContext ctx;
*
* ds = new PostgresqlDataSource();
* ds.setDatabaseName( "test" );
@@ -105,9 +105,9 @@ import org.postgresql.xa.XADataSourceImpl;
* Example for obtaining the data source from JNDI and
* opening a new connections:
* <pre>
- * InitialContext ctx;
- * DataSource ds;
- *
+ * InitialContext ctx;
+ * DataSource ds;
+ *
* ctx = new InitialContext();
* ds = (DataSource) ctx.lookup( "/comp/jdbc/test" );
* ds.getConnection();
@@ -121,482 +121,502 @@ import org.postgresql.xa.XADataSourceImpl;
* @see Connection
*/
public class PostgresqlDataSource
- extends XADataSourceImpl
- implements DataSource, Referenceable,
- ObjectFactory, Serializable
+ extends XADataSourceImpl
+ implements DataSource, Referenceable,
+ ObjectFactory, Serializable
{
- /**
- * Holds the timeout for opening a new connection, specified
- * in seconds. The default is obtained from the JDBC driver.
- */
- private int _loginTimeout;
+ /**
+ * Holds the timeout for opening a new connection, specified
+ * in seconds. The default is obtained from the JDBC driver.
+ */
+ private int _loginTimeout;
- /**
- * Holds the user's account name.
- */
- private String _user;
+ /**
+ * Holds the user's account name.
+ */
+ private String _user;
- /**
- * Holds the database password.
- */
- private String _password;
+ /**
+ * Holds the database password.
+ */
+ private String _password;
- /**
- * Holds the name of the particular database on the server.
- */
- private String _databaseName;
+ /**
+ * Holds the name of the particular database on the server.
+ */
+ private String _databaseName;
- /**
- * Description of this datasource.
- */
- private String _description = "PostgreSQL DataSource";
+ /**
+ * Description of this datasource.
+ */
+ private String _description = "PostgreSQL DataSource";
- /**
- * Holds the database server name. If null, this is
- * assumed to be the localhost.
- */
- private String _serverName;
+ /**
+ * Holds the database server name. If null, this is
+ * assumed to be the localhost.
+ */
+ private String _serverName;
- /**
- * Holds the port number where a server is listening.
- * The default value will open a connection with an
- * unspecified port.
- */
- private int _portNumber = DEFAULT_PORT;
+ /**
+ * Holds the port number where a server is listening.
+ * The default value will open a connection with an
+ * unspecified port.
+ */
+ private int _portNumber = DEFAULT_PORT;
- /**
- * The default port number. Since we open the connection
- * without specifying the port if it's the default one,
- * this value can be meaningless.
- */
- private static final int DEFAULT_PORT = 0;
+ /**
+ * The default port number. Since we open the connection
+ * without specifying the port if it's the default one,
+ * this value can be meaningless.
+ */
+ private static final int DEFAULT_PORT = 0;
- /**
- * Holds the log writer to which all messages should be
- * printed. The default writer is obtained from the driver
- * manager, but it can be specified at the datasource level
- * and will be passed to the driver. May be null.
- */
- private transient PrintWriter _logWriter;
+ /**
+ * Holds the log writer to which all messages should be
+ * printed. The default writer is obtained from the driver
+ * manager, but it can be specified at the datasource level
+ * and will be passed to the driver. May be null.
+ */
+ private transient PrintWriter _logWriter;
- /**
- * Each datasource maintains it's own driver, in case of
- * driver-specific setup (e.g. pools, log writer).
- */
-// FIXME
-// private transient postgresql.Driver _driver;
-private transient org.postgresql.Driver _driver;
-//---------
+ /**
+ * Each datasource maintains it's own driver, in case of
+ * driver-specific setup (e.g. pools, log writer).
+ */
+ // FIXME
+ // private transient postgresql.Driver _driver;
+ private transient org.postgresql.Driver _driver;
+ //---------
- public PostgresqlDataSource()
- {
- _logWriter = DriverManager.getLogWriter();
- _loginTimeout = DriverManager.getLoginTimeout();
- }
+ public PostgresqlDataSource()
+ {
+ _logWriter = DriverManager.getLogWriter();
+ _loginTimeout = DriverManager.getLoginTimeout();
+ }
-
- public Connection getConnection()
- throws SQLException
- {
- // Uses the username and password specified for the datasource.
- return getConnection( _user, _password );
- }
+ public Connection getConnection()
+ throws SQLException
+ {
+ // Uses the username and password specified for the datasource.
+ return getConnection( _user, _password );
+ }
- public synchronized Connection getConnection( String user, String password )
- throws SQLException
- {
- Connection conn;
- Properties info;
- String url;
- if ( _driver == null ) {
- try {
- // Constructs a driver for use just by this data source
- // which will produce TwoPhaseConnection-s. This driver
- // is not registered with the driver manager.
-// FIXME
-// _driver = new postgresql.Driver();
-_driver = new org.postgresql.Driver();
-//-----------
-
-//FIXME
-// _driver.setLogWriter( _logWriter );
-// Method seems to be unavailable. Just commented it out.
-//----------
- } catch ( SQLException except ) {
- if ( _logWriter != null )
- _logWriter.println( "DataSource: Failed to initialize JDBC driver: " + except );
- throw except;
- }
+ public synchronized Connection getConnection( String user, String password )
+ throws SQLException
+ {
+ Connection conn;
+ Properties info;
+ String url;
+
+ if ( _driver == null )
+ {
+ try
+ {
+ // Constructs a driver for use just by this data source
+ // which will produce TwoPhaseConnection-s. This driver
+ // is not registered with the driver manager.
+ // FIXME
+ // _driver = new postgresql.Driver();
+ _driver = new org.postgresql.Driver();
+ //-----------
+
+ //FIXME
+ // _driver.setLogWriter( _logWriter );
+ // Method seems to be unavailable. Just commented it out.
+ //----------
+ }
+ catch ( SQLException except )
+ {
+ if ( _logWriter != null )
+ _logWriter.println( "DataSource: Failed to initialize JDBC driver: " + except );
+ throw except;
+ }
+ }
+
+ // Use info to supply properties that are not in the URL.
+ info = new Properties();
+ info.put( "loginTimeout", Integer.toString( _loginTimeout ) );
+
+ // DriverManager will do that and not rely on the URL alone.
+ if ( user == null )
+ {
+ user = _user;
+ password = _password;
+ }
+ if ( user == null || password == null )
+ throw new PSQLException( "postgresql.ds.userpswd" );
+ info.put( "user", user );
+ info.put( "password", password );
+
+ if ( _serverName != null )
+ info.put( "PGHOST", _serverName );
+ if ( _portNumber != DEFAULT_PORT )
+ info.put( "PGPORT", Integer.toString( _portNumber ) );
+ if ( _databaseName != null )
+ info.put( "PGDBNAME", _databaseName );
+
+ // Construct the URL suitable for this driver.
+ url = "jdbc:postgresql:";
+
+ // Attempt to establish a connection. Report a successful
+ // attempt or a failure.
+ try
+ {
+ conn = _driver.connect( url, info );
+ // FIXME
+ // if ( ! ( conn instanceof postgresql.jdbc2.Connection ) ) {
+ if ( ! ( conn instanceof org.postgresql.jdbc2.Connection ) )
+ {
+ //--------
+ if ( _logWriter != null )
+ _logWriter.println( "DataSource: JDBC 1 connections not supported" );
+ throw new PSQLException( "postgresql.ds.onlyjdbc2" );
+ }
+ }
+ catch ( SQLException except )
+ {
+ if ( _logWriter != null )
+ _logWriter.println( "DataSource: getConnection failed " + except );
+ throw except;
+ }
+ if ( conn != null && _logWriter != null )
+ _logWriter.println( "DataSource: getConnection returning " + conn );
+ return conn;
}
- // Use info to supply properties that are not in the URL.
- info = new Properties();
- info.put( "loginTimeout", Integer.toString( _loginTimeout ) );
- // DriverManager will do that and not rely on the URL alone.
- if ( user == null ) {
- user = _user;
- password = _password;
+ public PrintWriter getLogWriter()
+ {
+ return _logWriter;
}
- if ( user == null || password == null )
- throw new PSQLException( "postgresql.ds.userpswd" );
- info.put( "user", user );
- info.put( "password", password );
-
- if ( _serverName != null )
- info.put( "PGHOST", _serverName );
- if ( _portNumber != DEFAULT_PORT )
- info.put( "PGPORT", Integer.toString( _portNumber ) );
- if ( _databaseName != null )
- info.put( "PGDBNAME", _databaseName );
-
- // Construct the URL suitable for this driver.
- url = "jdbc:postgresql:";
-
- // Attempt to establish a connection. Report a successful
- // attempt or a failure.
- try {
- conn = _driver.connect( url, info );
-// FIXME
-// if ( ! ( conn instanceof postgresql.jdbc2.Connection ) ) {
-if ( ! ( conn instanceof org.postgresql.jdbc2.Connection ) ) {
-//--------
- if ( _logWriter != null )
- _logWriter.println( "DataSource: JDBC 1 connections not supported" );
- throw new PSQLException( "postgresql.ds.onlyjdbc2" );
- }
- } catch ( SQLException except ) {
- if ( _logWriter != null )
- _logWriter.println( "DataSource: getConnection failed " + except );
- throw except;
+
+
+ public synchronized void setLogWriter( PrintWriter writer )
+ {
+ // Once a log writer has been set, we cannot set it since some
+ // thread might be conditionally accessing it right now without
+ // synchronizing.
+ if ( writer != null )
+ {
+ if ( _driver != null )
+ // FIXME
+ // _driver.setLogWriter( writer );
+ // Method seems to be unavailable. Commented it out.
+ //----------
+ _logWriter = writer;
+ }
}
- if ( conn != null && _logWriter != null )
- _logWriter.println( "DataSource: getConnection returning " + conn );
- return conn;
- }
- public PrintWriter getLogWriter()
- {
- return _logWriter;
- }
+ public void setLoginTimeout( int seconds )
+ {
+ _loginTimeout = seconds;
+ }
- public synchronized void setLogWriter( PrintWriter writer )
- {
- // Once a log writer has been set, we cannot set it since some
- // thread might be conditionally accessing it right now without
- // synchronizing.
- if ( writer != null ) {
- if ( _driver != null )
-// FIXME
-// _driver.setLogWriter( writer );
-// Method seems to be unavailable. Commented it out.
-//----------
- _logWriter = writer;
+ public synchronized int getLoginTimeout()
+ {
+ return _loginTimeout;
}
- }
-
-
- public void setLoginTimeout( int seconds )
- {
- _loginTimeout = seconds;
- }
-
-
- public synchronized int getLoginTimeout()
- {
- return _loginTimeout;
- }
-
-
- /**
- * Sets the name of the particular database on the server.
- * The standard name for this property is <tt>databaseName</tt>.
- *
- * @param databaseName The name of the particular database on the server
- */
- public synchronized void setDatabaseName( String databaseName )
- {
- if ( databaseName == null )
- throw new NullPointerException( "DataSource: Argument 'databaseName' is null" );
- _databaseName = databaseName;
- }
-
-
- /**
- * Returns the name of the particular database on the server.
- * The standard name for this property is <tt>databaseName</tt>.
- *
- * @return The name of the particular database on the server
- */
- public String getDatabaseName()
- {
- return _databaseName;
- }
-
-
- /**
- * Sets the description of this datasource.
- * The standard name for this property is <tt>description</tt>.
- *
- * @param description The description of this datasource
- */
- public synchronized void setDescription( String description )
- {
- if ( description == null )
- throw new NullPointerException( "DataSource: Argument 'description' is null" );
- _description = description;
- }
-
-
- /**
- * Returns the description of this datasource.
- * The standard name for this property is <tt>description</tt>.
- *
- * @return The description of this datasource
- */
- public String getDescription()
- {
- return _description;
- }
-
-
- /**
- * Sets the database password.
- * The standard name for this property is <tt>password</tt>.
- *
- * @param password The database password
- */
- public synchronized void setPassword( String password )
- {
- _password = password;
- }
-
-
- /**
- * Returns the database password.
- * The standard name for this property is <tt>password</tt>.
- *
- * @return The database password
- */
- public String getPassword()
- {
- return _password;
- }
-
-
- /**
- * Sets the port number where a server is listening.
- * The standard name for this property is <tt>portNumber</tt>.
- *
- * @param portNumber The port number where a server is listening
- */
- public synchronized void setPortNumber( int portNumber )
- {
- _portNumber = portNumber;
- }
-
-
- /**
- * Returns the port number where a server is listening.
- * The standard name for this property is <tt>portNumber</tt>.
- *
- * @return The port number where a server is listening
- */
- public int getPortNumber()
- {
- return _portNumber;
- }
-
-
- /**
- * Sets the database server name.
-
- * The standard name for this property is <tt>serverName</tt>.
- *
- * @param serverName The database server name
- */
- public synchronized void setServerName( String serverName )
- {
- _serverName = serverName;
- }
-
-
- /**
- * Returns the database server name.
- * The standard name for this property is <tt>serverName</tt>.
- *
- * @return The database server name
- */
- public String getServerName()
- {
- return _serverName;
- }
-
-
- /**
- * Sets the user's account name.
- * The standard name for this property is <tt>user</tt>.
- *
- * @param user The user's account name
- */
- public synchronized void setUser( String user )
- {
- _user = user;
- }
-
-
- /**
- * Returns the user's account name.
- * The standard name for this property is <tt>user</tt>.
- *
- * @return The user's account name
- */
- public String getUser()
- {
- return _user;
- }
-
-
- /**
- * Returns true if this datasource and the other are equal.
- * The two datasources are equal if and only if they will produce
- * the exact same connections. Connection properties like database
- * name, user name, etc are comapred. Setup properties like
- * description, log writer, etc are not compared.
- */
- public synchronized boolean equals( Object other )
- {
- if ( other == this )
- return true;
- if ( other == null || ! ( other instanceof PostgresqlDataSource ) )
- return false;
-
- PostgresqlDataSource with;
-
- with = (PostgresqlDataSource) other;
- if ( _databaseName != null && _databaseName.equals( with._databaseName ) )
- if ( _portNumber == with._portNumber &&
- ( ( _serverName == null && with._serverName == null ) ||
- ( _serverName != null && _serverName.equals( with._serverName ) ) ) )
- if ( ( _user == null && with._user == null ) ||
- ( _user != null && _password != null && _user.equals( with._user ) &&
- _password.equals( with._password ) ) )
- return true;
- return false;
- }
-
-
- public String toString()
- {
- if ( _description != null )
- return _description;
- else {
- String url;
-
- url = "jdbc:postgresql:";
- if ( _serverName != null ) {
- if ( _portNumber == DEFAULT_PORT )
- url = url + "//" + _serverName + "/";
- else
- url = url + "//" + _serverName + ":" + _portNumber + "/";
- } else if ( _portNumber != DEFAULT_PORT )
- url = url + "//localhost:" + _portNumber + "/";
- if ( _databaseName != null )
- url = url + _databaseName;
- return "DataSource " + url;
+
+
+ /**
+ * Sets the name of the particular database on the server.
+ * The standard name for this property is <tt>databaseName</tt>.
+ *
+ * @param databaseName The name of the particular database on the server
+ */
+ public synchronized void setDatabaseName( String databaseName )
+ {
+ if ( databaseName == null )
+ throw new NullPointerException( "DataSource: Argument 'databaseName' is null" );
+ _databaseName = databaseName;
+ }
+
+
+ /**
+ * Returns the name of the particular database on the server.
+ * The standard name for this property is <tt>databaseName</tt>.
+ *
+ * @return The name of the particular database on the server
+ */
+ public String getDatabaseName()
+ {
+ return _databaseName;
+ }
+
+
+ /**
+ * Sets the description of this datasource.
+ * The standard name for this property is <tt>description</tt>.
+ *
+ * @param description The description of this datasource
+ */
+ public synchronized void setDescription( String description )
+ {
+ if ( description == null )
+ throw new NullPointerException( "DataSource: Argument 'description' is null" );
+ _description = description;
+ }
+
+
+ /**
+ * Returns the description of this datasource.
+ * The standard name for this property is <tt>description</tt>.
+ *
+ * @return The description of this datasource
+ */
+ public String getDescription()
+ {
+ return _description;
+ }
+
+
+ /**
+ * Sets the database password.
+ * The standard name for this property is <tt>password</tt>.
+ *
+ * @param password The database password
+ */
+ public synchronized void setPassword( String password )
+ {
+ _password = password;
+ }
+
+
+ /**
+ * Returns the database password.
+ * The standard name for this property is <tt>password</tt>.
+ *
+ * @return The database password
+ */
+ public String getPassword()
+ {
+ return _password;
+ }
+
+
+ /**
+ * Sets the port number where a server is listening.
+ * The standard name for this property is <tt>portNumber</tt>.
+ *
+ * @param portNumber The port number where a server is listening
+ */
+ public synchronized void setPortNumber( int portNumber )
+ {
+ _portNumber = portNumber;
+ }
+
+
+ /**
+ * Returns the port number where a server is listening.
+ * The standard name for this property is <tt>portNumber</tt>.
+ *
+ * @return The port number where a server is listening
+ */
+ public int getPortNumber()
+ {
+ return _portNumber;
+ }
+
+
+ /**
+ * Sets the database server name.
+
+ * The standard name for this property is <tt>serverName</tt>.
+ *
+ * @param serverName The database server name
+ */
+ public synchronized void setServerName( String serverName )
+ {
+ _serverName = serverName;
+ }
+
+
+ /**
+ * Returns the database server name.
+ * The standard name for this property is <tt>serverName</tt>.
+ *
+ * @return The database server name
+ */
+ public String getServerName()
+ {
+ return _serverName;
+ }
+
+
+ /**
+ * Sets the user's account name.
+ * The standard name for this property is <tt>user</tt>.
+ *
+ * @param user The user's account name
+ */
+ public synchronized void setUser( String user )
+ {
+ _user = user;
+ }
+
+
+ /**
+ * Returns the user's account name.
+ * The standard name for this property is <tt>user</tt>.
+ *
+ * @return The user's account name
+ */
+ public String getUser()
+ {
+ return _user;
+ }
+
+
+ /**
+ * Returns true if this datasource and the other are equal.
+ * The two datasources are equal if and only if they will produce
+ * the exact same connections. Connection properties like database
+ * name, user name, etc are comapred. Setup properties like
+ * description, log writer, etc are not compared.
+ */
+ public synchronized boolean equals( Object other )
+ {
+ if ( other == this )
+ return true;
+ if ( other == null || ! ( other instanceof PostgresqlDataSource ) )
+ return false;
+
+ PostgresqlDataSource with;
+
+ with = (PostgresqlDataSource) other;
+ if ( _databaseName != null && _databaseName.equals( with._databaseName ) )
+ if ( _portNumber == with._portNumber &&
+ ( ( _serverName == null && with._serverName == null ) ||
+ ( _serverName != null && _serverName.equals( with._serverName ) ) ) )
+ if ( ( _user == null && with._user == null ) ||
+ ( _user != null && _password != null && _user.equals( with._user ) &&
+ _password.equals( with._password ) ) )
+ return true;
+ return false;
}
- }
-
-
- public synchronized Reference getReference()
- {
- Reference ref;
-
- // We use same object as factory.
- ref = new Reference( getClass().getName(), getClass().getName(), null );
- // Mandatory properties
- ref.add( new StringRefAddr( "description", _description ) );
- ref.add( new StringRefAddr( "databaseName", _databaseName ) );
- ref.add( new StringRefAddr( "loginTimeout", Integer.toString( _loginTimeout ) ) );
- // Optional properties
- if ( _user != null )
- ref.add( new StringRefAddr( "user", _user ) );
- if ( _password != null )
- ref.add( new StringRefAddr( "password", _password ) );
- if ( _serverName != null )
- ref.add( new StringRefAddr( "serverName", _serverName ) );
- if ( _portNumber != DEFAULT_PORT )
- ref.add( new StringRefAddr( "portNumber", Integer.toString( _portNumber ) ) );
- ref.add( new StringRefAddr( "transactionTimeout", Integer.toString( getTransactionTimeout() ) ) );
- return ref;
- }
-
-
- public Object getObjectInstance( Object refObj, Name name, Context nameCtx, Hashtable env )
- throws NamingException
- {
- Reference ref;
-
- // Can only reconstruct from a reference.
- if ( refObj instanceof Reference ) {
- ref = (Reference) refObj;
- // Make sure reference is of datasource class.
- if ( ref.getClassName().equals( getClass().getName() ) ) {
-
- PostgresqlDataSource ds;
- RefAddr addr;
-
- try {
- ds = (PostgresqlDataSource) Class.forName( ref.getClassName() ).newInstance();
- } catch ( Exception except ) {
- throw new NamingException( except.toString() );
+
+
+ public String toString()
+ {
+ if ( _description != null )
+ return _description;
+ else
+ {
+ String url;
+
+ url = "jdbc:postgresql:";
+ if ( _serverName != null )
+ {
+ if ( _portNumber == DEFAULT_PORT )
+ url = url + "//" + _serverName + "/";
+ else
+ url = url + "//" + _serverName + ":" + _portNumber + "/";
+ }
+ else if ( _portNumber != DEFAULT_PORT )
+ url = url + "//localhost:" + _portNumber + "/";
+ if ( _databaseName != null )
+ url = url + _databaseName;
+ return "DataSource " + url;
}
+ }
+
+
+ public synchronized Reference getReference()
+ {
+ Reference ref;
+
+ // We use same object as factory.
+ ref = new Reference( getClass().getName(), getClass().getName(), null );
// Mandatory properties
- ds._description = (String) ref.get( "description" ).getContent();
- ds._databaseName = (String) ref.get( "databaseName" ).getContent();
- ds._loginTimeout = Integer.parseInt( (String) ref.get( "loginTimeout" ).getContent() );
+ ref.add( new StringRefAddr( "description", _description ) );
+ ref.add( new StringRefAddr( "databaseName", _databaseName ) );
+ ref.add( new StringRefAddr( "loginTimeout", Integer.toString( _loginTimeout ) ) );
// Optional properties
- addr = ref.get( "user" );
- if ( addr != null )
- ds._user = (String) addr.getContent();
- addr = ref.get( "password" );
- if ( addr != null )
- ds._password = (String) addr.getContent();
- addr = ref.get( "serverName" );
- if ( addr != null )
- ds._serverName = (String) addr.getContent();
- addr = ref.get( "portNumber" );
- if ( addr != null )
- ds._portNumber = Integer.parseInt( (String) addr.getContent() );
- addr = ref.get( "transactionTimeout" );
- if ( addr != null )
- setTransactionTimeout( Integer.parseInt( (String) addr.getContent() ) );
- return ds;
-
- } else
- throw new NamingException( "DataSource: Reference not constructed from class " + getClass().getName() );
- } else if ( refObj instanceof Remote )
- return refObj;
- else
- return null;
- }
+ if ( _user != null )
+ ref.add( new StringRefAddr( "user", _user ) );
+ if ( _password != null )
+ ref.add( new StringRefAddr( "password", _password ) );
+ if ( _serverName != null )
+ ref.add( new StringRefAddr( "serverName", _serverName ) );
+ if ( _portNumber != DEFAULT_PORT )
+ ref.add( new StringRefAddr( "portNumber", Integer.toString( _portNumber ) ) );
+ ref.add( new StringRefAddr( "transactionTimeout", Integer.toString( getTransactionTimeout() ) ) );
+ return ref;
+ }
+
+
+ public Object getObjectInstance( Object refObj, Name name, Context nameCtx, Hashtable env )
+ throws NamingException
+ {
+ Reference ref;
+
+ // Can only reconstruct from a reference.
+ if ( refObj instanceof Reference )
+ {
+ ref = (Reference) refObj;
+ // Make sure reference is of datasource class.
+ if ( ref.getClassName().equals( getClass().getName() ) )
+ {
+
+ PostgresqlDataSource ds;
+ RefAddr addr;
+
+ try
+ {
+ ds = (PostgresqlDataSource) Class.forName( ref.getClassName() ).newInstance();
+ }
+ catch ( Exception except )
+ {
+ throw new NamingException( except.toString() );
+ }
+ // Mandatory properties
+ ds._description = (String) ref.get( "description" ).getContent();
+ ds._databaseName = (String) ref.get( "databaseName" ).getContent();
+ ds._loginTimeout = Integer.parseInt( (String) ref.get( "loginTimeout" ).getContent() );
+ // Optional properties
+ addr = ref.get( "user" );
+ if ( addr != null )
+ ds._user = (String) addr.getContent();
+ addr = ref.get( "password" );
+ if ( addr != null )
+ ds._password = (String) addr.getContent();
+ addr = ref.get( "serverName" );
+ if ( addr != null )
+ ds._serverName = (String) addr.getContent();
+ addr = ref.get( "portNumber" );
+ if ( addr != null )
+ ds._portNumber = Integer.parseInt( (String) addr.getContent() );
+ addr = ref.get( "transactionTimeout" );
+ if ( addr != null )
+ setTransactionTimeout( Integer.parseInt( (String) addr.getContent() ) );
+ return ds;
+
+ }
+ else
+ throw new NamingException( "DataSource: Reference not constructed from class " + getClass().getName() );
+ }
+ else if ( refObj instanceof Remote )
+ return refObj;
+ else
+ return null;
+ }
}