On Tue, 2008-10-14 at 17:12 -0700, Mohit Anchlia wrote:
> So what should be the protocol of shutting down cleanely: Below is the
> sample code, does the below code look ok?
>
It all depends on what you are trying to achieve.
Oleg
> public class Test {
> private static MultiThreadedHttpConnectionManager con = new
> MultiThreadedHttpConnectionManager();
> private static void doGet(HttpClient client) {
> System.out.println("CONN POOL " + con.getConnectionsInPool());
> //System.out.println("DEF CON "
> +client.getHttpConnectionManager().getParams().getDefaultMaxConnectionsPerHost());
> //System.out.println("MAX CON " +
> client.getHttpConnectionManager().getParams().getMaxTotalConnections()
> );
>
> GetMethod get = new GetMethod("http://localhost:8080/s/e");
> get.setQueryString("version=V07.08&request_type=1");
> get.addRequestHeader( "Connection", "close");
> try {
> long statusCode = client.executeMethod(get);
>
> System.out.println(IOUtils.toString(get.getResponseBodyAsStream()));
> if (statusCode != HttpStatus.SC_OK) {
> }
> Thread.sleep(1000);
> } catch(IOException ioe){
> ioe.printStackTrace();
> }catch (Exception e){} finally {
> if (get != null) get.releaseConnection();
> }
> }
> public static void main(String []a) throws Exception{
>
> HttpConnectionManagerParams params = new HttpConnectionManagerParams();
> params.setDefaultMaxConnectionsPerHost(2);
> //params.setMaxConnectionsPerHost(2);
> params.setMaxTotalConnections(2);
> con.setParams(params);
>
> HttpClient client = new HttpClient();
> client.getParams().setParameter("http.connection.timeout", new
> Integer(1000));
> int i = 0;
> while ( i++ < 500){
> client = new HttpClient(con);
> doGet(client);
> client = null;
> con.closeIdleConnections(1000l);
> //con.deleteClosedConnections();
> }
> /////////////
>
> Is using HttpClient for entire life span of servlet thread safe? I
> still don't understand the part where you said HttpClient will not be
> closed properly, would ".closeIndleConnections" or
> "deleteClosedConnections" along with "releaseConnections" take care of
> it.
>
> On Tue, Oct 14, 2008 at 3:07 PM, Oleg Kalnichevski <[EMAIL PROTECTED]> wrote:
> > On Tue, 2008-10-14 at 23:51 +0200, Christine wrote:
> >> On Tue, 2008-10-14 at 23:44 +0200, Oleg Kalnichevski wrote:
> >>
> >> > > What is the tradeoff between using the same httpClient instance again
> >> > > and again, or creating a new one on each request? Can you create a
> >> > > memory leak by using one instance and not closing connections properly?
> >> > >
> >> > It very much depends on what you are trying to accomplish. Generally it
> >> > is recommended to reuse the HttpClient instance in order to utilize
> >> > persistent connections more efficiently.
> >> >
> >> > What is very important that the connection manager associated with the
> >> > HttpClient instance is shut down when it is no longer needed. Otherwise,
> >> > connections will stay open until garbage collected by the JVM, which may
> >> > take a while. If too many instances of HttpClient are created in a tight
> >> > loop without being correctly shut down, there will be too many
> >> > connections kept alive needlessly and the system can run out of
> >> > resources.
> >>
> >> Oleg,
> >> thanks for the reply. I am reusing one instance, but I was just
> >> wondering. Using one instance I don't have to shut down connection
> >> managers, right?
> >>
> >
> > It is a little more complex than that. You do not, as long as that
> > instance is used for the entire lifespan of the application. One really
> > ought to shut down the connection manager before it goes out of scope /
> > becomes garbage. This is especially important for managed environments
> > such as servlet containers where applications can be undeployed and
> > redeployed.
> >
> >> btw, I'm still a bit confused after switching from 3.x to 4.0, but you
> >> guys have the documentation right, now. I think you did a good job.
> >>
> >
> > I know the documentation is still lacking. We happily take
> > contributions.
> >
> > Oleg
> >
> >
> >> Christine
> >>
> >> >
> >> > Hope this helps
> >> >
> >> > Oleg
> >> >
> >> >
> >> > > >
> >> > > > Oleg
> >> > > >
> >> > > > > ---------------------------------------------------------------------
> >> > > > > 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]
> >> >
> >> >
> >> > ---------------------------------------------------------------------
> >> > 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]
> >
> >
>
> ---------------------------------------------------------------------
> 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]