org.apache.xalan.lib.sql

## Class JNDIConnectionPool

- java.lang.Object
- - 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.

### Constructor Summary

Constructors
Constructor and Description
`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

Methods
`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

`equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### 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`

#### 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`