public void init() throws Exception {
		if (initialized) {
			log.info(sm.getString("coyoteConnector.alreadyInitialized"));
			return;
		}

		this.initialized = true;

		try {
			this.requestFailureStrategy = RequestFailureStrategy.valueOf(System.getProperty(
					"org.apache.catalina.connector.REPEAT_REQUEST", "NO_REPEAT"));
		} catch (Throwable e) {
			// NOPE
		}
		log.info("Configuration of Request failure strategy: " + this.requestFailureStrategy);

		this.connectionManager.init();
		if (this.nodeService != null) {
			this.nodeService.init();
			this.connectionManager.setNodeService(nodeService);

			try {
				Method m = this.nodeService.getClass().getMethod("setConnectionManager",
						ConnectionManager.class);
				m.invoke(this.nodeService, this.connectionManager);
			} catch (Throwable e) {
				// NOT all protocols have this method
			}
		}

		if (this.protocolHandler.getClass().equals(
				org.jboss.cluster.proxy.http11.Http11NioProtocol.class)) {
			this.adapter = new MCMPAdapter(this);
		}

		try {
			Method m = this.protocolHandler.getClass().getMethod("setSSLEnabled", Boolean.TYPE);
			m.invoke(this.protocolHandler, isSecure());
		} catch (Throwable e) {
			// NOT all protocols have this method
		}

		// Initializing adapter
		if (this.adapter == null) {
			// By default we use the CoyoteAdapter
			adapter = new CoyoteAdapter(this);
		}

		protocolHandler.setAdapter(adapter);
		IntrospectionUtils.setProperty(protocolHandler, "jkHome",
				System.getProperty("catalina.base"));

		adapter.init();

		try {
			log.info("Invoke Protocol Handler initialization");
			protocolHandler.init();
		} catch (Exception e) {
			throw new Exception(sm.getString("coyoteConnector.protocolHandlerInitializationFailed",
					e));
		}
	}