org.apache.derby.client
Class ClientPooledConnection

java.lang.Object
  extended by org.apache.derby.client.ClientPooledConnection
All Implemented Interfaces:
javax.sql.PooledConnection
Direct Known Subclasses:
ClientPooledConnection40, ClientXAConnection

public class ClientPooledConnection
extends java.lang.Object
implements javax.sql.PooledConnection

A physical connection to a data source, to be used for creating logical connections to the same data source.


Field Summary
private  int eventIterators
          The number of iterators going through the list of connection event listeners at the current time.
private  java.util.ArrayList listeners_
          List of ConnectionEventListeners.
(package private)  LogicalConnection logicalConnection_
          The logical connection using the physical connection.
protected  LogWriter logWriter_
           
(package private)  NetConnection netPhysicalConnection_
           
(package private)  NetXAConnection netXAPhysicalConnection_
           
private  boolean newPC_
          Tells if this pooled connection is newly created.
(package private)  Connection physicalConnection_
           
protected  int rmId_
          Resource manager identificator.
private  JDBCStatementCache statementCache
          The statement cache for the underlying physical connection.
 
Constructor Summary
ClientPooledConnection(ClientBaseDataSource ds, LogWriter logWriter, java.lang.String user, java.lang.String password)
          Constructor for non-XA pooled connections.
ClientPooledConnection(ClientBaseDataSource ds, LogWriter logWriter, java.lang.String user, java.lang.String password, int rmId)
          Constructor for XA pooled connections only.
 
Method Summary
 void addConnectionEventListener(javax.sql.ConnectionEventListener listener)
           
 void close()
          Closes the physical connection to the data source and frees all assoicated resources.
private  void createLogicalConnection()
          Creates a new logical connection by performing all the required steps to be able to reuse the physical connection.
protected  void finalize()
           
private  void fireConnectionEventListeners(SqlException exception)
          Fire all the ConnectionEventListeners registered.
 java.sql.Connection getConnection()
          Creates a logical connection.
protected  NetXAConnection getNetXAConnection(ClientBaseDataSource ds, NetLogWriter logWriter, java.lang.String user, java.lang.String password, int rmId)
          creates and returns NetXAConnection.
 void informListeners(SqlException exception)
          Inform listeners that an error has occured on the connection, if the error severity is high enough.
 boolean isStatementPoolingEnabled()
          Tells is statement pooling is enabled or not.
 void nullLogicalConnection()
          Used by LogicalConnection.close in some circumstances when it disassociates itself from the pooled connection.
 void onStatementClose(java.sql.PreparedStatement statement)
          The onStatementClose contains the logic for raising the Statement Closed events.
 void onStatementErrorOccurred(java.sql.PreparedStatement statement, java.sql.SQLException sqle)
          The method contains the logic for raising the Statement error occurred events.
 void recycleConnection()
          Inform listeners that the logical connection has been closed and that the physical connection is ready for reuse.
 void removeConnectionEventListener(javax.sql.ConnectionEventListener listener)
           
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.sql.PooledConnection
addStatementEventListener, removeStatementEventListener
 

Field Detail

newPC_

private boolean newPC_
Tells if this pooled connection is newly created.


listeners_

private java.util.ArrayList listeners_
List of ConnectionEventListeners. Never null.


eventIterators

private int eventIterators
The number of iterators going through the list of connection event listeners at the current time. Only one thread may be iterating over the list at any time (because of synchronization), but a single thread may have multiple iterators if for instance an event listener performs database calls that trigger a new event.


physicalConnection_

Connection physicalConnection_

netPhysicalConnection_

NetConnection netPhysicalConnection_

netXAPhysicalConnection_

NetXAConnection netXAPhysicalConnection_

statementCache

private final JDBCStatementCache statementCache
The statement cache for the underlying physical connection.

This will be null if statement caching is disabled (default).


logicalConnection_

LogicalConnection logicalConnection_
The logical connection using the physical connection.


logWriter_

protected LogWriter logWriter_

rmId_

protected int rmId_
Resource manager identificator.

Constructor Detail

ClientPooledConnection

public ClientPooledConnection(ClientBaseDataSource ds,
                              LogWriter logWriter,
                              java.lang.String user,
                              java.lang.String password)
                       throws java.sql.SQLException
Constructor for non-XA pooled connections.

Using standard Java APIs, a CPDS is passed in. Arguments for user/password overrides anything on the data source.

