From 1b1eb52c7c9eb304efda08f5031f394d66b8b827 Mon Sep 17 00:00:00 2001 From: Trask Stalnaker Date: Fri, 21 Feb 2025 13:14:11 -0800 Subject: [PATCH 1/4] Test Java 24-ea --- .github/workflows/build-common.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build-common.yml b/.github/workflows/build-common.yml index 42ced9ae090f..4d2523c343d2 100644 --- a/.github/workflows/build-common.yml +++ b/.github/workflows/build-common.yml @@ -233,6 +233,7 @@ jobs: - 17 - 21 - 23 + - 24-ea vm: - hotspot - openj9 From 411f6b2eaadae3337fa547947f37116848e509f0 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 3 Mar 2025 16:03:15 +0200 Subject: [PATCH 2/4] disable test on jdk24 --- .../instrumentation/executors/VirtualThreadTest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/instrumentation/executors/jdk21-testing/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/VirtualThreadTest.java b/instrumentation/executors/jdk21-testing/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/VirtualThreadTest.java index 924856c6dfca..95a2bafe32d3 100644 --- a/instrumentation/executors/jdk21-testing/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/VirtualThreadTest.java +++ b/instrumentation/executors/jdk21-testing/src/test/java/io/opentelemetry/javaagent/instrumentation/executors/VirtualThreadTest.java @@ -11,12 +11,17 @@ import java.lang.reflect.Method; import java.util.concurrent.Callable; import java.util.concurrent.atomic.AtomicBoolean; +import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Test; class VirtualThreadTest { @Test void testDisableContextPropagation() throws Exception { + // VirtualThread does not have executeOnCarrierThread method in jdk24 + Assumptions.assumeTrue( + Double.parseDouble(System.getProperty("java.specification.version")) < 24); + TestRunnable testRunnable = new TestRunnable(); Thread thread = Thread.ofVirtual().start(testRunnable); thread.join(); From 4e32d1c447f19d3b3b20b8d538a04b4735d12fbc Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 3 Mar 2025 16:03:35 +0200 Subject: [PATCH 3/4] fix instrumenting lambdas on jdk24 --- .../InnerClassLambdaMetafactoryInstrumentation.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/instrumentation/internal/internal-lambda/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/lambda/InnerClassLambdaMetafactoryInstrumentation.java b/instrumentation/internal/internal-lambda/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/lambda/InnerClassLambdaMetafactoryInstrumentation.java index 4386101429f1..a3b42f560150 100644 --- a/instrumentation/internal/internal-lambda/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/lambda/InnerClassLambdaMetafactoryInstrumentation.java +++ b/instrumentation/internal/internal-lambda/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/internal/lambda/InnerClassLambdaMetafactoryInstrumentation.java @@ -116,9 +116,13 @@ public void visitMethodInsn( super.visitMethodInsn(opcode, owner, name, descriptor, isInterface); // if current instruction is a call to ASM ClassWriter.toByteArray() insert call to // our lambda transformer - if (opcode == Opcodes.INVOKEVIRTUAL - && "toByteArray".equals(name) - && "()[B".equals(descriptor)) { + if ((opcode == Opcodes.INVOKEVIRTUAL + && "toByteArray".equals(name) + && "()[B".equals(descriptor)) + // jdk 24 + || (opcode == Opcodes.INVOKEINTERFACE + && "build".equals(name) + && descriptor.endsWith(")[B"))) { mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitFieldInsn( Opcodes.GETFIELD, slashClassName, "lambdaClassName", "Ljava/lang/String;"); From f1912bebc6fbf3ae381ab27e134d398544beace2 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Mon, 3 Mar 2025 16:51:22 +0200 Subject: [PATCH 4/4] disable failing tests --- .../jaxrs/jaxrs-2.0/jaxrs-2.0-tomee-testing/build.gradle.kts | 5 +++++ .../jaxws/jaxws-2.0-tomee-testing/build.gradle.kts | 5 +++++ .../spring/spring-rmi-4.0/javaagent/build.gradle.kts | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-tomee-testing/build.gradle.kts b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-tomee-testing/build.gradle.kts index 3ae8f9175d7b..70039082ee88 100644 --- a/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-tomee-testing/build.gradle.kts +++ b/instrumentation/jaxrs/jaxrs-2.0/jaxrs-2.0-tomee-testing/build.gradle.kts @@ -14,6 +14,11 @@ dependencies { testInstrumentation(project(":instrumentation:jaxrs:jaxrs-2.0:jaxrs-2.0-cxf-3.2:javaagent")) } +otelJava { + // due to security manager deprecation this test does not work on jdk 24 with default configuration + maxJavaVersionForTests.set(JavaVersion.VERSION_23) +} + tasks.withType().configureEach { // required on jdk17 jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") diff --git a/instrumentation/jaxws/jaxws-2.0-tomee-testing/build.gradle.kts b/instrumentation/jaxws/jaxws-2.0-tomee-testing/build.gradle.kts index 779f42848838..b891d871ac6e 100644 --- a/instrumentation/jaxws/jaxws-2.0-tomee-testing/build.gradle.kts +++ b/instrumentation/jaxws/jaxws-2.0-tomee-testing/build.gradle.kts @@ -15,6 +15,11 @@ dependencies { testInstrumentation(project(":instrumentation:jaxws:jaxws-jws-api-1.1:javaagent")) } +otelJava { + // due to security manager deprecation this test does not work on jdk 24 with default configuration + maxJavaVersionForTests.set(JavaVersion.VERSION_23) +} + tasks.withType().configureEach { // required on jdk17 jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED") diff --git a/instrumentation/spring/spring-rmi-4.0/javaagent/build.gradle.kts b/instrumentation/spring/spring-rmi-4.0/javaagent/build.gradle.kts index 0677c5651d68..0ad0491813c5 100644 --- a/instrumentation/spring/spring-rmi-4.0/javaagent/build.gradle.kts +++ b/instrumentation/spring/spring-rmi-4.0/javaagent/build.gradle.kts @@ -28,6 +28,11 @@ dependencies { latestDepTestLibrary("org.springframework.boot:spring-boot:2.+") // documented limitation } +otelJava { + // due to security manager deprecation this test does not work on jdk 24 with default configuration + maxJavaVersionForTests.set(JavaVersion.VERSION_23) +} + tasks.withType().configureEach { jvmArgs("-Djava.rmi.server.hostname=127.0.0.1") }