bip 01/04/25 20:15:01 Modified: catalina/src/share/org/apache/catalina/session JDBCStore.java StoreBase.java Log: Changed subclassing of start()/stop(). Cosmetic changes, tabs to spaces. Revision Changes Path 1.2 +383 -378 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/JDBCStore.java Index: JDBCStore.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/JDBCStore.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- JDBCStore.java 2001/04/26 01:37:59 1.1 +++ JDBCStore.java 2001/04/26 03:14:59 1.2 @@ -1,8 +1,8 @@ /* * JDBCStore.java - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/JDBCStore.java,v 1.1 2001/04/26 01:37:59 bip Exp $ - * $Revision: 1.1 $ - * $Date: 2001/04/26 01:37:59 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/JDBCStore.java,v 1.2 2001/04/26 03:14:59 bip Exp $ + * $Revision: 1.2 $ + * $Date: 2001/04/26 03:14:59 $ * * ==================================================================== * @@ -81,6 +81,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import org.apache.catalina.Container; +import org.apache.catalina.LifecycleException; import org.apache.catalina.Loader; import org.apache.catalina.Session; import org.apache.catalina.Store; @@ -92,7 +93,7 @@ * saved are still subject to being expired based on inactivity. * * @author Bip Thelin - * @version $Revision: 1.1 $, $Date: 2001/04/26 01:37:59 $ + * @version $Revision: 1.2 $, $Date: 2001/04/26 03:14:59 $ */ public class JDBCStore @@ -198,21 +199,21 @@ * Return the info for this Store. */ public String getInfo() { - return(info); + return(info); } /** * Return the thread name for this Store. */ public String getThreadName() { - return(threadName); + return(threadName); } /** * Return the name for this Store, used for logging. */ public String getStoreName() { - return(storeName); + return(storeName); } /** @@ -221,19 +222,19 @@ * @param driverName The new driver */ public void setDriverName(String driverName) { - String oldDriverName = this.driverName; - this.driverName = driverName; - support.firePropertyChange("driverName", - oldDriverName, - this.driverName); - this.driverName = driverName; + String oldDriverName = this.driverName; + this.driverName = driverName; + support.firePropertyChange("driverName", + oldDriverName, + this.driverName); + this.driverName = driverName; } /** * Return the driver for this Store. */ public String getDriverName() { - return(this.driverName); + return(this.driverName); } /** @@ -242,18 +243,18 @@ * @param connectionURL The new Connection URL */ public void setConnectionURL(String connectionURL) { - String oldConnString = this.connString; - this.connString = connectionURL; - support.firePropertyChange("connString", - oldConnString, - this.connString); + String oldConnString = this.connString; + this.connString = connectionURL; + support.firePropertyChange("connString", + oldConnString, + this.connString); } /** * Return the Connection URL for this Store. */ public String getConnectionURL() { - return(this.connString); + return(this.connString); } /** @@ -262,18 +263,18 @@ * @param sessionTable The new table */ public void setSessionTable(String sessionTable) { - String oldSessionTable = this.sessionTable; - this.sessionTable = sessionTable; - support.firePropertyChange("sessionTable", - oldSessionTable, - this.sessionTable); + String oldSessionTable = this.sessionTable; + this.sessionTable = sessionTable; + support.firePropertyChange("sessionTable", + oldSessionTable, + this.sessionTable); } /** * Return the table for this Store. */ public String getSessionTable() { - return(this.sessionTable); + return(this.sessionTable); } /** @@ -282,18 +283,18 @@ * @param sessionIdCol the column name */ public void setSessionIdCol(String sessionIdCol) { - String oldSessionIdCol = this.sessionIdCol; - this.sessionIdCol = sessionIdCol; - support.firePropertyChange("sessionIdCol", - oldSessionIdCol, - this.sessionIdCol); + String oldSessionIdCol = this.sessionIdCol; + this.sessionIdCol = sessionIdCol; + support.firePropertyChange("sessionIdCol", + oldSessionIdCol, + this.sessionIdCol); } /** * Return the Id column for the table. */ public String getSessionIdCol() { - return(this.sessionIdCol); + return(this.sessionIdCol); } /** @@ -302,18 +303,18 @@ * @param sessionDataCol the column name */ public void setSessionDataCol(String sessionDataCol) { - String oldSessionDataCol = this.sessionDataCol; - this.sessionDataCol = sessionDataCol; - support.firePropertyChange("sessionDataCol", - oldSessionDataCol, - this.sessionDataCol); + String oldSessionDataCol = this.sessionDataCol; + this.sessionDataCol = sessionDataCol; + support.firePropertyChange("sessionDataCol", + oldSessionDataCol, + this.sessionDataCol); } /** * Return the data column for the table */ public String getSessionDataCol() { - return(this.sessionDataCol); + return(this.sessionDataCol); } /** @@ -322,18 +323,18 @@ * @param sessionValidCol The column name */ public void setSessionValidCol(String sessionValidCol) { - String oldSessionValidCol = this.sessionValidCol; - this.sessionValidCol = sessionValidCol; - support.firePropertyChange("sessionValidCol", - oldSessionValidCol, - this.sessionValidCol); + String oldSessionValidCol = this.sessionValidCol; + this.sessionValidCol = sessionValidCol; + support.firePropertyChange("sessionValidCol", + oldSessionValidCol, + this.sessionValidCol); } /** * Return the Is Valid column */ public String getSessionValidCol() { - return(this.sessionValidCol); + return(this.sessionValidCol); } /** @@ -342,18 +343,18 @@ * @param sessionMaxInactiveCol The column name */ public void setSessionMaxInactiveCol(String sessionMaxInactiveCol) { - String oldSessionMaxInactiveCol = this.sessionMaxInactiveCol; - this.sessionMaxInactiveCol = sessionMaxInactiveCol; - support.firePropertyChange("sessionMaxInactiveCol", - oldSessionMaxInactiveCol, - this.sessionMaxInactiveCol); + String oldSessionMaxInactiveCol = this.sessionMaxInactiveCol; + this.sessionMaxInactiveCol = sessionMaxInactiveCol; + support.firePropertyChange("sessionMaxInactiveCol", + oldSessionMaxInactiveCol, + this.sessionMaxInactiveCol); } /** * Return the Max Inactive column */ public String getSessionMaxInactiveCol() { - return(this.sessionMaxInactiveCol); + return(this.sessionMaxInactiveCol); } /** @@ -362,18 +363,18 @@ * @param sessionLastAccessedCol The column name */ public void setSessionLastAccessedCol(String sessionLastAccessedCol) { - String oldSessionLastAccessedCol = this.sessionLastAccessedCol; - this.sessionLastAccessedCol = sessionLastAccessedCol; - support.firePropertyChange("sessionLastAccessedCol", - oldSessionLastAccessedCol, - this.sessionLastAccessedCol); + String oldSessionLastAccessedCol = this.sessionLastAccessedCol; + this.sessionLastAccessedCol = sessionLastAccessedCol; + support.firePropertyChange("sessionLastAccessedCol", + oldSessionLastAccessedCol, + this.sessionLastAccessedCol); } /** * Return the Last Accessed column */ public String getSessionLastAccessedCol() { - return(this.sessionLastAccessedCol); + return(this.sessionLastAccessedCol); } // --------------------------------------------------------- Public Methods @@ -386,51 +387,51 @@ * @exception IOException if an input/output error occurred */ public String[] keys() throws IOException { - String keysSql = - "SELECT c.size, s."+sessionIdCol+ - " FROM "+sessionTable+" s, "+ - "(SELECT COUNT("+sessionIdCol+ - ") AS size FROM "+sessionTable+") c"; - Connection _conn = getConnection(); - ResultSet rst = null; - String keys[] = null; - int i; - - if(_conn == null) - return(new String[0]); - - try { - if(preparedKeysSql == null) - preparedKeysSql = _conn.prepareStatement(keysSql); - - rst = preparedKeysSql.executeQuery(); - if (rst != null && rst.next()) { - keys = new String[rst.getInt(1)]; - keys[0] = rst.getString(2); - i=1; - - while(rst.next()) - keys[i++] = rst.getString(2); - } else { - keys = new String[0]; - } - } catch(SQLException e) { - log(sm.getString(getStoreName()+".SQLException", e)); - } finally { - try { - if(rst != null) - rst.close(); - } catch(SQLException e) { - ; - } - - release(_conn); - _conn = null; - } + String keysSql = + "SELECT c.size, s."+sessionIdCol+ + " FROM "+sessionTable+" s, "+ + "(SELECT COUNT("+sessionIdCol+ + ") AS size FROM "+sessionTable+") c"; + Connection _conn = getConnection(); + ResultSet rst = null; + String keys[] = null; + int i; - return(keys); - } + if(_conn == null) + return(new String[0]); + + try { + if(preparedKeysSql == null) + preparedKeysSql = _conn.prepareStatement(keysSql); + rst = preparedKeysSql.executeQuery(); + if (rst != null && rst.next()) { + keys = new String[rst.getInt(1)]; + keys[0] = rst.getString(2); + i=1; + + while(rst.next()) + keys[i++] = rst.getString(2); + } else { + keys = new String[0]; + } + } catch(SQLException e) { + log(sm.getString(getStoreName()+".SQLException", e)); + } finally { + try { + if(rst != null) + rst.close(); + } catch(SQLException e) { + ; + } + + release(_conn); + _conn = null; + } + + return(keys); + } + /** * Return an integer containing a count of all Sessions * currently saved in this Store. If there are no Sessions, @@ -439,39 +440,39 @@ * @exception IOException if an input/output error occurred */ public int getSize() throws IOException { - int size = 0; - String sizeSql = "SELECT COUNT("+sessionIdCol+ - ") FROM ".concat(sessionTable); - Connection _conn = getConnection(); - ResultSet rst = null; - - if(_conn == null) - return(size); - - try { - if(preparedSizeSql == null) - preparedSizeSql = _conn.prepareStatement(sizeSql); - - rst = preparedSizeSql.executeQuery(); - if (rst.next()) - size = rst.getInt(1); - } catch(SQLException e) { - log(sm.getString(getStoreName()+".SQLException", e)); - } finally { - try { - if(rst != null) - rst.close(); - } catch(SQLException e) { - ; - } - - release(_conn); - _conn = null; - } - - return(size); + int size = 0; + String sizeSql = "SELECT COUNT("+sessionIdCol+ + ") FROM ".concat(sessionTable); + Connection _conn = getConnection(); + ResultSet rst = null; + + if(_conn == null) + return(size); + + try { + if(preparedSizeSql == null) + preparedSizeSql = _conn.prepareStatement(sizeSql); + + rst = preparedSizeSql.executeQuery(); + if (rst.next()) + size = rst.getInt(1); + } catch(SQLException e) { + log(sm.getString(getStoreName()+".SQLException", e)); + } finally { + try { + if(rst != null) + rst.close(); + } catch(SQLException e) { + ; + } + + release(_conn); + _conn = null; + } + + return(size); } - + /** * Load the Session associated with the id <code>id</code>. * If no such session is found <code>null</code> is returned. @@ -482,78 +483,78 @@ * @exception IOException if an input/output error occurred */ public Session load(String id) - throws ClassNotFoundException, IOException { - ResultSet rst = null; - Connection _conn = getConnection(); - StandardSession _session = null; - Loader loader = null; - ClassLoader classLoader = null; - ObjectInputStream ois = null; - BufferedInputStream bis = null; - Container container = manager.getContainer(); - String loadSql = "SELECT "+sessionIdCol+ - ", "+sessionDataCol+" FROM "+sessionTable+ - " WHERE "+sessionIdCol+" = ?"; - - if(_conn == null) - return(null); - - try { - if(preparedLoadSql == null) - preparedLoadSql = _conn.prepareStatement(loadSql); - - preparedLoadSql.setString(1, id); - rst = preparedLoadSql.executeQuery(); - if (rst.next()) { - bis = new BufferedInputStream(rst.getBinaryStream(2)); - - if (container != null) - loader = container.getLoader(); - - if (loader != null) - classLoader = loader.getClassLoader(); - - if (classLoader != null) - ois = new CustomObjectInputStream(bis, - classLoader); - else - ois = new ObjectInputStream(bis); - } else if (debug > 0) { - log(getStoreName()+": No persisted data object found"); - } - } catch(SQLException e) { - log(sm.getString(getStoreName()+".SQLException", e)); - } finally { - try { - if(rst != null) - rst.close(); - } catch(SQLException e) { - ; - } - - release(_conn); - _conn = null; - } - - try { - _session = (StandardSession) manager.createSession(); + throws ClassNotFoundException, IOException { + ResultSet rst = null; + Connection _conn = getConnection(); + StandardSession _session = null; + Loader loader = null; + ClassLoader classLoader = null; + ObjectInputStream ois = null; + BufferedInputStream bis = null; + Container container = manager.getContainer(); + String loadSql = "SELECT "+sessionIdCol+ + ", "+sessionDataCol+" FROM "+sessionTable+ + " WHERE "+sessionIdCol+" = ?"; + + if(_conn == null) + return(null); + + try { + if(preparedLoadSql == null) + preparedLoadSql = _conn.prepareStatement(loadSql); + + preparedLoadSql.setString(1, id); + rst = preparedLoadSql.executeQuery(); + if (rst.next()) { + bis = new BufferedInputStream(rst.getBinaryStream(2)); + + if (container != null) + loader = container.getLoader(); + + if (loader != null) + classLoader = loader.getClassLoader(); + + if (classLoader != null) + ois = new CustomObjectInputStream(bis, + classLoader); + else + ois = new ObjectInputStream(bis); + } else if (debug > 0) { + log(getStoreName()+": No persisted data object found"); + } + } catch(SQLException e) { + log(sm.getString(getStoreName()+".SQLException", e)); + } finally { + try { + if(rst != null) + rst.close(); + } catch(SQLException e) { + ; + } + + release(_conn); + _conn = null; + } + + try { + _session = (StandardSession) manager.createSession(); _session.readObjectData(ois); - _session.setManager(manager); - } finally { - if (ois != null) { - try { - ois.close(); - bis = null; - } catch (IOException e) { - ; - } - } - } - - if (debug > 0) - log(sm.getString(getStoreName()+".loading", - id, sessionTable)); - return(_session); + _session.setManager(manager); + } finally { + if (ois != null) { + try { + ois.close(); + bis = null; + } catch (IOException e) { + ; + } + } + } + + if (debug > 0) + log(sm.getString(getStoreName()+".loading", + id, sessionTable)); + return(_session); } /** @@ -566,55 +567,55 @@ * @exception IOException if an input/output error occurs */ public void remove(String id) throws IOException { - Connection _conn = getConnection(); - String removeSql = "DELETE FROM "+sessionTable+" WHERE "+ - sessionIdCol+" = ?"; - - if(_conn == null) - return; - - try { - if(preparedRemoveSql == null) - preparedRemoveSql = _conn.prepareStatement(removeSql); - - preparedRemoveSql.setString(1, id); - preparedRemoveSql.execute(); - } catch(SQLException e) { - log(sm.getString(getStoreName()+".SQLException", e)); - } finally { - release(_conn); - _conn = null; - } - - if (debug > 0) - log(sm.getString(getStoreName()+".removing", id, sessionTable)); + Connection _conn = getConnection(); + String removeSql = "DELETE FROM "+sessionTable+" WHERE "+ + sessionIdCol+" = ?"; + + if(_conn == null) + return; + + try { + if(preparedRemoveSql == null) + preparedRemoveSql = _conn.prepareStatement(removeSql); + + preparedRemoveSql.setString(1, id); + preparedRemoveSql.execute(); + } catch(SQLException e) { + log(sm.getString(getStoreName()+".SQLException", e)); + } finally { + release(_conn); + _conn = null; + } + + if (debug > 0) + log(sm.getString(getStoreName()+".removing", id, sessionTable)); } - + /** * Remove all of the Sessions in this Store. * * @exception IOException if an input/output error occurs */ public void clear() throws IOException { - Connection _conn = getConnection(); - String clearSql = "DELETE FROM ".concat(sessionTable); - - if(_conn == null) - return; - - try { - if(preparedClearSql == null) - preparedClearSql = _conn.prepareStatement(clearSql); - - preparedClearSql.execute(); - } catch(SQLException e) { - log(sm.getString(getStoreName()+".SQLException", e)); - } finally { - release(_conn); - _conn = null; - } + Connection _conn = getConnection(); + String clearSql = "DELETE FROM ".concat(sessionTable); + + if(_conn == null) + return; + + try { + if(preparedClearSql == null) + preparedClearSql = _conn.prepareStatement(clearSql); + + preparedClearSql.execute(); + } catch(SQLException e) { + log(sm.getString(getStoreName()+".SQLException", e)); + } finally { + release(_conn); + _conn = null; + } } - + /** * Save a session to the Store. * @@ -622,69 +623,69 @@ * @exception IOException if an input/output error occurs */ public void save(Session session) throws IOException { - String saveSql = "INSERT INTO "+sessionTable+" ("+ - sessionIdCol+", "+ - sessionDataCol+", "+ - sessionValidCol+", "+ - sessionMaxInactiveCol+", "+ - sessionLastAccessedCol+") VALUES (?, ?, ?, ?, ?)"; - Connection _conn = getConnection(); - ObjectOutputStream oos = null; - ByteArrayOutputStream bos = null; - ByteArrayInputStream bis = null; - InputStream in = null; - - if(_conn == null) - return; - - // If sessions already exist in DB, remove and insert again. - // TODO: - // * Check if ID exists in database and if so use UPDATE. - remove(session.getId()); - - try { - bos = new ByteArrayOutputStream(); - oos = new ObjectOutputStream(new BufferedOutputStream(bos)); - - ((StandardSession)session).writeObjectData(oos); - oos.close(); - - byte[] obs = bos.toByteArray(); - int size = obs.length; - bis = new ByteArrayInputStream(obs, 0, size); - in = new BufferedInputStream(bis, size); - - if(preparedSaveSql == null) - preparedSaveSql = _conn.prepareStatement(saveSql); - - preparedSaveSql.setString(1, session.getId()); - preparedSaveSql.setBinaryStream(2, in, size); - preparedSaveSql.setString(3, session.isValid()?"1":"0"); - preparedSaveSql.setInt(4, session.getMaxInactiveInterval()); - preparedSaveSql.setLong(5, session.getLastAccessedTime()); - preparedSaveSql.execute(); - } catch(SQLException e) { - log(sm.getString(getStoreName()+".SQLException", e)); - } catch (IOException e) { - ; - } finally { - if(bis != null) - bis.close(); - - if(in != null) - in.close(); - - bis = null; - bos = null; - oos = null; - in = null; - - release(_conn); - _conn = null; - } - if (debug > 0) - log(sm.getString(getStoreName()+".saving", - session.getId(), sessionTable)); + String saveSql = "INSERT INTO "+sessionTable+" ("+ + sessionIdCol+", "+ + sessionDataCol+", "+ + sessionValidCol+", "+ + sessionMaxInactiveCol+", "+ + sessionLastAccessedCol+") VALUES (?, ?, ?, ?, ?)"; + Connection _conn = getConnection(); + ObjectOutputStream oos = null; + ByteArrayOutputStream bos = null; + ByteArrayInputStream bis = null; + InputStream in = null; + + if(_conn == null) + return; + + // If sessions already exist in DB, remove and insert again. + // TODO: + // * Check if ID exists in database and if so use UPDATE. + remove(session.getId()); + + try { + bos = new ByteArrayOutputStream(); + oos = new ObjectOutputStream(new BufferedOutputStream(bos)); + + ((StandardSession)session).writeObjectData(oos); + oos.close(); + + byte[] obs = bos.toByteArray(); + int size = obs.length; + bis = new ByteArrayInputStream(obs, 0, size); + in = new BufferedInputStream(bis, size); + + if(preparedSaveSql == null) + preparedSaveSql = _conn.prepareStatement(saveSql); + + preparedSaveSql.setString(1, session.getId()); + preparedSaveSql.setBinaryStream(2, in, size); + preparedSaveSql.setString(3, session.isValid()?"1":"0"); + preparedSaveSql.setInt(4, session.getMaxInactiveInterval()); + preparedSaveSql.setLong(5, session.getLastAccessedTime()); + preparedSaveSql.execute(); + } catch(SQLException e) { + log(sm.getString(getStoreName()+".SQLException", e)); + } catch (IOException e) { + ; + } finally { + if(bis != null) + bis.close(); + + if(in != null) + in.close(); + + bis = null; + bos = null; + oos = null; + in = null; + + release(_conn); + _conn = null; + } + if (debug > 0) + log(sm.getString(getStoreName()+".saving", + session.getId(), sessionTable)); } // --------------------------------------------------------- Protected Methods @@ -701,23 +702,23 @@ if(conn == null || conn.isClosed()) { Class.forName(driverName); log(sm.getString(getStoreName()+".checkConnectionDBClosed")); - conn = DriverManager.getConnection(connString); - conn.setAutoCommit(true); - + conn = DriverManager.getConnection(connString); + conn.setAutoCommit(true); + if(conn == null || conn.isClosed()) - log(sm.getString(getStoreName()+".checkConnectionDBReOpenFail")); - } + log(sm.getString(getStoreName()+".checkConnectionDBReOpenFail")); + } } catch (SQLException ex){ log(sm.getString(getStoreName()+".checkConnectionSQLException", - ex.toString())); + ex.toString())); } catch (ClassNotFoundException ex) { log(sm.getString(getStoreName()+".checkConnectionClassNotFoundException", - ex.toString())); + ex.toString())); } - - return conn; + + return conn; } - + /** * Release the connection, not needed here since the * connection is not associated with a connection pool. @@ -731,9 +732,11 @@ /** * Called once when this Store is first started. */ - public void storeStart() { - // Open connection to the database - this.conn = getConnection(); + public void start() throws LifecycleException { + super.start(); + + // Open connection to the database + this.conn = getConnection(); } /** @@ -741,64 +744,66 @@ * Called once when this Store is stoping. * */ - protected void storeStop() { - // Close and release everything associated with our db. - if(conn != null) { - try { - conn.commit(); - } catch (SQLException e) { - ; - } - - try { - preparedSizeSql.close(); - } catch (SQLException e) { - ; - } - - try { - preparedKeysSql.close(); - } catch (SQLException e) { - ; - } - - try { - preparedSaveSql.close(); - } catch (SQLException e) { - ; - } - - try { - preparedClearSql.close(); - } catch (SQLException e) { - ; - } - - try { - preparedRemoveSql.close(); - } catch (SQLException e) { - ; - } - - try { - preparedLoadSql.close(); - } catch (SQLException e) { - ; - } - - try { - conn.close(); - } catch (SQLException e) { - ; - } - - this.preparedSizeSql = null; - this.preparedKeysSql = null; - this.preparedSaveSql = null; - this.preparedClearSql = null; - this.preparedRemoveSql = null; - this.preparedLoadSql = null; - this.conn = null; - } + public void stop() throws LifecycleException { + super.stop(); + + // Close and release everything associated with our db. + if(conn != null) { + try { + conn.commit(); + } catch (SQLException e) { + ; + } + + try { + preparedSizeSql.close(); + } catch (SQLException e) { + ; + } + + try { + preparedKeysSql.close(); + } catch (SQLException e) { + ; + } + + try { + preparedSaveSql.close(); + } catch (SQLException e) { + ; + } + + try { + preparedClearSql.close(); + } catch (SQLException e) { + ; + } + + try { + preparedRemoveSql.close(); + } catch (SQLException e) { + ; + } + + try { + preparedLoadSql.close(); + } catch (SQLException e) { + ; + } + + try { + conn.close(); + } catch (SQLException e) { + ; + } + + this.preparedSizeSql = null; + this.preparedKeysSql = null; + this.preparedSaveSql = null; + this.preparedClearSql = null; + this.preparedRemoveSql = null; + this.preparedLoadSql = null; + this.conn = null; + } } } 1.2 +122 -147 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/StoreBase.java Index: StoreBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/StoreBase.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- StoreBase.java 2001/04/26 01:36:05 1.1 +++ StoreBase.java 2001/04/26 03:15:00 1.2 @@ -1,8 +1,8 @@ /* * StoreBase.java - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/StoreBase.java,v 1.1 2001/04/26 01:36:05 bip Exp $ - * $Revision: 1.1 $ - * $Date: 2001/04/26 01:36:05 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/StoreBase.java,v 1.2 2001/04/26 03:15:00 bip Exp $ + * $Revision: 1.2 $ + * $Date: 2001/04/26 03:15:00 $ * * ==================================================================== * @@ -71,7 +71,6 @@ import org.apache.catalina.Lifecycle; import org.apache.catalina.LifecycleEvent; import org.apache.catalina.LifecycleException; -import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleListener; import org.apache.catalina.Logger; import org.apache.catalina.Manager; @@ -84,7 +83,7 @@ * support most of the functionality required by a Store. * * @author Bip Thelin - * @version $Revision: 1.1 $, $Date: 2001/04/26 01:36:05 $ + * @version $Revision: 1.2 $, $Date: 2001/04/26 03:15:00 $ */ public abstract class StoreBase @@ -158,21 +157,21 @@ * Return the info for this Store. */ public String getInfo() { - return(info); + return(info); } /** * Return the thread name for this Store. */ public String getThreadName() { - return(threadName); + return(threadName); } /** * Return the name for this Store, used for logging. */ public String getStoreName() { - return(storeName); + return(storeName); } /** @@ -181,14 +180,14 @@ * @param debug The new debugging detail level */ public void setDebug(int debug) { - this.debug = debug; + this.debug = debug; } /** * Return the debugging detail level for this Store. */ public int getDebug() { - return(this.debug); + return(this.debug); } @@ -198,18 +197,18 @@ * @param checkInterval The new check interval */ public void setCheckInterval(int checkInterval) { - int oldCheckInterval = this.checkInterval; - this.checkInterval = checkInterval; - support.firePropertyChange("checkInterval", - new Integer(oldCheckInterval), - new Integer(this.checkInterval)); + int oldCheckInterval = this.checkInterval; + this.checkInterval = checkInterval; + support.firePropertyChange("checkInterval", + new Integer(oldCheckInterval), + new Integer(this.checkInterval)); } /** * Return the check interval (in seconds) for this Store. */ public int getCheckInterval() { - return(this.checkInterval); + return(this.checkInterval); } /** @@ -218,9 +217,9 @@ * @param manager The newly associated Manager */ public void setManager(Manager manager) { - Manager oldManager = this.manager; - this.manager = manager; - support.firePropertyChange("manager", oldManager, this.manager); + Manager oldManager = this.manager; + this.manager = manager; + support.firePropertyChange("manager", oldManager, this.manager); } /** @@ -238,7 +237,7 @@ * @param listener The listener to add */ public void addLifecycleListener(LifecycleListener listener) { - lifecycle.addLifecycleListener(listener); + lifecycle.addLifecycleListener(listener); } /** @@ -247,7 +246,7 @@ * @param listener The listener to add */ public void removeLifecycleListener(LifecycleListener listener) { - lifecycle.removeLifecycleListener(listener); + lifecycle.removeLifecycleListener(listener); } /** @@ -256,7 +255,7 @@ * @param listener a value of type 'PropertyChangeListener' */ public void addPropertyChangeListener(PropertyChangeListener listener) { - support.addPropertyChangeListener(listener); + support.addPropertyChangeListener(listener); } /** @@ -265,7 +264,7 @@ * @param listener The listener to remove */ public void removePropertyChangeListener(PropertyChangeListener listener) { - support.removePropertyChangeListener(listener); + support.removePropertyChangeListener(listener); } // --------------------------------------------------------- Protected Methods @@ -277,42 +276,42 @@ * */ protected void processExpires() { - long timeNow = System.currentTimeMillis(); - String[] keys = null; - + long timeNow = System.currentTimeMillis(); + String[] keys = null; + if(!started) return; - - try { - keys = keys(); - } catch (IOException e) { - log (e.toString()); - e.printStackTrace(); - return; - } - - for (int i = 0; i < keys.length; i++) { - try { - StandardSession session = (StandardSession) load(keys[i]); - if (!session.isValid()) - continue; - int maxInactiveInterval = session.getMaxInactiveInterval(); - if (maxInactiveInterval < 0) - continue; - int timeIdle = // Truncate, do not round up - (int) ((timeNow - session.getLastAccessedTime()) / 1000L); - if (timeIdle >= maxInactiveInterval) { - session.expire(); - remove(session.getId()); - } - } catch (IOException e) { - log (e.toString()); - e.printStackTrace(); - } catch (ClassNotFoundException e) { - log (e.toString()); - e.printStackTrace(); - } - } + + try { + keys = keys(); + } catch (IOException e) { + log (e.toString()); + e.printStackTrace(); + return; + } + + for (int i = 0; i < keys.length; i++) { + try { + StandardSession session = (StandardSession) load(keys[i]); + if (!session.isValid()) + continue; + int maxInactiveInterval = session.getMaxInactiveInterval(); + if (maxInactiveInterval < 0) + continue; + int timeIdle = // Truncate, do not round up + (int) ((timeNow - session.getLastAccessedTime()) / 1000L); + if (timeIdle >= maxInactiveInterval) { + session.expire(); + remove(session.getId()); + } + } catch (IOException e) { + log (e.toString()); + e.printStackTrace(); + } catch (ClassNotFoundException e) { + log (e.toString()); + e.printStackTrace(); + } + } } /** @@ -321,40 +320,22 @@ * @param message Message to be logged */ protected void log(String message) { - Logger logger = null; - Container container = manager.getContainer(); - - if (container != null) - logger = container.getLogger(); - - if (logger != null) { - logger.log(getStoreName()+"[" + container.getName() + "]: " - + message); - } else { - String containerName = null; - if (container != null) - containerName = container.getName(); - System.out.println(getStoreName()+"[" + containerName - + "]: " + message); - } - } - - /** - * Called from <b>start()</b> and used for concrete Store - * implementations that need to add their own <b>start()</b> code. - * - */ - protected void storeStart() { - ; - } - - /** - * Called from <b>stop()</b> and used for concrete Store - * implementations that need to add their own <b>stop()</b> code. - * - */ - protected void storeStop() { - ; + Logger logger = null; + Container container = manager.getContainer(); + + if (container != null) + logger = container.getLogger(); + + if (logger != null) { + logger.log(getStoreName()+"[" + container.getName() + "]: " + + message); + } else { + String containerName = null; + if (container != null) + containerName = container.getName(); + System.out.println(getStoreName()+"[" + containerName + + "]: " + message); + } } // --------------------------------------------------------- Thread Methods @@ -363,11 +344,11 @@ * The background thread that checks for session timeouts and shutdown. */ public void run() { - // Loop until the termination semaphore is set - while (!threadDone) { - threadSleep(); - processExpires(); - } + // Loop until the termination semaphore is set + while (!threadDone) { + threadSleep(); + processExpires(); + } } /** @@ -381,18 +362,15 @@ * that prevents this component from being used */ public void start() throws LifecycleException { - // Validate and update our current component state - if (started) - throw new LifecycleException - (sm.getString(getStoreName()+".alreadyStarted")); - lifecycle.fireLifecycleEvent(START_EVENT, null); - started = true; - - // Start the background reaper thread - threadStart(); - - // Start the Store - storeStart(); + // Validate and update our current component state + if (started) + throw new LifecycleException + (sm.getString(getStoreName()+".alreadyStarted")); + lifecycle.fireLifecycleEvent(START_EVENT, null); + started = true; + + // Start the background reaper thread + threadStart(); } /** @@ -405,62 +383,59 @@ * that needs to be reported */ public void stop() throws LifecycleException { - // Validate and update our current component state - if (!started) - throw new LifecycleException - (sm.getString(getStoreName()+".notStarted")); - lifecycle.fireLifecycleEvent(STOP_EVENT, null); - started = false; - - // Stop the background reaper thread - threadStop(); - - // Stop the Store. - storeStop(); + // Validate and update our current component state + if (!started) + throw new LifecycleException + (sm.getString(getStoreName()+".notStarted")); + lifecycle.fireLifecycleEvent(STOP_EVENT, null); + started = false; + + // Stop the background reaper thread + threadStop(); } - + /** * Start the background thread that will periodically check for * session timeouts. */ protected void threadStart() { - if (thread != null) - return; - - threadDone = false; - thread = new Thread(this, getThreadName()); - thread.setDaemon(true); - thread.start(); + if (thread != null) + return; + + threadDone = false; + thread = new Thread(this, getThreadName()); + thread.setDaemon(true); + thread.start(); } - + /** * Sleep for the duration specified by the <code>checkInterval</code> * property. */ protected void threadSleep() { - try { - Thread.sleep(checkInterval * 1000L); - } catch (InterruptedException e) { - ; - } + try { + Thread.sleep(checkInterval * 1000L); + } catch (InterruptedException e) { + ; + } } - + /** * Stop the background thread that is periodically checking for * session timeouts. */ protected void threadStop() { - if (thread == null) - return; - - threadDone = true; - thread.interrupt(); - try { - thread.join(); - } catch (InterruptedException e) { - ; - } - - thread = null; + if (thread == null) + return; + + threadDone = true; + thread.interrupt(); + try { + thread.join(); + } catch (InterruptedException e) { + ; + } + + thread = null; } }