From 8f80a42c4d08319294b8d376544a1c64730c8b87 Mon Sep 17 00:00:00 2001 From: Nikolay Martynov Date: Thu, 7 Nov 2019 13:45:56 -0500 Subject: [PATCH] Do not delay tracer on OpenJDK8 with JBOSS --- .../main/java/datadog/trace/bootstrap/Agent.java | 14 +++++++++++++- .../java/jvmbootstraptest/LogManagerSetter.java | 12 +++++++++--- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java index e3d5fa0690..4b71b5c98f 100644 --- a/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java +++ b/dd-java-agent/agent-bootstrap/src/main/java/datadog/trace/bootstrap/Agent.java @@ -70,7 +70,7 @@ public class Agent { * events which in turn loads LogManager. This is not a problem on newer JDKs because there JFR uses different * logging facility. */ - if (isJavaBefore9() && appUsingCustomLogManager) { + if (isJavaBefore9WithJFR() && appUsingCustomLogManager) { LOGGER.debug("Custom logger detected. Delaying Datadog Tracer initialization."); registerLogManagerCallback(new InstallDatadogTracerCallback(inst, bootstrapURL)); } else { @@ -341,4 +341,16 @@ public class Agent { private static boolean isJavaBefore9() { return System.getProperty("java.version").startsWith("1."); } + + private static boolean isJavaBefore9WithJFR() { + if (!isJavaBefore9()) { + return false; + } + // FIXME: this is quite a hack because there maybe jfr classes on classpath somehow that have + // nothing to do with JDK but this should be safe because only thing this does is to delay + // tracer install + final String jfrClassResourceName = "jdk.jfr.Recording".replace('.', '/') + ".class"; + return Thread.currentThread().getContextClassLoader().getResourceAsStream(jfrClassResourceName) + != null; + } } diff --git a/dd-java-agent/src/test/java/jvmbootstraptest/LogManagerSetter.java b/dd-java-agent/src/test/java/jvmbootstraptest/LogManagerSetter.java index d13dcef84b..efb7816a4c 100644 --- a/dd-java-agent/src/test/java/jvmbootstraptest/LogManagerSetter.java +++ b/dd-java-agent/src/test/java/jvmbootstraptest/LogManagerSetter.java @@ -106,7 +106,7 @@ public class LogManagerSetter { } private static void assertTraceInstallationDelayed(final String message) { - if (isJavaBefore9()) { + if (isJavaBefore9WithJFR()) { customAssert(isTracerInstalled(false), false, message); } else { customAssert( @@ -154,7 +154,13 @@ public class LogManagerSetter { return false; } - private static boolean isJavaBefore9() { - return System.getProperty("java.version").startsWith("1."); + private static boolean isJavaBefore9WithJFR() { + if (!System.getProperty("java.version").startsWith("1.")) { + return false; + } + + final String jfrClassResourceName = "jdk.jfr.Recording".replace('.', '/') + ".class"; + return Thread.currentThread().getContextClassLoader().getResourceAsStream(jfrClassResourceName) + != null; } }