Browse Source

+ upgrade to grizzly 2.3.8-beta1
+ optimize json HttpHandler: don't create a MAPPER for each request

oleksiys 11 years ago
parent
commit
357642ff53

+ 1 - 1
grizzly-bm/pom.xml

@@ -68,7 +68,7 @@
         <dependency>
             <groupId>org.glassfish.grizzly</groupId>
             <artifactId>grizzly-http-server</artifactId>
-            <version>2.3.5</version>
+            <version>2.3.8-beta1</version>
         </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>

+ 5 - 7
grizzly-bm/src/main/java/org/glassfish/grizzly/bm/JsonHttpHandler.java

@@ -1,12 +1,10 @@
 package org.glassfish.grizzly.bm;
 
-import com.fasterxml.jackson.core.JsonFactory;
-import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.databind.*;
 import java.io.IOException;
-import java.util.concurrent.ExecutorService;
 import org.glassfish.grizzly.http.server.HttpHandler;
 import org.glassfish.grizzly.http.server.Request;
+import org.glassfish.grizzly.http.server.RequestExecutorProvider;
 import org.glassfish.grizzly.http.server.Response;
 import org.glassfish.grizzly.http.util.Header;
 
@@ -15,6 +13,8 @@ import org.glassfish.grizzly.http.util.Header;
  */
 public class JsonHttpHandler extends HttpHandler {
 
+    private static final ObjectMapper MAPPER = new ObjectMapper();
+    
     // Response message class.
     public static class HelloMessage {
       public final String message = "Hello, World!";
@@ -26,8 +26,6 @@ public class JsonHttpHandler extends HttpHandler {
         response.setContentType("application/json");
         response.setHeader(Header.Server, Server.SERVER_VERSION);
 
-        ObjectMapper MAPPER = new ObjectMapper();
-
         // Write JSON encoded message to the response.
         try
         {
@@ -40,7 +38,7 @@ public class JsonHttpHandler extends HttpHandler {
     }
 
     @Override
-    protected ExecutorService getThreadPool(Request request) {
-        return null;
+    public RequestExecutorProvider getRequestExecutorProvider() {
+        return Server.EXECUTOR_PROVIDER;
     }
 }

+ 3 - 3
grizzly-bm/src/main/java/org/glassfish/grizzly/bm/PlainTextHttpHandler.java

@@ -1,8 +1,8 @@
 package org.glassfish.grizzly.bm;
 
-import java.util.concurrent.ExecutorService;
 import org.glassfish.grizzly.http.server.HttpHandler;
 import org.glassfish.grizzly.http.server.Request;
+import org.glassfish.grizzly.http.server.RequestExecutorProvider;
 import org.glassfish.grizzly.http.server.Response;
 import org.glassfish.grizzly.http.util.Header;
 
@@ -21,7 +21,7 @@ public class PlainTextHttpHandler extends HttpHandler {
     }
 
     @Override
-    protected ExecutorService getThreadPool(Request request) {
-        return null;
+    public RequestExecutorProvider getRequestExecutorProvider() {
+        return Server.EXECUTOR_PROVIDER;
     }
 }

+ 3 - 3
grizzly-bm/src/main/java/org/glassfish/grizzly/bm/RootHttpHandler.java

@@ -1,8 +1,8 @@
 package org.glassfish.grizzly.bm;
 
-import java.util.concurrent.ExecutorService;
 import org.glassfish.grizzly.http.server.HttpHandler;
 import org.glassfish.grizzly.http.server.Request;
+import org.glassfish.grizzly.http.server.RequestExecutorProvider;
 import org.glassfish.grizzly.http.server.Response;
 import org.glassfish.grizzly.http.util.DataChunk;
 
@@ -28,7 +28,7 @@ public class RootHttpHandler extends HttpHandler {
     }
     
     @Override
-    protected ExecutorService getThreadPool(Request request) {
-        return null;
+    public RequestExecutorProvider getRequestExecutorProvider() {
+        return Server.EXECUTOR_PROVIDER;
     }
 }

+ 8 - 2
grizzly-bm/src/main/java/org/glassfish/grizzly/bm/Server.java

@@ -1,9 +1,9 @@
 package org.glassfish.grizzly.bm;
 
-import java.io.IOException;
 import org.glassfish.grizzly.Grizzly;
 import org.glassfish.grizzly.http.server.HttpServer;
 import org.glassfish.grizzly.http.server.NetworkListener;
+import org.glassfish.grizzly.http.server.RequestExecutorProvider;
 import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
 
 /**
@@ -12,6 +12,11 @@ import org.glassfish.grizzly.nio.transport.TCPNIOTransport;
 public class Server {
     public static final String SERVER_VERSION = "Grizzly/" + Grizzly.getDotedVersion();
     
+    // The RequestExecutorProvider, which will run HTTP request processing
+    // in the same thread
+    static final RequestExecutorProvider EXECUTOR_PROVIDER =
+            new RequestExecutorProvider.SameThreadProvider();
+    
     public static void main(String[] args) throws Exception {
         final int port = args.length > 0
                 ? Integer.parseInt(args[0]) : 8080;
@@ -23,6 +28,7 @@ public class Server {
         
         // force to not initialize worker thread pool
         transport.setWorkerThreadPoolConfig(null);
+        transport.setSelectorRunnersCount(Runtime.getRuntime().availableProcessors());
         
         networkListener.getKeepAlive().setIdleTimeoutInSeconds(-1);
         networkListener.getKeepAlive().setMaxRequestsCount(-1);
@@ -44,7 +50,7 @@ public class Server {
 		Server.class.wait();
             }
         } finally {
-            httpServer.stop();
+            httpServer.shutdown();
         }
     }
 }