aboutsummaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorSébastien Lesaint <sebastien.lesaint@sonarsource.com>2019-08-08 12:28:41 +0200
committerSonarTech <sonartech@sonarsource.com>2019-08-14 20:21:12 +0200
commit4a557e2695c1ff7af001361dba25528f408bb833 (patch)
treeab30f994fb9f15bf399feb2551f76335a3006a4c /server
parent980b9f16b8a34364489d2ed3a8472f725eea4770 (diff)
downloadsonarqube-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.java400
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java2
-rw-r--r--server/sonar-web/public/WEB-INF/web.xml6
-rw-r--r--server/sonar-webserver/build.gradle26
-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.java423
-rw-r--r--server/sonar-webserver/src/main/java/org/sonar/server/platform/package-info.java23
-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.java23
-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.xml26
-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