You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/09/07 14:07:43 UTC

svn commit: r573557 - in /jakarta/httpcomponents/httpcore/trunk: module-nio/src/examples/org/apache/http/examples/nio/ module-nio/src/main/java/org/apache/http/nio/protocol/ module-nio/src/test/java/org/apache/http/nio/protocol/ module-niossl/src/examp...

Author: olegk
Date: Fri Sep  7 05:07:42 2007
New Revision: 573557

URL: http://svn.apache.org/viewvc?rev=573557&view=rev
Log:
Added #finalizeContext method to the HttpRequestExecutionHandler interface; improved NHttp client examples

Modified:
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/HttpRequestExecutionHandler.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/protocol/TestNIOHttp.java
    jakarta/httpcomponents/httpcore/trunk/module-niossl/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java
    jakarta/httpcomponents/httpcore/trunk/module-niossl/src/test/java/org/apache/http/impl/nio/reactor/TestNIOSSLHttp.java

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java?rev=573557&r1=573556&r2=573557&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java Fri Sep  7 05:07:42 2007
@@ -149,7 +149,8 @@
     
     static class MyHttpRequestExecutionHandler implements HttpRequestExecutionHandler {
 
-        private final static String DONE = "done";
+        private final static String REQUEST_SENT       = "request-sent";
+        private final static String RESPONSE_RECEIVED  = "response-received";
         
         private final RequestCount requestCount;
         
@@ -162,14 +163,25 @@
             HttpHost targetHost = (HttpHost) attachment;
             context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, targetHost);
         }
