diff options
author | Sébastien Lesaint <sebastien.lesaint@sonarsource.com> | 2019-08-08 12:28:41 +0200 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2019-08-14 20:21:12 +0200 |
commit | 4a557e2695c1ff7af001361dba25528f408bb833 (patch) | |
tree | ab30f994fb9f15bf399feb2551f76335a3006a4c /server | |
parent | 980b9f16b8a34364489d2ed3a8472f725eea4770 (diff) | |
download | sonarqube-4a557e2695c1ff7af001361dba25528f408bb833.tar.gz sonarqube-4a557e2695c1ff7af001361dba25528f408bb833.zip |
create sonar-webserver from sonar-server
contains the Web Server "executable", the Pico Container definition (to allow building it up from multiple modules) and Tomcat/JEE specific code
Diffstat (limited to 'server')
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java | 400 | ||||
-rw-r--r-- | server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java | 2 | ||||
-rw-r--r-- | server/sonar-web/public/WEB-INF/web.xml | 6 | ||||
-rw-r--r-- | server/sonar-webserver/build.gradle | 26 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/app/EmbeddedTomcat.java (renamed from server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/app/NullJarScanner.java (renamed from server/sonar-server/src/main/java/org/sonar/server/app/NullJarScanner.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/app/ProgrammaticLogbackValve.java (renamed from server/sonar-server/src/main/java/org/sonar/server/app/ProgrammaticLogbackValve.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatAccessLog.java (renamed from server/sonar-server/src/main/java/org/sonar/server/app/TomcatAccessLog.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatConnectors.java (renamed from server/sonar-server/src/main/java/org/sonar/server/app/TomcatConnectors.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatContexts.java (renamed from server/sonar-server/src/main/java/org/sonar/server/app/TomcatContexts.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatStartupLogs.java (renamed from server/sonar-server/src/main/java/org/sonar/server/app/TomcatStartupLogs.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/app/WebServer.java (renamed from server/sonar-server/src/main/java/org/sonar/server/app/WebServer.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/app/package-info.java (renamed from server/sonar-server/src/main/java/org/sonar/server/app/package-info.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/PlatformImpl.java | 423 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/package-info.java | 23 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java) | 2 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java) | 4 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/package-info.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/package-info.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/CacheControlFilter.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/web/CacheControlFilter.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/MasterServletFilter.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/web/MasterServletFilter.java) | 4 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java) | 14 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/RedirectFilter.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/web/RedirectFilter.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/RegisterServletFilters.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/web/RegisterServletFilters.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/RequestIdFilter.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdFilter.java) | 7 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/SecurityServletFilter.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/web/SecurityServletFilter.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/StaticResourcesServlet.java (renamed from server/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java) | 8 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/UserSessionFilter.java (renamed from server/sonar-server/src/main/java/org/sonar/server/user/UserSessionFilter.java) | 5 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/WebPagesCache.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/web/WebPagesCache.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/WebPagesFilter.java (renamed from server/sonar-server/src/main/java/org/sonar/server/platform/web/WebPagesFilter.java) | 4 | ||||
-rw-r--r-- | server/sonar-webserver/src/main/java/org/sonar/server/platform/web/package-info.java | 23 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/app/EmbeddedTomcatTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/app/EmbeddedTomcatTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/app/NullJarScannerTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/app/NullJarScannerTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/app/ProgrammaticLogbackValveTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/app/ProgrammaticLogbackValveTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/app/StartupLogsTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/app/StartupLogsTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/app/TomcatConnectorsTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/app/TomcatConnectorsTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/app/TomcatContextsTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/app/TomcatContextsTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel1Test.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel1Test.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel2Test.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel2Test.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevelTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevelTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/CacheControlFilterTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/web/CacheControlFilterTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/MasterServletFilterTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/web/MasterServletFilterTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RegisterServletFiltersTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/startup/RegisterServletFiltersTest.java) | 4 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RequestIdFilterTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/web/requestid/RequestIdFilterTest.java) | 5 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RootFilterTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/web/RootFilterTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/SecurityServletFilterTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/web/SecurityServletFilterTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/StaticResourcesServletTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/plugins/StaticResourcesServletTest.java) | 2 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/UserSessionFilterTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/user/UserSessionFilterTest.java) | 2 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/WebPagesCacheTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/web/WebPagesCacheTest.java) | 2 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/java/org/sonar/server/platform/web/WebPagesFilterTest.java (renamed from server/sonar-server/src/test/java/org/sonar/server/platform/web/WebPagesFilterTest.java) | 0 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/resources/logback-test.xml | 26 | ||||
-rw-r--r-- | server/sonar-webserver/src/test/resources/static/foo.txt (renamed from server/sonar-server/src/test/resources/static/foo.txt) | 0 |
58 files changed, 561 insertions, 431 deletions
diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java b/server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java index 121d08f774a..22f3e451a97 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/Platform.java @@ -19,406 +19,16 @@ */ package org.sonar.server.platform; -import com.google.common.collect.Lists; -import java.util.Collection; -import java.util.List; -import java.util.Properties; -import java.util.function.Supplier; -import javax.annotation.Nullable; -import javax.servlet.ServletContext; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; -import org.sonar.api.utils.log.Profiler; import org.sonar.core.platform.ComponentContainer; -import org.sonar.server.app.ProcessCommandWrapper; -import org.sonar.server.platform.db.migration.version.DatabaseVersion; -import org.sonar.server.platform.platformlevel.PlatformLevel; -import org.sonar.server.platform.platformlevel.PlatformLevel1; -import org.sonar.server.platform.platformlevel.PlatformLevel2; -import org.sonar.server.platform.platformlevel.PlatformLevel3; -import org.sonar.server.platform.platformlevel.PlatformLevel4; -import org.sonar.server.platform.platformlevel.PlatformLevelSafeMode; -import org.sonar.server.platform.platformlevel.PlatformLevelStartup; -/** - * @since 2.2 - */ -public class Platform { - - private static final Logger LOGGER = Loggers.get(Platform.class); - - private static final Platform INSTANCE = new Platform(); - - private final Supplier<AutoStarter> autoStarterSupplier; - private AutoStarter autoStarter = null; - private Properties properties; - private ServletContext servletContext; - private PlatformLevel level1; - private PlatformLevel level2; - private PlatformLevel levelSafeMode; - private PlatformLevel level3; - private PlatformLevel level4; - private PlatformLevel currentLevel; - private boolean dbConnected = false; - private boolean started = false; - private final List<Object> level4AddedComponents = Lists.newArrayList(); - private final Profiler profiler = Profiler.createIfTrace(Loggers.get(Platform.class)); - - private Platform() { - this.autoStarterSupplier = () -> { - ProcessCommandWrapper processCommandWrapper = getContainer().getComponentByType(ProcessCommandWrapper.class); - return new AsynchronousAutoStarter(processCommandWrapper); - }; - } - - protected Platform(Supplier<AutoStarter> autoStarterSupplier) { - this.autoStarterSupplier = autoStarterSupplier; - } - - public static Platform getInstance() { - return INSTANCE; - } - - public void init(Properties properties, ServletContext servletContext) { - this.properties = properties; - this.servletContext = servletContext; - if (!dbConnected) { - startLevel1Container(); - startLevel2Container(); - currentLevel = level2; - dbConnected = true; - } - } - - // Platform is injected in Pico, so do not rename this method "start" - public void doStart() { - doStart(Startup.ALL); - } - - protected void doStart(Startup startup) { - if (started && !isInSafeMode()) { - return; - } - - boolean dbRequiredMigration = dbRequiresMigration(); - startSafeModeContainer(); - currentLevel = levelSafeMode; - started = true; - - // if AutoDbMigration kicked in or no DB migration was required, startup can be resumed in another thread - if (dbRequiresMigration()) { - LOGGER.info("Database needs to be migrated. Please refer to https://docs.sonarqube.org/latest/setup/upgrading"); - } else { - this.autoStarter = autoStarterSupplier.get(); - this.autoStarter.execute(new AutoStarterRunnable(autoStarter) { - @Override - public void doRun() { - if (dbRequiredMigration) { - LOGGER.info("Database has been automatically updated"); - } - runIfNotAborted(Platform.this::startLevel34Containers); - - runIfNotAborted(() -> executeStartupTasks(startup)); - // switch current container last to avoid giving access to a partially initialized container - runIfNotAborted(() -> { - currentLevel = level4; - LOGGER.info("WebServer is operational"); - }); - - // stop safemode container if it existed - runIfNotAborted(Platform.this::stopSafeModeContainer); - } - }); - } - } - - private boolean dbRequiresMigration() { - return getDatabaseStatus() != DatabaseVersion.Status.UP_TO_DATE; - } +public interface Platform { + void doStart(); - public boolean isStarted() { - return status() == Status.UP; - } - - public boolean isInSafeMode() { - return status() == Status.SAFEMODE; - } - - public Status status() { - if (!started) { - return Status.BOOTING; - } - PlatformLevel current = this.currentLevel; - PlatformLevel levelSafe = this.levelSafeMode; - if (levelSafe != null && current == levelSafe) { - return isRunning(this.autoStarter) ? Status.STARTING : Status.SAFEMODE; - } - if (current == level4) { - return Status.UP; - } - return Status.BOOTING; - } - - private static boolean isRunning(@Nullable AutoStarter autoStarter) { - return autoStarter != null && autoStarter.isRunning(); - } - - /** - * Starts level 1 - */ - private void startLevel1Container() { - level1 = start(new PlatformLevel1(this, properties, servletContext)); - } - - /** - * Starts level 2 - */ - private void startLevel2Container() { - level2 = start(new PlatformLevel2(level1)); - } + Status status(); - /** - * Starts level 3 and 4 - */ - private void startLevel34Containers() { - level3 = start(new PlatformLevel3(level2)); - level4 = start(new PlatformLevel4(level3, level4AddedComponents)); - } - - public void executeStartupTasks() { - executeStartupTasks(Startup.ALL); - } + ComponentContainer getContainer(); - private void executeStartupTasks(Startup startup) { - if (startup.ordinal() >= Startup.ALL.ordinal()) { - new PlatformLevelStartup(level4) - .configure() - .start() - .stop() - .destroy(); - } - } - - private void startSafeModeContainer() { - levelSafeMode = start(new PlatformLevelSafeMode(level2)); - } - - private PlatformLevel start(PlatformLevel platformLevel) { - profiler.start(); - platformLevel.configure(); - profiler.stopTrace(String.format("%s configured", platformLevel.getName())); - profiler.start(); - platformLevel.start(); - profiler.stopTrace(String.format("%s started", platformLevel.getName())); - - return platformLevel; - } - - /** - * Stops level 1 - */ - private void stopLevel1Container() { - if (level1 != null) { - level1.stop(); - level1 = null; - } - } - - /** - * Stops level 2, 3 and 4 containers cleanly if they exists. - * Call this method before {@link #startLevel1Container()} to avoid duplicate attempt to stop safemode container - * components (since calling stop on a container calls stop on its children too, see - * {@link ComponentContainer#stopComponents()}). - */ - private void stopLevel234Containers() { - if (level2 != null) { - level2.stop(); - level2 = null; - level3 = null; - level4 = null; - } - } - - /** - * Stops safemode container cleanly if it exists. - * Call this method before {@link #stopLevel234Containers()} and {@link #stopLevel1Container()} to avoid duplicate - * attempt to stop safemode container components (since calling stop on a container calls stops on its children too, - * see {@link ComponentContainer#stopComponents()}). - */ - private void stopSafeModeContainer() { - if (levelSafeMode != null) { - levelSafeMode.stop(); - levelSafeMode = null; - } - } - - private DatabaseVersion.Status getDatabaseStatus() { - DatabaseVersion version = getContainer().getComponentByType(DatabaseVersion.class); - return version.getStatus(); - } - - // Do not rename "stop" - public void doStop() { - try { - stopAutoStarter(); - stopSafeModeContainer(); - stopLevel234Containers(); - stopLevel1Container(); - currentLevel = null; - dbConnected = false; - started = false; - } catch (Exception e) { - LOGGER.error("Fail to stop server - ignored", e); - } - } - - private void stopAutoStarter() { - if (autoStarter != null) { - autoStarter.abort(); - autoStarter = null; - } - } - - public void addComponents(Collection<?> components) { - level4AddedComponents.addAll(components); - } - - public ComponentContainer getContainer() { - return currentLevel.getContainer(); - } - - public Object getComponent(Object key) { - return getContainer().getComponentByKey(key); - } - - public enum Status { + enum Status { BOOTING, SAFEMODE, STARTING, UP } - - public enum Startup { - NO_STARTUP_TASKS, ALL - } - - public interface AutoStarter { - /** - * Let the autostarted execute the provided code. - */ - void execute(Runnable startCode); - - /** - * This method is called by executed start code (see {@link #execute(Runnable)} has finished with a failure. - */ - void failure(Throwable t); - - /** - * This method is called by executed start code (see {@link #execute(Runnable)} has finished successfully. - */ - void success(); - - /** - * Indicates whether the AutoStarter is running. - */ - boolean isRunning(); - - /** - * Requests the startcode (ie. the argument of {@link #execute(Runnable)}) aborts its processing (if it supports it). - */ - void abort(); - - /** - * Indicates whether {@link #abort()} was invoked. - * <p> - * This method can be used by the start code to check whether it should proceed running or stop. - * </p> - */ - boolean isAborting(); - - /** - * Called when abortion is complete. - * <p> - * Start code support abortion should call this method once is done processing and if it stopped on abortion. - * </p> - */ - void aborted(); - } - - private abstract static class AutoStarterRunnable implements Runnable { - private final AutoStarter autoStarter; - - AutoStarterRunnable(AutoStarter autoStarter) { - this.autoStarter = autoStarter; - } - - @Override - public void run() { - try { - doRun(); - } catch (Throwable t) { - autoStarter.failure(t); - } finally { - if (autoStarter.isAborting()) { - autoStarter.aborted(); - } else { - autoStarter.success(); - } - } - } - - abstract void doRun(); - - void runIfNotAborted(Runnable r) { - if (!autoStarter.isAborting()) { - r.run(); - } - } - } - - private static final class AsynchronousAutoStarter implements AutoStarter { - private final ProcessCommandWrapper processCommandWrapper; - private boolean running = true; - private boolean abort = false; - - private AsynchronousAutoStarter(ProcessCommandWrapper processCommandWrapper) { - this.processCommandWrapper = processCommandWrapper; - } - - @Override - public void execute(Runnable startCode) { - new Thread(startCode, "SQ starter").start(); - } - - @Override - public void failure(Throwable t) { - LOGGER.error("Background initialization failed. Stopping SonarQube", t); - processCommandWrapper.requestHardStop(); - this.running = false; - } - - @Override - public void success() { - LOGGER.debug("Background initialization of SonarQube done"); - this.running = false; - } - - @Override - public void aborted() { - LOGGER.debug("Background initialization of SonarQube aborted"); - this.running = false; - } - - @Override - public boolean isRunning() { - return running; - } - - @Override - public void abort() { - this.abort = true; - } - - @Override - public boolean isAborting() { - return this.abort; - } - } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java b/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java index 7e23a7627a7..53b4bf49e33 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java @@ -29,7 +29,7 @@ import static java.util.Objects.requireNonNull; public class RequestIdMDCStorage implements AutoCloseable { public static final String HTTP_REQUEST_ID_MDC_KEY = "HTTP_REQUEST_ID"; - RequestIdMDCStorage(String requestId) { + public RequestIdMDCStorage(String requestId) { MDC.put(HTTP_REQUEST_ID_MDC_KEY, requireNonNull(requestId, "Request ID can't be null")); } diff --git a/server/sonar-web/public/WEB-INF/web.xml b/server/sonar-web/public/WEB-INF/web.xml index c06dc4eecc8..dd785a71287 100644 --- a/server/sonar-web/public/WEB-INF/web.xml +++ b/server/sonar-web/public/WEB-INF/web.xml @@ -14,7 +14,7 @@ </filter> <filter> <filter-name>UserSessionFilter</filter-name> - <filter-class>org.sonar.server.user.UserSessionFilter</filter-class> + <filter-class>org.sonar.server.platform.web.UserSessionFilter</filter-class> </filter> <filter> <filter-name>SetCharacterEncodingFilter</filter-name> @@ -38,7 +38,7 @@ </filter> <filter> <filter-name>RequestUidFilter</filter-name> - <filter-class>org.sonar.server.platform.web.requestid.RequestIdFilter</filter-class> + <filter-class>org.sonar.server.platform.web.RequestIdFilter</filter-class> </filter> <filter> <filter-name>WebPagesFilter</filter-name> @@ -89,7 +89,7 @@ <servlet> <servlet-name>static</servlet-name> - <servlet-class>org.sonar.server.plugins.StaticResourcesServlet</servlet-class> + <servlet-class>org.sonar.server.platform.web.StaticResourcesServlet</servlet-class> </servlet> <servlet-mapping> diff --git a/server/sonar-webserver/build.gradle b/server/sonar-webserver/build.gradle new file mode 100644 index 00000000000..ef7a1f1bd16 --- /dev/null +++ b/server/sonar-webserver/build.gradle @@ -0,0 +1,26 @@ +description = 'SonarQube WebServer' + +sonarqube { + properties { + property 'sonar.projectName', "${projectTitle} :: WebServer" + } +} + +dependencies { + // please keep the list grouped by configuration and ordered by name + + compile 'com.google.guava:guava' + compile 'org.apache.tomcat.embed:tomcat-embed-core' + compile project(':sonar-core') + compile project(':server:sonar-process') + compile project(':server:sonar-server') + compile project(':server:sonar-server-common') + + compileOnly 'com.google.code.findbugs:jsr305' + + testCompile 'com.google.code.findbugs:jsr305' + testCompile 'org.eclipse.jetty:jetty-server' + testCompile 'org.eclipse.jetty:jetty-servlet' + testCompile 'org.mockito:mockito-core' + testCompile project(':sonar-testing-harness') +} diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java b/server/sonar-webserver/src/main/java/org/sonar/server/app/EmbeddedTomcat.java index f323f975b49..f323f975b49 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/EmbeddedTomcat.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/app/EmbeddedTomcat.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/NullJarScanner.java b/server/sonar-webserver/src/main/java/org/sonar/server/app/NullJarScanner.java index ed2d54a9936..ed2d54a9936 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/NullJarScanner.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/app/NullJarScanner.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/ProgrammaticLogbackValve.java b/server/sonar-webserver/src/main/java/org/sonar/server/app/ProgrammaticLogbackValve.java index f0d44b2da04..f0d44b2da04 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/ProgrammaticLogbackValve.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/app/ProgrammaticLogbackValve.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatAccessLog.java b/server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatAccessLog.java index 1abf4a9b28d..1abf4a9b28d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatAccessLog.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatAccessLog.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatConnectors.java b/server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatConnectors.java index e63c28cd312..e63c28cd312 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatConnectors.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatConnectors.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatContexts.java b/server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatContexts.java index 81cf3a59b5d..81cf3a59b5d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatContexts.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatContexts.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatStartupLogs.java b/server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatStartupLogs.java index e9eb5307e90..e9eb5307e90 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/TomcatStartupLogs.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/app/TomcatStartupLogs.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/WebServer.java b/server/sonar-webserver/src/main/java/org/sonar/server/app/WebServer.java index cfb5493bdbb..cfb5493bdbb 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/WebServer.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/app/WebServer.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/package-info.java b/server/sonar-webserver/src/main/java/org/sonar/server/app/package-info.java index 358bed4fd65..358bed4fd65 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/package-info.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/app/package-info.java diff --git a/server/sonar-webserver/src/main/java/org/sonar/server/platform/PlatformImpl.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/PlatformImpl.java new file mode 100644 index 00000000000..8c71adfa1c8 --- /dev/null +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/PlatformImpl.java @@ -0,0 +1,423 @@ +/* + * SonarQube + * Copyright (C) 2009-2019 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform; + +import com.google.common.collect.Lists; +import java.util.Collection; +import java.util.List; +import java.util.Properties; +import java.util.function.Supplier; +import javax.annotation.Nullable; +import javax.servlet.ServletContext; +import org.sonar.api.utils.log.Logger; +import org.sonar.api.utils.log.Loggers; +import org.sonar.api.utils.log.Profiler; +import org.sonar.core.platform.ComponentContainer; +import org.sonar.server.app.ProcessCommandWrapper; +import org.sonar.server.platform.db.migration.version.DatabaseVersion; +import org.sonar.server.platform.platformlevel.PlatformLevel; +import org.sonar.server.platform.platformlevel.PlatformLevel1; +import org.sonar.server.platform.platformlevel.PlatformLevel2; +import org.sonar.server.platform.platformlevel.PlatformLevel3; +import org.sonar.server.platform.platformlevel.PlatformLevel4; +import org.sonar.server.platform.platformlevel.PlatformLevelSafeMode; +import org.sonar.server.platform.platformlevel.PlatformLevelStartup; + +/** + * @since 2.2 + */ +public class PlatformImpl implements Platform { + + private static final Logger LOGGER = Loggers.get(Platform.class); + + private static final PlatformImpl INSTANCE = new PlatformImpl(); + + private final Supplier<AutoStarter> autoStarterSupplier; + private AutoStarter autoStarter = null; + private Properties properties; + private ServletContext servletContext; + private PlatformLevel level1; + private PlatformLevel level2; + private PlatformLevel levelSafeMode; + private PlatformLevel level3; + private PlatformLevel level4; + private PlatformLevel currentLevel; + private boolean dbConnected = false; + private boolean started = false; + private final List<Object> level4AddedComponents = Lists.newArrayList(); + private final Profiler profiler = Profiler.createIfTrace(Loggers.get(PlatformImpl.class)); + + private PlatformImpl() { + this.autoStarterSupplier = () -> { + ProcessCommandWrapper processCommandWrapper = getContainer().getComponentByType(ProcessCommandWrapper.class); + return new AsynchronousAutoStarter(processCommandWrapper); + }; + } + + protected PlatformImpl(Supplier<AutoStarter> autoStarterSupplier) { + this.autoStarterSupplier = autoStarterSupplier; + } + + public static PlatformImpl getInstance() { + return INSTANCE; + } + + public void init(Properties properties, ServletContext servletContext) { + this.properties = properties; + this.servletContext = servletContext; + if (!dbConnected) { + startLevel1Container(); + startLevel2Container(); + currentLevel = level2; + dbConnected = true; + } + } + + // Platform is injected in Pico, so do not rename this method "start" + @Override + public void doStart() { + doStart(Startup.ALL); + } + + protected void doStart(Startup startup) { + if (started && !isInSafeMode()) { + return; + } + + boolean dbRequiredMigration = dbRequiresMigration(); + startSafeModeContainer(); + currentLevel = levelSafeMode; + started = true; + + // if AutoDbMigration kicked in or no DB migration was required, startup can be resumed in another thread + if (dbRequiresMigration()) { + LOGGER.info("Database needs to be migrated. Please refer to https://docs.sonarqube.org/latest/setup/upgrading"); + } else { + this.autoStarter = autoStarterSupplier.get(); + this.autoStarter.execute(new AutoStarterRunnable(autoStarter) { + @Override + public void doRun() { + if (dbRequiredMigration) { + LOGGER.info("Database has been automatically updated"); + } + runIfNotAborted(PlatformImpl.this::startLevel34Containers); + + runIfNotAborted(() -> executeStartupTasks(startup)); + // switch current container last to avoid giving access to a partially initialized container + runIfNotAborted(() -> { + currentLevel = level4; + LOGGER.info("WebServer is operational"); + }); + + // stop safemode container if it existed + runIfNotAborted(PlatformImpl.this::stopSafeModeContainer); + } + }); + } + } + + private boolean dbRequiresMigration() { + return getDatabaseStatus() != DatabaseVersion.Status.UP_TO_DATE; + } + + public boolean isStarted() { + return status() == Status.UP; + } + + public boolean isInSafeMode() { + return status() == Status.SAFEMODE; + } + + @Override + public Status status() { + if (!started) { + return Status.BOOTING; + } + PlatformLevel current = this.currentLevel; + PlatformLevel levelSafe = this.levelSafeMode; + if (levelSafe != null && current == levelSafe) { + return isRunning(this.autoStarter) ? Status.STARTING : Status.SAFEMODE; + } + if (current == level4) { + return Status.UP; + } + return Status.BOOTING; + } + + private static boolean isRunning(@Nullable AutoStarter autoStarter) { + return autoStarter != null && autoStarter.isRunning(); + } + + /** + * Starts level 1 + */ + private void startLevel1Container() { + level1 = start(new PlatformLevel1(this, properties, servletContext)); + } + + /** + * Starts level 2 + */ + private void startLevel2Container() { + level2 = start(new PlatformLevel2(level1)); + } + + /** + * Starts level 3 and 4 + */ + private void startLevel34Containers() { + level3 = start(new PlatformLevel3(level2)); + level4 = start(new PlatformLevel4(level3, level4AddedComponents)); + } + + public void executeStartupTasks() { + executeStartupTasks(Startup.ALL); + } + + private void executeStartupTasks(Startup startup) { + if (startup.ordinal() >= Startup.ALL.ordinal()) { + new PlatformLevelStartup(level4) + .configure() + .start() + .stop() + .destroy(); + } + } + + private void startSafeModeContainer() { + levelSafeMode = start(new PlatformLevelSafeMode(level2)); + } + + private PlatformLevel start(PlatformLevel platformLevel) { + profiler.start(); + platformLevel.configure(); + profiler.stopTrace(String.format("%s configured", platformLevel.getName())); + profiler.start(); + platformLevel.start(); + profiler.stopTrace(String.format("%s started", platformLevel.getName())); + + return platformLevel; + } + + /** + * Stops level 1 + */ + private void stopLevel1Container() { + if (level1 != null) { + level1.stop(); + level1 = null; + } + } + + /** + * Stops level 2, 3 and 4 containers cleanly if they exists. + * Call this method before {@link #startLevel1Container()} to avoid duplicate attempt to stop safemode container + * components (since calling stop on a container calls stop on its children too, see + * {@link ComponentContainer#stopComponents()}). + */ + private void stopLevel234Containers() { + if (level2 != null) { + level2.stop(); + level2 = null; + level3 = null; + level4 = null; + } + } + + /** + * Stops safemode container cleanly if it exists. + * Call this method before {@link #stopLevel234Containers()} and {@link #stopLevel1Container()} to avoid duplicate + * attempt to stop safemode container components (since calling stop on a container calls stops on its children too, + * see {@link ComponentContainer#stopComponents()}). + */ + private void stopSafeModeContainer() { + if (levelSafeMode != null) { + levelSafeMode.stop(); + levelSafeMode = null; + } + } + + private DatabaseVersion.Status getDatabaseStatus() { + DatabaseVersion version = getContainer().getComponentByType(DatabaseVersion.class); + return version.getStatus(); + } + + // Do not rename "stop" + public void doStop() { + try { + stopAutoStarter(); + stopSafeModeContainer(); + stopLevel234Containers(); + stopLevel1Container(); + currentLevel = null; + dbConnected = false; + started = false; + } catch (Exception e) { + LOGGER.error("Fail to stop server - ignored", e); + } + } + + private void stopAutoStarter() { + if (autoStarter != null) { + autoStarter.abort(); + autoStarter = null; + } + } + + public void addComponents(Collection<?> components) { + level4AddedComponents.addAll(components); + } + + @Override + public ComponentContainer getContainer() { + return currentLevel.getContainer(); + } + + public Object getComponent(Object key) { + return getContainer().getComponentByKey(key); + } + + public enum Startup { + NO_STARTUP_TASKS, ALL + } + + public interface AutoStarter { + /** + * Let the autostarted execute the provided code. + */ + void execute(Runnable startCode); + + /** + * This method is called by executed start code (see {@link #execute(Runnable)} has finished with a failure. + */ + void failure(Throwable t); + + /** + * This method is called by executed start code (see {@link #execute(Runnable)} has finished successfully. + */ + void success(); + + /** + * Indicates whether the AutoStarter is running. + */ + boolean isRunning(); + + /** + * Requests the startcode (ie. the argument of {@link #execute(Runnable)}) aborts its processing (if it supports it). + */ + void abort(); + + /** + * Indicates whether {@link #abort()} was invoked. + * <p> + * This method can be used by the start code to check whether it should proceed running or stop. + * </p> + */ + boolean isAborting(); + + /** + * Called when abortion is complete. + * <p> + * Start code support abortion should call this method once is done processing and if it stopped on abortion. + * </p> + */ + void aborted(); + } + + private abstract static class AutoStarterRunnable implements Runnable { + private final AutoStarter autoStarter; + + AutoStarterRunnable(AutoStarter autoStarter) { + this.autoStarter = autoStarter; + } + + @Override + public void run() { + try { + doRun(); + } catch (Throwable t) { + autoStarter.failure(t); + } finally { + if (autoStarter.isAborting()) { + autoStarter.aborted(); + } else { + autoStarter.success(); + } + } + } + + abstract void doRun(); + + void runIfNotAborted(Runnable r) { + if (!autoStarter.isAborting()) { + r.run(); + } + } + } + + private static final class AsynchronousAutoStarter implements AutoStarter { + private final ProcessCommandWrapper processCommandWrapper; + private boolean running = true; + private boolean abort = false; + + private AsynchronousAutoStarter(ProcessCommandWrapper processCommandWrapper) { + this.processCommandWrapper = processCommandWrapper; + } + + @Override + public void execute(Runnable startCode) { + new Thread(startCode, "SQ starter").start(); + } + + @Override + public void failure(Throwable t) { + LOGGER.error("Background initialization failed. Stopping SonarQube", t); + processCommandWrapper.requestHardStop(); + this.running = false; + } + + @Override + public void success() { + LOGGER.debug("Background initialization of SonarQube done"); + this.running = false; + } + + @Override + public void aborted() { + LOGGER.debug("Background initialization of SonarQube aborted"); + this.running = false; + } + + @Override + public boolean isRunning() { + return running; + } + + @Override + public void abort() { + this.abort = true; + } + + @Override + public boolean isAborting() { + return this.abort; + } + } +} diff --git a/server/sonar-webserver/src/main/java/org/sonar/server/platform/package-info.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/package-info.java new file mode 100644 index 00000000000..71d187381a7 --- /dev/null +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube + * Copyright (C) 2009-2019 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonar.server.platform; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java index 68faf71cfda..68faf71cfda 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java index 184fd922bc3..184fd922bc3 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel1.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java index 26da9589616..26da9589616 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel2.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java index 2bab0b816c2..2bab0b816c2 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel3.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java index 8e850fa4449..215acb05434 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java @@ -115,7 +115,6 @@ import org.sonar.server.platform.PersistentSettings; import org.sonar.server.platform.SettingsChangeNotifier; import org.sonar.server.platform.WebCoreExtensionsInstaller; import org.sonar.server.platform.monitoring.WebSystemInfoModule; -import org.sonar.server.platform.web.WebPagesFilter; import org.sonar.server.platform.web.requestid.HttpRequestIdModule; import org.sonar.server.platform.ws.ChangeLogLevelActionModule; import org.sonar.server.platform.ws.DbMigrationStatusAction; @@ -255,7 +254,6 @@ public class PlatformLevel4 extends PlatformLevel { ServerWs.class, BackendCleanup.class, IndexDefinitions.class, - WebPagesFilter.class, WebAnalyticsLoaderImpl.class, // batch diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java index eea1137d7b4..446f6afadd4 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelSafeMode.java @@ -19,7 +19,6 @@ */ package org.sonar.server.platform.platformlevel; -import org.sonar.server.platform.ws.SafeModeHealthActionModule; import org.sonar.server.authentication.SafeModeUserSession; import org.sonar.server.organization.NoopDefaultOrganizationCache; import org.sonar.server.platform.ServerImpl; @@ -27,11 +26,11 @@ import org.sonar.server.platform.db.migration.AutoDbMigration; import org.sonar.server.platform.db.migration.DatabaseMigrationImpl; import org.sonar.server.platform.db.migration.MigrationEngineModule; import org.sonar.server.platform.db.migration.NoopDatabaseMigrationImpl; -import org.sonar.server.platform.web.WebPagesFilter; import org.sonar.server.platform.ws.DbMigrationStatusAction; import org.sonar.server.platform.ws.IndexAction; import org.sonar.server.platform.ws.L10nWs; import org.sonar.server.platform.ws.MigrateDbAction; +import org.sonar.server.platform.ws.SafeModeHealthActionModule; import org.sonar.server.platform.ws.StatusAction; import org.sonar.server.platform.ws.SystemWs; import org.sonar.server.ws.WebServiceEngine; @@ -47,7 +46,6 @@ public class PlatformLevelSafeMode extends PlatformLevel { protected void configureLevel() { add( ServerImpl.class, - WebPagesFilter.class, // l10n WS L10nWs.class, diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java index 1fb52415beb..1fb52415beb 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevelStartup.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/package-info.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/package-info.java index a147f3acf02..a147f3acf02 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/package-info.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/platformlevel/package-info.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/CacheControlFilter.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/CacheControlFilter.java index 1b257aa9ded..1b257aa9ded 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/CacheControlFilter.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/CacheControlFilter.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/MasterServletFilter.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/MasterServletFilter.java index a2de9a5e0b6..dd87d91b01e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/MasterServletFilter.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/MasterServletFilter.java @@ -34,7 +34,7 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.sonar.api.utils.log.Loggers; import org.sonar.api.web.ServletFilter; -import org.sonar.server.platform.Platform; +import org.sonar.server.platform.PlatformImpl; /** * Inspired by http://stackoverflow.com/a/7592883/229031 @@ -56,7 +56,7 @@ public class MasterServletFilter implements Filter { public void init(FilterConfig config) { // Filters are already available in picocontainer unless a database migration is required. See // org.sonar.server.startup.RegisterServletFilters. - init(config, Platform.getInstance().getContainer().getComponentsByType(ServletFilter.class)); + init(config, PlatformImpl.getInstance().getContainer().getComponentsByType(ServletFilter.class)); } void init(FilterConfig config, List<ServletFilter> filters) { diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java index cfc68edd915..c3f9c99b235 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/PlatformServletContextListener.java @@ -25,7 +25,7 @@ import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.sonar.api.utils.log.Loggers; -import org.sonar.server.platform.Platform; +import org.sonar.server.platform.PlatformImpl; public final class PlatformServletContextListener implements ServletContextListener { static final String STARTED_ATTRIBUTE = "sonarqube.started"; @@ -40,14 +40,14 @@ public final class PlatformServletContextListener implements ServletContextListe String key = paramKeys.nextElement(); props.put(key, servletContext.getInitParameter(key)); } - Platform.getInstance().init(props, servletContext); - Platform.getInstance().doStart(); + PlatformImpl.getInstance().init(props, servletContext); + PlatformImpl.getInstance().doStart(); event.getServletContext().setAttribute(STARTED_ATTRIBUTE, Boolean.TRUE); } catch (org.sonar.api.utils.MessageException | org.sonar.process.MessageException e) { - Loggers.get(Platform.class).error("Web server startup failed: " + e.getMessage()); + Loggers.get(PlatformImpl.class).error("Web server startup failed: " + e.getMessage()); stopQuietly(); } catch (Throwable t) { - Loggers.get(Platform.class).error("Web server startup failed", t); + Loggers.get(PlatformImpl.class).error("Web server startup failed", t); stopQuietly(); throw new AbortTomcatStartException(); } @@ -55,7 +55,7 @@ public final class PlatformServletContextListener implements ServletContextListe private void stopQuietly() { try { - Platform.getInstance().doStop(); + PlatformImpl.getInstance().doStop(); } catch (Exception e) { // ignored, but an error during startup generally prevents pico to be correctly stopped } @@ -63,7 +63,7 @@ public final class PlatformServletContextListener implements ServletContextListe @Override public void contextDestroyed(ServletContextEvent event) { - Platform.getInstance().doStop(); + PlatformImpl.getInstance().doStop(); } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/RedirectFilter.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/RedirectFilter.java index 64a17466641..64a17466641 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/RedirectFilter.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/RedirectFilter.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/RegisterServletFilters.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/RegisterServletFilters.java index 88b1692362e..88b1692362e 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/RegisterServletFilters.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/RegisterServletFilters.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdFilter.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/RequestIdFilter.java index ea9e5d5acf5..7c49615475c 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdFilter.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/RequestIdFilter.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.platform.web.requestid; +package org.sonar.server.platform.web; import com.google.common.annotations.VisibleForTesting; import java.io.IOException; @@ -28,6 +28,9 @@ import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.sonar.server.platform.Platform; +import org.sonar.server.platform.PlatformImpl; +import org.sonar.server.platform.web.requestid.RequestIdGenerator; +import org.sonar.server.platform.web.requestid.RequestIdMDCStorage; /** * A {@link Filter} that puts and removes the HTTP request ID from the {@link org.slf4j.MDC}. @@ -37,7 +40,7 @@ public class RequestIdFilter implements Filter { private final Platform platform; public RequestIdFilter() { - this(Platform.getInstance()); + this(PlatformImpl.getInstance()); } @VisibleForTesting diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/SecurityServletFilter.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/SecurityServletFilter.java index a8d1dd55cae..a8d1dd55cae 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/SecurityServletFilter.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/SecurityServletFilter.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/StaticResourcesServlet.java index d32cc9e64f9..ffa9f6732d8 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/plugins/StaticResourcesServlet.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/StaticResourcesServlet.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.plugins; +package org.sonar.server.platform.web; import com.google.common.annotations.VisibleForTesting; import java.io.IOException; @@ -34,7 +34,7 @@ import org.sonar.api.utils.log.Logger; import org.sonar.api.utils.log.Loggers; import org.sonar.core.platform.PluginRepository; import org.sonar.core.extension.CoreExtensionRepository; -import org.sonar.server.platform.Platform; +import org.sonar.server.platform.PlatformImpl; import org.sonarqube.ws.MediaTypes; import static java.lang.String.format; @@ -130,11 +130,11 @@ public class StaticResourcesServlet extends HttpServlet { static class System { PluginRepository getPluginRepository() { - return Platform.getInstance().getContainer().getComponentByType(PluginRepository.class); + return PlatformImpl.getInstance().getContainer().getComponentByType(PluginRepository.class); } CoreExtensionRepository getCoreExtensionRepository() { - return Platform.getInstance().getContainer().getComponentByType(CoreExtensionRepository.class); + return PlatformImpl.getInstance().getContainer().getComponentByType(CoreExtensionRepository.class); } @CheckForNull diff --git a/server/sonar-server/src/main/java/org/sonar/server/user/UserSessionFilter.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/UserSessionFilter.java index bac3d96138d..c630ea190ff 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/user/UserSessionFilter.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/UserSessionFilter.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.user; +package org.sonar.server.platform.web; import com.google.common.annotations.VisibleForTesting; import java.io.IOException; @@ -36,6 +36,7 @@ import org.sonar.api.utils.log.Loggers; import org.sonar.server.authentication.UserSessionInitializer; import org.sonar.server.organization.DefaultOrganizationCache; import org.sonar.server.platform.Platform; +import org.sonar.server.platform.PlatformImpl; import org.sonar.server.setting.ThreadLocalSettings; public class UserSessionFilter implements Filter { @@ -43,7 +44,7 @@ public class UserSessionFilter implements Filter { private final Platform platform; public UserSessionFilter() { - this.platform = Platform.getInstance(); + this.platform = PlatformImpl.getInstance(); } @VisibleForTesting diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/WebPagesCache.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/WebPagesCache.java index ba4eedbc85d..ba4eedbc85d 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/WebPagesCache.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/WebPagesCache.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/WebPagesFilter.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/WebPagesFilter.java index d464f62f603..d441f2f712b 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/WebPagesFilter.java +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/WebPagesFilter.java @@ -30,7 +30,7 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.sonar.api.web.ServletFilter; -import org.sonar.server.platform.Platform; +import org.sonar.server.platform.PlatformImpl; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Locale.ENGLISH; @@ -56,7 +56,7 @@ public class WebPagesFilter implements Filter { private WebPagesCache webPagesCache; public WebPagesFilter() { - this(Platform.getInstance().getContainer().getComponentByType(WebPagesCache.class)); + this(PlatformImpl.getInstance().getContainer().getComponentByType(WebPagesCache.class)); } @VisibleForTesting diff --git a/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/package-info.java b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/package-info.java new file mode 100644 index 00000000000..0ca88f82702 --- /dev/null +++ b/server/sonar-webserver/src/main/java/org/sonar/server/platform/web/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube + * Copyright (C) 2009-2019 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonar.server.platform.web; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/EmbeddedTomcatTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/app/EmbeddedTomcatTest.java index 26c2d23a37e..26c2d23a37e 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/app/EmbeddedTomcatTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/app/EmbeddedTomcatTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/NullJarScannerTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/app/NullJarScannerTest.java index de2919ca2ef..de2919ca2ef 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/app/NullJarScannerTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/app/NullJarScannerTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/ProgrammaticLogbackValveTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/app/ProgrammaticLogbackValveTest.java index fe5f4121e11..fe5f4121e11 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/app/ProgrammaticLogbackValveTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/app/ProgrammaticLogbackValveTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/StartupLogsTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/app/StartupLogsTest.java index e0d26e33749..e0d26e33749 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/app/StartupLogsTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/app/StartupLogsTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java index 750c77ce376..750c77ce376 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/app/TomcatAccessLogTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/TomcatConnectorsTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/app/TomcatConnectorsTest.java index 27035ac9480..27035ac9480 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/app/TomcatConnectorsTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/app/TomcatConnectorsTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/TomcatContextsTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/app/TomcatContextsTest.java index b9a0c808d61..b9a0c808d61 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/app/TomcatContextsTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/app/TomcatContextsTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel1Test.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel1Test.java index 7bed9b1f319..7bed9b1f319 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel1Test.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel1Test.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel2Test.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel2Test.java index f196aa6f135..f196aa6f135 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel2Test.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevel2Test.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevelTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevelTest.java index b3d70118df1..b3d70118df1 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevelTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/platformlevel/PlatformLevelTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/web/CacheControlFilterTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/CacheControlFilterTest.java index 5b541f9e859..5b541f9e859 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/web/CacheControlFilterTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/CacheControlFilterTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/web/MasterServletFilterTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/MasterServletFilterTest.java index 3999670c143..3999670c143 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/web/MasterServletFilterTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/MasterServletFilterTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java index 255e97509cc..255e97509cc 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RedirectFilterTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterServletFiltersTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RegisterServletFiltersTest.java index 0543dcdf32b..817241ad87a 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/startup/RegisterServletFiltersTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RegisterServletFiltersTest.java @@ -17,13 +17,11 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.startup; +package org.sonar.server.platform.web; import javax.servlet.ServletException; import org.junit.Test; import org.sonar.api.web.ServletFilter; -import org.sonar.server.platform.web.MasterServletFilter; -import org.sonar.server.platform.web.RegisterServletFilters; import static org.mockito.ArgumentMatchers.anyList; import static org.mockito.Mockito.mock; diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/web/requestid/RequestIdFilterTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RequestIdFilterTest.java index b119cf59424..451b5b88d9b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/web/requestid/RequestIdFilterTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RequestIdFilterTest.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.platform.web.requestid; +package org.sonar.server.platform.web; import java.io.IOException; import javax.servlet.FilterChain; @@ -29,6 +29,7 @@ import org.junit.Test; import org.slf4j.MDC; import org.sonar.core.platform.ComponentContainer; import org.sonar.server.platform.Platform; +import org.sonar.server.platform.web.requestid.RequestIdGenerator; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.fail; @@ -48,7 +49,7 @@ public class RequestIdFilterTest { private RequestIdFilter underTest = new RequestIdFilter(platform); @Before - public void setUp() throws Exception { + public void setUp() { ComponentContainer container = new ComponentContainer(); container.add(requestIdGenerator); when(platform.getContainer()).thenReturn(container); diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/web/RootFilterTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RootFilterTest.java index e700d9983a8..e700d9983a8 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/web/RootFilterTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/RootFilterTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/web/SecurityServletFilterTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/SecurityServletFilterTest.java index e01eb8947ee..e01eb8947ee 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/web/SecurityServletFilterTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/SecurityServletFilterTest.java diff --git a/server/sonar-server/src/test/java/org/sonar/server/plugins/StaticResourcesServletTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/StaticResourcesServletTest.java index 84795711fb9..79c1250c067 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/plugins/StaticResourcesServletTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/StaticResourcesServletTest.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.plugins; +package org.sonar.server.platform.web; import java.io.IOException; import java.io.InputStream; diff --git a/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionFilterTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/UserSessionFilterTest.java index 3465fba2a10..9cb937e245b 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/user/UserSessionFilterTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/UserSessionFilterTest.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.user; +package org.sonar.server.platform.web; import java.io.IOException; import javax.servlet.FilterChain; diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/web/WebPagesCacheTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/WebPagesCacheTest.java index 5551c269c15..6276f48d3a4 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/web/WebPagesCacheTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/WebPagesCacheTest.java @@ -55,7 +55,7 @@ public class WebPagesCacheTest { private WebPagesCache underTest = new WebPagesCache(platform, mapSettings.asConfig(), officialDistribution); @Before - public void setUp() throws Exception { + public void setUp() { when(servletContext.getContextPath()).thenReturn(TEST_CONTEXT); when(servletContext.getResourceAsStream("/index.html")).thenAnswer( (Answer<InputStream>) invocationOnMock -> toInputStream("Content of default index.html with context [%WEB_CONTEXT%], status [%SERVER_STATUS%], instance [%INSTANCE%]", diff --git a/server/sonar-server/src/test/java/org/sonar/server/platform/web/WebPagesFilterTest.java b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/WebPagesFilterTest.java index d2949b6afc8..d2949b6afc8 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/platform/web/WebPagesFilterTest.java +++ b/server/sonar-webserver/src/test/java/org/sonar/server/platform/web/WebPagesFilterTest.java diff --git a/server/sonar-webserver/src/test/resources/logback-test.xml b/server/sonar-webserver/src/test/resources/logback-test.xml new file mode 100644 index 00000000000..3e34b0f9fc8 --- /dev/null +++ b/server/sonar-webserver/src/test/resources/logback-test.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<configuration debug="false"> + <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/> + + <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> + <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> + <pattern> + %d{yyyy.MM.dd HH:mm:ss} %-5level %msg%n + </pattern> + </encoder> + </appender> + + <root> + <level value="INFO"/> + <appender-ref ref="CONSOLE"/> + </root> + + <logger name="ch.qos.logback"> + <level value="WARN"/> + </logger> + + <logger name="okhttp3.mockwebserver"> + <level value="WARN"/> + </logger> + +</configuration> diff --git a/server/sonar-server/src/test/resources/static/foo.txt b/server/sonar-webserver/src/test/resources/static/foo.txt index e69de29bb2d..e69de29bb2d 100644 --- a/server/sonar-server/src/test/resources/static/foo.txt +++ b/server/sonar-webserver/src/test/resources/static/foo.txt |