Make LifecycleModule inherit from FactoryModule

Cut down on a bunch of one-offs of install(new *Module() {...}) by
choosing a more appropriate base module class. This doesn't solve all
such cases, for example RpcServletModule must still inherit from
ServletModule, but it does clean up some code. (And who knows, fewer
modules may even mean faster startup time.)

Change-Id: Ie1aed05d0a64f7f11b121c9a637bb30d80e9a595
This commit is contained in:
Dave Borowitz 2013-11-11 13:48:24 -08:00
parent 49ef37b99b
commit ec6fca88a5
12 changed files with 33 additions and 100 deletions

View File

@ -34,7 +34,6 @@ import com.google.gerrit.testutil.InMemoryRepositoryManager;
import com.google.gwtorm.server.OrmException; import com.google.gwtorm.server.OrmException;
import com.google.gwtorm.server.OrmRuntimeException; import com.google.gwtorm.server.OrmRuntimeException;
import com.google.gwtorm.server.SchemaFactory; import com.google.gwtorm.server.SchemaFactory;
import com.google.inject.AbstractModule;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Provides; import com.google.inject.Provides;
import com.google.inject.Singleton; import com.google.inject.Singleton;
@ -46,7 +45,7 @@ import org.eclipse.jgit.lib.Config;
import java.io.File; import java.io.File;
class InMemoryTestingDatabaseModule extends AbstractModule { class InMemoryTestingDatabaseModule extends LifecycleModule {
private final Config cfg; private final Config cfg;
InMemoryTestingDatabaseModule(Config cfg) { InMemoryTestingDatabaseModule(Config cfg) {
@ -71,12 +70,7 @@ class InMemoryTestingDatabaseModule extends AbstractModule {
bind(new TypeLiteral<SchemaFactory<ReviewDb>>() {}) bind(new TypeLiteral<SchemaFactory<ReviewDb>>() {})
.to(InMemoryDatabase.class); .to(InMemoryDatabase.class);
install(new LifecycleModule() { listener().to(CreateDatabase.class);
@Override
protected void configure() {
listener().to(CreateDatabase.class);
}
});
bind(SitePaths.class); bind(SitePaths.class);
bind(TrackingFooters.class) bind(TrackingFooters.class)
@ -126,4 +120,4 @@ class InMemoryTestingDatabaseModule extends AbstractModule {
mem.drop(); mem.drop();
} }
} }
} }

View File

