com.softslate.commerce.daos.core
Class DAOFactory

java.lang.Object
  extended bycom.softslate.commerce.daos.core.DAOFactory

public class DAOFactory
extends java.lang.Object

Factory class used to create and initialize instances of data access objects.

An instance of DAOFactory is created in the Struts layer and placed in the application scope. (See BaseRequestProcessor.) The initialize method is called; various settings affecting the application's DataSource are read; and a DataSource employing connection pooling is initialized. Next, all of the application's SQL statements are read into memory from the "sql.properties" files in the "/WEB-INF/classes/resources" directory.

The createDAO method in this class uses the settingsBean property to look up the fully-qualified class name of the requested data access object. It then appends the value of the databaseType property to the class name and attempts to instantiate that object. If that fails, it next appends "Basic" to the end of the class name. If a class still cannot be found, the class name from the database setting itself is used.

For example, if this factory's databaseType is "MSSQL" and it receives a request to create an instance of the system's "customerDAOImplementer", and the database setting for "customerDAOImplementer" is com.softslate.commerce.daos.customer.CustomerDAO, this factory will try to instantiate the following objects in this order:

  1. com.softslate.commerce.daos.customer.CustomerDAOMSSQL
  2. com.softslate.commerce.daos.customer.CustomerDAOBasic
  3. com.softslate.commerce.daos.customer.CustomerDAO

Immediately after instantiating the requested DAO, this factory passes its own properties to it so that the newly created object can use them to communicate with the rest of the application.

Author:
David Tobey

Field Summary
private  java.lang.String databaseDriver
          The fully-qualified class name of the database driver used for the DataSource.
private  java.lang.String databasePassword
          The password used for this factory's DataSource database connection, if the built-in connection pooling is used.
private  java.lang.String databaseType
          The type of database this factory connects to.
private  java.lang.String databaseURL
          The URL used for this factory's DataSource database connection, if the built-in connection pooling is used.
private  java.lang.String databaseUserName
          The user name used for this factory's DataSource database connection, if the built-in connection pooling is used.
private  javax.sql.DataSource dataSource
          The application's DataSource used for persistent storage.
private  java.lang.String dataSourceName
          The JNDI name for the application's DataSource, if one is set up in the servlet container's configuration.
static java.lang.String defaultSettingsLocation
          The default location of the properties file containing settings for initializing this factory's DataSource.
private  java.lang.String jndiContext
          The JNDI context for the application's DataSource, if one is set up in the servlet container's configuration.
(package private) static org.apache.commons.logging.Log log
           
private  java.lang.String maxActive
          The maximum number of active connections for the pool used by this factory's DataSource, if the built-in connection pooling is used.
private  java.lang.String maxIdle
          The maximum number of idle connections for the pool used by this factory's DataSource, if the built-in connection pooling is used.
private  java.lang.String maxWait
          The maximum time to wait for a connection to become available in milliseconds, before an exception is thrown.
private  java.util.StringTokenizer moduleList
          The list of modules in use by the application in StringTokenizer form.
private  java.lang.String moduleListString
          The list of modules in use by the application in String form.
private  java.lang.String paymentPrivateKeyFile
          The full path to the file on the server where the private key is stored for key pair encryption.
private  java.lang.String paymentPublicKeyFile
          The full path to the file on the server where the public key is stored for key pair (RSA) encryption.
private  java.lang.String removeAbandoned
          If set to true, abandoned connections will be removed and recycled.
private  java.lang.String removeAbandonedTimeout
          The number of seconds a connection is idle before it is considered abandoned.
private  SettingsBean settingsBean
          Used to look up the Java class names for the various DAO's this factory creates.
private  java.util.Map sqlMap
          A Map of SQL statements used by the application.
private  java.lang.String twoWayKeyFile
          The full path to the file on the server where the key is stored for two way (DES) encryption.
 
