org.apache.derby.jdbc
Class InternalDriver

java.lang.Object
  extended by org.apache.derby.jdbc.InternalDriver
All Implemented Interfaces:
ModuleControl
Direct Known Subclasses:
Driver169, Driver20

public abstract class InternalDriver
extends java.lang.Object
implements ModuleControl

Abstract factory class and api for JDBC objects.


Field Summary
protected  boolean active
           
private static InternalDriver activeDriver
           
private  AuthenticationService authenticationService
           
private  ContextService contextServiceFactory
           
private  java.lang.Object mbean
           
private static java.lang.Object syncMe
           
 
Constructor Summary
InternalDriver()
           
 
Method Summary
 boolean acceptsURL(java.lang.String url)
           
static InternalDriver activeDriver()
           
 void boot(boolean create, java.util.Properties properties)
          Boot this module with the given properties.
private static void checkBoolean(java.util.Properties set, java.lang.String attribute)
           
private static void checkEnumeration(java.util.Properties set, java.lang.String attribute, java.lang.String[] choices)
           
private  void checkShutdownPrivileges(java.lang.String user)
          Checks for shutdown System Privileges.
abstract  void checkSystemPrivileges(java.lang.String user, java.security.Permission perm)
          Checks for System Privileges.
 java.sql.Connection connect(java.lang.String url, java.util.Properties info)
           
static boolean embeddedDriverAcceptsURL(java.lang.String url)
           
protected  FormatableProperties getAttributes(java.lang.String url, java.util.Properties info)
          Convert all the attributes in the url into properties and combine them with the set provided.
 AuthenticationService getAuthenticationService()
           
private  ConnectionContext getConnectionContext()
           
 ContextService getContextServiceFactory()
           
private  ContextManager getCurrentContextManager()
           
static java.lang.String getDatabaseName(java.lang.String url, java.util.Properties info)
          Get the database name from the url.
 int getMajorVersion()
           
 int getMinorVersion()
           
protected abstract  EmbedConnection getNewEmbedConnection(java.lang.String url, java.util.Properties info)
           
abstract  java.sql.Connection getNewNestedConnection(EmbedConnection conn)
          Get a new nested connection.
 boolean isActive()
          Return true if this driver is active.
 boolean jdbcCompliant()
           
