added modules, classloading and view packages to sonia.scm.lifecycle

This commit is contained in:
Sebastian Sdorra
2019-06-25 09:49:52 +02:00
parent 6efa6ff29f
commit 80febf9424
47 changed files with 105 additions and 107 deletions

View File

@@ -36,11 +36,19 @@ import com.google.inject.Module;
import com.google.inject.servlet.GuiceServletContextListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.CloseableModule;
import sonia.scm.EagerSingletonModule;
import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle;
import sonia.scm.lifecycle.modules.ApplicationModuleProvider;
import sonia.scm.lifecycle.modules.BootstrapModule;
import sonia.scm.lifecycle.modules.CloseableModule;
import sonia.scm.lifecycle.modules.EagerSingletonModule;
import sonia.scm.SCMContext;
import sonia.scm.ScmEventBusModule;
import sonia.scm.ScmInitializerModule;
import sonia.scm.lifecycle.modules.InjectionLifeCycle;
import sonia.scm.lifecycle.modules.ModuleProvider;
import sonia.scm.lifecycle.modules.ScmEventBusModule;
import sonia.scm.lifecycle.modules.ScmInitializerModule;
import sonia.scm.lifecycle.modules.ServletContextModule;
import sonia.scm.lifecycle.modules.UpdateStepModule;
import sonia.scm.lifecycle.view.SingleView;
import sonia.scm.plugin.PluginLoader;
import sonia.scm.update.MigrationWizardModuleProvider;
import sonia.scm.update.UpdateEngine;
@@ -68,7 +76,7 @@ public class BootstrapContextListener extends GuiceServletContextListener {
LOG.info("start scm-manager initialization");
context = sce.getServletContext();
classLoaderLifeCycle.init();
classLoaderLifeCycle.initialize();
super.contextInitialized(sce);
Injector injector = (Injector) context.getAttribute(Injector.class.getName());

View File

@@ -0,0 +1,9 @@
package sonia.scm.lifecycle;
public interface LifeCycle {
void initialize();
void shutdown();
}

View File

@@ -6,6 +6,7 @@ import com.google.common.io.Files;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.SCMContext;
import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle;
import sonia.scm.migration.UpdateException;
import sonia.scm.plugin.DefaultPluginLoader;
import sonia.scm.plugin.Plugin;

View File

@@ -1,4 +1,4 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.classloading;
/**
* This ClassLoader is mainly a wrapper around the web application class loader and its goal is to make it easier to

View File

@@ -1,4 +1,4 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.classloading;
import com.google.common.annotations.VisibleForTesting;
import org.slf4j.Logger;
@@ -6,6 +6,7 @@ import org.slf4j.LoggerFactory;
import se.jiderhamn.classloader.leak.prevention.ClassLoaderLeakPreventor;
import se.jiderhamn.classloader.leak.prevention.ClassLoaderLeakPreventorFactory;
import se.jiderhamn.classloader.leak.prevention.cleanup.MBeanCleanUp;
import sonia.scm.lifecycle.LifeCycle;
import sonia.scm.plugin.ChildFirstPluginClassLoader;
import sonia.scm.plugin.DefaultPluginClassLoader;
@@ -21,7 +22,7 @@ import static com.google.common.base.Preconditions.checkState;
/**
* Creates and shutdown SCM-Manager ClassLoaders.
*/
public final class ClassLoaderLifeCycle {
public final class ClassLoaderLifeCycle implements LifeCycle {
private static final Logger LOG = LoggerFactory.getLogger(ClassLoaderLifeCycle.class);
@@ -46,7 +47,7 @@ public final class ClassLoaderLifeCycle {
this.webappClassLoader = initAndAppend(webappClassLoader);
}
void init() {
public void initialize() {
bootstrapClassLoader = initAndAppend(new BootstrapClassLoader(webappClassLoader));
}
@@ -72,7 +73,7 @@ public final class ClassLoaderLifeCycle {
return initAndAppend(pluginClassLoader);
}
void shutdown() {
public void shutdown() {
LOG.info("shutdown classloader infrastructure");
ClassLoaderAndPreventor clap = classLoaders.poll();
while (clap != null) {

View File

@@ -1,4 +1,4 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.classloading;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@@ -1,15 +1,11 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.modules;
import com.google.common.base.Throwables;
import com.google.inject.Module;
import org.apache.shiro.guice.web.ShiroWebModule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.ClassOverrides;
import sonia.scm.ResteasyModule;
import sonia.scm.SCMContext;
import sonia.scm.ScmSecurityModule;
import sonia.scm.ScmServletModule;
import sonia.scm.Stage;
import sonia.scm.api.v2.resources.MapperModule;
import sonia.scm.debug.DebugModule;
@@ -21,14 +17,14 @@ import javax.servlet.ServletContext;
import java.util.ArrayList;
import java.util.List;
class ApplicationModuleProvider implements ModuleProvider {
public class ApplicationModuleProvider implements ModuleProvider {
private static final Logger LOG = LoggerFactory.getLogger(ApplicationModuleProvider.class);
private final ServletContext servletContext;
private final PluginLoader pluginLoader;
ApplicationModuleProvider(ServletContext servletContext, PluginLoader pluginLoader) {
public ApplicationModuleProvider(ServletContext servletContext, PluginLoader pluginLoader) {
this.servletContext = servletContext;
this.pluginLoader = pluginLoader;
}

View File

@@ -1,10 +1,9 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.modules;
import com.google.inject.AbstractModule;
import com.google.inject.throwingproviders.ThrowingProviderBinder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.ClassOverrides;
import sonia.scm.SCMContext;
import sonia.scm.SCMContextProvider;
import sonia.scm.io.DefaultFileSystem;
@@ -32,7 +31,7 @@ public class BootstrapModule extends AbstractModule {
private final ClassOverrides overrides;
private final PluginLoader pluginLoader;
BootstrapModule(PluginLoader pluginLoader) {
public BootstrapModule(PluginLoader pluginLoader) {
this.overrides = ClassOverrides.findOverrides(pluginLoader.getUberClassLoader());
this.pluginLoader = pluginLoader;
}

View File

@@ -30,12 +30,13 @@
*/
package sonia.scm;
package sonia.scm.lifecycle.modules;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import sonia.scm.Validateable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;

View File

@@ -31,7 +31,7 @@
package sonia.scm;
package sonia.scm.lifecycle.modules;
//~--- non-JDK imports --------------------------------------------------------

View File

@@ -1,4 +1,4 @@
package sonia.scm;
package sonia.scm.lifecycle.modules;
import com.google.inject.AbstractModule;
import com.google.inject.TypeLiteral;

View File

@@ -29,7 +29,7 @@
*/
package sonia.scm;
package sonia.scm.lifecycle.modules;
//~--- non-JDK imports --------------------------------------------------------
@@ -41,6 +41,7 @@ import com.google.inject.spi.TypeEncounter;
import com.google.inject.spi.TypeListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.EagerSingleton;
import java.util.Set;
@@ -63,7 +64,7 @@ public class EagerSingletonModule extends AbstractModule {
*
* @param injector injector for initialization
*/
public void initialize(Injector injector) {
void initialize(Injector injector) {
for (Class<?> clazz : eagerSingletons) {
LOG.info("initialize eager singleton {}", clazz.getName());
injector.getInstance(clazz);

View File

@@ -1,31 +1,29 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.modules;
import com.google.inject.Binding;
import com.google.inject.Injector;
import com.google.inject.Key;
import sonia.scm.CloseableModule;
import sonia.scm.Default;
import sonia.scm.EagerSingletonModule;
import sonia.scm.ServletContextListenerHolder;
import sonia.scm.lifecycle.LifeCycle;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import java.util.Optional;
class InjectionLifeCycle {
public class InjectionLifeCycle implements LifeCycle {
private final Injector injector;
InjectionLifeCycle(Injector injector) {
public InjectionLifeCycle(Injector injector) {
this.injector = injector;
}
void initialize() {
public void initialize() {
initializeEagerSingletons();
initializeServletContextListeners();
}
void shutdown() {
public void shutdown() {
destroyServletContextListeners();
closeRegisteredCloseables();
}

View File

@@ -1,4 +1,4 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.modules;
import com.google.inject.Module;

View File

@@ -1,4 +1,4 @@
package sonia.scm;
package sonia.scm.lifecycle.modules;
import com.google.inject.TypeLiteral;
import com.google.inject.matcher.AbstractMatcher;

View File

@@ -1,4 +1,4 @@
package sonia.scm;
package sonia.scm.lifecycle.modules;
import com.google.inject.Injector;
import org.jboss.resteasy.plugins.guice.ModuleProcessor;

View File

@@ -1,4 +1,4 @@
package sonia.scm;
package sonia.scm.lifecycle.modules;
import com.google.common.collect.ImmutableMap;
import com.google.inject.servlet.ServletModule;

View File

@@ -29,7 +29,7 @@
*/
package sonia.scm;
package sonia.scm.lifecycle.modules;
//~--- non-JDK imports --------------------------------------------------------

View File

@@ -29,7 +29,7 @@
*/
package sonia.scm;
package sonia.scm.lifecycle.modules;
//~--- non-JDK imports --------------------------------------------------------
@@ -40,6 +40,8 @@ import com.google.inject.spi.TypeEncounter;
import com.google.inject.spi.TypeListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.Initable;
import sonia.scm.SCMContext;
/**
* Initializes all instances which are implementing the {@link Initable} interface.

View File

@@ -31,7 +31,7 @@
package sonia.scm;
package sonia.scm.lifecycle.modules;
//~--- non-JDK imports --------------------------------------------------------
@@ -48,8 +48,6 @@ import org.slf4j.LoggerFactory;
import sonia.scm.plugin.ExtensionProcessor;
import static org.apache.shiro.guice.web.ShiroWebModule.ROLES;
//~--- JDK imports ------------------------------------------------------------
import javax.servlet.ServletContext;

View File

@@ -31,7 +31,7 @@
package sonia.scm;
package sonia.scm.lifecycle.modules;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.inject.Provider;
@@ -41,6 +41,10 @@ import com.google.inject.servlet.ServletModule;
import com.google.inject.throwingproviders.ThrowingProviderBinder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.Default;
import sonia.scm.PushStateDispatcher;
import sonia.scm.PushStateDispatcherProvider;
import sonia.scm.Undecorated;
import sonia.scm.api.rest.ObjectMapperProvider;
import sonia.scm.cache.CacheManager;
import sonia.scm.cache.GuavaCacheManager;
@@ -200,9 +204,10 @@ public class ScmServletModule extends ServletModule
bind(NamespaceStrategy.class).toProvider(NamespaceStrategyProvider.class);
// bind repository provider
ThrowingProviderBinder.create(binder()).bind(
RepositoryProvider.class, Repository.class).to(
DefaultRepositoryProvider.class).in(RequestScoped.class);
ThrowingProviderBinder.create(binder())
.bind(RepositoryProvider.class, Repository.class)
.to(DefaultRepositoryProvider.class)
.in(RequestScoped.class);
// bind event api
bind(ScmEventBus.class).toInstance(ScmEventBus.getInstance());

View File

@@ -30,7 +30,7 @@
*/
package sonia.scm;
package sonia.scm.lifecycle.modules;
//~--- non-JDK imports --------------------------------------------------------

View File

@@ -1,11 +1,11 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.modules;
import com.google.inject.servlet.ServletModule;
import sonia.scm.Default;
import javax.servlet.ServletContext;
class ServletContextModule extends ServletModule {
public class ServletContextModule extends ServletModule {
@Override
protected void configureServlets() {

View File

@@ -1,15 +1,15 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.modules;
import com.google.inject.AbstractModule;
import com.google.inject.multibindings.Multibinder;
import sonia.scm.migration.UpdateStep;
import sonia.scm.plugin.PluginLoader;
class UpdateStepModule extends AbstractModule {
public class UpdateStepModule extends AbstractModule {
private final PluginLoader pluginLoader;
UpdateStepModule(PluginLoader pluginLoader) {
public UpdateStepModule(PluginLoader pluginLoader) {
this.pluginLoader = pluginLoader;
}

View File

@@ -1,4 +1,4 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.view;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
@@ -10,6 +10,8 @@ import sonia.scm.Default;
import sonia.scm.SCMContext;
import sonia.scm.SCMContextProvider;
import sonia.scm.StaticResourceServlet;
import sonia.scm.lifecycle.modules.ModuleProvider;
import sonia.scm.lifecycle.modules.ServletContextModule;
import sonia.scm.template.MustacheTemplateEngine;
import sonia.scm.template.TemplateEngine;
import sonia.scm.template.TemplateEngineFactory;
@@ -18,12 +20,12 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
final class SingleView {
public final class SingleView {
private SingleView() {
}
static SingleViewModuleProvider error(Throwable throwable) {
public static SingleViewModuleProvider error(Throwable throwable) {
String error = Throwables.getStackTraceAsString(throwable);
ViewController controller = new SimpleViewController("/templates/error.mustache", request -> {
@@ -36,7 +38,7 @@ final class SingleView {
return new SingleViewModuleProvider(controller);
}
static SingleViewModuleProvider view(String template, int sc) {
public static SingleViewModuleProvider view(String template, int sc) {
ViewController controller = new SimpleViewController(template, request -> {
Object model = ImmutableMap.of(
"contextPath", request.getContextPath()

View File

@@ -1,4 +1,4 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.view;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

View File

@@ -1,4 +1,4 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.view;
class View {

View File

@@ -1,4 +1,4 @@
package sonia.scm.lifecycle;
package sonia.scm.lifecycle.view;
import javax.servlet.http.HttpServletRequest;

View File

@@ -41,7 +41,7 @@ import com.google.common.collect.Sets;
import com.google.common.hash.Hashing;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.lifecycle.ClassLoaderLifeCycle;
import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle;
import sonia.scm.plugin.ExplodedSmp.PathTransformer;
import javax.xml.bind.JAXBContext;

View File

@@ -41,7 +41,7 @@ import com.google.common.io.Files;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.lifecycle.ClassLoaderLifeCycle;
import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle;
import sonia.scm.util.IOUtil;
//~--- JDK imports ------------------------------------------------------------

View File

@@ -2,7 +2,7 @@ package sonia.scm.update;
import com.google.inject.Injector;
import com.google.inject.Module;
import sonia.scm.lifecycle.ModuleProvider;
import sonia.scm.lifecycle.modules.ModuleProvider;
import sonia.scm.update.repository.XmlRepositoryV1UpdateStep;
import java.util.Collection;