+        
+        public void finalizeContext(final HttpContext context) {
+            Object flag = context.getAttribute(RESPONSE_RECEIVED);
+            if (flag == null) {
+                // Signal completion of the request execution
+                synchronized (this.requestCount) {
+                    this.requestCount.decrement();
+                    this.requestCount.notifyAll();
+                }
+            }
+        }
 
         public HttpRequest submitRequest(final HttpContext context) {
             HttpHost targetHost = (HttpHost) context.getAttribute(
                     ExecutionContext.HTTP_TARGET_HOST);
-            Object token = context.getAttribute(DONE);
-            if (token == null) {
+            Object flag = context.getAttribute(REQUEST_SENT);
+            if (flag == null) {
                 // Stick some object into the context
-                context.setAttribute(DONE, Boolean.TRUE);
+                context.setAttribute(REQUEST_SENT, Boolean.TRUE);
 
                 System.out.println("--------------");
                 System.out.println("Sending request to " + targetHost);
@@ -196,6 +208,8 @@
                 System.err.println("I/O error: " + ex.getMessage());
             }
 
+            context.setAttribute(RESPONSE_RECEIVED, Boolean.TRUE);
+            
             // Signal completion of the request execution
             synchronized (this.requestCount) {
                 this.requestCount.decrement();

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java?rev=573557&r1=573556&r2=573557&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/BufferingHttpClientHandler.java Fri Sep  7 05:07:42 2007
@@ -105,6 +105,10 @@
     }
 
     public void closed(final NHttpClientConnection conn) {
+        HttpContext context = conn.getContext();
+
+        this.execHandler.finalizeContext(context);
+        
         if (this.eventListener != null) {
             this.eventListener.connectionClosed(conn);
         }

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/HttpRequestExecutionHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/HttpRequestExecutionHandler.java?rev=573557&r1=573556&r2=573557&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/HttpRequestExecutionHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/HttpRequestExecutionHandler.java Fri Sep  7 05:07:42 2007
@@ -87,4 +87,13 @@
     void handleResponse(HttpResponse response, HttpContext context) 
         throws IOException;
     
+    /**
+     * Triggered when the connection is terminated. This event can be used
+     * to release objects stored in the context or perform some other kind 
+     * of cleanup.
+     * 
+     * @param context the actual HTTP context
+     */
+    void finalizeContext(HttpContext context);
+    
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java?rev=573557&r1=573556&r2=573557&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/protocol/ThrottlingHttpClientHandler.java Fri Sep  7 05:07:42 2007
@@ -128,6 +128,10 @@
     }
 
     public void closed(final NHttpClientConnection conn) {
+        HttpContext context = conn.getContext();
+
+        this.execHandler.finalizeContext(context);
+        
         if (this.eventListener != null) {
             this.eventListener.connectionClosed(conn);
         }

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/protocol/TestNIOHttp.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/protocol/TestNIOHttp.java?rev=573557&r1=573556&r2=573557&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/protocol/TestNIOHttp.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/protocol/TestNIOHttp.java Fri Sep  7 05:07:42 2007
@@ -337,6 +337,9 @@
                 context.setAttribute("RES-COUNT", new Integer(0));
             }
 
+            public void finalizeContext(final HttpContext context) {
+            }
+
             public HttpRequest submitRequest(final HttpContext context) {
                 int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
                 BasicHttpRequest get = null;
@@ -477,6 +480,9 @@
                 context.setAttribute("RES-COUNT", new Integer(0));
             }
 
+            public void finalizeContext(final HttpContext context) {
+            }
+
             public HttpRequest submitRequest(final HttpContext context) {
                 int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
                 BasicHttpEntityEnclosingRequest post = null;
@@ -620,6 +626,9 @@
                 context.setAttribute("RES-COUNT", new Integer(0));
             }
 
+            public void finalizeContext(final HttpContext context) {
+            }
+
             public HttpRequest submitRequest(final HttpContext context) {
                 int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
                 BasicHttpEntityEnclosingRequest post = null;
@@ -770,6 +779,9 @@
                 context.setAttribute("RES-COUNT", new Integer(0));
             }
 
+            public void finalizeContext(final HttpContext context) {
+            }
+
             public HttpRequest submitRequest(final HttpContext context) {
                 int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
                 BasicHttpEntityEnclosingRequest post = null;
@@ -916,6 +928,9 @@
                 context.setAttribute("RES-COUNT", new Integer(0));
             }
 
+            public void finalizeContext(final HttpContext context) {
+            }
+
             public HttpRequest submitRequest(final HttpContext context) {
                 int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
                 BasicHttpEntityEnclosingRequest post = null;
@@ -1065,6 +1080,9 @@
                 context.setAttribute("RES-COUNT", new Integer(0));
             }
 
+            public void finalizeContext(final HttpContext context) {
+            }
+
             public HttpRequest submitRequest(final HttpContext context) {
                 int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
                 BasicHttpEntityEnclosingRequest post = null;
@@ -1203,6 +1221,9 @@
                 context.setAttribute("LIST", (List) attachment);
                 context.setAttribute("REQ-COUNT", new Integer(0));
                 context.setAttribute("RES-COUNT", new Integer(0));
+            }
+
+            public void finalizeContext(final HttpContext context) {
             }
 
             public HttpRequest submitRequest(final HttpContext context) {

Modified: jakarta/httpcomponents/httpcore/trunk/module-niossl/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-niossl/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java?rev=573557&r1=573556&r2=573557&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-niossl/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-niossl/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java Fri Sep  7 05:07:42 2007
@@ -131,14 +131,14 @@
                 new HttpHost("www.netscape.com", 443),
                 null);
         reqs[1] = ioReactor.connect(
-                new InetSocketAddress("www.netscape.com", 443), 
+                new InetSocketAddress("www.verisign.com", 443), 
                 null,
-                new HttpHost("www.netscape.com", 443),
+                new HttpHost("www.verisign.com", 443),
                 null);
         reqs[2] = ioReactor.connect(
-                new InetSocketAddress("www.netscape.com", 443), 
+                new InetSocketAddress("www.yahoo.com", 443), 
                 null,
-                new HttpHost("www.netscape.com", 443),
+                new HttpHost("www.yahoo.com", 443),
                 null);
      
         // Block until all connections signal
@@ -158,7 +158,8 @@
     
     static class MyHttpRequestExecutionHandler implements HttpRequestExecutionHandler {
 
-        private final static String DONE = "done";
+        private final static String REQUEST_SENT       = "request-sent";
+        private final static String RESPONSE_RECEIVED  = "response-received";
         
         private final RequestCount requestCount;
         
@@ -172,13 +173,24 @@
             context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, targetHost);
         }
 
+        public void finalizeContext(final HttpContext context) {
+            Object flag = context.getAttribute(RESPONSE_RECEIVED);
+            if (flag == null) {
+                // Signal completion of the request execution
+                synchronized (this.requestCount) {
+                    this.requestCount.decrement();
+                    this.requestCount.notifyAll();
+                }
+            }
+        }
+
         public HttpRequest submitRequest(final HttpContext context) {
             HttpHost targetHost = (HttpHost) context.getAttribute(
                     ExecutionContext.HTTP_TARGET_HOST);
-            Object token = context.getAttribute(DONE);
+            Object token = context.getAttribute(REQUEST_SENT);
             if (token == null) {
                 // Stick some object into the context
-                context.setAttribute(DONE, Boolean.TRUE);
+                context.setAttribute(REQUEST_SENT, Boolean.TRUE);
 
                 System.out.println("--------------");
                 System.out.println("Sending request to " + targetHost);
@@ -205,6 +217,8 @@
                 System.err.println("I/O error: " + ex.getMessage());
             }
 
+            context.setAttribute(RESPONSE_RECEIVED, Boolean.TRUE);
+            
             // Signal completion of the request execution
             synchronized (this.requestCount) {
                 this.requestCount.decrement();

Modified: jakarta/httpcomponents/httpcore/trunk/module-niossl/src/test/java/org/apache/http/impl/nio/reactor/TestNIOSSLHttp.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-niossl/src/test/java/org/apache/http/impl/nio/reactor/TestNIOSSLHttp.java?rev=573557&r1=573556&r2=573557&view=diff
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-niossl/src/test/java/org/apache/http/impl/nio/reactor/TestNIOSSLHttp.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-niossl/src/test/java/org/apache/http/impl/nio/reactor/TestNIOSSLHttp.java Fri Sep  7 05:07:42 2007
@@ -243,6 +243,9 @@
                 context.setAttribute("RES-COUNT", new Integer(0));
             }
 
+            public void finalizeContext(final HttpContext context) {
+            }
+
             public HttpRequest submitRequest(final HttpContext context) {
                 int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
                 BasicHttpRequest get = null;
@@ -384,6 +387,9 @@
                 context.setAttribute("RES-COUNT", new Integer(0));
             }
 
+            public void finalizeContext(final HttpContext context) {
+            }
+
             public HttpRequest submitRequest(final HttpContext context) {
                 int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
                 BasicHttpEntityEnclosingRequest post = null;
@@ -528,6 +534,9 @@
                 context.setAttribute("RES-COUNT", new Integer(0));
             }
 
+            public void finalizeContext(final HttpContext context) {
+            }
+
             public HttpRequest submitRequest(final HttpContext context) {
                 int i = ((Integer) context.getAttribute("REQ-COUNT")).intValue();
                 BasicHttpEntityEnclosingRequest post = null;
@@ -677,6 +686,9 @@
                 context.setAttribute("LIST", (List) attachment);
                 context.setAttribute("REQ-COUNT", new Integer(0));
                 context.setAttribute("RES-COUNT", new Integer(0));
+            }
+
+            public void finalizeContext(final HttpContext context) {
             }
 
             public HttpRequest submitRequest(final HttpContext context) {