diff --git a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java
index 5a274cabc4..1af78c5c23 100644
--- a/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java
+++ b/dd-java-agent/agent-tooling/src/main/java/datadog/trace/agent/tooling/TracerInstaller.java
@@ -1,19 +1,17 @@
package datadog.trace.agent.tooling;
import datadog.opentracing.DDTracer;
-import datadog.trace.context.TracerBridge;
-import io.opentracing.util.GlobalTracer;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class TracerInstaller {
/** Register a global tracer if no global tracer is already registered. */
public static synchronized void installGlobalTracer() {
- if (!GlobalTracer.isRegistered()) {
+ if (!io.opentracing.util.GlobalTracer.isRegistered()) {
final DDTracer tracer = new DDTracer();
try {
- GlobalTracer.register(tracer);
- TracerBridge.registerIfAbsent(tracer);
+ io.opentracing.util.GlobalTracer.register(tracer);
+ datadog.trace.api.GlobalTracer.registerIfAbsent(tracer);
} catch (final RuntimeException re) {
log.warn("Failed to register tracer '" + tracer + "'", re);
}
@@ -24,7 +22,10 @@ public class TracerInstaller {
public static void logVersionInfo() {
VersionLogger.logAllVersions();
- log.debug(GlobalTracer.class.getName() + " loaded on " + GlobalTracer.class.getClassLoader());
+ log.debug(
+ io.opentracing.util.GlobalTracer.class.getName()
+ + " loaded on "
+ + io.opentracing.util.GlobalTracer.class.getClassLoader());
log.debug(
AgentInstaller.class.getName() + " loaded on " + AgentInstaller.class.getClassLoader());
}
diff --git a/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/AgentTestRunner.java b/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/AgentTestRunner.java
index ba896e7cd8..368bf9738f 100644
--- a/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/AgentTestRunner.java
+++ b/dd-java-agent/testing/src/main/java/datadog/trace/agent/test/AgentTestRunner.java
@@ -7,9 +7,9 @@ import datadog.opentracing.DDSpan;
import datadog.opentracing.DDTracer;
import datadog.trace.agent.tooling.AgentInstaller;
import datadog.trace.agent.tooling.Instrumenter;
+import datadog.trace.api.GlobalTracer;
import datadog.trace.common.writer.ListWriter;
import datadog.trace.common.writer.Writer;
-import datadog.trace.context.TracerBridge;
import io.opentracing.Tracer;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
@@ -85,7 +85,7 @@ public abstract class AgentTestRunner extends Specification {
};
TEST_TRACER = new DDTracer(TEST_WRITER);
TestUtils.registerOrReplaceGlobalTracer((Tracer) TEST_TRACER);
- TracerBridge.registerIfAbsent((DDTracer) TEST_TRACER);
+ GlobalTracer.registerIfAbsent((DDTracer) TEST_TRACER);
}
protected static Tracer getTestTracer() {
diff --git a/dd-trace-api/src/main/java/datadog/trace/api/CorrelationIdentifier.java b/dd-trace-api/src/main/java/datadog/trace/api/CorrelationIdentifier.java
index 338040e042..405d2e911a 100644
--- a/dd-trace-api/src/main/java/datadog/trace/api/CorrelationIdentifier.java
+++ b/dd-trace-api/src/main/java/datadog/trace/api/CorrelationIdentifier.java
@@ -1,7 +1,5 @@
package datadog.trace.api;
-import datadog.trace.context.TracerBridge;
-
/**
* Utility class to access the active trace and span ids.
*
@@ -9,29 +7,10 @@ import datadog.trace.context.TracerBridge;
*/
public class CorrelationIdentifier {
public static String getTraceId() {
- return TracerBridge.get().getTraceId();
+ return GlobalTracer.get().getTraceId();
}
public static String getSpanId() {
- return TracerBridge.get().getSpanId();
- }
-
- public interface Provider {
- String getTraceId();
-
- String getSpanId();
-
- Provider NO_OP =
- new Provider() {
- @Override
- public String getTraceId() {
- return "0";
- }
-
- @Override
- public String getSpanId() {
- return "0";
- }
- };
+ return GlobalTracer.get().getSpanId();
}
}
diff --git a/dd-trace-api/src/main/java/datadog/trace/api/GlobalTracer.java b/dd-trace-api/src/main/java/datadog/trace/api/GlobalTracer.java
new file mode 100644
index 0000000000..f59cd55c24
--- /dev/null
+++ b/dd-trace-api/src/main/java/datadog/trace/api/GlobalTracer.java
@@ -0,0 +1,41 @@
+package datadog.trace.api;
+
+import datadog.trace.api.interceptor.TraceInterceptor;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * A global reference to the registered Datadog tracer.
+ *
+ *
OpenTracing's GlobalTracer cannot be cast to its DDTracer implementation, so this class exists
+ * to provide a global window to datadog-specific features.
+ */
+public class GlobalTracer {
+ private static final Tracer NO_OP =
+ new Tracer() {
+ @Override
+ public String getTraceId() {
+ return "0";
+ }
+
+ @Override
+ public String getSpanId() {
+ return "0";
+ }
+
+ @Override
+ public boolean addTraceInterceptor(TraceInterceptor traceInterceptor) {
+ return false;
+ }
+ };
+ private static final AtomicReference provider = new AtomicReference<>(NO_OP);
+
+ public static void registerIfAbsent(Tracer p) {
+ if (p != null && p != NO_OP) {
+ provider.compareAndSet(NO_OP, p);
+ }
+ }
+
+ public static Tracer get() {
+ return provider.get();
+ }
+}
diff --git a/dd-trace-api/src/main/java/datadog/trace/api/Tracer.java b/dd-trace-api/src/main/java/datadog/trace/api/Tracer.java
new file mode 100644
index 0000000000..d46c89f8cc
--- /dev/null
+++ b/dd-trace-api/src/main/java/datadog/trace/api/Tracer.java
@@ -0,0 +1,24 @@
+package datadog.trace.api;
+
+import datadog.trace.api.interceptor.TraceInterceptor;
+
+/** A class with Datadog tracer features. */
+public interface Tracer {
+
+ /** Get the trace id of the active trace. Returns 0 if there is no active trace. */
+ String getTraceId();
+
+ /**
+ * Get the span id of the active span of the active trace. Returns 0 if there is no active trace.
+ */
+ String getSpanId();
+
+ /**
+ * Add a new interceptor to the tracer. Interceptors with duplicate priority to existing ones are
+ * ignored.
+ *
+ * @param traceInterceptor
+ * @return false if an interceptor with same priority exists.
+ */
+ boolean addTraceInterceptor(TraceInterceptor traceInterceptor);
+}
diff --git a/dd-trace-api/src/main/java/datadog/trace/context/TracerBridge.java b/dd-trace-api/src/main/java/datadog/trace/context/TracerBridge.java
deleted file mode 100644
index 47dcfb5bbd..0000000000
--- a/dd-trace-api/src/main/java/datadog/trace/context/TracerBridge.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package datadog.trace.context;
-
-import datadog.trace.api.interceptor.TraceInterceptor;
-import java.util.concurrent.atomic.AtomicReference;
-
-/** A global reference to the registered Datadog tracer. */
-public class TracerBridge {
- private static final AtomicReference provider = new AtomicReference<>(Provider.NO_OP);
-
- public static void registerIfAbsent(Provider p) {
- if (p != null && p != Provider.NO_OP) {
- provider.compareAndSet(Provider.NO_OP, p);
- }
- }
-
- public static Provider get() {
- return provider.get();
- }
-
- /**
- * Add a new interceptor to the tracer. Interceptors with duplicate priority to existing ones are
- * ignored.
- *
- * @param traceInterceptor
- * @return false if an interceptor with same priority exists.
- */
- public static boolean addTraceInterceptor(TraceInterceptor traceInterceptor) {
- return get().addTraceInterceptor(traceInterceptor);
- }
-
- public interface Provider {
- String getTraceId();
-
- String getSpanId();
-
- /**
- * Add a new interceptor to the tracer. Interceptors with duplicate priority to existing ones
- * are ignored.
- *
- * @param traceInterceptor
- * @return false if an interceptor with same priority exists.
- */
- boolean addTraceInterceptor(TraceInterceptor traceInterceptor);
-
- Provider NO_OP =
- new Provider() {
- @Override
- public String getTraceId() {
- return "0";
- }
-
- @Override
- public String getSpanId() {
- return "0";
- }
-
- @Override
- public boolean addTraceInterceptor(TraceInterceptor traceInterceptor) {
- return false;
- }
- };
- }
-}
diff --git a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java
index 3db7284a87..62a2ad25d2 100644
--- a/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java
+++ b/dd-trace-ot/src/main/java/datadog/opentracing/DDTracer.java
@@ -23,7 +23,6 @@ import datadog.trace.common.sampling.Sampler;
import datadog.trace.common.writer.DDAgentWriter;
import datadog.trace.common.writer.DDApi;
import datadog.trace.common.writer.Writer;
-import datadog.trace.context.TracerBridge;
import io.opentracing.Scope;
import io.opentracing.ScopeManager;
import io.opentracing.Span;
@@ -49,7 +48,7 @@ import lombok.extern.slf4j.Slf4j;
/** DDTracer makes it easy to send traces and span to DD using the OpenTracing API. */
@Slf4j
-public class DDTracer implements io.opentracing.Tracer, Closeable, TracerBridge.Provider {
+public class DDTracer implements io.opentracing.Tracer, Closeable, datadog.trace.api.Tracer {
public static final String UNASSIGNED_DEFAULT_SERVICE_NAME = "unnamed-java-app";
diff --git a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy
index bb5bff1e8e..b79150249c 100644
--- a/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy
+++ b/dd-trace-ot/src/test/groovy/datadog/opentracing/TraceInterceptorTest.groovy
@@ -3,7 +3,7 @@ package datadog.opentracing
import datadog.trace.api.interceptor.MutableSpan
import datadog.trace.api.interceptor.TraceInterceptor
import datadog.trace.common.writer.ListWriter
-import datadog.trace.context.TracerBridge
+import datadog.trace.api.GlobalTracer
import spock.lang.Specification
import java.util.concurrent.atomic.AtomicBoolean
@@ -147,7 +147,7 @@ class TraceInterceptorTest extends Specification {
def "register interceptor through bridge" () {
setup:
- TracerBridge.registerIfAbsent(tracer)
+ GlobalTracer.registerIfAbsent(tracer)
def interceptor = new TraceInterceptor() {
@Override
Collection extends MutableSpan> onTraceComplete(Collection extends MutableSpan> trace) {
@@ -161,7 +161,7 @@ class TraceInterceptorTest extends Specification {
}
expect:
- TracerBridge.addTraceInterceptor(interceptor)
+ GlobalTracer.get().addTraceInterceptor(interceptor)
tracer.interceptors.contains(interceptor)
}
}