Skip to content

Commit 3e1819e

Browse files
committed
Swap original StrictContextStorage with simple wrapper to avoid missing reference issue on native-image
1 parent 35451a2 commit 3e1819e

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

dd-java-agent/agent-otel/otel-bootstrap/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ tasks.named('compileJava') {
5656
shadowJar {
5757
dependencies deps.excludeShared
5858

59+
exclude 'io/opentelemetry/context/StrictContextStorage*'
5960
exclude 'io/opentelemetry/context/internal/shaded/**'
6061

6162
relocate 'io.opentelemetry', 'datadog.trace.bootstrap.otel'
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package datadog.trace.bootstrap.otel.context;
2+
3+
import io.opentelemetry.context.Context;
4+
import io.opentelemetry.context.ContextStorage;
5+
import io.opentelemetry.context.Scope;
6+
7+
/**
8+
* Replaces original class with a simple wrapper to avoid missing reference issue on native-image.
9+
*
10+
* <p>The original class is only used for testing purposes when a particular property is set, but
11+
* native-image follows the reference in {@code LazyStorage} and attempts to load everything it
12+
* touches, including some types we are not embedding. This simple replacement fixes this issue.
13+
*/
14+
final class StrictContextStorage implements ContextStorage {
15+
private final ContextStorage delegate;
16+
17+
static StrictContextStorage create(ContextStorage delegate) {
18+
return new StrictContextStorage(delegate);
19+
}
20+
21+
public StrictContextStorage(ContextStorage delegate) {
22+
this.delegate = delegate;
23+
}
24+
25+
@Override
26+
public Scope attach(Context context) {
27+
return delegate.attach(context);
28+
}
29+
30+
@Override
31+
public Context current() {
32+
return delegate.current();
33+
}
34+
}

0 commit comments

Comments
 (0)