package org.geoserver.gss; import java.net.URL; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; import org.apache.commons.httpclient.params.HttpConnectionManagerParams; import org.geoserver.catalog.Catalog; import org.geoserver.gss.xml.GSSConfiguration; import org.springframework.beans.factory.DisposableBean; /** * Builds http clients for GSS. Keeps a hold on the single commons http client used to connect to * all hosts and shuts it down on * * @author aaime * */ public class HTTPGSSClientFactory implements DisposableBean, GSSClientFactory { HttpClient client; GSSConfiguration configuration; Catalog catalog; public HTTPGSSClientFactory(GSSConfiguration configuration, Catalog catalog) { this.configuration = configuration; this.catalog = catalog; } HttpClient getClient() { if (client == null) { client = new HttpClient(); HttpConnectionManagerParams params = new HttpConnectionManagerParams(); // setting timeouts (one minute hard coded, TODO: make this configurable) params.setSoTimeout(60 * 1000); params.setConnectionTimeout(60 * 1000); params.setDefaultMaxConnectionsPerHost(1); MultiThreadedHttpConnectionManager manager = new MultiThreadedHttpConnectionManager(); manager.setParams(params); client.setHttpConnectionManager(manager); } return client; } public GSSClient createClient(URL gssServiceURL, String username, String password) { return new HTTPGSSClient(getClient(), configuration, catalog, gssServiceURL, username, password); } public void destroy() throws Exception { if (client != null) { ((MultiThreadedHttpConnectionManager) client.getHttpConnectionManager()).shutdownAll(); client = null; } } }