org.springframework.jdbc.support
Class SQLErrorCodesFactory

java.lang.Object
  extended by org.springframework.jdbc.support.SQLErrorCodesFactory

public class SQLErrorCodesFactory
extends java.lang.Object

Factory for creating SQLErrorCodes based on the "databaseProductName" taken from the DatabaseMetaData.

Returns SQLErrorCodes populated with vendor codes defined in a configuration file named "sql-error-codes.xml". Reads the default file in this package if not overridden by a file in the root of the class path (for example in the "/WEB-INF/classes" directory).

Author:
Thomas Risberg, Rod Johnson, Juergen Hoeller
See Also:
DatabaseMetaData.getDatabaseProductName()

Field Summary
static java.lang.String SQL_ERROR_CODE_DEFAULT_PATH
          The name of default SQL error code files, loading from the class path.
static java.lang.String SQL_ERROR_CODE_OVERRIDE_PATH
          The name of custom SQL error codes file, loading from the root of the class path (e.g.
 
Constructor Summary
protected SQLErrorCodesFactory()
          Create a new instance of the SQLErrorCodesFactory class.
 
Method Summary
 SQLErrorCodes getErrorCodes(javax.sql.DataSource dataSource)
          Return SQLErrorCodes for the given DataSource, evaluating "databaseProductName" from the DatabaseMetaData, or an empty error codes instance if no SQLErrorCodes were found.
 SQLErrorCodes getErrorCodes(java.lang.String dbName)
          Return the SQLErrorCodes instance for the given database.
static SQLErrorCodesFactory getInstance()
          Return the singleton instance.
protected  Resource loadResource(java.lang.String path)
          Load the given resource from the class path.
 SQLErrorCodes registerDatabase(javax.sql.DataSource dataSource, java.lang.String dbName)
          Associate the specified database name with the given DataSource.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SQL_ERROR_CODE_OVERRIDE_PATH

public static final java.lang.String SQL_ERROR_CODE_OVERRIDE_PATH
The name of custom SQL error codes file, loading from the root of the class path (e.g. from the "/WEB-INF/classes" directory).

See Also:
Constant Field Values

SQL_ERROR_CODE_DEFAULT_PATH

public static final java.lang.String SQL_ERROR_CODE_DEFAULT_PATH
The name of default SQL error code files, loading from the class path.

See Also:
Constant Field Values
Constructor Detail

SQLErrorCodesFactory

protected SQLErrorCodesFactory()
Create a new instance of the SQLErrorCodesFactory class.

Not public to enforce Singleton design pattern. Would be private except to allow testing via overriding the loadResource(String) method.

Do not subclass in application code.

See Also:
loadResource(String)
Method Detail

getInstance

public static SQLErrorCodesFactory getInstance()
Return the singleton instance.


loadResource

protected Resource loadResource(java.lang.String path)
Load the given resource from the class path.

Not to be overridden by application developers, who should obtain instances of this class from the static getInstance() method.

Protected for testability.

Parameters:
path - resource path; either a custom path or one of either SQL_ERROR_CODE_DEFAULT_PATH or SQL_ERROR_CODE_OVERRIDE_PATH.
Returns:
the resource, or null if the resource wasn't found
See Also:
getInstance()

getErrorCodes

public SQLErrorCodes getErrorCodes(java.lang.String dbName)
Return the SQLErrorCodes instance for the given database.

No need for a database metadata lookup.

Parameters:
dbName - the database name (must not be null)
Returns:
the SQLErrorCodes instance for the given database
Throws:
java.lang.IllegalArgumentException - if the supplied database name is null

getErrorCodes

public SQLErrorCodes getErrorCodes(javax.sql.DataSource dataSource)
Return SQLErrorCodes for the given DataSource, evaluating "databaseProductName" from the DatabaseMetaData, or an empty error codes instance if no SQLErrorCodes were found.

Parameters:
dataSource - the DataSource identifying the database
Returns:
the corresponding SQLErrorCodes object
See Also:
DatabaseMetaData.getDatabaseProductName()

registerDatabase

public SQLErrorCodes registerDatabase(javax.sql.DataSource dataSource,
                                      java.lang.String dbName)
Associate the specified database name with the given DataSource.

Parameters:
dataSource - the DataSource identifying the database
dbName - the corresponding database name as stated in the error codes definition file (must not be null)
Returns:
the corresponding SQLErrorCodes object