diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultUberWebResourceLoader.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultUberWebResourceLoader.java index 115a63fc2f..6b886dd5ce 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultUberWebResourceLoader.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultUberWebResourceLoader.java @@ -41,6 +41,8 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.SCMContext; +import sonia.scm.Stage; import javax.servlet.ServletContext; import java.net.MalformedURLException; @@ -69,19 +71,21 @@ public class DefaultUberWebResourceLoader implements UberWebResourceLoader //~--- constructors --------------------------------------------------------- - /** - * Constructs ... - * - * - * @param servletContext - * @param plugins - */ - public DefaultUberWebResourceLoader(ServletContext servletContext, - Iterable plugins) - { + public DefaultUberWebResourceLoader(ServletContext servletContext, Iterable plugins) { + this(servletContext, plugins, SCMContext.getContext().getStage()); + } + + public DefaultUberWebResourceLoader(ServletContext servletContext, Iterable plugins, Stage stage) { this.servletContext = servletContext; this.plugins = plugins; - this.cache = CacheBuilder.newBuilder().build(); + this.cache = createCache(stage); + } + + private final Cache createCache(Stage stage) { + if (stage == Stage.DEVELOPMENT) { + return null; + } + return CacheBuilder.newBuilder().build(); } //~--- get methods ---------------------------------------------------------- @@ -97,7 +101,7 @@ public class DefaultUberWebResourceLoader implements UberWebResourceLoader @Override public URL getResource(String path) { - URL resource = cache.getIfPresent(path); + URL resource = getFromCache(path); if (resource == null) { @@ -105,7 +109,7 @@ public class DefaultUberWebResourceLoader implements UberWebResourceLoader if (resource != null) { - cache.put(path, resource); + addToCache(path, resource); } } else @@ -116,6 +120,19 @@ public class DefaultUberWebResourceLoader implements UberWebResourceLoader return resource; } + private URL getFromCache(String path) { + if (cache != null) { + return cache.getIfPresent(path); + } + return null; + } + + private void addToCache(String path, URL url) { + if (cache != null) { + cache.put(path, url); + } + } + /** * Method description * diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java index 42b038ab17..9e5ebccbfd 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/DefaultUberWebResourceLoaderTest.java @@ -42,6 +42,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import sonia.scm.Stage; import javax.servlet.ServletContext; import java.io.File; @@ -96,14 +97,12 @@ public class DefaultUberWebResourceLoaderTest extends WebResourceLoaderTestBase * Method description * * - * @throws MalformedURLException */ @Test - public void testGetResourceFromCache() throws MalformedURLException - { + public void testGetResourceFromCache() { DefaultUberWebResourceLoader resourceLoader = new DefaultUberWebResourceLoader(servletContext, - new ArrayList()); + new ArrayList(), Stage.PRODUCTION); resourceLoader.getCache().put("/myresource", GITHUB); @@ -112,6 +111,15 @@ public class DefaultUberWebResourceLoaderTest extends WebResourceLoaderTestBase assertSame(GITHUB, resource); } + @Test + public void testGetResourceCacheIsDisableInStageDevelopment() throws MalformedURLException { + DefaultUberWebResourceLoader resourceLoader = new DefaultUberWebResourceLoader(servletContext, new ArrayList<>(), Stage.DEVELOPMENT); + when(servletContext.getResource("/scm")).thenAnswer(invocation -> new URL("https://scm-manager.org")); + URL url = resourceLoader.getResource("/scm"); + URL secondUrl = resourceLoader.getResource("/scm"); + assertNotSame(url, secondUrl); + } + /** * Method description *