@ -27,7 +27,6 @@ import com.google.gerrit.server.cache.MemoryCacheFactory;
import com.google.gerrit.server.cache.PersistentCacheFactory; import com.google.gerrit.server.cache.PersistentCacheFactory;
import com.google.gerrit.server.cache.h2.H2CacheImpl.ValueHolder; import com.google.gerrit.server.cache.h2.H2CacheImpl.ValueHolder;
import com.google.gerrit.server.config.ConfigUtil; import com.google.gerrit.server.config.ConfigUtil;
import com.google.gerrit.server.config.FactoryModule;
import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.GerritServerConfig;
import com.google.inject.Inject; import com.google.inject.Inject;
@ -39,13 +38,7 @@ public class DefaultCacheFactory implements MemoryCacheFactory {
public static class Module extends LifecycleModule { public static class Module extends LifecycleModule {
@Override @Override
protected void configure() { protected void configure() {
install(new FactoryModule() { factory(ForwardingRemovalListener.Factory.class);
@Override
protected void configure() {
factory(ForwardingRemovalListener.Factory.class);
}
});
bind(DefaultCacheFactory.class); bind(DefaultCacheFactory.class);
bind(MemoryCacheFactory.class).to(DefaultCacheFactory.class); bind(MemoryCacheFactory.class).to(DefaultCacheFactory.class);
bind(PersistentCacheFactory.class).to(H2CacheFactory.class); bind(PersistentCacheFactory.class).to(H2CacheFactory.class);

View File

@ -31,7 +31,6 @@ import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.gerrit.server.RemotePeer; import com.google.gerrit.server.RemotePeer;
import com.google.gerrit.server.config.AuthConfig; import com.google.gerrit.server.config.AuthConfig;
import com.google.gerrit.server.config.CanonicalWebUrl; import com.google.gerrit.server.config.CanonicalWebUrl;
import com.google.gerrit.server.config.FactoryModule;
import com.google.gerrit.server.config.GerritRequestModule; import com.google.gerrit.server.config.GerritRequestModule;
import com.google.gerrit.server.contact.ContactStore; import com.google.gerrit.server.contact.ContactStore;
import com.google.gerrit.server.contact.ContactStoreProvider; import com.google.gerrit.server.contact.ContactStoreProvider;
@ -46,7 +45,7 @@ import com.google.inject.servlet.RequestScoped;
import java.net.SocketAddress; import java.net.SocketAddress;
public class WebModule extends FactoryModule { public class WebModule extends LifecycleModule {
private final AuthConfig authConfig; private final AuthConfig authConfig;
private final UrlModule.UrlConfig urlConfig; private final UrlModule.UrlConfig urlConfig;
private final boolean wantSSL; private final boolean wantSSL;
@ -132,11 +131,6 @@ public class WebModule extends FactoryModule {
bind(SocketAddress.class).annotatedWith(RemotePeer.class).toProvider( bind(SocketAddress.class).annotatedWith(RemotePeer.class).toProvider(
HttpRemotePeerProvider.class).in(RequestScoped.class); HttpRemotePeerProvider.class).in(RequestScoped.class);
install(new LifecycleModule() { listener().toInstance(registerInParentInjectors());
@Override
protected void configure() {
listener().toInstance(registerInParentInjectors());
}
});
} }
} }

View File

@ -16,7 +16,6 @@ package com.google.gerrit.lucene;
import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.gerrit.server.config.FactoryModule;
import com.google.gerrit.server.config.SitePaths; import com.google.gerrit.server.config.SitePaths;
import com.google.gerrit.server.index.ChangeSchemas; import com.google.gerrit.server.index.ChangeSchemas;
import com.google.gerrit.server.index.IndexCollection; import com.google.gerrit.server.index.IndexCollection;
@ -45,12 +44,7 @@ public class LuceneIndexModule extends LifecycleModule {
@Override @Override
protected void configure() { protected void configure() {
install(new FactoryModule() { factory(LuceneChangeIndex.Factory.class);
@Override
public void configure() {
factory(LuceneChangeIndex.Factory.class);
}
});
install(new IndexModule(threads)); install(new IndexModule(threads));
if (singleVersion == null && base == null) { if (singleVersion == null && base == null) {
install(new MultiVersionModule()); install(new MultiVersionModule());
@ -62,12 +56,7 @@ public class LuceneIndexModule extends LifecycleModule {
private class MultiVersionModule extends LifecycleModule { private class MultiVersionModule extends LifecycleModule {
@Override @Override
public void configure() { public void configure() {
install(new FactoryModule() { factory(OnlineReindexer.Factory.class);
@Override
public void configure() {
factory(OnlineReindexer.Factory.class);
}
});
listener().to(LuceneVersionManager.class); listener().to(LuceneVersionManager.class);
} }
} }

View File

@ -15,9 +15,8 @@
package com.google.gerrit.pgm.http.jetty; package com.google.gerrit.pgm.http.jetty;
import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.inject.AbstractModule;
public class JettyModule extends AbstractModule { public class JettyModule extends LifecycleModule {
private final JettyEnv env; private final JettyEnv env;
public JettyModule(final JettyEnv env) { public JettyModule(final JettyEnv env) {
@ -28,11 +27,6 @@ public class JettyModule extends AbstractModule {
protected void configure() { protected void configure() {
bind(JettyEnv.class).toInstance(env); bind(JettyEnv.class).toInstance(env);
bind(JettyServer.class); bind(JettyServer.class);
install(new LifecycleModule() { listener().to(JettyServer.Lifecycle.class);
@Override
protected void configure() {
listener().to(JettyServer.Lifecycle.class);
}
});
} }
} }

View File

@ -1,7 +1,7 @@
package com.google.gerrit.lifecycle; package com.google.gerrit.lifecycle;
import com.google.gerrit.extensions.events.LifecycleListener; import com.google.gerrit.extensions.events.LifecycleListener;
import com.google.inject.AbstractModule; import com.google.gerrit.server.config.FactoryModule;
import com.google.inject.Singleton; import com.google.inject.Singleton;
import com.google.inject.binder.LinkedBindingBuilder; import com.google.inject.binder.LinkedBindingBuilder;
import com.google.inject.internal.UniqueAnnotations; import com.google.inject.internal.UniqueAnnotations;
@ -9,7 +9,7 @@ import com.google.inject.internal.UniqueAnnotations;
import java.lang.annotation.Annotation; import java.lang.annotation.Annotation;
/** Module to support registering a unique LifecyleListener. */ /** Module to support registering a unique LifecyleListener. */
public abstract class LifecycleModule extends AbstractModule { public abstract class LifecycleModule extends FactoryModule {
/** /**
* Create a unique listener binding. * Create a unique listener binding.
* <p> * <p>

View File

@ -19,7 +19,6 @@ import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.reviewdb.client.Project;
import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.SitePaths; import com.google.gerrit.server.config.SitePaths;
import com.google.inject.AbstractModule;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.google.inject.Singleton; import com.google.inject.Singleton;
@ -62,17 +61,11 @@ public class LocalDiskRepositoryManager implements GitRepositoryManager {
private static final String UNNAMED = private static final String UNNAMED =
"Unnamed repository; edit this file to name it for gitweb."; "Unnamed repository; edit this file to name it for gitweb.";
public static class Module extends AbstractModule { public static class Module extends LifecycleModule {
@Override @Override
protected void configure() { protected void configure() {
bind(GitRepositoryManager.class).to(LocalDiskRepositoryManager.class); bind(GitRepositoryManager.class).to(LocalDiskRepositoryManager.class);
listener().to(LocalDiskRepositoryManager.Lifecycle.class);
install(new LifecycleModule() {
@Override
protected void configure() {
listener().to(LocalDiskRepositoryManager.Lifecycle.class);
}
});
} }
} }

View File

@ -16,9 +16,8 @@ package com.google.gerrit.server.plugins;
import com.google.gerrit.extensions.systemstatus.ServerInformation; import com.google.gerrit.extensions.systemstatus.ServerInformation;
import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.inject.AbstractModule;
public class PluginModule extends AbstractModule { public class PluginModule extends LifecycleModule {
@Override @Override
protected void configure() { protected void configure() {
bind(ServerInformationImpl.class); bind(ServerInformationImpl.class);
@ -28,11 +27,6 @@ public class PluginModule extends AbstractModule {
bind(PluginGuiceEnvironment.class); bind(PluginGuiceEnvironment.class);
bind(PluginLoader.class); bind(PluginLoader.class);
bind(CopyConfigModule.class); bind(CopyConfigModule.class);
install(new LifecycleModule() { listener().to(PluginLoader.class);
@Override
protected void configure() {
listener().to(PluginLoader.class);
}
});
} }
} }

View File

@ -16,13 +16,13 @@ package com.google.gerrit.sshd;
import com.google.common.base.Objects; import com.google.common.base.Objects;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.inject.AbstractModule; import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.inject.binder.LinkedBindingBuilder; import com.google.inject.binder.LinkedBindingBuilder;
import org.apache.sshd.server.Command; import org.apache.sshd.server.Command;
/** Module to register commands in the SSH daemon. */ /** Module to register commands in the SSH daemon. */
public abstract class CommandModule extends AbstractModule { public abstract class CommandModule extends LifecycleModule {
/** /**
* Configure a command to be invoked by name. * Configure a command to be invoked by name.
* *

View File

@ -21,7 +21,6 @@ import com.google.common.collect.Maps;
import com.google.gerrit.lifecycle.LifecycleModule; import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.gerrit.server.PeerDaemonUser; import com.google.gerrit.server.PeerDaemonUser;
import com.google.gerrit.server.RemotePeer; import com.google.gerrit.server.RemotePeer;
import com.google.gerrit.server.config.FactoryModule;
import com.google.gerrit.server.config.GerritRequestModule; import com.google.gerrit.server.config.GerritRequestModule;
import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.git.AsyncReceiveCommits; import com.google.gerrit.server.git.AsyncReceiveCommits;
@ -47,7 +46,7 @@ import java.net.SocketAddress;
import java.util.Map; import java.util.Map;
/** Configures standard dependencies for {@link SshDaemon}. */ /** Configures standard dependencies for {@link SshDaemon}. */
public class SshModule extends FactoryModule { public class SshModule extends LifecycleModule {
private final Map<String, String> aliases; private final Map<String, String> aliases;
@Inject @Inject
@ -87,25 +86,20 @@ public class SshModule extends FactoryModule {
install(new DefaultCommandModule()); install(new DefaultCommandModule());
install(new LifecycleModule() { bind(ModuleGenerator.class).to(SshAutoRegisterModuleGenerator.class);
@Override bind(SshPluginStarterCallback.class);
protected void configure() { bind(StartPluginListener.class)
bind(ModuleGenerator.class).to(SshAutoRegisterModuleGenerator.class); .annotatedWith(UniqueAnnotations.create())
bind(SshPluginStarterCallback.class); .to(SshPluginStarterCallback.class);
bind(StartPluginListener.class)
.annotatedWith(UniqueAnnotations.create())
.to(SshPluginStarterCallback.class);
bind(ReloadPluginListener.class) bind(ReloadPluginListener.class)
.annotatedWith(UniqueAnnotations.create()) .annotatedWith(UniqueAnnotations.create())
.to(SshPluginStarterCallback.class); .to(SshPluginStarterCallback.class);
listener().toInstance(registerInParentInjectors()); listener().toInstance(registerInParentInjectors());
listener().to(SshLog.class); listener().to(SshLog.class);
listener().to(SshDaemon.class); listener().to(SshDaemon.class);
listener().to(CommandFactoryProvider.class); listener().to(CommandFactoryProvider.class);
}
});
} }
private void configureAliases() { private void configureAliases() {

View File

@ -14,7 +14,6 @@
package com.google.gerrit.sshd.commands; package com.google.gerrit.sshd.commands;
import com.google.gerrit.lifecycle.LifecycleModule;
import com.google.gerrit.sshd.CommandModule; import com.google.gerrit.sshd.CommandModule;
import com.google.gerrit.sshd.CommandName; import com.google.gerrit.sshd.CommandName;
import com.google.gerrit.sshd.Commands; import com.google.gerrit.sshd.Commands;
@ -77,11 +76,6 @@ public class DefaultCommandModule extends CommandModule {
command("suexec").to(SuExec.class); command("suexec").to(SuExec.class);
install(new LifecycleModule() { listener().to(ShowCaches.StartupListener.class);
@Override
protected void configure() {
listener().to(ShowCaches.StartupListener.class);
}
});
} }
} }

View File

@ -196,16 +196,10 @@ public class WebAppInitializer extends GuiceServletContextListener
final DataSourceType dst = Guice.createInjector(new DataSourceModule(), final DataSourceType dst = Guice.createInjector(new DataSourceModule(),
configModule, sitePathModule).getInstance( configModule, sitePathModule).getInstance(
Key.get(DataSourceType.class, Names.named(dbType.toLowerCase()))); Key.get(DataSourceType.class, Names.named(dbType.toLowerCase())));
modules.add(new AbstractModule() {
@Override
protected void configure() {
bind(DataSourceType.class).toInstance(dst);
}
});
modules.add(new LifecycleModule() { modules.add(new LifecycleModule() {
@Override @Override
protected void configure() { protected void configure() {
bind(DataSourceType.class).toInstance(dst);
bind(DataSourceProvider.Context.class).toInstance( bind(DataSourceProvider.Context.class).toInstance(
DataSourceProvider.Context.MULTI_USER); DataSourceProvider.Context.MULTI_USER);
bind(Key.get(DataSource.class, Names.named("ReviewDb"))).toProvider( bind(Key.get(DataSource.class, Names.named("ReviewDb"))).toProvider(