From: David Gageot Date: Wed, 11 Jul 2012 11:48:59 +0000 (+0200) Subject: SONAR-2965 enforce validation query on DataSource X-Git-Tag: 3.2~136 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=cd2d985404cbe202d55f4024c3aa64bf1f186839;p=sonarqube.git SONAR-2965 enforce validation query on DataSource --- diff --git a/sonar-application/src/main/assembly/conf/sonar.properties b/sonar-application/src/main/assembly/conf/sonar.properties index e48cda0d6d5..acdaba0433c 100644 --- a/sonar-application/src/main/assembly/conf/sonar.properties +++ b/sonar-application/src/main/assembly/conf/sonar.properties @@ -45,7 +45,6 @@ sonar.jdbc.password: sonar # Comment the following line to deactivate the default embedded database. sonar.jdbc.url: jdbc:h2:tcp://localhost:9092/sonar #sonar.jdbc.driverClassName: org.h2.Driver -#sonar.jdbc.validationQuery: values(1) # directory containing H2 database files. By default it's the /data directory in the sonar installation. #sonar.embeddedDatabase.dataDir: @@ -59,7 +58,6 @@ sonar.jdbc.url: jdbc:h2:tcp://localhost:9092/sonar # Optional properties #sonar.jdbc.driverClassName: com.mysql.jdbc.Driver -#sonar.jdbc.validationQuery: select 1 #----- Oracle 10g/11g @@ -73,7 +71,6 @@ sonar.jdbc.url: jdbc:h2:tcp://localhost:9092/sonar # Optional properties #sonar.jdbc.driverClassName: oracle.jdbc.OracleDriver -#sonar.jdbc.validationQuery: select 1 from dual # Uncomment the following property if the Oracle account has permissions to access multiple schemas, # for example sonar schemas with different versions. In that case, use the same property during project analysis @@ -87,7 +84,6 @@ sonar.jdbc.url: jdbc:h2:tcp://localhost:9092/sonar # Optional properties #sonar.jdbc.driverClassName: org.postgresql.Driver -#sonar.jdbc.validationQuery: select 1 # Uncomment the following property if the PostgreSQL account has permissions to access multiple schemas, # for example sonar schemas with different versions. In that case, use the same property during project analysis @@ -101,7 +97,6 @@ sonar.jdbc.url: jdbc:h2:tcp://localhost:9092/sonar # Optional properties #sonar.jdbc.driverClassName: net.sourceforge.jtds.jdbc.Driver -#sonar.jdbc.validationQuery: select 1 #----- Connection pool settings diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/DefaultDatabase.java b/sonar-core/src/main/java/org/sonar/core/persistence/DefaultDatabase.java index cf3b54f99f0..8e4b7f4625a 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/DefaultDatabase.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/DefaultDatabase.java @@ -124,6 +124,8 @@ public class DefaultDatabase implements Database { if (StringUtils.isNotBlank(initStatement)) { datasource.setConnectionInitSqls(Arrays.asList(initStatement)); } + + datasource.setValidationQuery(dialect.getValidationQuery()); } public final DefaultDatabase stop() { diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/Dialect.java b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/Dialect.java index 03f368620d6..35a26c4b42b 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/Dialect.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/Dialect.java @@ -68,4 +68,11 @@ public interface Dialect { * @since 2.14 */ String getFalseSqlValue(); + + /** + * Query used to validate the jdbc connection. + * + * @since 3.2 + */ + String getValidationQuery(); } diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/H2.java b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/H2.java index 00879be648b..fd761f82d24 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/H2.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/H2.java @@ -64,4 +64,8 @@ public class H2 implements Dialect { public String getFalseSqlValue() { return "false"; } + + public String getValidationQuery() { + return "SELECT 1"; + } } diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/MsSql.java b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/MsSql.java index 14589780d83..0b0e944f489 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/MsSql.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/MsSql.java @@ -85,5 +85,9 @@ public class MsSql implements Dialect { public String getFalseSqlValue() { return "0"; } + + public String getValidationQuery() { + return "SELECT 1"; + } } diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/MySql.java b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/MySql.java index 0f718bdb710..94f8dc8cf1a 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/MySql.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/MySql.java @@ -77,4 +77,8 @@ public class MySql implements Dialect { public String getFalseSqlValue() { return "false"; } + + public String getValidationQuery() { + return "SELECT 1"; + } } diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/Oracle.java b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/Oracle.java index 6adbb43e521..a9f235a23e8 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/Oracle.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/Oracle.java @@ -84,4 +84,8 @@ public class Oracle implements Dialect { public String getFalseSqlValue() { return "0"; } + + public String getValidationQuery() { + return "SELECT 1 FROM DUAL"; + } } diff --git a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/PostgreSql.java b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/PostgreSql.java index 8c1b29cc3c5..07d5ddd48ed 100644 --- a/sonar-core/src/main/java/org/sonar/core/persistence/dialect/PostgreSql.java +++ b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/PostgreSql.java @@ -81,4 +81,8 @@ public class PostgreSql implements Dialect { public String getFalseSqlValue() { return "false"; } + + public String getValidationQuery() { + return "SELECT 1"; + } } diff --git a/sonar-core/src/test/java/org/sonar/core/persistence/H2Database.java b/sonar-core/src/test/java/org/sonar/core/persistence/H2Database.java index 55db7c2ed94..3767121de0d 100644 --- a/sonar-core/src/test/java/org/sonar/core/persistence/H2Database.java +++ b/sonar-core/src/test/java/org/sonar/core/persistence/H2Database.java @@ -20,7 +20,6 @@ package org.sonar.core.persistence; import org.apache.commons.dbcp.BasicDataSource; -import org.apache.commons.dbcp.BasicDataSourceFactory; import org.hibernate.cfg.Environment; import org.sonar.core.persistence.dialect.Dialect; import org.sonar.core.persistence.dialect.H2; @@ -53,18 +52,13 @@ public class H2Database implements Database { */ private void startDatabase() { try { - Properties properties = new Properties(); - properties.put("driverClassName", "org.h2.Driver"); - properties.put("username", "sonar"); - properties.put("password", "sonar"); - // properties.put("url", "jdbc:h2:mem:sonar2;TRACE_LEVEL_SYSTEM_OUT=2"); - properties.put("url", "jdbc:h2:mem:sonar2"); - - // limit to 2 because of Hibernate and MyBatis - properties.put("maxActive", "2"); - properties.put("maxIdle", "2"); - datasource = (BasicDataSource) BasicDataSourceFactory.createDataSource(properties); - + datasource = new BasicDataSource(); + datasource.setDriverClassName("org.h2.Driver"); + datasource.setUsername("sonar"); + datasource.setPassword("sonar"); + datasource.setUrl("jdbc:h2:mem:sonar2"); + datasource.setMaxActive(2); + datasource.setMaxIdle(2); } catch (Exception e) { throw new IllegalStateException("Fail to start H2", e); } diff --git a/sonar-server/src/main/webapp/WEB-INF/app/models/server.rb b/sonar-server/src/main/webapp/WEB-INF/app/models/server.rb index 7541819bee4..d2e50aafbac 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/models/server.rb +++ b/sonar-server/src/main/webapp/WEB-INF/app/models/server.rb @@ -68,7 +68,6 @@ class Server add_property(sonar_info, 'Database Driver') {"#{jdbc_metadata.getDriverName()} #{jdbc_metadata.getDriverVersion()}"} add_property(sonar_info, 'Database Driver Class') {sonar_property('sonar.jdbc.driverClassName')} add_property(sonar_info, 'Database Dialect (Hibernate)') {"#{Java::OrgSonarServerUi::JRubyFacade.getInstance().getDatabase().getDialect().getId()} (#{Java::OrgSonarServerUi::JRubyFacade.getInstance().getDatabase().getDialect().getHibernateDialectClass().getName()})"} - add_property(sonar_info, 'Database Validation Query') {sonar_property('sonar.jdbc.validationQuery')} add_property(sonar_info, 'Hibernate Default Schema') {sonar_property('sonar.hibernate.default_schema')} add_property(sonar_info, 'External User Authentication') {sonar_property(org.sonar.api.CoreProperties.CORE_AUTHENTICATOR_CLASS)} add_property(sonar_info, 'Automatic User Creation') {sonar_property(org.sonar.api.CoreProperties.CORE_AUTHENTICATOR_CREATE_USERS)}