Skip to content

Commit c67a3fb

Browse files
committed
Fix "Discovered unresolved method during parsing: org.datadog.jmxfetch.App.<init>(org.datadog.jmxfetch.AppConfig)."
1 parent 76b4106 commit c67a3fb

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

dd-java-agent/instrumentation/graal/native-image/src/main/java/datadog/trace/instrumentation/graal/nativeimage/AnnotationSubstitutionProcessorInstrumentation.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,9 @@ public void methodAdvice(MethodTransformer transformer) {
3737
public String[] helperClassNames() {
3838
return new String[] {
3939
packageName + ".Target_datadog_jctools_counters_FixedSizeStripedLongCounterFields",
40-
packageName + ".Target_datadog_jctools_util_UnsafeRefArrayAccess"
40+
packageName + ".Target_datadog_jctools_util_UnsafeRefArrayAccess",
41+
packageName + ".Target_org_datadog_jmxfetch_App",
42+
"com.fasterxml.jackson.core.JsonProcessingException" // loaded by Target_org_datadog_jmxfetch_App
4143
};
4244
}
4345

@@ -49,7 +51,8 @@ public String[] muzzleIgnoredClassNames() {
4951
"jdk.vm.ci.meta.ResolvedJavaField",
5052
// ignore helper class names as usual
5153
packageName + ".Target_datadog_jctools_counters_FixedSizeStripedLongCounterFields",
52-
packageName + ".Target_datadog_jctools_util_UnsafeRefArrayAccess"
54+
packageName + ".Target_datadog_jctools_util_UnsafeRefArrayAccess",
55+
packageName + ".Target_org_datadog_jmxfetch_App"
5356
};
5457
}
5558

@@ -58,6 +61,7 @@ public static class FindTargetClassesAdvice {
5861
public static void onExit(@Advice.Return(readOnly = false) List<Class<?>> result) {
5962
result.add(Target_datadog_jctools_counters_FixedSizeStripedLongCounterFields.class);
6063
result.add(Target_datadog_jctools_util_UnsafeRefArrayAccess.class);
64+
result.add(Target_org_datadog_jmxfetch_App.class);
6165
}
6266
}
6367
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package datadog.trace.instrumentation.graal.nativeimage;
2+
3+
import com.oracle.svm.core.annotate.Substitute;
4+
import com.oracle.svm.core.annotate.TargetClass;
5+
6+
@TargetClass(className = "org.datadog.jmxfetch.App")
7+
public final class Target_org_datadog_jmxfetch_App {
8+
@Substitute
9+
private boolean getJsonConfigs() {
10+
// Remove getJsonConfigs body to fix the GraalVM native build error.
11+
//
12+
// This method is not needed in Java Tracer, so we exclude next transitive dependencies when embedding JMXFetch:
13+
// - jackson-core (catch JsonProcessingException)
14+
// - jackson-jr-objects (referenced in org.datadog.jmxfetch.JsonParser).
15+
// But GraalVM Native detects it during the reachability analysis and results in
16+
// "Discovered unresolved method during parsing: org.datadog.jmxfetch.App.<init>(org.datadog.jmxfetch.AppConfig)."
17+
// because of the missing classes that belong to the excluded dependencies.
18+
return false;
19+
}
20+
}

0 commit comments

Comments
 (0)