Class LogicalConnection
- java.lang.Object
-
- org.apache.derby.client.am.LogicalConnection
-
- All Implemented Interfaces:
java.lang.AutoCloseable
,java.sql.Connection
,java.sql.Wrapper
- Direct Known Subclasses:
CachingLogicalConnection
public class LogicalConnection extends java.lang.Object implements java.sql.Connection
A simple delegation wrapper handle for a physical connection.All methods of the
Connection
interface are forwarded to the underlying physical connection, except forclose()
andisClosed()
. When a physical connection is wrapped, it is non-null, when the logical connection is closed, the wrapped physical connection is always set tonull
. Both the finalizer and theclose
-methods will always set the physical connection tonull
. After the physical connection has been nulled out, only thePooledConnection
instance will maintain a handle to the physical connection.
-
-
Field Summary
Fields Modifier and Type Field Description private LogicalDatabaseMetaData
logicalDatabaseMetaData
Logical database metadata object created on demand and then cached.(package private) ClientConnection
physicalConnection_
Underlying physical connection for this logical connection.private ClientPooledConnection
pooledConnection_
-
Constructor Summary
Constructors Constructor Description LogicalConnection(ClientConnection physicalConnection, ClientPooledConnection pooledConnection)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
abort(java.util.concurrent.Executor executor)
protected void
checkForNullPhysicalConnection()
Verifies that there is an underlying physical connection for this logical connection.void
clearWarnings()
void
close()
void
closeWithoutRecyclingToPool()
void
commit()
java.sql.Array
createArrayOf(java.lang.String typeName, java.lang.Object[] elements)
java.sql.Blob
createBlob()
java.sql.Clob
createClob()
java.sql.NClob
createNClob()
java.sql.SQLXML
createSQLXML()
java.sql.Statement
createStatement()
java.sql.Statement
createStatement(int resultSetType, int resultSetConcurrency)
java.sql.Statement
createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability)
java.sql.Struct
createStruct(java.lang.String typeName, java.lang.Object[] attributes)
protected void
finalize()
boolean
getAutoCommit()
java.lang.String
getCatalog()
java.util.Properties
getClientInfo()
getClientInfo
forwards tophysicalConnection_
.java.lang.String
getClientInfo(java.lang.String name)
getClientInfo
forwards tophysicalConnection_
.int
getHoldability()
java.sql.DatabaseMetaData
getMetaData()
Retrieves aDatabaseMetaData
object that contains metadata about the database to which thisConnection
object represents a connection.int
getNetworkTimeout()
(package private) java.sql.DatabaseMetaData
getRealMetaDataObject()
Returns the real underlying database metadata object.java.lang.String
getSchema()
Get the name of the current schema.int
getServerVersion()
int
getTransactionID()
Returns the client-side transaction id from am.Connection.int
getTransactionIsolation()
java.util.Map<java.lang.String,java.lang.Class<?>>
getTypeMap()
java.sql.SQLWarning
getWarnings()
boolean
isClosed()
boolean
isReadOnly()
boolean
isValid(int timeout)
Checks if the connection has not been closed and is still valid.boolean
isWrapperFor(java.lang.Class<?> interfaces)
java.lang.String
nativeSQL(java.lang.String sql)
protected LogicalDatabaseMetaData
newLogicalDatabaseMetaData()
Returns a newly created logical database metadata object.(package private) void
notifyException(java.sql.SQLException sqle)
Notifies listeners about exceptions of session level severity or higher.void
nullPhysicalConnection()
java.sql.CallableStatement
prepareCall(java.lang.String sql)
java.sql.CallableStatement
prepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency)
java.sql.CallableStatement
prepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
java.sql.PreparedStatement
prepareStatement(java.lang.String sql)
java.sql.PreparedStatement
prepareStatement(java.lang.String sql, int autoGeneratedKeys)
java.sql.PreparedStatement
prepareStatement(java.lang.String sql, int[] columnIndexes)
java.sql.PreparedStatement
prepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency)
java.sql.PreparedStatement
prepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
java.sql.PreparedStatement
prepareStatement(java.lang.String sql, java.lang.String[] columnNames)
void
releaseSavepoint(java.sql.Savepoint savepoint)
void
rollback()
void
rollback(java.sql.Savepoint savepoint)
void
setAutoCommit(boolean autoCommit)
void
setCatalog(java.lang.String catalog)
void
setClientInfo(java.lang.String name, java.lang.String value)
setClientInfo
forwards tophysicalConnection_
.void
setClientInfo(java.util.Properties properties)
setClientInfo
forwards tophysicalConnection_
.void
setHoldability(int holdability)
void
setNetworkTimeout(java.util.concurrent.Executor executor, int milliseconds)
void
setReadOnly(boolean readOnly)
java.sql.Savepoint
setSavepoint()
java.sql.Savepoint
setSavepoint(java.lang.String name)
void
setSchema(java.lang.String schemaName)
Set the default schema for the Connection.void
setTransactionIsolation(int level)
void
setTypeMap(java.util.Map map)
<T> T
unwrap(java.lang.Class<T> interfaces)
-
-
-
Field Detail
-
physicalConnection_
ClientConnection physicalConnection_
Underlying physical connection for this logical connection.Set to
null
when this logical connection is closed.
-
pooledConnection_
private ClientPooledConnection pooledConnection_
-
logicalDatabaseMetaData
private LogicalDatabaseMetaData logicalDatabaseMetaData
Logical database metadata object created on demand and then cached. The lifetime of the metadata object is the same as this logical connection, in the sense that it will raise exceptions on method invocations after the logical connection has been closed.
-
-
Constructor Detail
-
LogicalConnection
public LogicalConnection(ClientConnection physicalConnection, ClientPooledConnection pooledConnection) throws SqlException
- Throws:
SqlException
-
-
Method Detail
-
finalize
protected void finalize() throws java.lang.Throwable
- Overrides:
finalize
in classjava.lang.Object
- Throws:
java.lang.Throwable
-
nullPhysicalConnection
public void nullPhysicalConnection()
-
close
public void close() throws java.sql.SQLException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
closeWithoutRecyclingToPool
public void closeWithoutRecyclingToPool() throws SqlException
- Throws:
SqlException
-
isClosed
public boolean isClosed() throws java.sql.SQLException
- Specified by:
isClosed
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
checkForNullPhysicalConnection
protected final void checkForNullPhysicalConnection() throws java.sql.SQLException
Verifies that there is an underlying physical connection for this logical connection.If the physical connection has been nulled out it means that this logical connection has been closed.
- Throws:
java.sql.SQLException
- if this logical connection has been closed
-
notifyException
final void notifyException(java.sql.SQLException sqle)
Notifies listeners about exceptions of session level severity or higher.The exception, even if the severity is sufficiently high, is ignored if the underlying physical connection has been nulled out. Otherwise a
connectionErrorOccurred
-event is sent to all the registered listeners.- Parameters:
sqle
- the cause of the notification
-
createStatement
public java.sql.Statement createStatement() throws java.sql.SQLException
- Specified by:
createStatement
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql) throws java.sql.SQLException
- Specified by:
prepareStatement
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
prepareCall
public java.sql.CallableStatement prepareCall(java.lang.String sql) throws java.sql.SQLException
- Specified by:
prepareCall
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
nativeSQL
public java.lang.String nativeSQL(java.lang.String sql) throws java.sql.SQLException
- Specified by:
nativeSQL
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
setAutoCommit
public void setAutoCommit(boolean autoCommit) throws java.sql.SQLException
- Specified by:
setAutoCommit
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getAutoCommit
public boolean getAutoCommit() throws java.sql.SQLException
- Specified by:
getAutoCommit
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
commit
public void commit() throws java.sql.SQLException
- Specified by:
commit
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
rollback
public void rollback() throws java.sql.SQLException
- Specified by:
rollback
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
setTransactionIsolation
public void setTransactionIsolation(int level) throws java.sql.SQLException
- Specified by:
setTransactionIsolation
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getTransactionIsolation
public int getTransactionIsolation() throws java.sql.SQLException
- Specified by:
getTransactionIsolation
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getWarnings
public java.sql.SQLWarning getWarnings() throws java.sql.SQLException
- Specified by:
getWarnings
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
clearWarnings
public void clearWarnings() throws java.sql.SQLException
- Specified by:
clearWarnings
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getMetaData
public java.sql.DatabaseMetaData getMetaData() throws java.sql.SQLException
Retrieves aDatabaseMetaData
object that contains metadata about the database to which thisConnection
object represents a connection.The database metadata object is logical in the sense that it has the same lifetime as the logical connection. If the logical connection is closed, the underlying physical connection will not be accessed to obtain metadata, even if it is still open. Also, the reference to the logical connection instead of the underlying physical connection will be returned by
LogicalDatabaseMetaData.getConnection()
.- Specified by:
getMetaData
in interfacejava.sql.Connection
- Returns:
- A database metadata object.
- Throws:
java.sql.SQLException
- if an error occurs
-
newLogicalDatabaseMetaData
protected LogicalDatabaseMetaData newLogicalDatabaseMetaData() throws java.sql.SQLException
Returns a newly created logical database metadata object.Subclasses should override this method to return an instance of the correct implementation class of the logical metadata object.
- Returns:
- A logical database metadata object.
- Throws:
java.sql.SQLException
-
getRealMetaDataObject
final java.sql.DatabaseMetaData getRealMetaDataObject() throws java.sql.SQLException
Returns the real underlying database metadata object.- Returns:
- The metadata object from the underlying physical connection.
- Throws:
java.sql.SQLException
- if the logical connection has been closed
-
setReadOnly
public void setReadOnly(boolean readOnly) throws java.sql.SQLException
- Specified by:
setReadOnly
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
isReadOnly
public boolean isReadOnly() throws java.sql.SQLException
- Specified by:
isReadOnly
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
setCatalog
public void setCatalog(java.lang.String catalog) throws java.sql.SQLException
- Specified by:
setCatalog
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getCatalog
public java.lang.String getCatalog() throws java.sql.SQLException
- Specified by:
getCatalog
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
createStatement
public java.sql.Statement createStatement(int resultSetType, int resultSetConcurrency) throws java.sql.SQLException
- Specified by:
createStatement
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency) throws java.sql.SQLException
- Specified by:
prepareStatement
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
prepareCall
public java.sql.CallableStatement prepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency) throws java.sql.SQLException
- Specified by:
prepareCall
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getTypeMap
public java.util.Map<java.lang.String,java.lang.Class<?>> getTypeMap() throws java.sql.SQLException
- Specified by:
getTypeMap
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
setTypeMap
public void setTypeMap(java.util.Map map) throws java.sql.SQLException
- Specified by:
setTypeMap
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
createStatement
public java.sql.Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws java.sql.SQLException
- Specified by:
createStatement
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
prepareCall
public java.sql.CallableStatement prepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws java.sql.SQLException
- Specified by:
prepareCall
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws java.sql.SQLException
- Specified by:
prepareStatement
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int autoGeneratedKeys) throws java.sql.SQLException
- Specified by:
prepareStatement
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int[] columnIndexes) throws java.sql.SQLException
- Specified by:
prepareStatement
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, java.lang.String[] columnNames) throws java.sql.SQLException
- Specified by:
prepareStatement
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
setHoldability
public void setHoldability(int holdability) throws java.sql.SQLException
- Specified by:
setHoldability
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getHoldability
public int getHoldability() throws java.sql.SQLException
- Specified by:
getHoldability
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
setSavepoint
public java.sql.Savepoint setSavepoint() throws java.sql.SQLException
- Specified by:
setSavepoint
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
setSavepoint
public java.sql.Savepoint setSavepoint(java.lang.String name) throws java.sql.SQLException
- Specified by:
setSavepoint
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
rollback
public void rollback(java.sql.Savepoint savepoint) throws java.sql.SQLException
- Specified by:
rollback
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
releaseSavepoint
public void releaseSavepoint(java.sql.Savepoint savepoint) throws java.sql.SQLException
- Specified by:
releaseSavepoint
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getTransactionID
public int getTransactionID()
Returns the client-side transaction id from am.Connection.NOTE: This method was added for testing purposes. Avoid use in production code if possible.
-
getServerVersion
public int getServerVersion()
-
createArrayOf
public java.sql.Array createArrayOf(java.lang.String typeName, java.lang.Object[] elements) throws java.sql.SQLException
- Specified by:
createArrayOf
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
createBlob
public java.sql.Blob createBlob() throws java.sql.SQLException
- Specified by:
createBlob
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
createClob
public java.sql.Clob createClob() throws java.sql.SQLException
- Specified by:
createClob
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
createNClob
public java.sql.NClob createNClob() throws java.sql.SQLException
- Specified by:
createNClob
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
createSQLXML
public java.sql.SQLXML createSQLXML() throws java.sql.SQLException
- Specified by:
createSQLXML
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
createStruct
public java.sql.Struct createStruct(java.lang.String typeName, java.lang.Object[] attributes) throws java.sql.SQLException
- Specified by:
createStruct
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getClientInfo
public java.util.Properties getClientInfo() throws java.sql.SQLException
getClientInfo
forwards tophysicalConnection_
.getClientInfo
always returns an emptyProperties
object since Derby doesn't support ClientInfoProperties.- Specified by:
getClientInfo
in interfacejava.sql.Connection
- Returns:
- an empty
Properties
object - Throws:
java.sql.SQLException
- if an error occurs
-
getClientInfo
public java.lang.String getClientInfo(java.lang.String name) throws java.sql.SQLException
getClientInfo
forwards tophysicalConnection_
. Always returns anull String
since Derby does not support ClientInfoProperties.- Specified by:
getClientInfo
in interfacejava.sql.Connection
- Parameters:
name
- a property key to getString
- Returns:
- a property value
String
- Throws:
java.sql.SQLException
- if an error occurs
-
isValid
public boolean isValid(int timeout) throws java.sql.SQLException
Checks if the connection has not been closed and is still valid. The validity is checked by running a simple query against the database.- Specified by:
isValid
in interfacejava.sql.Connection
- Parameters:
timeout
- The time in seconds to wait for the database operation used to validate the connection to complete. If the timeout period expires before the operation completes, this method returns false. A value of 0 indicates a timeout is not applied to the database operation.- Returns:
- true if the connection is valid, false otherwise
- Throws:
java.sql.SQLException
- if the call on the physical connection throws an exception.
-
isWrapperFor
public boolean isWrapperFor(java.lang.Class<?> interfaces) throws java.sql.SQLException
- Specified by:
isWrapperFor
in interfacejava.sql.Wrapper
- Throws:
java.sql.SQLException
-
setClientInfo
public void setClientInfo(java.util.Properties properties) throws java.sql.SQLClientInfoException
setClientInfo
forwards tophysicalConnection_
.- Specified by:
setClientInfo
in interfacejava.sql.Connection
- Parameters:
properties
- aProperties
object with the properties to set- Throws:
java.sql.SQLClientInfoException
- if an error occurs
-
setClientInfo
public void setClientInfo(java.lang.String name, java.lang.String value) throws java.sql.SQLClientInfoException
setClientInfo
forwards tophysicalConnection_
.- Specified by:
setClientInfo
in interfacejava.sql.Connection
- Parameters:
name
- a property keyString
value
- a property valueString
- Throws:
java.sql.SQLClientInfoException
- if an error occurs
-
unwrap
public <T> T unwrap(java.lang.Class<T> interfaces) throws java.sql.SQLException
- Specified by:
unwrap
in interfacejava.sql.Wrapper
- Throws:
java.sql.SQLException
-
getSchema
public java.lang.String getSchema() throws java.sql.SQLException
Get the name of the current schema.- Specified by:
getSchema
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
setSchema
public void setSchema(java.lang.String schemaName) throws java.sql.SQLException
Set the default schema for the Connection.- Specified by:
setSchema
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
abort
public void abort(java.util.concurrent.Executor executor) throws java.sql.SQLException
- Specified by:
abort
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
getNetworkTimeout
public int getNetworkTimeout() throws java.sql.SQLException
- Specified by:
getNetworkTimeout
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
setNetworkTimeout
public void setNetworkTimeout(java.util.concurrent.Executor executor, int milliseconds) throws java.sql.SQLException
- Specified by:
setNetworkTimeout
in interfacejava.sql.Connection
- Throws:
java.sql.SQLException
-
-