org.opensha.sha.cybershake.db
Class DBAccess

java.lang.Object
  extended by org.opensha.sha.cybershake.db.DBAccess
All Implemented Interfaces:
Runnable

public class DBAccess
extends Object
implements Runnable

DbConnectionBroker A servlet-based broker for database connections. Creates and manages a pool of database connections.

Version:
1.0.13 3/12/02
Author:
Marc A. Mnich modified by Vipin Gupta , Nitin Gupta

Field Summary
static SimpleDateFormat SQL_DATE_FORMAT
           
 
Constructor Summary
DBAccess(String hostname, String dbName)
          Class default constructor Creates a new Connection Broker after reading the JDBC info from the data file.
DBAccess(String hostname, String dbName, String user, String pass)
          Class default constructor Creates a new Connection Broker after reading the JDBC info from the data file.
DBAccess(String dbDriver, String dbServer, String dbLogin, String dbPassword, int minConns, int maxConns, String logFileString, double maxConnTime)
          Creates a new Connection Broker
dbDriver: JDBC driver.
DBAccess(String dbDriver, String dbServer, String dbLogin, String dbPassword, int minConns, int maxConns, String logFileString, double maxConnTime, boolean logAppend)
           
DBAccess(String dbDriver, String dbServer, String dbLogin, String dbPassword, int minConns, int maxConns, String logFileString, double maxConnTime, boolean logAppend, int maxCheckoutSeconds, int debugLevel)
           
 
Method Summary
static DBAccess createWithAuthDialog(String host, String dbName)
           
 void destroy()
          Less safe shutdown.
 void destroy(int millis)
          Multi-phase shutdown.
 String freeConnection(Connection conn)
          Frees a connection.
 long getAge(Connection conn)
          Returns the age of a connection -- the time since it was handed out to an application.
 Connection getConnection()
          This method hands out the connections in round-robin order.
 int getSize()
          Returns the number of connections in the dynamic pool.
 int getUseCount()
          Returns the number of connections in use.
 int idOfConnection(Connection conn)
          Returns the local JDBC ID for a connection.
 int insertUpdateOrDeleteData(String query)
          Inserts the data into the database
 boolean isIgnoreInserts()
           
 boolean isReadOnly()
           
 void run()
          Housekeeping thread.
 ResultSet selectData(String sql)
          Runs the select query on the database
 void setIgnoreInserts(boolean ignoreInserts)
           
 void setReadOnly(boolean readOnly)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

SQL_DATE_FORMAT

public static final SimpleDateFormat SQL_DATE_FORMAT
Constructor Detail

DBAccess

public DBAccess(String hostname,
                String dbName)
Class default constructor Creates a new Connection Broker after reading the JDBC info from the data file.


DBAccess

public DBAccess(String hostname,
                String dbName,
                String user,
                String pass)
         throws IOException
Class default constructor Creates a new Connection Broker after reading the JDBC info from the data file.

Throws:
IOException

DBAccess

public DBAccess(String dbDriver,
                String dbServer,
                String dbLogin,
                String dbPassword,
                int minConns,
                int maxConns,
                String logFileString,
                double maxConnTime)
         throws IOException
Creates a new Connection Broker
dbDriver: JDBC driver. e.g. 'com.mysql.jdbc.Driver'
dbServer: JDBC connect string. e.g. 'jdbc:oracle:thin:@203.92.21.109:1526:orcl'
dbLogin: Database login name. e.g. 'Scott'
dbPassword: Database password. e.g. 'Tiger'
minConns: Minimum number of connections to start with.
maxConns: Maximum number of connections in dynamic pool.
logFileString: Absolute path name for log file. e.g. 'c:/temp/mylog.log'
maxConnTime: Time in days between connection resets. (Reset does a basic cleanup)
logAppend: Append to logfile (optional)
maxCheckoutSeconds: Max time a connection can be checked out before being recycled. Zero value turns option off, default is 60 seconds. debugLevel: Level of debug messages output to the log file. 0 -> no messages, 1 -> Errors, 2 -> Warnings, 3 -> Information

Throws:
IOException

DBAccess

public DBAccess(String dbDriver,
                String dbServer,
                String dbLogin,
                String dbPassword,
                int minConns,
                int maxConns,
                String logFileString,
                double maxConnTime,
                boolean logAppend)
         throws IOException
Throws:
IOException

DBAccess

public DBAccess(String dbDriver,
                String dbServer,
                String dbLogin,
                String dbPassword,
                int minConns,
                int maxConns,
                String logFileString,
                double maxConnTime,
                boolean logAppend,
                int maxCheckoutSeconds,
                int debugLevel)
         throws IOException
Throws:
IOException
Method Detail

isReadOnly

public boolean isReadOnly()

setReadOnly

public void setReadOnly(boolean readOnly)

isIgnoreInserts

public boolean isIgnoreInserts()

setIgnoreInserts

public void setIgnoreInserts(boolean ignoreInserts)

createWithAuthDialog

public static DBAccess createWithAuthDialog(String host,
                                            String dbName)
                                     throws IOException
Throws:
IOException

run

public void run()
Housekeeping thread. Runs in the background with low CPU overhead. Connections are checked for warnings and closure and are periodically restarted. This thread is a catchall for corrupted connections and prevents the buildup of open cursors. (Open cursors result when the application fails to close a Statement). This method acts as fault tolerance for bad connection/statement programming.

Specified by:
run in interface Runnable

getConnection

public Connection getConnection()
This method hands out the connections in round-robin order. This prevents a faulty connection from locking up an application entirely. A browser 'refresh' will get the next connection while the faulty connection is cleaned up by the housekeeping thread. If the min number of threads are ever exhausted, new threads are added up the the max thread count. Finally, if all threads are in use, this method waits 2 seconds and tries again, up to ten times. After that, it returns a null.


idOfConnection

public int idOfConnection(Connection conn)
Returns the local JDBC ID for a connection.


freeConnection

public String freeConnection(Connection conn)
Frees a connection. Replaces connection back into the main pool for reuse.


getAge

public long getAge(Connection conn)
Returns the age of a connection -- the time since it was handed out to an application.


destroy

public void destroy(int millis)
             throws SQLException
Multi-phase shutdown. having following sequence:
  1. getConnection() will refuse to return connections.
  2. The housekeeping thread is shut down.
    Up to the time of millis milliseconds after shutdown of the housekeeping thread, freeConnection() can still be called to return used connections.
  3. After millis milliseconds after the shutdown of the housekeeping thread, all connections in the pool are closed.
  4. If any connections were in use while being closed then a SQLException is thrown.
  5. The log is closed.

Call this method from a servlet destroy() method.

Parameters:
millis - the time to wait in milliseconds.
Throws:
SQLException - if connections were in use after millis.

destroy

public void destroy()
Less safe shutdown. Uses default timeout value. This method simply calls the destroy() method with a millis value of 10000 (10 seconds) and ignores SQLException thrown by that method.

See Also:
destroy(int)

getUseCount

public int getUseCount()
Returns the number of connections in use.


getSize

public int getSize()
Returns the number of connections in the dynamic pool.


insertUpdateOrDeleteData

public int insertUpdateOrDeleteData(String query)
                             throws SQLException
Inserts the data into the database

Parameters:
query -
Throws:
SQLException

selectData

public ResultSet selectData(String sql)
                     throws SQLException
Runs the select query on the database

Parameters:
query -
Returns:
Throws:
SQLException