1 21 22 package org.opensubsystems.core.www; 23 24 import java.util.logging.Level ; 25 import java.util.logging.Logger ; 26 27 import javax.servlet.ServletContext ; 28 import javax.servlet.ServletContextEvent ; 29 import javax.servlet.ServletContextListener ; 30 31 import org.opensubsystems.core.error.OSSException; 32 import org.opensubsystems.core.persist.db.Database; 33 import org.opensubsystems.core.persist.db.DatabaseImpl; 34 import org.opensubsystems.core.persist.db.DatabaseSchema; 35 import org.opensubsystems.core.persist.db.DatabaseSchemaManager; 36 import org.opensubsystems.core.util.Log; 37 38 65 public class DatabaseContextListener implements ServletContextListener 66 { 67 69 77 public static final String DATABASE_SCHEMA_PREFIX = "oss.database.schema."; 78 79 81 84 private static Logger s_logger = Log.getInstance(DatabaseContextListener.class); 85 86 88 91 public void contextInitialized( 92 ServletContextEvent servletContextEvent 93 ) 94 { 95 s_logger.entering(this.getClass().getName(), "contextInitialized"); 96 try 97 { 98 Database dbDatabase; 101 ServletContext scContext; 102 String strSchemaClassName; 103 int iIndex = 0; 104 DatabaseSchema schema; 105 106 scContext = servletContextEvent.getServletContext(); 107 108 try 109 { 110 dbDatabase = DatabaseImpl.getInstance(); 111 112 do 113 { 114 strSchemaClassName = WebUtils.readProperty(scContext, 115 DATABASE_SCHEMA_PREFIX + iIndex, null, true); 116 if ((strSchemaClassName != null) && (strSchemaClassName.length() > 0)) 117 { 118 s_logger.fine("Read schema name " + strSchemaClassName); 119 schema = DatabaseSchemaManager.getInstance(strSchemaClassName); 120 s_logger.fine("Instantiated schema " + strSchemaClassName); 121 dbDatabase.add(schema); 122 iIndex++; 123 } 124 } 125 while (strSchemaClassName != null); 126 127 s_logger.fine("Initializing default database."); 130 dbDatabase.start(); 131 s_logger.fine("Database default initialized."); 132 } 133 catch (OSSException ossExc) 134 { 135 s_logger.log(Level.SEVERE, "Unexpected exception.", ossExc); 137 throw new RuntimeException ("Unexpected exception.", ossExc); 138 } 139 catch (SecurityException eSec) 140 { 141 s_logger.log(Level.SEVERE, "Unexpected exception.", eSec); 143 throw new RuntimeException ("Unexpected exception.", eSec); 144 } 145 catch (IllegalArgumentException eIllArg) 146 { 147 s_logger.log(Level.SEVERE, "Unexpected exception.", eIllArg); 149 throw new RuntimeException ("Unexpected exception.", eIllArg); 150 } 151 catch (Throwable thr) 154 { 155 s_logger.log(Level.SEVERE, "Unexpected exception.", thr); 157 throw new RuntimeException ("Unexpected exception.", thr); 158 } 159 } 160 finally 161 { 162 s_logger.exiting(this.getClass().getName(), "contextInitialized"); 163 } 164 } 165 166 169 public void contextDestroyed( 170 ServletContextEvent servletContextEvent 171 ) 172 { 173 s_logger.entering(this.getClass().getName(), "contextDestroyed"); 174 try 175 { 176 Database dbDatabase; 178 179 try 180 { 181 dbDatabase = DatabaseImpl.getInstance(); 182 if (dbDatabase != null) 183 { 184 dbDatabase.stop(); 185 } 186 } 187 catch (OSSException bfeExc) 188 { 189 throw new RuntimeException ("Unexpected exception.", bfeExc); 190 } 191 } 192 finally 193 { 194 s_logger.exiting(this.getClass().getName(), "contextDestroyed"); 195 } 196 } 197 } 198 | Popular Tags |