Constructor Summary
DAOFactory()
           
 
Method Summary
 java.lang.Object createDAO(java.lang.String type)
          Creates and initializes a data access object for use by the application.
 java.lang.Object createDAOFromClassName(java.lang.String className)
          Creates and initializes a data access object for use by the application.
 java.lang.Object createSettingsDAO()
          Creates and initializes a settings bean data access object for use by the application.
 java.lang.String getDatabaseDriver()
           
 java.lang.String getDatabasePassword()
           
 java.lang.String getDatabaseType()
           
 java.lang.String getDatabaseURL()
           
 java.lang.String getDatabaseUserName()
           
 javax.sql.DataSource getDataSource()
           
 java.lang.String getDataSourceName()
           
 java.lang.String getJndiContext()
           
 javax.sql.DataSource getJndiDataSource()
          Looks up a DataSource object in a JNDI context.
 java.lang.String getMaxActive()
           
 java.lang.String getMaxIdle()
           
 java.lang.String getMaxWait()
           
 java.util.StringTokenizer getModuleList()
           
 java.lang.String getModuleListString()
           
 java.lang.String getPaymentPrivateKeyFile()
           
 java.lang.String getPaymentPublicKeyFile()
           
 javax.sql.DataSource getPooledDataSource()
          Creates a connection pool using various properties defined in this factory.
 java.util.Properties getProperties(java.lang.String databaseType, java.lang.String module)
          Loads SQL statements into a Properties object for a given database type.
 java.lang.String getRemoveAbandoned()
           
 java.lang.String getRemoveAbandonedTimeout()
           
 SettingsBean getSettingsBean()
           
 java.util.Map getSqlMap()
           
 java.util.Map getTransferMap()
          Retrieves a Map of properties that will be transfered to each of the data access objects this factory creates.
 java.lang.String getTwoWayKeyFile()
           
 void initialize()
          Initializes this DAOFactory.
 void initialize(java.lang.String settingsLocation)
          Initializes this DAOFactory using the settings defined in the file located at the imcoming settingLocation.
 void initializeDataSource()
          Initializes this factory's dataSource property.
 void initializeSettings(java.lang.String settingsLocation)
          Loads database settings from a properties file into the properties of this DAOFactory.
 void initializeSQLProperties()
          Reads in the application's SQL statements into this factory's sqlMap.
 java.util.Properties loadProperties(java.lang.String path)
          Load properties from a .properties file represented by the argument.
 java.util.Properties loadProperties(java.lang.String path, java.util.Properties defaultProperties)
          Load properties from a .properties file represented by the argument, using a given Properties object as the default properties.
 void setDatabaseDriver(java.lang.String databaseDriver)
           
 void setDatabasePassword(java.lang.String databasePassword)
           
 void setDatabaseType(java.lang.String databaseType)
           
 void setDatabaseURL(java.lang.String databaseURL)
           
 void setDatabaseUserName(java.lang.String databaseUserName)
           
 void setDataSource(javax.sql.DataSource dataSource)
           
 void setDataSourceName(java.lang.String dataSourceName)
           
 void setJndiContext(java.lang.String jndiContext)
           
 void setMaxActive(java.lang.String maxActive)
           
 void setMaxIdle(java.lang.String maxIdle)
           
 void setMaxWait(java.lang.String maxWait)
           
 void setModuleList(java.util.StringTokenizer moduleList)
           
 void setModuleListString(java.lang.String moduleListString)
           
 void setPaymentPrivateKeyFile(java.lang.String paymentPrivateKeyFile)
           
 void setPaymentPublicKeyFile(java.lang.String paymentPublicKeyFile)
           
 void setRemoveAbandoned(java.lang.String removeAbandoned)
           
 void setRemoveAbandonedTimeout(java.lang.String removeAbandonedTimeout)
           
 void setSettingsBean(SettingsBean settingsBean)
           
 void setSqlMap(java.util.Map sqlMap)
           
 void setTwoWayKeyFile(java.lang.String twoWayKeyFile)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

log

static org.apache.commons.logging.Log log

defaultSettingsLocation

public static final java.lang.String defaultSettingsLocation
The default location of the properties file containing settings for initializing this factory's DataSource.

See Also:
Constant Field Values

sqlMap

private java.util.Map sqlMap
A Map of SQL statements used by the application.


moduleList

private java.util.StringTokenizer moduleList
The list of modules in use by the application in StringTokenizer form. Modules may include core, product, order, and customer.


moduleListString

