You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/02/05 19:42:16 UTC

tomee git commit: flag to cache web resources in openejb-http

Repository: tomee
Updated Branches:
  refs/heads/develop 74640eb0b -> da12fb12c


flag to cache web resources in openejb-http


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/da12fb12
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/da12fb12
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/da12fb12

Branch: refs/heads/develop
Commit: da12fb12cc79aceaa3056fc77ebcab8ae4237539
Parents: 74640eb
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Thu Feb 5 19:42:09 2015 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Thu Feb 5 19:42:09 2015 +0100

----------------------------------------------------------------------
 .../server/httpd/HttpListenerRegistry.java      | 70 ++++++++++++--------
 1 file changed, 44 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/da12fb12/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
index 6d9786e..7cbaa0b 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
@@ -16,23 +16,7 @@
  */
 package org.apache.openejb.server.httpd;
 
-import org.apache.openejb.AppContext;
-import org.apache.openejb.assembler.classic.WebAppBuilder;
-import org.apache.openejb.cdi.CdiAppContextsService;
-import org.apache.openejb.cdi.Proxys;
-import org.apache.openejb.core.ParentClassLoaderFinder;
-import org.apache.openejb.core.WebContext;
-import org.apache.openejb.loader.IO;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.util.AppFinder;
-import org.apache.openejb.web.LightweightWebAppBuilder;
-import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.spi.ContextsService;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -45,6 +29,22 @@ import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.StringTokenizer;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionListener;
+import org.apache.openejb.AppContext;
+import org.apache.openejb.assembler.classic.WebAppBuilder;
+import org.apache.openejb.cdi.CdiAppContextsService;
+import org.apache.openejb.cdi.Proxys;
+import org.apache.openejb.core.ParentClassLoaderFinder;
+import org.apache.openejb.core.WebContext;
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.AppFinder;
+import org.apache.openejb.web.LightweightWebAppBuilder;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContextsService;
 
 /**
  * @version $Revision$ $Date$
@@ -58,6 +58,8 @@ public class HttpListenerRegistry implements HttpListener {
     private final File[] resourceBases;
     private final Map<String, String> defaultContextTypes = new HashMap<>();
     private final String welcomeFile = SystemInstance.get().getProperty("openejb.http.welcome", "index.html");
+    private final Map<String, byte[]> cache = new HashMap<>();
+    private final boolean cacheResources = "true".equals(SystemInstance.get().getProperty("openejb.http.resource.cache", "false"));
 
     public HttpListenerRegistry() {
         HttpServletRequest mock = null;
@@ -199,19 +201,19 @@ public class HttpListenerRegistry implements HttpListener {
                 if (servletPath != null) {
                     URL url = SystemInstance.get().getComponent(ServletContext.class).getResource(servletPath);
                     if (url != null) {
-                        serveResource(response, url);
+                        serveResource(servletPath, response, url);
                     } else {
                         final String pathWithoutSlash = "/".equals(path) ? welcomeFile :
                                 (servletPath.startsWith("/") ? servletPath.substring(1) : servletPath);
                         url = defaultClassLoader.getResource("META-INF/resources/" + pathWithoutSlash);
                         if (url != null) {
-                            serveResource(response, url);
+                            serveResource(servletPath, response, url);
                         } else if (resourceBases.length > 0) {
                             for (final File f : resourceBases) {
                                 final File file = new File(f, pathWithoutSlash);
                                 if (file.isFile()) {
                                     url = file.toURI().toURL();
-                                    serveResource(response, url);
+                                    serveResource(servletPath, response, url);
                                     break;
                                 }
                             }
@@ -244,12 +246,28 @@ public class HttpListenerRegistry implements HttpListener {
         }
     }
 
-    private void serveResource(HttpResponse response, URL url) throws IOException {
-        final InputStream from = url.openStream();
-        try {
-            IO.copy(from, response.getOutputStream());
-        } finally {
-            IO.close(from);
+    private void serveResource(final String key, final HttpResponse response, final URL url) throws IOException {
+        if (cacheResources) {
+            byte[] value = cache.get(key);
+            if (value == null) {
+                final InputStream from = url.openStream();
+                try {
+                    ByteArrayOutputStream to = new ByteArrayOutputStream();
+                    IO.copy(from, to);
+                    value = to.toByteArray();
+                    cache.put(key, value);
+                } finally {
+                    IO.close(from);
+                }
+            }
+            response.getOutputStream().write(value);
+        } else {
+            final InputStream from = url.openStream();
+            try {
+                IO.copy(from, response.getOutputStream());
+            } finally {
+                IO.close(from);
+            }
         }
     }