org.apache.xalan.lib.sql
Class JNDIConnectionPool

java.lang.Object
  extended by org.apache.xalan.lib.sql.JNDIConnectionPool
All Implemented Interfaces:
ConnectionPool

public class JNDIConnectionPool
extends java.lang.Object
implements ConnectionPool

A Connection Pool that wraps a JDBC datasource to provide connections. An instance of this class is created by XConnection when it attempts to resolves a ConnectionPool name as a JNDI data source. Most methods in this implementation do nothing since configuration is handled by the underlying JDBC datasource. Users should always call XConnection.close() from their stylsheet to explicitely close their connection. However, since there is no way to enforce this (Yikes!), it is recommended that a relatively short datasource timeout be used to prevent dangling connections.


Field Summary
private  java.lang.reflect.Method getConnection
           
private  java.lang.reflect.Method getConnectionWithArgs
          To maintain Java 1.3 compatibility, we need to work with the DataSource class through Reflection.
protected  java.lang.Object jdbcSource
          Reference to the datasource
protected  java.lang.String jndiPath
          The unique jndi path for this datasource.
protected  java.lang.String pwd
          Password for protected datasources.
protected  java.lang.String user
          User name for protected datasources.
 
Constructor Summary
JNDIConnectionPool()
          Use of the default constructor requires the jndi path to be set via setJndiPath().
JNDIConnectionPool(java.lang.String jndiDatasourcePath)
          Creates a connection pool with a specified JNDI path.
 
Method Summary
protected  void findDatasource()
          Internal method used to look up the datasource.
 void freeUnused()
          Intended to release unused connections from the pool.
 java.sql.Connection getConnection()
          Returns a connection from the JDNI DataSource found at the JNDI Datasource path.
 java.lang.String getJndiPath()
          Returns the path for the jndi datasource
 boolean hasActiveConnections()
          Always returns false, indicating that this wrapper has no idea of what connections the underlying JNDI source is maintaining.
 boolean isEnabled()
          Always returns true.
 void releaseConnection(java.sql.Connection con)
          Return a connection to the pool, the connection may be closed if the pool is inactive or has exceeded the max number of free connections
 void releaseConnectionOnError(java.sql.Connection con)
          Provide a mechinism to return a connection to the pool on Error.
 void setDriver(java.lang.String d)
          Not implemented and will throw an Error if called.
 void setJndiPath(java.lang.String jndiPath)
          Sets the path for the jndi datasource
 void setMinConnections(int n)
          Ignored in this implementation b/c the pooling is determined by the jndi dataosource.
 void setPassword(java.lang.String p)
          Sets the password for the connection.
 void setPoolEnabled(boolean flag)
          Releases the reference to the jndi datasource.
 void setProtocol(java.util.Properties p)
          Ignored in this implementation b/c the pooling is determined by the jndi dataosource.
 void setURL(java.lang.String url)
          Not implemented and will throw an Error if called.
 void setUser(java.lang.String u)
          Sets the user name for the connection.
 boolean testConnection()
          A simple test to see if the jndi datasource exists.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

jdbcSource

protected java.lang.Object jdbcSource
Reference to the datasource


getConnectionWithArgs

private java.lang.reflect.Method getConnectionWithArgs
To maintain Java 1.3 compatibility, we need to work with the DataSource class through Reflection. The getConnection method is one of the methods used, and there are two different flavors.


getConnection

private java.lang.reflect.Method getConnection

jndiPath

protected java.lang.String jndiPath
The unique jndi path for this datasource.


user

protected java.lang.String user
User name for protected datasources.


pwd

protected java.lang.String pwd
Password for protected datasources.

Constructor Detail

JNDIConnectionPool

public JNDIConnectionPool()
Use of the default constructor requires the jndi path to be set via setJndiPath().


JNDIConnectionPool

public JNDIConnectionPool(java.lang.String jndiDatasourcePath)
Creates a connection pool with a specified JNDI path.

Parameters:
jndiDatasourcePath - Complete path to the JNDI datasource
Method Detail

