2 * Copyright (C) 2001, 2002 The Mir-coders group
4 * This file is part of Mir.
6 * Mir is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Mir is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Mir; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * In addition, as a special exception, The Mir-coders gives permission to link
21 * the code of this program with the com.oreilly.servlet library, any library
22 * licensed under the Apache Software License, The Sun (tm) Java Advanced
23 * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24 * the above that use the same license as the above), and distribute linked
25 * combinations including the two. You must obey the GNU General Public
26 * License in all respects for all of the code used other than the above
27 * mentioned libraries. If you modify this file, you may extend this exception
28 * to your version of the file, but you are not obligated to do so. If you do
29 * not wish to do so, delete this exception statement from your version.
39 import javax.servlet.ServletContext;
40 import javax.servlet.http.*;
42 import mir.storage.StorageObjectException;
43 import mir.storage.DatabaseAdaptor;
44 import com.codestudio.util.*;
48 * Description: Class that allows access to all Mir
50 * Copyright: Copyright (c) 2001
52 * @author mh <heckmann@hbe.ca>
58 * This class is a layer above the Configuration
59 * It manages access to config variables that are
60 * both generated on the fly and found in the config file.
63 public class MirConfig extends Configuration {
65 private static HashMap configHash = null;
66 private static HashMap brokerHash = new HashMap();
67 private static int instances=0;
70 * Initializes Configuration hash that contains all values.
71 * loads the properties-file and any other values
72 * @param uri, the root Uri of the install
73 * @param home, The absolute path if the install root.
74 * @param name, The name of the servlet (usually "Mir")
75 * @param confName, the name of the config file to load.
77 public static synchronized void initConfig(ServletContext ctx, String ctxPath,
78 String name, String confName) {
79 initConfResource(confName);
80 configHash = new HashMap();
82 configHash.put("Home", ctx.getRealPath("/"));
83 configHash.put("ServletContext", ctx);
84 configHash.put("RootUri", ctxPath);
86 Enumeration resKeys = getResourceKeys();
87 while(resKeys.hasMoreElements()) {
88 String keyNm = (String)resKeys.nextElement();
89 configHash.put(keyNm, getProperty(keyNm));
93 public static void setAdminServletName(String servletName) {
94 configHash.put("AdminServletName",servletName);
97 public static void setOpenServletName(String servletName) {
98 configHash.put("OpenServletName",servletName);
102 * Returns the property asked for by pulling it out a HashMap
103 * @param a String containing the property name (key)
104 * @return a String containing the prop. value
106 public static String getProp(String propName) {
107 return (String)configHash.get(propName);
111 * Returns the property asked for by pulling it out a HashMap and
112 * appending it to configproperty "Home"
113 * @param a String containing the property name (key)
114 * @return a String containing the prop.value
116 public static String getPropWithHome(String propName) {
117 return (String)configHash.get("Home") +
118 (String)configHash.get(propName);
122 * Returns the property asked for iin raw Object form by
123 * pulling it out a HashMap
124 * @param a String containing the property name (key)
125 * @return an Object containing the prop.value
127 public static Object getPropAsObject(String propName) {
128 return configHash.get(propName);
131 public static void initDbPool () throws StorageObjectException {
132 if (configHash == null) {
133 throw new StorageObjectException("MirConfig -- Trying initialize "+
134 "DB pool when system not yet "+
137 String dbUser=getProp("Database.Username");
138 String dbPassword=getProp("Database.Password");
139 String dbHost=getProp("Database.Host");
140 String dbAdapName=getProp("Database.Adaptor");
141 DatabaseAdaptor adaptor;
143 adaptor = (DatabaseAdaptor)Class.forName(dbAdapName).newInstance();
144 } catch (Exception e) {
145 throw new StorageObjectException("Could not load DB adapator: "+
148 String dbDriver=adaptor.getDriver();
149 String dbUrl=adaptor.getURL(dbUser,dbPassword, dbHost);
150 System.out.println("adding Broker with: " +dbDriver+":"+dbUrl );
151 addBroker( dbDriver, dbUrl);
154 public static void addBroker(String driver, String URL)
155 throws StorageObjectException {
157 if (configHash == null) {
158 throw new StorageObjectException("MirConfig -- Trying initialize "+
159 "DB pool when system not yet "+
162 String username,passwd,min,max,log,reset,dbname,dblogfile;
164 if(!brokerHash.containsKey("Pool.broker")){
165 username=getProp("Database.Username");
166 passwd=getProp("Database.Password");
167 min=getProp("Database.poolMin");
168 max=getProp("Database.poolMax");
169 dbname=getProp("Database.Name");
170 log=getProp("Home")+ configHash.get("Database.PoolLog");
171 reset=getProp("Database.poolResetTime");
172 dblogfile=getPropWithHome("Database.Logfile");
174 System.err.println("-- making Broker for -"
176 + " log " + log + " user "
177 + username + " pass: " + passwd);
179 JDBCPoolMetaData meta = new JDBCPoolMetaData();
180 meta.setDbname(dbname);
181 meta.setDriver(driver);
183 meta.setUserName(username);
184 meta.setPassword(passwd);
185 meta.setJNDIName("mir");
186 meta.setMaximumSize(Integer.parseInt(max));
187 meta.setMinimumSize(Integer.parseInt(min));
188 meta.setPoolPreparedStatements(false);
189 meta.setCacheEnabled(false);
190 meta.setCacheSize(15);
191 meta.setDebugging(false);
192 meta.setLogFile(dblogfile+".pool");
194 JDBCPool pool = SQLManager.getInstance().createPool(meta);
198 brokerHash.put("Pool.broker",pool);
207 public void finalize(){
211 } catch (Throwable t) {}