From: David Gageot Date: Wed, 11 Jul 2012 16:10:04 +0000 (+0200) Subject: SONAR-2965 FIX enforce validation query on DataSource X-Git-Tag: 3.2~132 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e9143e13398638eca1be4fa79d8176b94348b4d3;p=sonarqube.git SONAR-2965 FIX 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 acdaba0433c..e48cda0d6d5 100644 --- a/sonar-application/src/main/assembly/conf/sonar.properties +++ b/sonar-application/src/main/assembly/conf/sonar.properties @@ -45,6 +45,7 @@ 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: @@ -58,6 +59,7 @@ 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 @@ -71,6 +73,7 @@ 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 @@ -84,6 +87,7 @@ 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 @@ -97,6 +101,7 @@ 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/dialect/Dialect.java b/sonar-core/src/main/java/org/sonar/core/persistence/dialect/Dialect.java index 35a26c4b42b..bb699f82b7b 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 @@ -71,7 +71,7 @@ public interface Dialect { /** * Query used to validate the jdbc connection. - * + * * @since 3.2 */ String getValidationQuery(); 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 3767121de0d..55db7c2ed94 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,6 +20,7 @@ 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; @@ -52,13 +53,18 @@ public class H2Database implements Database { */ private void startDatabase() { try { - 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); + 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); + } 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 d2e50aafbac..7541819bee4 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,6 +68,7 @@ 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)}