2010-06-21 15 views
7

SimpleHttpConnectionManager incorrectamente utilizado. Asegúrese de llamar siempre a HttpMethod.releaseConnection() y de que solo un hilo y/o método está usando este administrador de conexión a la vez.SimpleHttpConnectionManager se usa incorrectamente

¿alguien sabe por qué este error aparece y se hace que los archivos que desea descargar o fracasar y volver a intentar descargar o incompleto

Gracias!

+2

Más código/excepción rastro nos ayudaría a entender mejor su problema. –

Respuesta

11

Asegúrese de no utilizar SimpleHttpConnectionManager para crear y usar conexiones de varios subprocesos. El administrador de conexión simple no está diseñado para eso, siempre devuelve la misma conexión, y esto no es seguro para subprocesos.

En un entorno de subprocesos múltiples, use un administrador diferente que use un grupo de conexiones. Ver MultiThreadedHttpConnectionManager.

+1

Gracias El código estaba dándole un httpclient predeterminado, que viene con una conexión simplehttp por defecto, así que lo cambié y lo obligué a tomar un gestor de conexión multiprocesohhttp. – MArio

0

¿Alguien sabe por qué aparece este error y hace que los archivos que deseo descargar o para fallar y volver a intentar o para descargar incompleto?

Probablemente sea un error en la aplicación que intenta realizar la descarga. Pero sin un poco más de contexto (por ejemplo, el código fuente, los rastros de pila) nos quedaríamos con las conjeturas como la única "herramienta" para descubrir cuál es el error real.

3

Prefiero no tomar ningún crédito para esto, pero según la respuesta de Eyal Schneider, encuentre más información sobre el uso de MultiThreadedHttpConnectionManager en Vincent de Villers excellent blog.

fragmento de código copiado en caso de que el enlace nunca desaparece:

HttpClient httpclient = new HttpClient(new MultiThreadedHttpConnectionManager()); 
GetMethod httpget = new GetMethod("http://www.myhost.com/"); 
try { 
    httpclient.executeMethod(httpget); 
    Reader reader = new InputStreamReader(
     httpget.getResponseBodyAsStream(), httpget.getResponseCharSet()); 
    // consume the response entity 
} finally { 
    httpget.releaseConnection(); 
} 
+0

Muchas gracias por esto –