diff --git a/.github/workflows/otel-conformance-tests.yml b/.github/workflows/otel-conformance-tests.yml
new file mode 100644
index 000000000..568b6db50
--- /dev/null
+++ b/.github/workflows/otel-conformance-tests.yml
@@ -0,0 +1,115 @@
+name: OTel Conformance Tests
+
+# Per-PR OpenTelemetry conformance run. Reuses the shared orchestrator from
+# aws-durable-execution-conformance-tests and points it at this repo's own handlers/templates
+# (conformance-tests-otel/) via examples_dir, so the handlers live here while the orchestration
+# (backend matrix, ADOT layer, collector build, long-running cycle) stays centralized.
+#
+# Mirrors the Java preset's language config (setup/prepare commands, ADOT repo, runtime) but calls
+# opentelemetry-orchestrator.yml directly, matching the Python SDK's caller.
+
+on:
+ pull_request:
+ branches: [main]
+ paths:
+ - "sdk/**"
+ - "otel-plugin/**"
+ - "conformance-tests-otel/**"
+ - "pom.xml"
+ - ".github/workflows/otel-conformance-tests.yml"
+ push:
+ branches: [main]
+ paths:
+ - "sdk/**"
+ - "otel-plugin/**"
+ - "conformance-tests-otel/**"
+ - "pom.xml"
+ - ".github/workflows/otel-conformance-tests.yml"
+ workflow_dispatch:
+ inputs:
+ phase:
+ description: Run short tests, launch a long run, or check the active long run
+ required: true
+ default: short
+ type: choice
+ options:
+ - short
+ - launch
+ - check
+ delay_seconds:
+ description: Durable delay in seconds (1-86400, launch only)
+ required: true
+ default: "82800"
+ type: string
+ aws_region:
+ description: AWS region
+ required: true
+ default: us-west-2
+ type: string
+ conformance_test_ref:
+ description: Optional conformance test commit SHA or branch name
+ required: false
+ type: string
+
+permissions: {}
+
+jobs:
+ opentelemetry:
+ permissions:
+ actions: write
+ contents: read
+ id-token: write
+ uses: aws/aws-durable-execution-conformance-tests/.github/workflows/opentelemetry-orchestrator.yml@0f0b5bda84116ef77034451b9c4c21774e76d8e4
+ with:
+ language: java
+ resource_prefix: j
+ sdk_repository: aws/aws-durable-execution-sdk-java
+ sdk_ref: ${{ github.event.pull_request.head.sha || github.sha }}
+ conformance_test_ref: ${{ inputs.conformance_test_ref || '0f0b5bda84116ef77034451b9c4c21774e76d8e4' }}
+ checkout_sdk: true
+ # Build the handlers from this repo's checked-out module instead of the conformance repo's
+ # bundled examples/java. Path is relative to the conformance workspace where the SDK is
+ # checked out (.build/durable-sdk).
+ examples_dir: .build/durable-sdk/conformance-tests-otel
+ setup_command: |
+ if [ -z "${JAVA_HOME_21_X64:-}" ]; then
+ echo "The runner does not provide Java 21"
+ exit 1
+ fi
+ export JAVA_HOME="$JAVA_HOME_21_X64"
+ export PATH="$JAVA_HOME/bin:$PATH"
+ java -version
+ prepare_command: |
+ JAVA_SDK_VERSION=$(
+ mvn -B -q \
+ --file "$SDK_CHECKOUT/pom.xml" \
+ -Dstyle.color=never \
+ -Dexpression=project.version \
+ -DforceStdout \
+ help:evaluate
+ )
+ mvn -B -q \
+ --file "$SDK_CHECKOUT/pom.xml" \
+ --projects sdk,otel-plugin \
+ --also-make \
+ -DskipTests \
+ install
+ echo "Using Java SDK version $JAVA_SDK_VERSION"
+ echo "JAVA_SDK_VERSION=$JAVA_SDK_VERSION" >> "$GITHUB_ENV"
+ mvn -B -q -DskipTests package \
+ -Ddurable.sdk.version="$JAVA_SDK_VERSION" \
+ --file "$EXAMPLES_DIR/pom.xml"
+ adot_release_repository: aws-observability/aws-otel-java-instrumentation
+ collector_compatible_runtime: java21
+ collector_otlp_endpoint: http://localhost:4318
+ phase: ${{ inputs.phase || 'short' }}
+ delay_seconds: ${{ inputs.delay_seconds || '82800' }}
+ aws_region: ${{ inputs.aws_region || 'us-west-2' }}
+ secrets:
+ CONFORMANCE_TEST_ROLE_ARN: ${{ secrets.TEST_ROLE_ARN }}
+ CONFORMANCE_TEST_ACCOUNT_ID: ${{ secrets.TEST_ACCOUNT_ID }}
+ CONFORMANCE_TEST_LAMBDA_EXECUTION_ROLE_ARN: ${{ secrets.TEST_LAMBDA_EXECUTION_ROLE_ARN }}
+ DASH0_AUTH_TOKEN: ${{ secrets.DASH0_AUTH_TOKEN }}
+ DATADOG_ACCESS_TOKEN: ${{ secrets.DATADOG_ACCESS_TOKEN }}
+ DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }}
+ DATADOG_APPLICATION_KEY: ${{ secrets.DATADOG_APPLICATION_KEY }}
diff --git a/conformance-tests-otel/pom.xml b/conformance-tests-otel/pom.xml
new file mode 100644
index 000000000..2d1f0106b
--- /dev/null
+++ b/conformance-tests-otel/pom.xml
@@ -0,0 +1,121 @@
+
+
+ 4.0.0
+
+
+ software.amazon.lambda.durable
+ aws-durable-execution-sdk-java-conformance-tests-otel
+ 1.0.0
+ jar
+
+ AWS Lambda Durable Execution SDK OpenTelemetry Conformance Tests
+
+ Java SDK handlers and SAM templates for the durable execution OpenTelemetry conformance
+ suite (otel-invocation, otel-execution, and otel-long-running). Built and deployed by the
+ shared OpenTelemetry conformance workflow.
+
+
+
+ UTF-8
+ 17
+ 17
+ 17
+
+ ${env.JAVA_SDK_VERSION}
+ 1.65.0
+ 1.4.0
+
+
+
+
+ software.amazon.lambda.durable
+ aws-durable-execution-sdk-java
+ ${durable.sdk.version}
+
+
+ software.amazon.lambda.durable
+ aws-durable-execution-sdk-java-plugin-otel
+ ${durable.sdk.version}
+
+
+ io.opentelemetry
+ opentelemetry-sdk
+ ${opentelemetry.version}
+
+
+ com.amazonaws
+ aws-lambda-java-core
+ ${aws.lambda.java.core.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.15.0
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 3.11.0
+
+
+ copy-otel-javaagent-extension
+ prepare-package
+
+ copy
+
+
+
+
+ software.amazon.lambda.durable
+ aws-durable-execution-sdk-java-plugin-otel
+ ${durable.sdk.version}
+ ${project.build.outputDirectory}/lib
+ otel-plugin-extension.jar
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.6.2
+
+ false
+
+
+
+ package
+
+ shade
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/conformance-tests-otel/src/main/java/software/amazon/lambda/durable/conformance/otel/Otel10WaitForCallback.java b/conformance-tests-otel/src/main/java/software/amazon/lambda/durable/conformance/otel/Otel10WaitForCallback.java
new file mode 100644
index 000000000..257c8f28e
--- /dev/null
+++ b/conformance-tests-otel/src/main/java/software/amazon/lambda/durable/conformance/otel/Otel10WaitForCallback.java
@@ -0,0 +1,16 @@
+// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+package software.amazon.lambda.durable.conformance.otel;
+
+import java.util.Map;
+import software.amazon.lambda.durable.DurableContext;
+
+/** Wait-for-callback scenario for OTel requirement otel-invocation-10. */
+public final class Otel10WaitForCallback extends OtelConformanceHandler {
+
+ @Override
+ public String handleRequest(Map event, DurableContext context) {
+ requireScenario(event, "wait-for-callback");
+ return context.waitForCallback("otel-callback", String.class, (callbackId, step) -> {});
+ }
+}
diff --git a/conformance-tests-otel/src/main/java/software/amazon/lambda/durable/conformance/otel/Otel11ChainedInvoke.java b/conformance-tests-otel/src/main/java/software/amazon/lambda/durable/conformance/otel/Otel11ChainedInvoke.java
new file mode 100644
index 000000000..b2d50e822
--- /dev/null
+++ b/conformance-tests-otel/src/main/java/software/amazon/lambda/durable/conformance/otel/Otel11ChainedInvoke.java
@@ -0,0 +1,21 @@
+// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
+// SPDX-License-Identifier: Apache-2.0
+package software.amazon.lambda.durable.conformance.otel;
+
+import java.util.Map;
+import software.amazon.lambda.durable.DurableContext;
+import software.amazon.lambda.durable.TypeToken;
+
+/** Chained-invoke scenario for OTel requirement otel-invocation-11. */
+public final class Otel11ChainedInvoke extends OtelConformanceHandler