From 8bf8c39505b8565464572b94c740f5bc417b96c0 Mon Sep 17 00:00:00 2001 From: yisheng-liang <51006581+yisheng-liang@users.noreply.github.com> Date: Thu, 27 Feb 2020 16:24:57 -0800 Subject: [PATCH] Make interceptor mode of TracingDriver work with other wrapper drivers --- .../contrib/jdbc/TracingDriver.java | 18 +++++++++++------- .../io/opentracing/contrib/jdbc/JdbcTest.java | 16 ++++++++++++++-- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/opentracing/contrib/jdbc/TracingDriver.java b/src/main/java/io/opentracing/contrib/jdbc/TracingDriver.java index 4f909e2..2216ab0 100644 --- a/src/main/java/io/opentracing/contrib/jdbc/TracingDriver.java +++ b/src/main/java/io/opentracing/contrib/jdbc/TracingDriver.java @@ -150,17 +150,18 @@ public Connection connect(String url, Properties info) throws SQLException { final Set ignoreStatements; final boolean withActiveSpanOnly; - if (acceptsURL(url)) { + if (interceptorMode) { + withActiveSpanOnly = TracingDriver.withActiveSpanOnly; + ignoreStatements = TracingDriver.ignoreStatements; + } else if (acceptsURL(url)) { withActiveSpanOnly = url.contains(WITH_ACTIVE_SPAN_ONLY); ignoreStatements = extractIgnoredStatements(url); - url = extractRealUrl(url); - } else if (!interceptorMode) { - return null; } else { - withActiveSpanOnly = TracingDriver.withActiveSpanOnly; - ignoreStatements = TracingDriver.ignoreStatements; + return null; } + url = extractRealUrl(url); + // find the real driver for the URL final Driver wrappedDriver = findDriver(url); @@ -182,7 +183,10 @@ public Connection connect(String url, Properties info) throws SQLException { @Override public boolean acceptsURL(String url) throws SQLException { - return url != null && url.startsWith(getUrlPrefix()); + return url != null && ( + url.startsWith(getUrlPrefix()) || + (interceptorMode && url.startsWith("jdbc:")) + ); } @Override diff --git a/src/test/java/io/opentracing/contrib/jdbc/JdbcTest.java b/src/test/java/io/opentracing/contrib/jdbc/JdbcTest.java index a9807a3..be6a844 100644 --- a/src/test/java/io/opentracing/contrib/jdbc/JdbcTest.java +++ b/src/test/java/io/opentracing/contrib/jdbc/JdbcTest.java @@ -26,18 +26,30 @@ import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; +import java.util.Enumeration; import java.util.List; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; public class JdbcTest { - public static void assertGetDriver(final Connection connection) throws SQLException { + private static void assertGetDriver(final Connection connection) throws SQLException { final String originalURL = connection.getMetaData().getURL(); - final Driver driver = DriverManager.getDriver(originalURL); + final Driver driver = getUnderlyingDriver(originalURL); assertEquals("org.h2.Driver", driver.getClass().getName()); } + private static Driver getUnderlyingDriver(final String url) throws SQLException { + final Enumeration enumeration = DriverManager.getDrivers(); + while (enumeration.hasMoreElements()) { + final Driver driver = enumeration.nextElement(); + if (driver.acceptsURL(url) && !(driver instanceof TracingDriver)) { + return driver; + } + } + return null; + } + private static final MockTracer mockTracer = new MockTracer(); @BeforeClass