]> source.dussan.org Git - sonarqube.git/commitdiff
Replace usage of MyBatis SqlSession by DbSession
authorSimon Brandhof <simon.brandhof@sonarsource.com>
Thu, 23 Feb 2017 22:07:35 +0000 (23:07 +0100)
committerSimon Brandhof <simon.brandhof@sonarsource.com>
Sat, 25 Feb 2017 17:38:06 +0000 (18:38 +0100)
12 files changed:
server/sonar-db-dao/src/main/java/org/sonar/db/MyBatis.java
server/sonar-db-dao/src/main/java/org/sonar/db/component/ResourceDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/loadedtemplate/LoadedTemplateDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/purge/PurgeCommands.java
server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/ProjectQgateAssociationDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateConditionDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/qualitygate/QualityGateDao.java
server/sonar-db-dao/src/main/java/org/sonar/db/user/AuthorDao.java
server/sonar-db-dao/src/test/java/org/sonar/db/BatchSessionTest.java
server/sonar-db-dao/src/test/java/org/sonar/db/MyBatisTest.java
server/sonar-db-dao/src/test/java/org/sonar/db/qualitygate/QualityGateConditionDaoTest.java
server/sonar-server/src/main/java/org/sonar/server/platform/db/migration/AutoDbMigration.java

index 7e7d88bd71a986b595976297765f0d9db229a0c5..d2d6615c169f957ce850ea340114a261029f4598 100644 (file)
@@ -129,8 +129,7 @@ public class MyBatis {
     this.database = database;
   }
 
