You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by bu...@apache.org on 2005/11/18 21:16:16 UTC
DO NOT REPLY [Bug 37561] New: -
Multiple HttpClient instances and thread safety?
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=37561>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=37561
Summary: Multiple HttpClient instances and thread safety?
Product: HttpClient
Version: 3.0 RC4
Platform: Other
OS/Version: Windows XP
Status: NEW
Severity: normal
Priority: P2
Component: HttpClient
AssignedTo: httpclient-dev@jakarta.apache.org
ReportedBy: kirk.w.rasmussen@bankofamerica.com
Using HttpClient as a crude load tester with 75 agents running I am seeing the
following on occasion:
WARNING: SimpleHttpConnectionManager being used incorrectly. Be sure that
HttpMethod.releaseConnection() is always called and that only one thread and/or
method is using this connection manager at a time.
The code that I am running is:
public Agent() throws Exception {
HttpClientParams params = new
HttpClientParams(HttpClientParams.getDefaultParams());
params.setConnectionManagerTimeout(60000L);
params.setSoTimeout(60000);
http = new HttpClient(params);
}
...
String[] urls = { ... }
for (String url : urls) {
GetMethod method = new GetMethod(url);
try {
http.executeMethod(method);
int status = method.getStatusCode();
if (status != HttpStatus.SC_OK) {
throw new IOException("Failed to load target URL: " + method);
}
//System.out.println(method.getResponseBodyAsString());
} finally {
method.releaseConnection();
}
}
Each thread gets its own HttpClient and method.releaseConnection is always called.
The code to launch the threads is as follows:
ExecutorService pool = Executors.newFixedThreadPool(threads);
List<Agent> agents = new ArrayList<Agent>();
results = new LinkedList<Future>();
for (int i=0; i < runs; i++) {
results.add(pool.submit(new AcidAgent()));
}
while (! results.isEmpty()) {
Future f = results.get(0);
try {
Object result = f.get(60, TimeUnit.SECONDS);
results.remove(f);
System.out.println(result);
} catch (TimeoutException ex ) {
System.out.println("Incomplete");
} catch (Exception ex) {
System.out.println(ex);
if (f.isDone()) {
results.remove(f);
}
}
}
Am I doing something wrong?
Thanks
--
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpclient-dev-help@jakarta.apache.org