summaryrefslogtreecommitdiffstats
path: root/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java')
-rw-r--r--gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java113
1 files changed, 28 insertions, 85 deletions
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java
index 489357933e..aae5b48f30 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/util/SiteProgram.java
@@ -18,10 +18,13 @@ import static com.google.inject.Scopes.SINGLETON;
import static com.google.inject.Stage.PRODUCTION;
import com.google.gerrit.lifecycle.LifecycleModule;
+import com.google.gerrit.server.config.GerritServerConfig;
import com.google.gerrit.server.config.GerritServerConfigModule;
import com.google.gerrit.server.config.SitePath;
import com.google.gerrit.server.git.LocalDiskRepositoryManager;
+import com.google.gerrit.server.schema.DataSourceModule;
import com.google.gerrit.server.schema.DataSourceProvider;
+import com.google.gerrit.server.schema.DataSourceType;
import com.google.gerrit.server.schema.DatabaseModule;
import com.google.gerrit.server.schema.SchemaModule;
import com.google.gwtorm.server.OrmException;
@@ -34,22 +37,13 @@ import com.google.inject.Module;
import com.google.inject.name.Names;
import com.google.inject.spi.Message;
+import org.eclipse.jgit.lib.Config;
import org.kohsuke.args4j.Option;
import java.io.File;
-import java.io.FileFilter;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
import java.sql.SQLException;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.HashSet;
import java.util.List;
-import java.util.Set;
import javax.sql.DataSource;
@@ -74,95 +68,44 @@ public abstract class SiteProgram extends AbstractProgram {
}
}
- /** Load extra JARs from {@code lib/} subdirectory of {@link #getSitePath()} */
- protected void loadSiteLib() {
- final File libdir = new File(getSitePath(), "lib");
- final File[] list = libdir.listFiles(new FileFilter() {
- @Override
- public boolean accept(File path) {
- if (!path.isFile()) {
- return false;
- }
- return path.getName().endsWith(".jar") //
- || path.getName().endsWith(".zip");
- }
- });
- if (list != null && 0 < list.length) {
- Arrays.sort(list, new Comparator<File>() {
- @Override
- public int compare(File a, File b) {
- return a.getName().compareTo(b.getName());
- }
- });
- addToClassLoader(list);
- }
- }
-
- private void addToClassLoader(final File[] additionalLocations) {
- final ClassLoader cl = getClass().getClassLoader();
- if (!(cl instanceof URLClassLoader)) {
- throw noAddURL("Not loaded by URLClassLoader", null);
- }
-
- final URLClassLoader ucl = (URLClassLoader) cl;
- final Set<URL> have = new HashSet<URL>();
- have.addAll(Arrays.asList(ucl.getURLs()));
-
- final Method m;
- try {
- m = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
- m.setAccessible(true);
- } catch (SecurityException e) {
- throw noAddURL("Method addURL not available", e);
- } catch (NoSuchMethodException e) {
- throw noAddURL("Method addURL not available", e);
- }
-
- for (final File path : additionalLocations) {
- try {
- final URL url = path.toURI().toURL();
- if (have.add(url)) {
- m.invoke(cl, url);
- }
- } catch (MalformedURLException e) {
- throw noAddURL("addURL " + path + " failed", e);
- } catch (IllegalArgumentException e) {
- throw noAddURL("addURL " + path + " failed", e);
- } catch (IllegalAccessException e) {
- throw noAddURL("addURL " + path + " failed", e);
- } catch (InvocationTargetException e) {
- throw noAddURL("addURL " + path + " failed", e.getCause());
- }
- }
- }
-
- private static UnsupportedOperationException noAddURL(String m, Throwable why) {
- final String prefix = "Cannot extend classpath: ";
- return new UnsupportedOperationException(prefix + m, why);
- }
-
/** @return provides database connectivity and site path. */
protected Injector createDbInjector(final DataSourceProvider.Context context) {
- loadSiteLib();
-
final File sitePath = getSitePath();
final List<Module> modules = new ArrayList<Module>();
- modules.add(new AbstractModule() {
+
+ Module sitePathModule = new AbstractModule() {
@Override
protected void configure() {
bind(File.class).annotatedWith(SitePath.class).toInstance(sitePath);
}
- });
+ };
+ modules.add(sitePathModule);
+
modules.add(new LifecycleModule() {
@Override
protected void configure() {
bind(DataSourceProvider.Context.class).toInstance(context);
- bind(Key.get(DataSource.class, Names.named("ReviewDb"))).toProvider(
- DataSourceProvider.class).in(SINGLETON);
- listener().to(DataSourceProvider.class);
+ bind(Key.get(DataSource.class, Names.named("ReviewDb")))
+ .toProvider(SiteLibraryBasedDataSourceProvider.class)
+ .in(SINGLETON);
+ listener().to(SiteLibraryBasedDataSourceProvider.class);
}
});
- modules.add(new GerritServerConfigModule());
+ Module configModule = new GerritServerConfigModule();
+ modules.add(configModule);
+ Injector cfgInjector = Guice.createInjector(sitePathModule, configModule);
+ Config cfg = cfgInjector.getInstance(Key.get(Config.class, GerritServerConfig.class));
+ String dbType = cfg.getString("database", null, "type");
+
+ final DataSourceType dst = Guice.createInjector(new DataSourceModule(), configModule,
+ sitePathModule).getInstance(
+ Key.get(DataSourceType.class, Names.named(dbType.toLowerCase())));
+
+ modules.add(new AbstractModule() {
+ @Override
+ protected void configure() {
+ bind(DataSourceType.class).toInstance(dst);
+ }});
modules.add(new DatabaseModule());
modules.add(new SchemaModule());
modules.add(new LocalDiskRepositoryManager.Module());