abstract  java.sql.CallableStatement newEmbedCallableStatement(EmbedConnection conn, java.lang.String stmt, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
           
 java.sql.DatabaseMetaData newEmbedDatabaseMetaData(EmbedConnection conn, java.lang.String dbname)
          Return a new java.sql.DatabaseMetaData instance for this implementation.
abstract  java.sql.PreparedStatement newEmbedPreparedStatement(EmbedConnection conn, java.lang.String stmt, boolean forMetaData, int resultSetType, int resultSetConcurrency, int resultSetHoldability, int autoGeneratedKeys, int[] columnIndexes, java.lang.String[] columnNames)
           
abstract  EmbedResultSet newEmbedResultSet(EmbedConnection conn, ResultSet results, boolean forMetaData, EmbedStatement statement, boolean isAtomic)
          Return a new java.sql.ResultSet instance for this implementation.
 EmbedResultSetMetaData newEmbedResultSetMetaData(ResultColumnDescriptor[] columnInfo)
          Returns a new java.sql.ResultSetMetaData for this implementation
 java.sql.Statement newEmbedStatement(EmbedConnection conn, boolean forMetaData, int resultSetType, int resultSetConcurrency, int resultSetHoldability)
           
 void stop()
          Stop the module.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

syncMe

private static final java.lang.Object syncMe

activeDriver

private static InternalDriver activeDriver

mbean

private java.lang.Object mbean

active

protected boolean active

contextServiceFactory

private ContextService contextServiceFactory

authenticationService

private AuthenticationService authenticationService
Constructor Detail

InternalDriver

public InternalDriver()
Method Detail

activeDriver

public static final InternalDriver activeDriver()

boot

public void boot(boolean create,
                 java.util.Properties properties)
          throws StandardException
Description copied from interface: ModuleControl
Boot this module with the given properties. Creates a module instance that can be found using the findModule() methods of Monitor. The module can only be found using one of these findModule() methods once this method has returned.

An implementation's boot method can throw StandardException. If it is thrown the module is not registered by the monitor and therefore cannot be found through a findModule(). In this case the module's stop() method is not called, thus throwing this exception must free up any resources.

When create is true the contents of the properties object will be written to the service.properties of the persistent service. Thus any code that requires an entry in service.properties must explicitly place the value in this properties set using the put method.
Typically the properties object contains one or more default properties sets, which are not written out to service.properties. These default sets are how callers modify the create process. In a JDBC connection database create the first set of defaults is a properties object that contains the attributes that were set on the jdbc:derby: URL. This attributes properties set has the second default properties set as its default. This set (which could be null) contains the properties that the user set on their DriverManager.getConnection() call, and are thus not owned by Derby code, and thus must not be modified by Derby code.

When create is false the properties object contains all the properties set in the service.properties file plus a limited number of attributes from the JDBC URL attributes or connection properties set. This avoids properties set by the user compromising the boot process. An example of a property passed in from the JDBC world is the bootPassword for encrypted databases.

Code should not hold onto the passed in properties reference after boot time as its contents may change underneath it. At least after the complete boot is completed, the links to all the default sets will be removed.

Specified by:
boot in interface ModuleControl
Throws:
StandardException - Module cannot be started.
See Also:
Monitor, ModuleFactory

stop

public void stop()
Description copied from interface: ModuleControl
Stop the module. The module may be found via a findModule() method until some time after this method returns. Therefore the factory must be prepared to reject requests to it once it has been stopped. In addition other modules may cache a reference to the module and make requests of it after it has been stopped, these requests should be rejected as well.

Specified by:
stop in interface ModuleControl
See Also:
Monitor, ModuleFactory

acceptsURL

public boolean acceptsURL(java.lang.String url)

embeddedDriverAcceptsURL

public static boolean embeddedDriverAcceptsURL(java.lang.String url)

connect

public java.sql.Connection connect(java.lang.String url,
                                   java.util.Properties info)
                            throws java.sql.SQLException
Throws:
java.sql.SQLException

checkSystemPrivileges

public abstract void checkSystemPrivileges(java.lang.String user,
                                           java.security.Permission perm)
                                    throws java.lang.Exception
Checks for System Privileges. Abstract since some of the javax security classes are not available on all platforms.

Parameters:
user - The user to be checked for having the permission
perm - The permission to be checked
Throws:
java.security.AccessControlException - if permissions are missing
java.lang.Exception - if the privileges check fails for some other reason

checkShutdownPrivileges

private void checkShutdownPrivileges(java.lang.String user)
                              throws java.sql.SQLException
Checks for shutdown System Privileges. To perform this check the following policy grant is required or a SQLException will be raised detailing the cause.

In addition, for the test to succeed

or it will fail with a SQLException detailing the cause.

Parameters:
user - The user to be checked for shutdown privileges
Throws:
java.sql.SQLException - if the privileges check fails

getMajorVersion

public int getMajorVersion()

getMinorVersion

public int getMinorVersion()

jdbcCompliant

public boolean jdbcCompliant()

getAttributes

protected FormatableProperties getAttributes(java.lang.String url,
                                             java.util.Properties info)
                                      throws java.sql.SQLException
Convert all the attributes in the url into properties and combine them with the set provided.
If the caller passed in a set of attributes (info != null) then we set that up as the default of the returned property set as the user's set. This means we can easily break the link with the user's set, ensuring that we don't hang onto the users object. It also means that we don't add our attributes into the user's own property object.

Throws:
java.sql.SQLException - thrown if URL form bad

checkBoolean

private static void checkBoolean(java.util.Properties set,
                                 java.lang.String attribute)
                          throws java.sql.SQLException
Throws:
java.sql.SQLException

checkEnumeration

private static void checkEnumeration(java.util.Properties set,
                                     java.lang.String attribute,
                                     java.lang.String[] choices)
                              throws java.sql.SQLException
Throws:
java.sql.SQLException

getDatabaseName

public static java.lang.String getDatabaseName(java.lang.String url,
                                               java.util.Properties info)
Get the database name from the url. Copes with three forms jdbc:derby:dbname jdbc:derby:dbname;... jdbc:derby:;subname=dbname

Parameters:
url - The url being used for the connection
info - The properties set being used for the connection, must include the properties derived from the attributes in the url
Returns:
a String containing the database name or an empty string ("") if no database name is present in the URL.

getContextServiceFactory

public final ContextService getContextServiceFactory()

getAuthenticationService

public AuthenticationService getAuthenticationService()

getNewEmbedConnection

protected abstract EmbedConnection getNewEmbedConnection(java.lang.String url,
                                                         java.util.Properties info)
                                                  throws java.sql.SQLException
Throws:
java.sql.SQLException

getConnectionContext

private ConnectionContext getConnectionContext()

getCurrentContextManager

private ContextManager getCurrentContextManager()

isActive

public boolean isActive()
Return true if this driver is active. Package private method.


getNewNestedConnection

public abstract java.sql.Connection getNewNestedConnection(EmbedConnection conn)
Get a new nested connection.

Parameters:
conn - The EmbedConnection.
Returns:
A nested connection object.

newEmbedStatement

public java.sql.Statement newEmbedStatement(EmbedConnection conn,
                                            boolean forMetaData,
                                            int resultSetType,
                                            int resultSetConcurrency,
                                            int resultSetHoldability)

newEmbedPreparedStatement

public abstract java.sql.PreparedStatement newEmbedPreparedStatement(EmbedConnection conn,
                                                                     java.lang.String stmt,
                                                                     boolean forMetaData,
                                                                     int resultSetType,
                                                                     int resultSetConcurrency,
                                                                     int resultSetHoldability,
                                                                     int autoGeneratedKeys,
                                                                     int[] columnIndexes,
                                                                     java.lang.String[] columnNames)
                                                              throws java.sql.SQLException
Throws:
java.sql.SQLException - if fails to create statement

newEmbedCallableStatement

public abstract java.sql.CallableStatement newEmbedCallableStatement(EmbedConnection conn,
                                                                     java.lang.String stmt,
                                                                     int resultSetType,
                                                                     int resultSetConcurrency,
                                                                     int resultSetHoldability)
                                                              throws java.sql.SQLException
Throws:
java.sql.SQLException - if fails to create statement

newEmbedDatabaseMetaData

public java.sql.DatabaseMetaData newEmbedDatabaseMetaData(EmbedConnection conn,
                                                          java.lang.String dbname)
                                                   throws java.sql.SQLException
Return a new java.sql.DatabaseMetaData instance for this implementation.

Throws:
java.sql.SQLException - on failure to create.

newEmbedResultSet

public abstract EmbedResultSet newEmbedResultSet(EmbedConnection conn,
                                                 ResultSet results,
                                                 boolean forMetaData,
                                                 EmbedStatement statement,
                                                 boolean isAtomic)
                                          throws java.sql.SQLException
Return a new java.sql.ResultSet instance for this implementation.

Parameters:
conn - Owning connection
results - Top level of language result set tree
forMetaData - Is this for meta-data
statement - The statement that is creating the SQL ResultSet
isAtomic -
Returns:
a new java.sql.ResultSet
Throws:
java.sql.SQLException

newEmbedResultSetMetaData

public EmbedResultSetMetaData newEmbedResultSetMetaData(ResultColumnDescriptor[] columnInfo)
Returns a new java.sql.ResultSetMetaData for this implementation

Parameters:
columnInfo - a ResultColumnDescriptor that stores information about the columns in a ResultSet

Built on Thu 2010-12-23 20:49:13+0000, from revision ???

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