package jp.aegif.nemaki.dao.impl.couch.connector; import java.net.MalformedURLException; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import org.ektorp.CouchDbConnector; import org.ektorp.CouchDbInstance; import org.ektorp.http.HttpClient; import org.ektorp.http.StdHttpClient; import org.ektorp.http.StdHttpClient.Builder; import org.ektorp.impl.StdCouchDbInstance; import jp.aegif.nemaki.cmis.factory.info.RepositoryInfoMap; public class ConnectorPool { private RepositoryInfoMap repositoryInfoMap; private String url; private int maxConnections; private int connectionTimeout; private int socketTimeout; private boolean authEnabled; private String authUserName; private String authPassword; private Builder builder; private Map<String, CouchDbConnector> pool = new HashMap<String, CouchDbConnector>(); private Logger logger = Logger.getLogger(ConnectorPool.class); public void init() { //Builder try { this.builder = new StdHttpClient.Builder() .url(url) .maxConnections(maxConnections) .connectionTimeout(connectionTimeout) .socketTimeout(socketTimeout) .cleanupIdleConnections(true); } catch (MalformedURLException e) { logger.error("CouchDB URL is not well-formed!: " + url, e); e.printStackTrace(); } if(authEnabled){ builder.username(authUserName).password(authPassword); } //Create connectors for(String key : repositoryInfoMap.keys()){ add(key); add(repositoryInfoMap.getArchiveId(key)); } } public CouchDbConnector get(String repositoryId){ CouchDbConnector connector = pool.get(repositoryId); if(connector == null){ throw new Error("CouchDbConnector for repository:" + " cannot be found!"); } return connector; } public CouchDbConnector add(String repositoryId){ CouchDbConnector connector = pool.get(repositoryId); if(connector == null){ HttpClient httpClient = builder.build(); CouchDbInstance dbInstance = new StdCouchDbInstance(httpClient); connector = dbInstance.createConnector(repositoryId, true); pool.put(repositoryId, connector); } return connector; } public void setRepositoryInfoMap(RepositoryInfoMap repositoryInfoMap) { this.repositoryInfoMap = repositoryInfoMap; } public void setUrl(String url) { this.url = url; } public void setMaxConnections(int maxConnections) { this.maxConnections = maxConnections; } public void setConnectionTimeout(int connectionTimeout) { this.connectionTimeout = connectionTimeout; } public void setSocketTimeout(int socketTimeout) { this.socketTimeout = socketTimeout; } public void setAuthEnabled(boolean authEnabled) { this.authEnabled = authEnabled; } public void setAuthUserName(String authUserName) { this.authUserName = authUserName; } public void setAuthPassword(String authPassword) { this.authPassword = authPassword; } public void setBuilder(Builder builder) { this.builder = builder; } public void setPool(Map<String, CouchDbConnector> pool) { this.pool = pool; } }