]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4764 Fix issue on MySQL where profiles are empty because hibernate do not see...
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 28 Apr 2014 08:48:58 +0000 (10:48 +0200)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 28 Apr 2014 08:48:58 +0000 (10:48 +0200)
sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java
sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java

index 1b76f943c6542c11b046c7ed77cafcd3cd9a68b3..fb749814fa9002570942dca9ba5e3e5210bfad6f 100644 (file)
@@ -36,6 +36,7 @@ import org.sonar.api.utils.ValidationMessages;
 import org.sonar.core.persistence.MyBatis;
 import org.sonar.core.template.LoadedTemplateDao;
 import org.sonar.core.template.LoadedTemplateDto;
+import org.sonar.jpa.session.DatabaseSessionFactory;
 import org.sonar.server.platform.PersistentSettings;
 import org.sonar.server.qualityprofile.*;
 import org.sonar.server.rule.RegisterRules;
@@ -57,29 +58,33 @@ public class RegisterQualityProfiles {
   private final ESActiveRule esActiveRule;
   private final PersistentSettings settings;
   private final List<ProfileDefinition> definitions;
+  private final DatabaseSessionFactory sessionFactory;
   private final MyBatis myBatis;
 
-  public RegisterQualityProfiles(MyBatis myBatis,
-                                  PersistentSettings settings,
-                                  ESActiveRule esActiveRule,
-                                  LoadedTemplateDao loadedTemplateDao,
-                                  QProfileBackup qProfileBackup,
-                                  QProfileOperations qProfileOperations,
-                                  QProfileLookup qProfileLookup,
-                                  RegisterRules registerRulesBefore) {
-    this(myBatis, settings, esActiveRule, loadedTemplateDao, qProfileBackup, qProfileOperations, qProfileLookup, registerRulesBefore,
+  public RegisterQualityProfiles(DatabaseSessionFactory sessionFactory,
+                                 MyBatis myBatis,
+                                 PersistentSettings settings,
+                                 ESActiveRule esActiveRule,
+                                 LoadedTemplateDao loadedTemplateDao,
+                                 QProfileBackup qProfileBackup,
+                                 QProfileOperations qProfileOperations,
+                                 QProfileLookup qProfileLookup,
+                                 RegisterRules registerRulesBefore) {
+    this(sessionFactory, myBatis, settings, esActiveRule, loadedTemplateDao, qProfileBackup, qProfileOperations, qProfileLookup, registerRulesBefore,
       Collections.<ProfileDefinition>emptyList());
   }
 
-  public RegisterQualityProfiles(MyBatis myBatis,
-                                  PersistentSettings settings,
-                                  ESActiveRule esActiveRule,
-                                  LoadedTemplateDao loadedTemplateDao,
-                                  QProfileBackup qProfileBackup,
-                                  QProfileOperations qProfileOperations,
-                                  QProfileLookup qProfileLookup,
-                                  RegisterRules registerRulesBefore,
-                                  List<ProfileDefinition> definitions) {
+  public RegisterQualityProfiles(DatabaseSessionFactory sessionFactory,
+                                 MyBatis myBatis,
+                                 PersistentSettings settings,
+                                 ESActiveRule esActiveRule,
+                                 LoadedTemplateDao loadedTemplateDao,
+                                 QProfileBackup qProfileBackup,
+                                 QProfileOperations qProfileOperations,
+                                 QProfileLookup qProfileLookup,
+                                 RegisterRules registerRulesBefore,
+                                 List<ProfileDefinition> definitions) {
+    this.sessionFactory = sessionFactory;
     this.myBatis = myBatis;
     this.settings = settings;
     this.esActiveRule = esActiveRule;
@@ -93,6 +98,10 @@ public class RegisterQualityProfiles {
   public void start() {
     TimeProfiler profiler = new TimeProfiler(LOGGER).start("Register Quality Profiles");
 
+    // Hibernate session can contain an invalid cache of rules.
+    // As long ProfileDefinition API will be used, then we'll have to use this commit as Hibernate is used by plugin to load rules when creating their profiles.
+    sessionFactory.getSession().commit();
+
     SqlSession session = myBatis.openSession();
     try {
       ListMultimap<String, RulesProfile> profilesByLanguage = profilesByLanguage();
index 41665aff4a01c0a38d4760039a4770393c5b3213..17ce3f6faf2cf02c69957464917af99937a5cae6 100644 (file)
@@ -27,6 +27,7 @@ import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
+import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.profiles.ProfileDefinition;
 import org.sonar.api.profiles.RulesProfile;
 import org.sonar.api.utils.SonarException;
@@ -35,6 +36,7 @@ import org.sonar.core.persistence.MyBatis;
 import org.sonar.core.qualityprofile.db.QualityProfileDao;
 import org.sonar.core.template.LoadedTemplateDao;
 import org.sonar.core.template.LoadedTemplateDto;
+import org.sonar.jpa.session.DatabaseSessionFactory;
 import org.sonar.server.platform.PersistentSettings;
 import org.sonar.server.qualityprofile.*;
 import org.sonar.server.user.UserSession;
@@ -75,6 +77,9 @@ public class RegisterQualityProfilesTest {
   @Mock
   SqlSession session;
 
+  @Mock
+  DatabaseSessionFactory sessionFactory;
+
   @Mock
   PersistentSettings settings;
 
@@ -85,9 +90,10 @@ public class RegisterQualityProfilesTest {
   @Before
   public void setUp() throws Exception {
     when(myBatis.openSession()).thenReturn(session);
+    when(sessionFactory.getSession()).thenReturn(mock(DatabaseSession.class));
 
     definitions = newArrayList();
-    registerQualityProfiles = new RegisterQualityProfiles(myBatis, settings, esActiveRule, loadedTemplateDao, qProfileBackup, qProfileOperations, qProfileLookup, null, definitions);
+    registerQualityProfiles = new RegisterQualityProfiles(sessionFactory, myBatis, settings, esActiveRule, loadedTemplateDao, qProfileBackup, qProfileOperations, qProfileLookup, null, definitions);
   }
 
   @Test