diff options
author | Julien Lancelot <julien.lancelot@sonarsource.com> | 2014-04-28 10:48:58 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@sonarsource.com> | 2014-04-28 10:48:58 +0200 |
commit | b70dfdca6c5c4dfd96869526a4efd1fd7f7eaab4 (patch) | |
tree | 0081930bb2bbecaad4c8806f829b51d298e28e0a | |
parent | 097437f96c9d57375e7537da53a5a95bc096655a (diff) | |
download | sonarqube-b70dfdca6c5c4dfd96869526a4efd1fd7f7eaab4.tar.gz sonarqube-b70dfdca6c5c4dfd96869526a4efd1fd7f7eaab4.zip |
SONAR-4764 Fix issue on MySQL where profiles are empty because hibernate do not see new rules
-rw-r--r-- | sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java | 45 | ||||
-rw-r--r-- | sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java | 8 |
2 files changed, 34 insertions, 19 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java b/sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java index 1b76f943c65..fb749814fa9 100644 --- a/sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java +++ b/sonar-server/src/main/java/org/sonar/server/startup/RegisterQualityProfiles.java @@ -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(); diff --git a/sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java b/sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java index 41665aff4a0..17ce3f6faf2 100644 --- a/sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java +++ b/sonar-server/src/test/java/org/sonar/server/startup/RegisterQualityProfilesTest.java @@ -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; @@ -76,6 +78,9 @@ public class RegisterQualityProfilesTest { SqlSession session; @Mock + DatabaseSessionFactory sessionFactory; + + @Mock PersistentSettings settings; List<ProfileDefinition> definitions; @@ -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 |