public void start() throws IOException { long t1 = System.currentTimeMillis(); // We must have at least 3 handlers: // channel is the 'transport' // request is the request processor or 'global' chain // container is the 'provider' // Additional handlers may exist and be used internally // or be chained to create one of the standard handlers String handlers[] = defaultHandlers; // backward compat String workers = props.getProperty("handler.list", null); if (workers != null) { handlers = split(workers, ","); } // Load additional component declarations processModules(); for (int i = 0; i < handlers.length; i++) { String name = handlers[i]; JkHandler w = getWorkerEnv().getHandler(name); if (w == null) { newHandler(name, "", name); } } // Process properties - and add aditional handlers. processProperties(); for (int i = 0; i < wEnv.getHandlerCount(); i++) { if (wEnv.getHandler(i) != null) { try { wEnv.getHandler(i).init(); } catch (IOException ex) { if ("apr".equals(wEnv.getHandler(i).getName())) { log.info("APR not loaded, disabling jni components: " + ex.toString()); } else { log.error("error initializing " + wEnv.getHandler(i).getName(), ex); } } } } started = true; long t2 = System.currentTimeMillis(); startTime = t2 - t1; this.saveProperties(); log.info( "Jk running ID=" + wEnv.getLocalId() + " time=" + initTime + "/" + startTime + " config=" + propFile); }