Parameters:
ds - data source creating this pooled connection
logWriter - destination for log messages
user - user name
password - user password
Throws:
java.sql.SQLException - if creating the pooled connection fails due problems in the database, or problems communicating with the database

ClientPooledConnection

public ClientPooledConnection(ClientBaseDataSource ds,
                              LogWriter logWriter,
                              java.lang.String user,
                              java.lang.String password,
                              int rmId)
                       throws java.sql.SQLException
Constructor for XA pooled connections only.

Using standard Java APIs, a CPDS is passed in. Arguments for user/password overrides anything on the data source.

Parameters:
ds - data source creating this pooled connection
logWriter - destination for log messages
user - user name
password - user password
rmId - resource manager id
Throws:
java.sql.SQLException - if creating the pooled connection fails due problems in the database, or problems communicating with the database
Method Detail

isStatementPoolingEnabled

public boolean isStatementPoolingEnabled()
Tells is statement pooling is enabled or not.

Returns:
true if enabled, false if disabled.

finalize

protected void finalize()
                 throws java.lang.Throwable
Overrides:
finalize in class java.lang.Object
Throws:
java.lang.Throwable

close

public void close()
           throws java.sql.SQLException
Closes the physical connection to the data source and frees all assoicated resources.

Specified by:
close in interface javax.sql.PooledConnection
Throws:
java.sql.SQLException - if closing the connection causes an error. Note that this connection can still be considered closed even if an error occurs.

getConnection

public java.sql.Connection getConnection()
                                  throws java.sql.SQLException
Creates a logical connection.

This is the standard API for getting a logical connection handle for a pooled connection. No "resettable" properties are passed, so user, password, and all other properties may not change.

Specified by:
getConnection in interface javax.sql.PooledConnection
Throws:
java.sql.SQLException - if creating a new logical connection fails

createLogicalConnection

private void createLogicalConnection()
                              throws SqlException
Creates a new logical connection by performing all the required steps to be able to reuse the physical connection.

Throws:
SqlException - if there is no physical connection, or if any error occurs when recycling the physical connection or closing/craeting the logical connection

addConnectionEventListener

public void addConnectionEventListener(javax.sql.ConnectionEventListener listener)
Specified by:
addConnectionEventListener in interface javax.sql.PooledConnection

removeConnectionEventListener

public void removeConnectionEventListener(javax.sql.ConnectionEventListener listener)
Specified by:
removeConnectionEventListener in interface javax.sql.PooledConnection

recycleConnection

public void recycleConnection()
Inform listeners that the logical connection has been closed and that the physical connection is ready for reuse.

Not public, but needs to be visible to am.LogicalConnection


informListeners

public void informListeners(SqlException exception)
Inform listeners that an error has occured on the connection, if the error severity is high enough.

Not public, but needs to be visible to am.LogicalConnection

Parameters:
exception - the exception that occurred on the connection

fireConnectionEventListeners

private void fireConnectionEventListeners(SqlException exception)
Fire all the ConnectionEventListeners registered. Callers must synchronize on this to prevent others from modifying the list of listeners.

Parameters:
exception - the exception that caused the event, or null if it is a close event

nullLogicalConnection

public void nullLogicalConnection()
Used by LogicalConnection.close in some circumstances when it disassociates itself from the pooled connection.


onStatementClose

public void onStatementClose(java.sql.PreparedStatement statement)
The onStatementClose contains the logic for raising the Statement Closed events. This method has a dummy implementation here to avoid error when this class is compiled with jdk1.4. The class the actual implementation in ClientPooledConnection40.

Parameters:
statement - The PreparedStatement that was closed

onStatementErrorOccurred

public void onStatementErrorOccurred(java.sql.PreparedStatement statement,
                                     java.sql.SQLException sqle)
The method contains the logic for raising the Statement error occurred events. This method has a dummy implementation here to avoid error when this class is compiled with jdk1.4. The class the actual implementation in ClientPooledConnection40.

Parameters:
statement - The PreparedStatement that was closed
sqle - The SQLException associated with the error that caused the invalidation of this PreparedStatement

getNetXAConnection

protected NetXAConnection getNetXAConnection(ClientBaseDataSource ds,
                                             NetLogWriter logWriter,
                                             java.lang.String user,
                                             java.lang.String password,
                                             int rmId)
                                      throws SqlException
creates and returns NetXAConnection. Overwrite this method to create different version of NetXAConnection

Parameters:
ds -
logWriter -
user -
password -
rmId -
Returns:
NetXAConnection
Throws:
SqlException

Built on Thu 2011-03-10 11:54:14+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.