Skip to content

Commit

Permalink
SONAR-6366 add ServletContext to Pico container
Browse files Browse the repository at this point in the history
ServletContext will be used in an incoming commit to retrieve the Ruby runtime from Rack
in ServerTester, added a dummy ServletContext implementation that supports attributes
  • Loading branch information
sns-seb committed Apr 17, 2015
1 parent fc072f9 commit e0df5f6
Show file tree
Hide file tree
Showing 6 changed files with 702 additions and 20 deletions.
Expand Up @@ -19,12 +19,13 @@
*/
package org.sonar.server.platform;

import org.sonar.api.utils.log.Loggers;
import org.sonar.api.platform.ComponentContainer;
import org.sonar.api.platform.Server;
import org.sonar.api.utils.log.Loggers;
import org.sonar.core.persistence.DatabaseVersion;

import javax.annotation.CheckForNull;
import javax.servlet.ServletContext;
import java.util.Collection;
import java.util.Properties;

Expand Down Expand Up @@ -66,8 +67,8 @@ public static <T> T component(Class<T> type) {
return null;
}

public void init(Properties properties) {
serverComponents = new ServerComponents(this, properties);
public void init(Properties properties, ServletContext servletContext) {
serverComponents = new ServerComponents(this, properties, servletContext);
if (!dbConnected) {
startLevel1Container();
startLevel2Container();
Expand Down
Expand Up @@ -24,7 +24,6 @@
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import java.util.Enumeration;
import java.util.Properties;

Expand All @@ -34,13 +33,13 @@ public final class PlatformServletContextListener implements ServletContextListe
public void contextInitialized(ServletContextEvent event) {
try {
Properties props = new Properties();
ServletContext context = event.getServletContext();
Enumeration<String> paramKeys = context.getInitParameterNames();
ServletContext servletContext = event.getServletContext();
Enumeration<String> paramKeys = servletContext.getInitParameterNames();
while (paramKeys.hasMoreElements()) {
String key = paramKeys.nextElement();
props.put(key, context.getInitParameter(key));
props.put(key, servletContext.getInitParameter(key));
}
Platform.getInstance().init(props);
Platform.getInstance().init(props, servletContext);
Platform.getInstance().doStart();
} catch (Throwable t) {
// Tomcat 7 "limitations":
Expand All @@ -64,4 +63,5 @@ private void stopQuietly() {
public void contextDestroyed(ServletContextEvent event) {
Platform.getInstance().doStop();
}

}
Expand Up @@ -204,26 +204,32 @@
import org.sonar.server.ws.ListingWs;
import org.sonar.server.ws.WebServiceEngine;

import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Properties;

class ServerComponents {

private final Object[] rootComponents;
private List level4AddedComponents = Lists.newArrayList();
private final Platform platform;
private final Properties properties;
@Nullable
private final Object[] extraRootComponents;
private final List<Object> level4AddedComponents = Lists.newArrayList();

ServerComponents(Platform platform, Properties properties, Object... rootComponents) {
this.rootComponents = Lists.newArrayList(properties, platform, rootComponents)
.toArray(new Object[rootComponents.length + 2]);
ServerComponents(Platform platform, Properties properties, Object... extraRootComponents) {
this.platform = platform;
this.properties = properties;
this.extraRootComponents = extraRootComponents;
}

/**
* All the stuff required to connect to database
*/
Collection level1Components() {
List components = Lists.newArrayList(rootComponents);
Collection<?> level1Components() {
List<Object> components = Lists.newArrayList(platform, properties);
addExtraRootComponents(components);
components.addAll(Arrays.asList(
ServerSettings.class,
ServerImpl.class,
Expand Down Expand Up @@ -297,12 +303,22 @@ Collection level1Components() {
return components;
}

private void addExtraRootComponents(List<Object> components) {
if (this.extraRootComponents != null) {
for (Object extraRootComponent : this.extraRootComponents) {
if (extraRootComponent != null) {
components.add(extraRootComponent);
}
}
}
}

/**
* The stuff required to display the db upgrade form in webapp.
* Needs to be connected to db.
*/
Collection level2Components() {
return Lists.newArrayList(
Collection<Object> level2Components() {
return Lists.<Object>newArrayList(
DefaultServerUpgradeStatus.class,
DatabaseMigrator.class,

Expand All @@ -326,7 +342,7 @@ Collection level2Components() {
* The core components that complete the initialization of database
* when its schema is up-to-date.
*/
Collection level3Components() {
Collection<Object> level3Components() {
return Lists.newArrayList(
PersistentSettings.class,
DefaultDatabaseConnector.class,
Expand Down

0 comments on commit e0df5f6

Please sign in to comment.