private java.lang.String moduleListString
The list of modules in use by the application in String form. Modules may include core, product, order, and customer.


dataSource

private javax.sql.DataSource dataSource
The application's DataSource used for persistent storage.


dataSourceName

private java.lang.String dataSourceName
The JNDI name for the application's DataSource, if one is set up in the servlet container's configuration. (For example, in server.xml for Tomcat.)


jndiContext

private java.lang.String jndiContext
The JNDI context for the application's DataSource, if one is set up in the servlet container's configuration. (For example, in server.xml for Tomcat.)


databaseDriver

private java.lang.String databaseDriver
The fully-qualified class name of the database driver used for the DataSource.


databaseURL

private java.lang.String databaseURL
The URL used for this factory's DataSource database connection, if the built-in connection pooling is used. This factory will use its own connection pooling if it fails to connect using the JNDI dataSourceName and jndiContext settings.


databaseUserName

private java.lang.String databaseUserName
The user name used for this factory's DataSource database connection, if the built-in connection pooling is used. This factory will use its own connection pooling if it fails to connect using the JNDI dataSourceName and jndiContext settings.


databasePassword

private java.lang.String databasePassword
The password used for this factory's DataSource database connection, if the built-in connection pooling is used. This factory will use its own connection pooling if it fails to connect using the JNDI dataSourceName and jndiContext settings.


databaseType

private java.lang.String databaseType
The type of database this factory connects to. For example, "MSSQL" or "MySQL".


maxIdle

private java.lang.String maxIdle
The maximum number of idle connections for the pool used by this factory's DataSource, if the built-in connection pooling is used. This factory will use its own connection pooling if it fails to connect using the JNDI dataSourceName and jndiContext settings.


maxActive

private java.lang.String maxActive
The maximum number of active connections for the pool used by this factory's DataSource, if the built-in connection pooling is used. This factory will use its own connection pooling if it fails to connect using the JNDI dataSourceName and jndiContext settings.


maxWait

private java.lang.String maxWait
The maximum time to wait for a connection to become available in milliseconds, before an exception is thrown. Used by this factory's DataSource, if the built-in connection pooling is used. This factory will use its own connection pooling if it fails to connect using the JNDI dataSourceName and jndiContext settings.


removeAbandoned

private java.lang.String removeAbandoned
If set to true, abandoned connections will be removed and recycled. Used by this factory's DataSource, if the built-in connection pooling is used. This factory will use its own connection pooling if it fails to connect using the JNDI dataSourceName and jndiContext settings.


removeAbandonedTimeout

private java.lang.String removeAbandonedTimeout
The number of seconds a connection is idle before it is considered abandoned. Used by this factory's DataSource, if the built-in connection pooling is used. This factory will use its own connection pooling if it fails to connect using the JNDI dataSourceName and jndiContext settings.


paymentPrivateKeyFile

private java.lang.String paymentPrivateKeyFile
The full path to the file on the server where the private key is stored for key pair encryption.


paymentPublicKeyFile

private java.lang.String paymentPublicKeyFile
The full path to the file on the server where the public key is stored for key pair (RSA) encryption.


twoWayKeyFile

private java.lang.String twoWayKeyFile
The full path to the file on the server where the key is stored for two way (DES) encryption.


settingsBean

private SettingsBean settingsBean
Used to look up the Java class names for the various DAO's this factory creates.

Constructor Detail

DAOFactory

public DAOFactory()
Method Detail

getSqlMap

public java.util.Map getSqlMap()

setSqlMap

public void setSqlMap(java.util.Map sqlMap)

getModuleList

public java.util.StringTokenizer getModuleList()

setModuleList

public void setModuleList(java.util.StringTokenizer moduleList)

getModuleListString

public java.lang.String getModuleListString()

setModuleListString

public void setModuleListString(java.lang.String moduleListString)

getDataSource

public javax.sql.DataSource getDataSource()

setDataSource

public void setDataSource(javax.sql.DataSource dataSource)

getDataSourceName

public java.lang.String getDataSourceName()

setDataSourceName

public void setDataSourceName(java.lang.String dataSourceName)

getJndiContext

public java.lang.String getJndiContext()

setJndiContext

