@SuppressWarnings("unchecked") private void loadDefaults(PropertyMap properties, Set<String> files) throws Exception { // update substitutions if provided PropertyMap substitutions = properties.subMap("substitutions"); if (substitutions != null && substitutions.size() > 0) { PropertyMap subs = SubstitutionFactory.getSubstitutions(substitutions, mResourceFactory); if (subs != null) { mSubstitutions.putAll(subs); } properties.remove("substitutions"); } // Get file and perform substitution of env variables/system props String fileName = properties.getString("properties.file"); if (mDebugEnabled) { mServletContext.log("properties.file: " + fileName); } if (fileName != null) { fileName = SubstitutionFactory.substitute(fileName, mSubstitutions); } // parse file if not yet parsed if (fileName != null && !files.contains(fileName)) { // Prevent properties file cycle. files.add(fileName); // load properties PropertyMap props = mResourceFactory.getResourceAsProperties(fileName); if (props != null) { properties.putAll(props); } loadDefaults(properties, files); } else { PropertyMap factoryProps = properties.subMap("properties.factory"); if (factoryProps != null && factoryProps.size() > 0) { PropertyMap map = loadProperties(factoryProps); properties.putAll(map); } } }
/** * Initializes the TeaServlet. Creates the logger and loads the user's application. * * @param config the servlet config */ public void init(ServletConfig config) throws ServletException { super.init(config); mServletConfig = config; config.getServletContext().log("Initializing TeaServlet..."); String ver = System.getProperty("java.version"); if (ver.startsWith("0.") || ver.startsWith("1.2") || ver.startsWith("1.3")) { config.getServletContext().log("The TeaServlet requires Java 1.4 or higher to run properly"); } mServletContext = setServletContext(config); mServletName = setServletName(config); mProperties = new PropertyMap(); mSubstitutions = SubstitutionFactory.getDefaults(); mResourceFactory = new TeaServletResourceFactory(config.getServletContext(), mSubstitutions); Enumeration<?> e = config.getInitParameterNames(); while (e.hasMoreElements()) { String key = (String) e.nextElement(); String value = SubstitutionFactory.substitute(config.getInitParameter(key)); if (key.equals("debug")) { mDebugEnabled = Boolean.parseBoolean(value); continue; } mProperties.put(key, value); } loadDefaults(); discoverProperties(); createListeners(); createLog(mServletContext); mLog.applyProperties(mProperties.subMap("log")); createMemoryLog(mLog); mInstrumentationEnabled = mProperties.getBoolean("instrumentation.enabled", true); Initializer initializer = new Initializer(); if (mProperties.getBoolean("startup.background", false)) { mInitializer = Executors.newSingleThreadExecutor().submit(initializer); } else { initializer.call(); } }
private PropertyMap loadProperties(PropertyMap factoryProps) throws Exception { String className = null; PropertyMapFactory factory = null; if (factoryProps != null && factoryProps.size() > 0 && (className = factoryProps.getString("class")) != null) { if (mDebugEnabled) { mServletContext.log("Using property factory: " + className); } // Load and use custom PropertyMapFactory. Class<?> factoryClass = Class.forName(className); java.lang.reflect.Constructor<?> ctor = factoryClass.getConstructor(new Class[] {Map.class}); factory = (PropertyMapFactory) ctor.newInstance(new Object[] {factoryProps.subMap("init")}); } else if (factoryProps == null) { if (mDebugEnabled) { mServletContext.log("factoryProps is null."); } } else if (factoryProps.size() == 0) { if (mDebugEnabled) { mServletContext.log("factory props size is 0."); } } else { if (mDebugEnabled) { mServletContext.log("className is null"); } } // return properties PropertyMap result = null; if (factory != null) { result = factory.createProperties(); if (mDebugEnabled) { mServletContext.log("properties: " + result); } } return result; }