]> source.dussan.org Git - sonarqube.git/commitdiff
When using H2, database migration is now automatically done
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 18 Apr 2014 10:28:22 +0000 (12:28 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Fri, 18 Apr 2014 10:28:22 +0000 (12:28 +0200)
sonar-server/src/main/java/org/sonar/server/db/EmbeddedDatabase.java
sonar-server/src/main/java/org/sonar/server/db/migrations/DatabaseMigrator.java
sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
sonar-server/src/main/webapp/WEB-INF/lib/database_version.rb
sonar-server/src/test/java/org/sonar/server/tester/ServerTester.java

index ced29614549bdb854a1d15d2602f581a4e5a7ffe..2ed48e023e920be5cd3230377d23fd67f6fe3be7 100644 (file)
@@ -23,6 +23,7 @@ import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang.StringUtils;
 import org.h2.Driver;
 import org.h2.tools.Server;
+import org.picocontainer.Startable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sonar.api.CoreProperties;
@@ -34,7 +35,7 @@ import java.io.File;
 import java.sql.DriverManager;
 import java.sql.SQLException;
 
-public class EmbeddedDatabase {
+public class EmbeddedDatabase implements Startable  {
   private static final Logger LOG = LoggerFactory.getLogger(EmbeddedDatabase.class);
   private final Settings settings;
   private Server server;
@@ -43,6 +44,7 @@ public class EmbeddedDatabase {
     this.settings = settings;
   }
 
+  @Override
   public void start() {
     File dbHome = getDataDirectory(settings);
     if (!dbHome.exists()) {
@@ -71,6 +73,7 @@ public class EmbeddedDatabase {
     }
   }
 
+  @Override
   public void stop() {
     if (server != null) {
       server.stop();
index 833389ad924a0139c2e7e294ed217d91460d38f1..af25da2e929202ea294244a0a7d2915495614fb5 100644 (file)
@@ -22,6 +22,7 @@ package org.sonar.server.db.migrations;
 import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.dbutils.DbUtils;
 import org.apache.ibatis.session.SqlSession;
+import org.picocontainer.Startable;
 import org.slf4j.LoggerFactory;
 import org.sonar.api.ServerComponent;
 import org.sonar.core.persistence.Database;
@@ -36,7 +37,7 @@ import java.sql.Connection;
  *
  * @since 2.12
  */
-public class DatabaseMigrator implements ServerComponent {
+public class DatabaseMigrator implements ServerComponent, Startable {
 
   private final MyBatis myBatis;
   private final Database database;
@@ -48,10 +49,21 @@ public class DatabaseMigrator implements ServerComponent {
     this.migrations = migrations;
   }
 
+  @Override
+  public void start(){
+    createDatabase();
+  }
+
+  @Override
+  public void stop(){
+    // Nothing to do
+  }
+
   /**
    * @return true if the database has been created, false if this database is not supported
    */
-  public boolean createDatabase() {
+  @VisibleForTesting
+  boolean createDatabase() {
     if (!DdlUtils.supportsDialect(database.getDialect().getId())) {
       return false;
     }
index 222fbe111dba3fa1c613342caf3e823ff6c907ae..b3f764ebc58f0466d2319b64d0bfa7bc2dd96e89 100644 (file)
@@ -35,11 +35,7 @@ import org.sonar.api.test.MutableTestPlan;
 import org.sonar.api.test.MutableTestable;
 import org.sonar.api.test.TestPlan;
 import org.sonar.api.test.Testable;
-import org.sonar.api.web.Footer;
-import org.sonar.api.web.NavigationSection;
-import org.sonar.api.web.Page;
-import org.sonar.api.web.RubyRailsWebservice;
-import org.sonar.api.web.Widget;
+import org.sonar.api.web.*;
 import org.sonar.core.component.SnapshotPerspectives;
 import org.sonar.core.measure.MeasureFilterEngine;
 import org.sonar.core.measure.MeasureFilterResult;
@@ -54,11 +50,7 @@ import org.sonar.server.platform.Platform;
 import org.sonar.server.platform.ServerIdGenerator;
 import org.sonar.server.platform.ServerSettings;
 import org.sonar.server.platform.SettingsChangeNotifier;
-import org.sonar.server.plugins.InstalledPluginReferentialFactory;
-import org.sonar.server.plugins.PluginDownloader;
-import org.sonar.server.plugins.ServerPluginJarsInstaller;
-import org.sonar.server.plugins.ServerPluginRepository;
-import org.sonar.server.plugins.UpdateCenterMatrixFactory;
+import org.sonar.server.plugins.*;
 import org.sonar.server.rule.RuleRepositories;
 import org.sonar.server.source.CodeColorizers;
 import org.sonar.server.user.NewUserNotifier;
@@ -68,6 +60,7 @@ import org.sonar.updatecenter.common.Version;
 
 import javax.annotation.CheckForNull;
 import javax.annotation.Nullable;
+
 import java.net.InetAddress;
 import java.sql.Connection;
 import java.util.Collection;
@@ -243,6 +236,7 @@ public final class JRubyFacade {
     return get(Database.class);
   }
 
+  // Only used by Java migration
   public DatabaseMigrator databaseMigrator() {
     return get(DatabaseMigrator.class);
   }
index eec43b437415e456c7b0b547b99c04ca8c5e09d7..24415ce1c0e373c2d658782560133fb5068f17d2 100644 (file)
@@ -70,7 +70,6 @@ class DatabaseVersion
 
   def self.automatic_setup
     if current_version<=0
-      try_restore_structure_dump()
       upgrade_and_start()
     elsif uptodate?
       load_java_web_services
@@ -84,20 +83,6 @@ class DatabaseVersion
     ActiveRecord::Base.connected?
   end
 
-  def self.try_restore_structure_dump()
-    ::Java::OrgSonarServerUi::JRubyFacade.getInstance().databaseMigrator().createDatabase()
-  end
-
-  def self.execute_sql_requests(requests)
-    requests.each do |request|
-      unless request.blank? || request.start_with?('--')
-        request.chomp!
-        request.chop! if request.end_with?(';')
-        ActiveRecord::Base.connection.execute(request)
-      end
-    end
-  end
-
   def self.dialect
     ::Java::OrgSonarServerUi::JRubyFacade.getInstance().getDatabase().getDialect().getActiveRecordDialectCode()
   end
index 5f2f1f26f1eafa47a5de731e5688ba4ea1b6d6ea..4a92e0a79b3ed4eb8ef4d344928558256e0ac05d 100644 (file)
@@ -22,7 +22,6 @@ package org.sonar.server.tester;
 
 import org.apache.commons.io.FileUtils;
 import org.sonar.api.CoreProperties;
-import org.sonar.server.db.migrations.DatabaseMigrator;
 import org.sonar.server.platform.Platform;
 
 import java.io.File;
@@ -49,7 +48,6 @@ public class ServerTester {
     properties.setProperty("sonar.jdbc.url", "jdbc:h2:" + temp.getAbsolutePath() + "/h2");
 
     platform.init(properties);
-    ((DatabaseMigrator) platform.getComponent(DatabaseMigrator.class)).createDatabase();
     platform.doStart();
   }