From 3cc501ee3cbca9d24fd4413306242ba456931298 Mon Sep 17 00:00:00 2001 From: Brett Wooldridge Date: Wed, 5 Nov 2014 22:54:46 +0900 Subject: [PATCH] Fix #172 Further shadow runtime dependency on Codahale metrics from reflection performed by Spring and other IoC containers. --- CHANGES | 5 +++++ .../src/main/java/com/zaxxer/hikari/HikariConfig.java | 10 ++++++---- .../main/java/com/zaxxer/hikari/pool/HikariPool.java | 7 ++++--- .../src/main/java/com/zaxxer/hikari/HikariConfig.java | 10 ++++++---- .../main/java/com/zaxxer/hikari/pool/HikariPool.java | 7 ++++--- 5 files changed, 25 insertions(+), 14 deletions(-) diff --git a/CHANGES b/CHANGES index a3285da2..4c762f7a 100644 --- a/CHANGES +++ b/CHANGES @@ -1,5 +1,10 @@ HikariCP Changes +Changes between 2.2.2 and 2.2.3 + + * Further shadow runtime dependency on Codahale metrics from reflection + performed by Spring and other IoC containers. + Changes between 2.2.0 and 2.2.2 * Fixed issue with pool initialization of MySQL after default value of diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java index 26f2ecdd..54434771 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/HikariConfig.java @@ -35,7 +35,6 @@ import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.codahale.metrics.MetricRegistry; import com.zaxxer.hikari.metrics.CodaHaleShim; import com.zaxxer.hikari.proxy.JavassistProxyFactory; import com.zaxxer.hikari.util.PoolUtilities; @@ -84,7 +83,7 @@ public class HikariConfig implements HikariConfigMBean private Properties dataSourceProperties; private IConnectionCustomizer customizer; private ThreadFactory threadFactory; - private MetricRegistry metricRegistry; + private Object metricRegistry; static { JavassistProxyFactory.initialize(); @@ -439,7 +438,7 @@ public class HikariConfig implements HikariConfigMBean * * @return the codahale MetricRegistry instance */ - public MetricRegistry getMetricRegistry() + public Object getMetricRegistry() { return metricRegistry; } @@ -449,8 +448,11 @@ public class HikariConfig implements HikariConfigMBean * * @param metricRegistry the Codahale MetricRegistry to set */ - public void setMetricRegistry(MetricRegistry metricRegistry) + public void setMetricRegistry(Object metricRegistry) { + if (metricRegistry != null && !metricRegistry.getClass().getName().contains("MetricRegistry")) { + throw new IllegalArgumentException("Class must be an instance of com.codahale.metrics.MetricRegistry"); + } this.metricRegistry = metricRegistry; } diff --git a/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index 1dc73cb4..55d9a133 100644 --- a/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/hikaricp-java6/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -32,9 +32,9 @@ import static com.zaxxer.hikari.util.PoolUtilities.isJdbc40Compliant; import static com.zaxxer.hikari.util.PoolUtilities.isJdbc41Compliant; import static com.zaxxer.hikari.util.PoolUtilities.quietlyCloseConnection; import static com.zaxxer.hikari.util.PoolUtilities.quietlySleep; -import static com.zaxxer.hikari.util.PoolUtilities.setQueryTimeout; -import static com.zaxxer.hikari.util.PoolUtilities.setNetworkTimeout; import static com.zaxxer.hikari.util.PoolUtilities.setLoginTimeout; +import static com.zaxxer.hikari.util.PoolUtilities.setNetworkTimeout; +import static com.zaxxer.hikari.util.PoolUtilities.setQueryTimeout; import java.sql.Connection; import java.sql.SQLException; @@ -51,6 +51,7 @@ import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.codahale.metrics.MetricRegistry; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.IConnectionCustomizer; import com.zaxxer.hikari.metrics.CodaHaleMetricsTracker; @@ -141,7 +142,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener this.isIsolateInternalQueries = configuration.isIsolateInternalQueries(); this.isRecordMetrics = configuration.getMetricRegistry() != null; - this.metricsTracker = (isRecordMetrics ? new CodaHaleMetricsTracker(this, configuration.getMetricRegistry()) : new MetricsTracker(this)); + this.metricsTracker = (isRecordMetrics ? new CodaHaleMetricsTracker(this, (MetricRegistry) configuration.getMetricRegistry()) : new MetricsTracker(this)); this.dataSource = initializeDataSource(configuration.getDataSourceClassName(), configuration.getDataSource(), configuration.getDataSourceProperties(), configuration.getJdbcUrl(), username, password); diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java b/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java index 1f20c194..2cd7f9b2 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/HikariConfig.java @@ -35,7 +35,6 @@ import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.codahale.metrics.MetricRegistry; import com.zaxxer.hikari.metrics.CodaHaleShim; import com.zaxxer.hikari.proxy.JavassistProxyFactory; import com.zaxxer.hikari.util.PoolUtilities; @@ -84,7 +83,7 @@ public class HikariConfig implements HikariConfigMBean private Properties dataSourceProperties; private IConnectionCustomizer customizer; private ThreadFactory threadFactory; - private MetricRegistry metricRegistry; + private Object metricRegistry; static { JavassistProxyFactory.initialize(); @@ -439,7 +438,7 @@ public class HikariConfig implements HikariConfigMBean * * @return the codahale MetricRegistry instance */ - public MetricRegistry getMetricRegistry() + public Object getMetricRegistry() { return metricRegistry; } @@ -449,8 +448,11 @@ public class HikariConfig implements HikariConfigMBean * * @param metricRegistry the Codahale MetricRegistry to set */ - public void setMetricRegistry(MetricRegistry metricRegistry) + public void setMetricRegistry(Object metricRegistry) { + if (metricRegistry != null && !metricRegistry.getClass().getName().contains("MetricRegistry")) { + throw new IllegalArgumentException("Class must be an instance of com.codahale.metrics.MetricRegistry"); + } this.metricRegistry = metricRegistry; } diff --git a/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java b/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java index 6e68cbe3..14acca1d 100644 --- a/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java +++ b/hikaricp/src/main/java/com/zaxxer/hikari/pool/HikariPool.java @@ -31,9 +31,9 @@ import static com.zaxxer.hikari.util.PoolUtilities.isJdbc40Compliant; import static com.zaxxer.hikari.util.PoolUtilities.isJdbc41Compliant; import static com.zaxxer.hikari.util.PoolUtilities.quietlyCloseConnection; import static com.zaxxer.hikari.util.PoolUtilities.quietlySleep; -import static com.zaxxer.hikari.util.PoolUtilities.setQueryTimeout; -import static com.zaxxer.hikari.util.PoolUtilities.setNetworkTimeout; import static com.zaxxer.hikari.util.PoolUtilities.setLoginTimeout; +import static com.zaxxer.hikari.util.PoolUtilities.setNetworkTimeout; +import static com.zaxxer.hikari.util.PoolUtilities.setQueryTimeout; import java.sql.Connection; import java.sql.SQLException; @@ -50,6 +50,7 @@ import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.codahale.metrics.MetricRegistry; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.IConnectionCustomizer; import com.zaxxer.hikari.metrics.CodaHaleMetricsTracker; @@ -140,7 +141,7 @@ public final class HikariPool implements HikariPoolMBean, IBagStateListener this.isIsolateInternalQueries = configuration.isIsolateInternalQueries(); this.isRecordMetrics = configuration.getMetricRegistry() != null; - this.metricsTracker = (isRecordMetrics ? new CodaHaleMetricsTracker(this, configuration.getMetricRegistry()) : new MetricsTracker(this)); + this.metricsTracker = (isRecordMetrics ? new CodaHaleMetricsTracker(this, (MetricRegistry) configuration.getMetricRegistry()) : new MetricsTracker(this)); this.dataSource = initializeDataSource(configuration.getDataSourceClassName(), configuration.getDataSource(), configuration.getDataSourceProperties(), configuration.getJdbcUrl(), username, password);