Skip to content

Commit 9c251f0

Browse files
committed
use module opener only when supported
1 parent 101710d commit 9c251f0

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

javaagent-tooling/javaagent-tooling-java9/src/main/java/io/opentelemetry/javaagent/tooling/ModuleOpener.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,13 @@
1717
import java.util.Set;
1818
import java.util.logging.Logger;
1919

20+
/**
21+
* Module opener provides ability to open JPMS modules and allows instrumentation classloader to
22+
* access module contents without requiring JVM arguments modification. <br>
23+
* Usage of this class must be guarded with an {@code net.bytebuddy.utility.JavaModule#isSupported}
24+
* check as it's compiled for Java 9+, otherwise an {@link UnsupportedClassVersionError} will be
25+
* thrown for java 8.
26+
*/
2027
public class ModuleOpener {
2128

2229
private static final Logger logger = Logger.getLogger(ModuleOpener.class.getName());

javaagent-tooling/src/main/java/io/opentelemetry/javaagent/tooling/instrumentation/indy/IndyModuleRegistry.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.Map;
1515
import java.util.concurrent.ConcurrentHashMap;
1616
import net.bytebuddy.agent.builder.AgentBuilder;
17+
import net.bytebuddy.utility.JavaModule;
1718

1819
public class IndyModuleRegistry {
1920

@@ -88,19 +89,22 @@ public static InstrumentationModuleClassLoader getInstrumentationClassLoader(
8889
throw new IllegalStateException("global instrumentation not available");
8990
}
9091

91-
experimentalModule
92-
.jpmsModulesToOpen()
93-
.forEach(
94-
(className, packages) -> {
95-
Class<?> type;
96-
try {
97-
type = Class.forName(className, false, instrumentedClassLoader);
98-
} catch (ClassNotFoundException e) {
99-
throw new IllegalStateException("missing witness class " + className, e);
100-
}
101-
102-
ModuleOpener.open(instrumentation, type, loader, packages);
103-
});
92+
if (JavaModule.isSupported()) {
93+
// module opener only usable for java 9+
94+
experimentalModule
95+
.jpmsModulesToOpen()
96+
.forEach(
97+
(className, packages) -> {
98+
Class<?> type;
99+
try {
100+
type = Class.forName(className, false, instrumentedClassLoader);
101+
} catch (ClassNotFoundException e) {
102+
throw new IllegalStateException("missing witness class " + className, e);
103+
}
104+
105+
ModuleOpener.open(instrumentation, type, loader, packages);
106+
});
107+
}
104108
}
105109
return loader;
106110
}

0 commit comments

Comments
 (0)