| | |
| | | |
| | | import de.uhilger.baselink.PersistenceManager; |
| | | import de.uhilger.baselink.Record; |
| | | import de.uhilger.um.api.UserMgr; |
| | | import java.io.BufferedReader; |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | |
| | | * Hauptklasse der Anwendung Nutzerverwaltung |
| | | * |
| | | * Hier wird u.a. geprüft, ob die Datenbank vorhanden ist und diese |
| | | * angelegt, falls nicht. |
| | | * angelegt, falls nicht. Das SQL zur Anlage der Datenbank findet |
| | | * sich in WEB-INF/create_database.sql |
| | | * |
| | | * @author Ulrich Hilger |
| | | */ |
| | |
| | | private static final String SCRIPT_NAME = "create_database.sql"; |
| | | /** Name der Datei mit den SQL-Kommandos dieser Anwendung */ |
| | | public static final String SQL_PROPERTIES_NAME = "sql.properties"; |
| | | /** Name, unter dem das Properties-Objekt mit den SQL-Befehlen im ServletContext hinterlegt ist */ |
| | | public static final String UM_SQL_PROPERTIES = "umSqlProperties"; |
| | | /** Name des Parameters, unter dem der Name der DataSource im Deployment Descritpor zu finden ist */ |
| | | public static final String P_DSNAME = "dsname"; |
| | | |
| | | |
| | | /** Name des SQL-Befehls zum Pruefen, ob die Datenbank vorhanden ist */ |
| | | public static final String SQL_DB_VORHANDEN = "dbVorhanden"; |
| | | |
| | | /** Anwendungsweite Referenz zur Datenbank */ |
| | | //private static PersistenceManager db; |
| | | |
| | | private static PersistenceManager db; |
| | | private static Properties sql; |
| | | /** Anwendungsweite Referenz zu den SQL-Befehlen */ |
| | | //private static Properties sql; |
| | | |
| | | /** die Klasse, die von der Nutzerverwaltung zum Verschlüsseln verwendet wird */ |
| | | //private static Digester digester; |
| | | |
| | | /** |
| | | * Diese Webanwendung initialisieren, also z.B. Elemente instantiieren, die |
| | | * über den Deployment Descritpor veränderlich gehalten sind. |
| | | * |
| | | * @param servletContext der zur Laufzeit bestehende ServletContext |
| | | */ |
| | | private void initApp(ServletContext servletContext) { |
| | | try { |
| | | initSql(servletContext); |
| | | initDb(servletContext); |
| | | //String digesterClassName = servletContext.getInitParameter(P_DIGESTER); |
| | | //digester = (Digester) Class.forName(digesterClassName).newInstance(); |
| | | } catch (Exception ex) { |
| | | logger.log(Level.SEVERE, null, ex); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Ein Eigenschaften-Objekt mit den SQL-Statements initialisieren, |
| | |
| | | File basis = new File(this.getClass().getResource("/").toURI()); |
| | | File sqlFile = new File(basis.getParentFile(), SQL_PROPERTIES_NAME); |
| | | logger.fine("lese SQL-Eigenschaften von " + sqlFile.getAbsolutePath()); |
| | | sql = new Properties(); |
| | | Properties sql = new Properties(); |
| | | sql.loadFromXML(new FileInputStream(sqlFile)); |
| | | servletContext.setAttribute(UM_SQL_PROPERTIES, sql); |
| | | servletContext.setAttribute(UserMgr.UM_SQL_PROPERTIES, sql); |
| | | logger.fine("Abfrage dbVorhanden='" + sql.getProperty(SQL_DB_VORHANDEN) + "'"); |
| | | } catch(Exception ex) { |
| | | logger.log(Level.SEVERE, ex.getMessage(), ex); |
| | |
| | | * |
| | | * @return das Zugriffsobjekt zur Datenbank dieser Webanwendung |
| | | */ |
| | | /* |
| | | public static PersistenceManager getDatabase() { |
| | | if(db == null) { |
| | | db = new PersistenceManager(); |
| | | } |
| | | return db; |
| | | } |
| | | */ |
| | | |
| | | /** |
| | | * Ein benanntes SQL-Kommando ermitteln |
| | | * @param id Name des gewuenschten SQL-Kommandos |
| | | * @return das SQL-Kommando mit der in id angegebenen Bezeichnung |
| | | */ |
| | | public static String getSqlStatement(String id) { |
| | | return sql.getProperty(id); |
| | | /* |
| | | public static Digester getDigester() { |
| | | return digester; |
| | | } |
| | | */ |
| | | |
| | | /* ----------------- Logik zur Datenbank-Erzeugung ------------ */ |
| | | |
| | |
| | | */ |
| | | private void initDb(ServletContext servletContext) { |
| | | try { |
| | | db = new PersistenceManager(); |
| | | PersistenceManager db = new PersistenceManager(); |
| | | db.setDataSourceName(servletContext.getInitParameter(P_DSNAME)); |
| | | Properties sql = (Properties) servletContext.getAttribute(UM_SQL_PROPERTIES); |
| | | servletContext.setAttribute(UserMgr.UM_DB, db); |
| | | Properties sql = (Properties) servletContext.getAttribute(UserMgr.UM_SQL_PROPERTIES); |
| | | if(!dbVorhanden(db, sql.getProperty(SQL_DB_VORHANDEN))) { |
| | | logger.info("Datenbank ist nicht vorhanden"); |
| | | int[] ergebnis = db.executeScript(getSqlSkript()); |
| | |
| | | @Override |
| | | public void contextInitialized(ServletContextEvent sce) { |
| | | ServletContext servletContext = sce.getServletContext(); |
| | | initSql(servletContext); |
| | | initDb(servletContext); |
| | | initApp(servletContext); |
| | | } |
| | | |
| | | @Override |