-  // FIXME should be visible only to DAOs -> to be moved to AbstractDao
-  public static void closeQuietly(@Nullable SqlSession session) {
+  public static void closeQuietly(@Nullable DbSession session) {
     if (session != null) {
       try {
         session.close();
index 70c8492817433a0bf7034f11efa6389ce7403b33..9c481d66682b3774dc899d662e88afb1075bcff9 100644 (file)
@@ -19,9 +19,9 @@
  */
 package org.sonar.db.component;
 
-import org.apache.ibatis.session.SqlSession;
 import org.sonar.api.utils.System2;
 import org.sonar.db.Dao;
+import org.sonar.db.DbSession;
 
 public class ResourceDao implements Dao {
 
@@ -31,7 +31,7 @@ public class ResourceDao implements Dao {
     this.system2 = system2;
   }
 
-  public void updateAuthorizationDate(Long projectId, SqlSession session) {
+  public void updateAuthorizationDate(Long projectId, DbSession session) {
     session.getMapper(ResourceMapper.class).updateAuthorizationDate(projectId, system2.now());
   }
 
index 90c70291d7da8c238977b1efe8d1c225a9b0a5f6..a69638b3a8e8edd00508042e6e859c87e8359930 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.db.loadedtemplate;
 
-import org.apache.ibatis.session.SqlSession;
 import org.sonar.db.Dao;
 import org.sonar.db.DbSession;
 import org.sonar.db.MyBatis;
@@ -38,7 +37,7 @@ public class LoadedTemplateDao implements Dao {
     }
   }
 
-  public int countByTypeAndKey(String type, String key, SqlSession session) {
+  public int countByTypeAndKey(String type, String key, DbSession session) {
     return session.getMapper(LoadedTemplateMapper.class).countByTypeAndKey(type, key);
   }
 
@@ -49,7 +48,7 @@ public class LoadedTemplateDao implements Dao {
     }
   }
 
-  public void insert(LoadedTemplateDto loadedTemplateDto, SqlSession session) {
+  public void insert(LoadedTemplateDto loadedTemplateDto, DbSession session) {
     session.getMapper(LoadedTemplateMapper.class).insert(loadedTemplateDto);
   }
 
index 9ce1e097eadd0c7c30152bcaadd45221f0f9f033..8c25c7fc219c467308a9864e2cf6fba8103bbd85 100644 (file)
@@ -23,7 +23,7 @@ import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 import java.util.List;
 import java.util.stream.Collectors;
-import org.apache.ibatis.session.SqlSession;
+import org.sonar.db.DbSession;
 
 import static com.google.common.collect.FluentIterable.from;
 import static java.util.Arrays.asList;
@@ -33,18 +33,18 @@ class PurgeCommands {
   private static final int MAX_SNAPSHOTS_PER_QUERY = 1000;
   private static final int MAX_RESOURCES_PER_QUERY = 1000;
 
-  private final SqlSession session;
+  private final DbSession session;
   private final PurgeMapper purgeMapper;
   private final PurgeProfiler profiler;
 
-  PurgeCommands(SqlSession session, PurgeMapper purgeMapper, PurgeProfiler profiler) {
+  PurgeCommands(DbSession session, PurgeMapper purgeMapper, PurgeProfiler profiler) {
     this.session = session;
     this.purgeMapper = purgeMapper;
     this.profiler = profiler;
   }
 
   @VisibleForTesting
-  PurgeCommands(SqlSession session, PurgeProfiler profiler) {
+  PurgeCommands(DbSession session, PurgeProfiler profiler) {
     this(session, session.getMapper(PurgeMapper.class), profiler);
   }
 
@@ -175,7 +175,7 @@ class PurgeCommands {
     profiler.start("deleteSnapshotWastedMeasures (project_measures)");
     List<Long> metricIdsWithoutHistoricalData = purgeMapper.selectMetricIdsWithoutHistoricalData();
     analysisUuidsPartitions.stream()
-        .forEach(analysisUuidsPartition -> purgeMapper.deleteAnalysisWastedMeasures(analysisUuidsPartition, metricIdsWithoutHistoricalData));
+      .forEach(analysisUuidsPartition -> purgeMapper.deleteAnalysisWastedMeasures(analysisUuidsPartition, metricIdsWithoutHistoricalData));
     session.commit();
     profiler.stop();
 
index a45e4ebba52dff9a3f05393e00cd40f04356370a..bbbb9f0d3fe6c5103cb784bc22cdcefcdc0e8659 100644 (file)
@@ -21,7 +21,6 @@ package org.sonar.db.qualitygate;
 
 import java.util.List;
 import java.util.Optional;
-import org.apache.ibatis.session.SqlSession;
 import org.sonar.db.Dao;
 import org.sonar.db.DbSession;
 
@@ -41,7 +40,7 @@ public class ProjectQgateAssociationDao implements Dao {
     return id == null ? Optional.empty() : Optional.of(Long.valueOf(id));
   }
 
-  private static ProjectQgateAssociationMapper mapper(SqlSession session) {
+  private static ProjectQgateAssociationMapper mapper(DbSession session) {
     return session.getMapper(ProjectQgateAssociationMapper.class);
   }
 
index 249d726cc92f124d7cc25d700bf1f570d0926293..e8d9d1e38a556ecefa22e10f2ce6190be32467a6 100644 (file)
@@ -21,8 +21,8 @@ package org.sonar.db.qualitygate;
 
 import java.util.Collection;
 import java.util.Date;
-import org.apache.ibatis.session.SqlSession;
 import org.sonar.db.Dao;
+import org.sonar.db.DbSession;
 import org.sonar.db.MyBatis;
 
 /**
@@ -36,48 +36,32 @@ public class QualityGateConditionDao implements Dao {
     this.myBatis = myBatis;
   }
 
-  public void insert(QualityGateConditionDto newQualityGate) {
-    SqlSession session = myBatis.openSession(false);
-    try {
-      insert(newQualityGate, session);
-      session.commit();
-    } finally {
-      MyBatis.closeQuietly(session);
-    }
-  }
-
-  public void insert(QualityGateConditionDto newQualityGate, SqlSession session) {
+  public void insert(QualityGateConditionDto newQualityGate, DbSession session) {
     mapper(session).insert(newQualityGate.setCreatedAt(new Date()));
   }
 
   public Collection<QualityGateConditionDto> selectForQualityGate(long qGateId) {
-    SqlSession session = myBatis.openSession(false);
-    try {
-      return selectForQualityGate(qGateId, session);
-    } finally {
-      MyBatis.closeQuietly(session);
+    try (DbSession dbSession = myBatis.openSession(false)) {
+      return selectForQualityGate(qGateId, dbSession);
     }
   }
 
-  public Collection<QualityGateConditionDto> selectForQualityGate(long qGateId, SqlSession session) {
+  public Collection<QualityGateConditionDto> selectForQualityGate(long qGateId, DbSession session) {
     return mapper(session).selectForQualityGate(qGateId);
   }
 
   public QualityGateConditionDto selectById(long id) {
-    SqlSession session = myBatis.openSession(false);
-    try {
+    try (DbSession session = myBatis.openSession(false)) {
       return selectById(id, session);
-    } finally {
-      MyBatis.closeQuietly(session);
     }
   }
 
-  public QualityGateConditionDto selectById(long id, SqlSession session) {
+  public QualityGateConditionDto selectById(long id, DbSession session) {
     return mapper(session).selectById(id);
   }
 
   public void delete(QualityGateConditionDto qGate) {
-    SqlSession session = myBatis.openSession(false);
+    DbSession session = myBatis.openSession(false);
     try {
       delete(qGate, session);
       session.commit();
@@ -86,39 +70,26 @@ public class QualityGateConditionDao implements Dao {
     }
   }
 
-  public void delete(QualityGateConditionDto qGate, SqlSession session) {
+  public void delete(QualityGateConditionDto qGate, DbSession session) {
     mapper(session).delete(qGate.getId());
   }
 
   public void update(QualityGateConditionDto qGate) {
-    SqlSession session = myBatis.openSession(false);
-    try {
-      update(qGate, session);
-      session.commit();
-    } finally {
-      MyBatis.closeQuietly(session);
+    try (DbSession dbSession = myBatis.openSession(false)) {
+      update(qGate, dbSession);
+      dbSession.commit();
     }
   }
 
-  public void update(QualityGateConditionDto qGate, SqlSession session) {
+  public void update(QualityGateConditionDto qGate, DbSession session) {
     mapper(session).update(qGate.setUpdatedAt(new Date()));
   }
 
-  public void deleteConditionsWithInvalidMetrics() {
-    SqlSession session = myBatis.openSession(false);
-    try {
-      deleteConditionsWithInvalidMetrics(session);
-      session.commit();
-    } finally {
-      MyBatis.closeQuietly(session);
-    }
-  }
-
-  public void deleteConditionsWithInvalidMetrics(SqlSession session) {
+  public void deleteConditionsWithInvalidMetrics(DbSession session) {
     mapper(session).deleteConditionsWithInvalidMetrics();
   }
 
-  private static QualityGateConditionMapper mapper(SqlSession session) {
+  private static QualityGateConditionMapper mapper(DbSession session) {
     return session.getMapper(QualityGateConditionMapper.class);
   }
 }
index a7d0a409b889cef6839bfcad7f1b4d57b3d5b8e8..af43e971c99d836ce1533884347ba54f8c0d5dbf 100644 (file)
@@ -22,12 +22,11 @@ package org.sonar.db.qualitygate;
 import java.util.Collection;
 import java.util.Date;
 import javax.annotation.CheckForNull;
-import org.apache.ibatis.session.SqlSession;
 import org.sonar.db.Dao;
 import org.sonar.db.DbSession;
 import org.sonar.db.MyBatis;
 
-public class QualityGateDao implements Dao{
+public class QualityGateDao implements Dao {
 
   private final MyBatis myBatis;
 
@@ -52,7 +51,7 @@ public class QualityGateDao implements Dao{
   }
 
   public Collection<QualityGateDto> selectAll() {
-    SqlSession session = myBatis.openSession(false);
+    DbSession session = myBatis.openSession(false);
     try {
       return selectAll(session);
     } finally {
@@ -60,13 +59,13 @@ public class QualityGateDao implements Dao{
     }
   }
 
-  public Collection<QualityGateDto> selectAll(SqlSession session) {
+  public Collection<QualityGateDto> selectAll(DbSession session) {
     return mapper(session).selectAll();
   }
 
   @CheckForNull
   public QualityGateDto selectByName(String name) {
-    SqlSession session = myBatis.openSession(false);
+    DbSession session = myBatis.openSession(false);
     try {
       return selectByName(session, name);
     } finally {
@@ -75,13 +74,13 @@ public class QualityGateDao implements Dao{
   }
 
   @CheckForNull
-  public QualityGateDto selectByName(SqlSession session, String name) {
+  public QualityGateDto selectByName(DbSession session, String name) {
     return mapper(session).selectByName(name);
   }
 
   @CheckForNull
   public QualityGateDto selectById(long id) {
-    SqlSession session = myBatis.openSession(false);
+    DbSession session = myBatis.openSession(false);
     try {
       return selectById(session, id);
     } finally {
@@ -90,12 +89,12 @@ public class QualityGateDao implements Dao{
   }
 
   @CheckForNull
-  public QualityGateDto selectById(SqlSession session, long id) {
+  public QualityGateDto selectById(DbSession session, long id) {
     return mapper(session).selectById(id);
   }
 
   public void delete(QualityGateDto qGate) {
-    SqlSession session = myBatis.openSession(false);
+    DbSession session = myBatis.openSession(false);
     try {
       delete(qGate, session);
       session.commit();
@@ -104,12 +103,12 @@ public class QualityGateDao implements Dao{
     }
   }
 
-  public void delete(QualityGateDto qGate, SqlSession session) {
+  public void delete(QualityGateDto qGate, DbSession session) {
     mapper(session).delete(qGate.getId());
   }
 
   public void update(QualityGateDto qGate) {
-    SqlSession session = myBatis.openSession(false);
+    DbSession session = myBatis.openSession(false);
     try {
       update(qGate, session);
       session.commit();
@@ -118,11 +117,11 @@ public class QualityGateDao implements Dao{
     }
   }
 
-  public void update(QualityGateDto qGate, SqlSession session) {
+  public void update(QualityGateDto qGate, DbSession session) {
     mapper(session).update(qGate.setUpdatedAt(new Date()));
   }
 
-  private static QualityGateMapper mapper(SqlSession session) {
+  private static QualityGateMapper mapper(DbSession session) {
     return session.getMapper(QualityGateMapper.class);
   }
 }
index 862bcf4d9ee8cbca8d2154cdcfece915b22e7ba4..3063127d21004a8df85039b6ff8e7d94e6c022c0 100644 (file)
@@ -22,7 +22,6 @@ package org.sonar.db.user;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
-import org.apache.ibatis.session.SqlSession;
 import org.sonar.db.Dao;
 import org.sonar.db.DbSession;
 
@@ -56,7 +55,7 @@ public class AuthorDao implements Dao {
     return executeLargeInputs(developerUuids, getMapper(session)::selectScmAccountsByDeveloperUuids);
   }
 
-  private static AuthorMapper getMapper(SqlSession session) {
+  private static AuthorMapper getMapper(DbSession session) {
     return session.getMapper(AuthorMapper.class);
   }
 }
index 2f0d2e33e503f58effde5806ae78d34b6230c3d9..94d53172528b6be238d0af9227d045aa8217dfa6 100644 (file)
@@ -19,7 +19,6 @@
  */
 package org.sonar.db;
 
-import org.apache.ibatis.session.SqlSession;
 import org.junit.Test;
 
 import static org.mockito.Mockito.anyBoolean;
@@ -31,7 +30,7 @@ import static org.mockito.Mockito.verify;
 public class BatchSessionTest {
   @Test
   public void shouldCommitWhenReachingBatchSize() {
-    SqlSession mybatisSession = mock(SqlSession.class);
+    DbSession mybatisSession = mock(DbSession.class);
     BatchSession session = new BatchSession(mybatisSession, 10);
 
     for (int i = 0; i < 9; i++) {
@@ -47,7 +46,7 @@ public class BatchSessionTest {
 
   @Test
   public void shouldCommitWhenReachingBatchSizeWithoutCommits() {
-    SqlSession mybatisSession = mock(SqlSession.class);
+    DbSession mybatisSession = mock(DbSession.class);
     BatchSession session = new BatchSession(mybatisSession, 10);
 
     for (int i = 0; i < 9; i++) {
@@ -62,7 +61,7 @@ public class BatchSessionTest {
 
   @Test
   public void shouldResetCounterAfterCommit() {
-    SqlSession mybatisSession = mock(SqlSession.class);
+    DbSession mybatisSession = mock(DbSession.class);
     BatchSession session = new BatchSession(mybatisSession, 10);
 
     for (int i = 0; i < 35; i++) {
index 75e9101a5e3ef8be87fef089611cccad74cfe100..cefcb6fdb6fb7df02d9bc5a99d64664e9064153f 100644 (file)
@@ -20,7 +20,6 @@
 package org.sonar.db;
 
 import org.apache.ibatis.session.Configuration;
-import org.apache.ibatis.session.SqlSession;
 import org.hamcrest.core.Is;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -60,12 +59,9 @@ public class MyBatisTest {
     MyBatis myBatis = new MyBatis(database);
     myBatis.start();
 
-    SqlSession session = myBatis.openSession(false);
-    try {
+    try (DbSession session = myBatis.openSession(false)) {
       assertThat(session.getConnection(), notNullValue());
       assertThat(session.getMapper(RuleMapper.class), notNullValue());
-    } finally {
-      session.close();
     }
   }
 }
index e6e7ddaf9bd21cb60e0ca184ecec95b7fdff8c25..3a5b925cd2bc99af09846e599ff55f1a88a7f1d9 100644 (file)
@@ -36,14 +36,17 @@ public class QualityGateConditionDaoTest {
   @Rule
   public DbTester dbTester = DbTester.create(System2.INSTANCE);
 
-  QualityGateConditionDao underTest = dbTester.getDbClient().gateConditionDao();
+  private QualityGateConditionDao underTest = dbTester.getDbClient().gateConditionDao();
 
   @Test
   public void testInsert() throws Exception {
     dbTester.prepareDbUnit(getClass(), "insert.xml");
     QualityGateConditionDto newCondition = new QualityGateConditionDto()
       .setQualityGateId(1L).setMetricId(2L).setOperator("GT").setWarningThreshold("10").setErrorThreshold("20").setPeriod(3);
-    underTest.insert(newCondition);
+
+    underTest.insert(newCondition, dbTester.getSession());
+    dbTester.commit();
+
     dbTester.assertDbUnitTable(getClass(), "insert-result.xml", "quality_gate_conditions", "metric_id", "operator", "error_value", "warning_value", "period");
     assertThat(newCondition.getId()).isNotNull();
   }
@@ -87,7 +90,10 @@ public class QualityGateConditionDaoTest {
   @Test
   public void shouldCleanConditions() {
     dbTester.prepareDbUnit(getClass(), "shouldCleanConditions.xml");
-    underTest.deleteConditionsWithInvalidMetrics();
+
+    underTest.deleteConditionsWithInvalidMetrics(dbTester.getSession());
+    dbTester.commit();
+    
     dbTester.assertDbUnit(getClass(), "shouldCleanConditions-result.xml", new String[]{"created_at", "updated_at"}, "quality_gate_conditions");
   }
 }
index 40f297bfeeafac5155dad2202d048dbc42de57e0..52641cdc6a1e9ea995c0f0da2b567cb20daaad85 100644 (file)
@@ -24,11 +24,11 @@ import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import org.apache.commons.dbutils.DbUtils;
-import org.apache.ibatis.session.SqlSession;
 import org.picocontainer.Startable;
 import org.sonar.api.platform.ServerUpgradeStatus;
 import org.sonar.api.utils.log.Loggers;
 import org.sonar.db.DbClient;
+import org.sonar.db.DbSession;
 import org.sonar.db.DdlUtils;
 import org.sonar.db.dialect.Dialect;
 import org.sonar.db.dialect.H2;
@@ -66,7 +66,7 @@ public class AutoDbMigration implements Startable {
   @VisibleForTesting
   void installH2() {
     Connection connection = null;
-    try (SqlSession session = dbClient.openSession(false)) {
+    try (DbSession session = dbClient.openSession(false)) {
       connection = session.getConnection();
       createH2Schema(connection, dbClient.getDatabase().getDialect().getId());
     } finally {