I don't see anything glaringly wrong there. What's HttpManagerCleaner by the way? I assume this is some peripheral thread that cleans up idle connections? Is this based upon IdleConnectionEvictor that Oleg has posted here?
Thanks, Sam On 15 June 2010 10:13, KaiserSose <[email protected]> wrote: > > Hi Sam, > first of all thanks for your time and your help. > I can't set any packet sniffer on the frontends (since I don't have access > rights) ... > Here are the "interested" parts of my code ... this is a very reduced part > of the manager and its surrounded by other classes and so on ... > > > package it.seat.dol.http.connectionpool; > > public class HttpConnectionManager { > > protected static final Logger log = > Logger.getLogger("HttpConnectionManager"); > private static HttpConnectionManager instance = null; > private HttpParams hp = new BasicHttpParams(); > private HttpParams tempConfig; > private Map<String, HttpConnectionParams> configList = new > HashMap<String, HttpConnectionParams>(); > BasicHttpContext localcontext = new BasicHttpContext(); > private DefaultHttpClient httpclient; > private ThreadSafeClientConnManager poolManager; > private static boolean isInit = false; > > // parametri che verranno letti dal file di risorse > private static Integer managerMaxTotalConn = 0; > private static Integer managerConnPerRoute = 0; > > > private HttpConnectionManager() { > } > > public static HttpConnectionManager getInstance() throws > HttpConnectorException { > if (isInit()) { > return instance; > } else { > log.warn("getInstance() __ tentativo di ottenere un istanza con > manager non inizializzato"); > throw new > HttpConnectorException(HttpConnectorException.HC_ERR_NOT_INIT, > "HttpConnectionManager.getInstance()", > "Impossibile ottenere il reference. Non � stato > inizializzato il Manager"); > } > } > > public static synchronized void init(Properties connectorProperties) > throws HttpConnectorException { > if (instance == null) { > instance = new HttpConnectionManager(); > log.info("init() __ COSTRUITO IL MANAGER HTTP"); > try { > ApplicationConfig.getInstance().init(connectorProperties); > managerMaxTotalConn = > Integer.parseInt(ApplicationConfig.getInstance().getProperty("maxtotalconn")); > managerConnPerRoute = > Integer.parseInt(ApplicationConfig.getInstance().getProperty("maxconnperroute")); > if ((managerMaxTotalConn == 0) || (managerConnPerRoute == > 0)) { > log.error("init() __ Impossibile inizializzare con > managerMaxTotalConn= " + managerMaxTotalConn > + " e managerConnPerRoute= " + > managerConnPerRoute); > throw new > HttpConnectorException(HttpConnectorException.HC_ERR_WRONGPARAMETER, > "HttpConnectionManager.init() ", > "Errore nei parametri. Controllare > Application.properties" > + "o i parametri maxtotalconn e > maxconnperroute"); > } > } catch (IOException ex) { > if ((managerMaxTotalConn == 0) || (managerConnPerRoute == > 0)) { > log.error("init() __ errore nell'inizializzazione " + > ex); > throw new > HttpConnectorException(HttpConnectorException.HC_ERR_PATHFILE, > "HttpConnectionManager.init() ", > "Errore nel file delle proprietà"); > } > } > > // logga > log.info("init() __ MANAGER HTTP INIZIALIZZAZIONE IN CORSO ... > "); > log.info("init() __ MANAGER HTTP CONNESSIONI TOTALI MASSIME: " + > managerMaxTotalConn); > log.info("init() __ MANAGER HTTP CONNESSIONI MASSIME PER > PERCORSO: " + managerConnPerRoute); > instance.startUp(); > } > } > > public static synchronized void init() throws HttpConnectorException { > init(null); > } > > private SchemeRegistry createSchemeRegistry() { > SchemeRegistry sr = new SchemeRegistry(); > sr.register(new Scheme("http", > PlainSocketFactory.getSocketFactory(), 80)); > sr.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), > 443)); > log.info("createSchemeRegistry() __ MANAGER HTTP CREATO SCHEME > REGISTRY"); > return sr; > } > > > private void startUp() { > if (!isInit()) { > ConnManagerParamBean connParams = new ConnManagerParamBean(hp); > // imposto le connessioni totali massime e di massime per > percorso > connParams.setMaxTotalConnections(managerMaxTotalConn); > hp.setParameter(ConnManagerPNames.MAX_CONNECTIONS_PER_ROUTE, new > ConnPerRoute() { > �...@override > public int getMaxForRoute(HttpRoute route) { > return managerConnPerRoute; > } > }); > // Istanzio il connection manager ed il client http > poolManager = new ThreadSafeClientConnManager(hp, > createSchemeRegistry()); > HttpManagerCleaner manCleaner = new > HttpManagerCleaner(poolManager, 60000); > manCleaner.start(); > httpclient = new DefaultHttpClient(poolManager, hp); > isInit = true; > log.info("startUp() __ MANAGER HTTP INIZIALIZZAZIONE > COMPLETATA"); > } > } > > [....] > > private String doGetFinalRequest(String page, String user, String > password, HttpConnectionParams serviceParams) throws IOException, > HttpConnectorException { > String result = null; > if (isInit()) { > Long startTime = null; > if (log.isDebugEnabled()) { > log.debug("[PROFILE]: Chiamata GET accettata"); > startTime = System.currentTimeMillis(); > } > page = encodePage(page); > String proxyAddress = ""; > Integer proxyPort = 0; > String proxyUser = ""; > String proxyPassword = ""; > proxyAddress = (String) serviceParams.getParameter("PROXYHOST"); > proxyPort = (Integer) serviceParams.getParameter("PROXYPORT"); > proxyUser = (String) serviceParams.getParameter("PROXYUSER"); > proxyPassword = (String) > serviceParams.getParameter("PROXYPASSWORD"); > > HttpEntity entity = null; > HttpHost targetHost = serviceParams.getHostObject(); > HttpGet httpget = new HttpGet(page); > httpget.setParams((HttpParams) serviceParams.getHttpParams()); > > if ((!(proxyAddress == null)) && (!proxyAddress.equals("")) && > (!(proxyPort == null)) && (proxyPort > 0)) { > setProxy(httpget, proxyAddress, proxyPort, proxyUser, > proxyPassword); > } > > if (!user.equals("")) { > setHostAuthentication(targetHost.getHostName(), > targetHost.getPort(), user, password); > } > > HttpResponse response = httpclient.execute(targetHost, httpget); > > switch (response.getStatusLine().getStatusCode()) { > case HttpStatus.SC_OK: > // risposta ricevuta correttamente (200) > logIfDebug("doGetFinalRequest() __ Ottenuto un response > 200 su " + targetHost.getHostName() + page); > entity = response.getEntity(); > break; > case HttpStatus.SC_MOVED_PERMANENTLY: > // redirect permanente ad un altra pagina (301) > logIfDebug("doGetFinalRequest() __ Ottenuto un response > 301 su " + targetHost.getHostName() + page); > entity = response.getEntity(); > break; > case HttpStatus.SC_MOVED_TEMPORARILY: > // redirect temporaneo ad un altra pagina (302) > logIfDebug("doGetFinalRequest() __ Ottenuto un response > 302 su " + targetHost.getHostName() + page); > entity = response.getEntity(); > break; > case HttpStatus.SC_UNAUTHORIZED: > logIfDebug("doGetFinalRequest() __ Response 401 su " + > targetHost.getHostName() + page + " connessione non autorizzata"); > throw new > HttpConnectorException(HttpConnectorException.HC_ERR_NOT_AUTH, > "HttpRequester.doGetRequest()", ""); > default: > logIfDebug("doGetFinalRequest() __ Response " + > response.getStatusLine().getStatusCode() + " su " + targetHost.getHostName() > + page); > throw new > HttpConnectorException(HttpConnectorException.HC_ERR_HTTP, > "HttpRequester.doGetRequest()", ""); > } > > if (entity != null) { > result = EntityUtils.toString(entity); > entity.consumeContent(); > } > > } > return result; > } > > -- > View this message in context: > http://old.nabble.com/Load-balancer-and-Connection-pool-tp28883039p28888928.html > Sent from the HttpClient-User mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
