mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-13 17:05:43 +01:00
added modules, classloading and view packages to sonia.scm.lifecycle
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package sonia.scm.lifecycle;
|
||||
|
||||
public interface LifeCycle {
|
||||
|
||||
void initialize();
|
||||
|
||||
void shutdown();
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
@@ -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) {
|
||||
@@ -1,4 +1,4 @@
|
||||
package sonia.scm.lifecycle;
|
||||
package sonia.scm.lifecycle.classloading;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
|
||||
|
||||
package sonia.scm;
|
||||
package sonia.scm.lifecycle.modules;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package sonia.scm;
|
||||
package sonia.scm.lifecycle.modules;
|
||||
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.TypeLiteral;
|
||||
@@ -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);
|
||||
@@ -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();
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package sonia.scm.lifecycle;
|
||||
package sonia.scm.lifecycle.modules;
|
||||
|
||||
import com.google.inject.Module;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package sonia.scm;
|
||||
package sonia.scm.lifecycle.modules;
|
||||
|
||||
import com.google.inject.TypeLiteral;
|
||||
import com.google.inject.matcher.AbstractMatcher;
|
||||
@@ -1,4 +1,4 @@
|
||||
package sonia.scm;
|
||||
package sonia.scm.lifecycle.modules;
|
||||
|
||||
import com.google.inject.Injector;
|
||||
import org.jboss.resteasy.plugins.guice.ModuleProcessor;
|
||||
@@ -1,4 +1,4 @@
|
||||
package sonia.scm;
|
||||
package sonia.scm.lifecycle.modules;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.inject.servlet.ServletModule;
|
||||
@@ -29,7 +29,7 @@
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm;
|
||||
package sonia.scm.lifecycle.modules;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
@@ -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.
|
||||
@@ -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;
|
||||
@@ -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());
|
||||
@@ -30,7 +30,7 @@
|
||||
*/
|
||||
|
||||
|
||||
package sonia.scm;
|
||||
package sonia.scm.lifecycle.modules;
|
||||
|
||||
//~--- non-JDK imports --------------------------------------------------------
|
||||
|
||||
@@ -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() {
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
@@ -1,4 +1,4 @@
|
||||
package sonia.scm.lifecycle;
|
||||
package sonia.scm.lifecycle.view;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -1,4 +1,4 @@
|
||||
package sonia.scm.lifecycle;
|
||||
package sonia.scm.lifecycle.view;
|
||||
|
||||
class View {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package sonia.scm.lifecycle;
|
||||
package sonia.scm.lifecycle.view;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 ------------------------------------------------------------
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user