public void setJndiContext(java.lang.String jndiContext)

getDatabaseDriver

public java.lang.String getDatabaseDriver()

setDatabaseDriver

public void setDatabaseDriver(java.lang.String databaseDriver)

getDatabaseURL

public java.lang.String getDatabaseURL()

setDatabaseURL

public void setDatabaseURL(java.lang.String databaseURL)

getDatabaseUserName

public java.lang.String getDatabaseUserName()

setDatabaseUserName

public void setDatabaseUserName(java.lang.String databaseUserName)

getDatabasePassword

public java.lang.String getDatabasePassword()

setDatabasePassword

public void setDatabasePassword(java.lang.String databasePassword)

getDatabaseType

public java.lang.String getDatabaseType()

setDatabaseType

public void setDatabaseType(java.lang.String databaseType)

getMaxIdle

public java.lang.String getMaxIdle()

setMaxIdle

public void setMaxIdle(java.lang.String maxIdle)

getMaxActive

public java.lang.String getMaxActive()

setMaxActive

public void setMaxActive(java.lang.String maxActive)

getMaxWait

public java.lang.String getMaxWait()

setMaxWait

public void setMaxWait(java.lang.String maxWait)

getRemoveAbandoned

public java.lang.String getRemoveAbandoned()

setRemoveAbandoned

public void setRemoveAbandoned(java.lang.String removeAbandoned)

getRemoveAbandonedTimeout

public java.lang.String getRemoveAbandonedTimeout()

setRemoveAbandonedTimeout

public void setRemoveAbandonedTimeout(java.lang.String removeAbandonedTimeout)

getPaymentPrivateKeyFile

public java.lang.String getPaymentPrivateKeyFile()

setPaymentPrivateKeyFile

public void setPaymentPrivateKeyFile(java.lang.String paymentPrivateKeyFile)

getPaymentPublicKeyFile

public java.lang.String getPaymentPublicKeyFile()

setPaymentPublicKeyFile

public void setPaymentPublicKeyFile(java.lang.String paymentPublicKeyFile)

getTwoWayKeyFile

public java.lang.String getTwoWayKeyFile()

setTwoWayKeyFile

public void setTwoWayKeyFile(java.lang.String twoWayKeyFile)

getSettingsBean

public SettingsBean getSettingsBean()

setSettingsBean

public void setSettingsBean(SettingsBean settingsBean)

initialize

public void initialize()
                throws java.lang.Exception
Initializes this DAOFactory. Called by BaseRequestProcessor.

Throws:
java.lang.Exception

initialize

public void initialize(java.lang.String settingsLocation)
                throws java.lang.Exception
Initializes this DAOFactory using the settings defined in the file located at the imcoming settingLocation.

Parameters:
settingsLocation - The location of a file containing database settings.
Throws:
java.lang.Exception

initializeSQLProperties

public void initializeSQLProperties()
                             throws java.lang.Exception
Reads in the application's SQL statements into this factory's sqlMap. Loops through each of the active modules defined in the moduleList property and reads in the SQL properities from the files in "/WEB-INF/classes/resources.

Throws:
java.lang.Exception

initializeSettings

public void initializeSettings(java.lang.String settingsLocation)
Loads database settings from a properties file into the properties of this DAOFactory.

Parameters:
settingsLocation - The location of a file containing database settings.

getProperties

public java.util.Properties getProperties(java.lang.String databaseType,
                                          java.lang.String module)
                                   throws java.lang.Exception
Loads SQL statements into a Properties object for a given database type. Reads a default sql.properties file for a given module under "WEB-INF/classes/resources" and then another file with SQL statements that override the defaults with SQL specific to the given database type. Finally, loads the sql-custom.properties file in each module to provide a way to override any of the statements deployed with the application.

Parameters:
databaseType - The type of database the SQL statements apply to.
module - The module the SQL statements correspond to. For example, core, product, order, or customer.
Returns:
A Properties object representing the SQL statements.
Throws:
java.lang.Exception

loadProperties

public java.util.Properties loadProperties(java.lang.String path)
Load properties from a .properties file represented by the argument.

Parameters:
path - The path to the .properties file being loaded.
Returns:
A Properties object representing the contents of the file.