setJndiPath

public void setJndiPath(java.lang.String jndiPath)
Sets the path for the jndi datasource

Parameters:
jndiPath -

getJndiPath

public java.lang.String getJndiPath()
Returns the path for the jndi datasource

Parameters:
jndiPath -

isEnabled

public boolean isEnabled()
Always returns true. This method was intended to indicate if the pool was enabled, however, in this implementation that is not relavant.

Specified by:
isEnabled in interface ConnectionPool
Returns:

setDriver

public void setDriver(java.lang.String d)
Not implemented and will throw an Error if called. Connection configuration is handled by the underlying JNDI DataSource.

Specified by:
setDriver in interface ConnectionPool
Parameters:
d -

setURL

public void setURL(java.lang.String url)
Not implemented and will throw an Error if called. Connection configuration is handled by the underlying JNDI DataSource.

Specified by:
setURL in interface ConnectionPool
Parameters:
d -

freeUnused

public void freeUnused()
Intended to release unused connections from the pool. Does nothing in this implementation.

Specified by:
freeUnused in interface ConnectionPool

hasActiveConnections

public boolean hasActiveConnections()
Always returns false, indicating that this wrapper has no idea of what connections the underlying JNDI source is maintaining.

Specified by:
hasActiveConnections in interface ConnectionPool
Returns:

setPassword

public void setPassword(java.lang.String p)
Sets the password for the connection. If the jndi datasource does not require a password (which is typical), this can be left null.

Specified by:
setPassword in interface ConnectionPool
Parameters:
p - the password

setUser

public void setUser(java.lang.String u)
Sets the user name for the connection. If the jndi datasource does not require a user name (which is typical), this can be left null.

Specified by:
setUser in interface ConnectionPool
Parameters:
u - the user name

getConnection

public java.sql.Connection getConnection()
                                  throws java.sql.SQLException
Returns a connection from the JDNI DataSource found at the JNDI Datasource path.

Specified by:
getConnection in interface ConnectionPool
Returns:
Throws:
java.sql.SQLException

findDatasource

protected void findDatasource()
                       throws javax.naming.NamingException
Internal method used to look up the datasource.

Throws:
javax.naming.NamingException

releaseConnection

public void releaseConnection(java.sql.Connection con)
                       throws java.sql.SQLException
Description copied from interface: ConnectionPool
Return a connection to the pool, the connection may be closed if the pool is inactive or has exceeded the max number of free connections

Specified by:
releaseConnection in interface ConnectionPool
Throws:
java.sql.SQLException

releaseConnectionOnError

public void releaseConnectionOnError(java.sql.Connection con)
                              throws java.sql.SQLException
Description copied from interface: ConnectionPool
Provide a mechinism to return a connection to the pool on Error. A good default behaviour is to close this connection and build a new one to replace it. Some JDBC impl's won't allow you to reuse a connection after an error occurs.

Specified by:
releaseConnectionOnError in interface ConnectionPool
Throws:
java.sql.SQLException

setPoolEnabled

public void setPoolEnabled(boolean flag)
Releases the reference to the jndi datasource. The original intention of this method was to actually turn the pool *off*. Since we are not managing the pool, we simply release our reference to the datasource. Future calls to the getConnection will simply recreate the datasource.

Specified by:
setPoolEnabled in interface ConnectionPool
Parameters:
flag - If false, the reference to the datasource is released.

setProtocol

public void setProtocol(java.util.Properties p)
Ignored in this implementation b/c the pooling is determined by the jndi dataosource.

Specified by:
setProtocol in interface ConnectionPool
Parameters:
p -

setMinConnections

public void setMinConnections(int n)
Ignored in this implementation b/c the pooling is determined by the jndi dataosource.

Specified by:
setMinConnections in interface ConnectionPool
Parameters:
n -

testConnection

public boolean testConnection()
A simple test to see if the jndi datasource exists. Note that this test does not ensure that the datasource will return valid connections.

Specified by:
testConnection in interface ConnectionPool