loadProperties

public java.util.Properties loadProperties(java.lang.String path,
                                           java.util.Properties defaultProperties)
Load properties from a .properties file represented by the argument, using a given Properties object as the default properties.

Parameters:
path - The path to the .properties file being loaded.
defaultProperties - A Properties object representing the default properties to be returned.
Returns:
A Properties object representing the contents of the file.

initializeDataSource

public void initializeDataSource()
                          throws java.lang.Exception
Initializes this factory's dataSource property. This method first attempts to establish a DataSource based on a JNDI data source name and context defined in the JNDI environment, using the datasourceName and jndiContext properties. If this fails, it will create it's own connection pool using the various other properties defined in this factory, including the databaseURL,databaseUserName, and databasePassword properties.

Throws:
java.lang.Exception

getJndiDataSource

public javax.sql.DataSource getJndiDataSource()
                                       throws java.lang.Exception
Looks up a DataSource object in a JNDI context. Attempts to establish a DataSource based on a JNDI data source name and context defined in the JNDI environment, using the datasourceName and jndiContext properties.

Returns:
A DataSource object for the application.
Throws:
java.lang.Exception

getPooledDataSource

public javax.sql.DataSource getPooledDataSource()
                                         throws java.lang.Exception
Creates a connection pool using various properties defined in this factory. Returns a DataSource object tied to it.

Returns:
A DataSource object for the application.
Throws:
java.lang.Exception

getTransferMap

public java.util.Map getTransferMap()
Retrieves a Map of properties that will be transfered to each of the data access objects this factory creates.

Returns:
A Map of properties that will be transfered to each of the data access objects this factory creates

createSettingsDAO

public java.lang.Object createSettingsDAO()
                                   throws java.lang.Exception
Creates and initializes a settings bean data access object for use by the application.

Returns:
An instantiated and initialized settings bean data access object, or null if initialization failed.
Throws:
java.lang.Exception

createDAO

public java.lang.Object createDAO(java.lang.String type)
                           throws java.lang.Exception
Creates and initializes a data access object for use by the application. Uses the settingsBean property to look up the fully-qualified class name of the requested data access object. It then appends the value of the databaseType property to the class name and attempts to instantiate that object. If that fails, it next appends "Basic" to the end of the class name. If a class still cannot be found, the class name from the database setting itself is used.

For example, if this factory's databaseType is "MSSQL" and it receives a request to create an instance of the system's "customerDAOImplementer", and the database setting for "customerDAOImplementer" is com.softslate.commerce.daos.customer.CustomerDAO, this factory will try to instantiate the following objects in this order:

  1. com.softslate.commerce.daos.customer.CustomerDAOMSSQL
  2. com.softslate.commerce.daos.customer.CustomerDAOBasic
  3. com.softslate.commerce.daos.customer.CustomerDAO

Immediately after instantiating the requested DAO, this factory passes its own properties to it so that the newly created object can use them to communicate with the rest of the application.

Parameters:
type - A String associated with the class name of the data access object to be created.
Returns:
An instantiated and initialized data access object, or null if initialization failed.
Throws:
java.lang.Exception

createDAOFromClassName

public java.lang.Object createDAOFromClassName(java.lang.String className)
                                        throws java.lang.Exception
Creates and initializes a data access object for use by the application. Using the incoming class name, appends the value of the databaseType property to the class name and attempts to instantiate that object. If that fails, it next appends "Basic" to the end of the class name. If a class still cannot be found, the class name from the class name itself is used.

For example, if this factory receives a request to create an instance of CustomerDAO, this factory will try to instantiate the following objects in this order:

  1. com.softslate.commerce.daos.customer.CustomerDAOMSSQL
  2. com.softslate.commerce.daos.customer.CustomerDAOBasic
  3. com.softslate.commerce.daos.customer.CustomerDAO

Immediately after instantiating the requested DAO, this factory passes its own properties to it so that the newly created object can use them to communicate with the rest of the application.

Parameters:
className - A String representing the class name of the data access object to be created.
Returns:
An instantiated and initialized data access object, or null if initialization failed.
Throws:
java.lang.Exception


Copyright © SoftSlate, Inc. 2003–2005