diff --git a/examples/pom.xml b/examples/pom.xml
index 2dc5c0c4a..21625cdad 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -24,6 +24,7 @@
${java.version}
true
false
+ 0.10.0
@@ -76,17 +77,17 @@
io.opentelemetry
opentelemetry-sdk
- 0.7.1
+ ${opentelemetry.version}
io.opentelemetry
- opentelemetry-exporters-logging
- 0.7.1
+ opentelemetry-exporter-logging
+ ${opentelemetry.version}
io.opentelemetry
- opentelemetry-exporters-zipkin
- 0.7.1
+ opentelemetry-exporter-zipkin
+ ${opentelemetry.version}
io.dapr
diff --git a/examples/src/main/java/io/dapr/examples/tracing/InvokeClient.java b/examples/src/main/java/io/dapr/examples/tracing/InvokeClient.java
index 7d4c252b5..4fbec63cf 100644
--- a/examples/src/main/java/io/dapr/examples/tracing/InvokeClient.java
+++ b/examples/src/main/java/io/dapr/examples/tracing/InvokeClient.java
@@ -12,11 +12,11 @@ import io.dapr.client.domain.InvokeServiceRequest;
import io.dapr.client.domain.InvokeServiceRequestBuilder;
import io.dapr.springboot.OpenTelemetryConfig;
import io.dapr.utils.TypeRef;
-import io.grpc.Context;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.api.trace.Tracer;
+import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.sdk.OpenTelemetrySdk;
-import io.opentelemetry.trace.Span;
-import io.opentelemetry.trace.Tracer;
import java.io.IOException;
@@ -46,7 +46,7 @@ public class InvokeClient {
Span span = tracer.spanBuilder("Example's Main").setSpanKind(Span.Kind.CLIENT).startSpan();
try (DaprClient client = (new DaprClientBuilder()).build()) {
for (String message : args) {
- try (Scope scope = tracer.withSpan(span)) {
+ try (Scope scope = span.makeCurrent()) {
InvokeServiceRequestBuilder builder = new InvokeServiceRequestBuilder(SERVICE_APP_ID, "echo");
InvokeServiceRequest request
= builder.withBody(message).withHttpExtension(HttpExtension.POST).withContext(Context.current()).build();
@@ -73,7 +73,7 @@ public class InvokeClient {
}
private static void shutdown() {
- OpenTelemetrySdk.getTracerProvider().shutdown();
+ OpenTelemetrySdk.getGlobalTracerManagement().shutdown();
}
}
diff --git a/examples/src/main/java/io/dapr/examples/tracing/README.md b/examples/src/main/java/io/dapr/examples/tracing/README.md
index 7907fd58e..ced0a8f1b 100644
--- a/examples/src/main/java/io/dapr/examples/tracing/README.md
+++ b/examples/src/main/java/io/dapr/examples/tracing/README.md
@@ -175,7 +175,7 @@ private static final String SERVICE_APP_ID = "invokedemo";
}
```
-The class knows the app id for the remote application. It uses `invokeService` method to invoke API calls on the service endpoint. The request object includes an instance of `io.grpc.Context` for the proper tracing headers to be propagated.
+The class knows the app id for the remote application. It uses `invokeService` method to invoke API calls on the service endpoint. The request object includes an instance of `io.opentelemetry.context.Context` for the proper tracing headers to be propagated.
Execute the follow script in order to run the InvokeClient example, passing two messages for the remote method:
```sh
diff --git a/examples/src/main/java/io/dapr/examples/tracing/TracingDemoServiceController.java b/examples/src/main/java/io/dapr/examples/tracing/TracingDemoServiceController.java
index 1138cee9c..46aee0666 100644
--- a/examples/src/main/java/io/dapr/examples/tracing/TracingDemoServiceController.java
+++ b/examples/src/main/java/io/dapr/examples/tracing/TracingDemoServiceController.java
@@ -6,7 +6,7 @@
package io.dapr.examples.tracing;
import com.fasterxml.jackson.databind.ObjectMapper;
-import io.opentelemetry.trace.Tracer;
+import io.opentelemetry.api.trace.Tracer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
diff --git a/examples/src/main/java/io/dapr/springboot/OpenTelemetryConfig.java b/examples/src/main/java/io/dapr/springboot/OpenTelemetryConfig.java
index b31b08cc2..0be176192 100644
--- a/examples/src/main/java/io/dapr/springboot/OpenTelemetryConfig.java
+++ b/examples/src/main/java/io/dapr/springboot/OpenTelemetryConfig.java
@@ -6,12 +6,14 @@
package io.dapr.springboot;
import io.dapr.examples.invoke.http.InvokeClient;
-import io.opentelemetry.OpenTelemetry;
-import io.opentelemetry.exporters.logging.LoggingSpanExporter;
-import io.opentelemetry.exporters.zipkin.ZipkinSpanExporter;
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.api.trace.Tracer;
+import io.opentelemetry.api.trace.propagation.HttpTraceContext;
+import io.opentelemetry.context.propagation.DefaultContextPropagators;
+import io.opentelemetry.exporter.logging.LoggingSpanExporter;
+import io.opentelemetry.exporter.zipkin.ZipkinSpanExporter;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
-import io.opentelemetry.trace.Tracer;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
@@ -40,27 +42,31 @@ public class OpenTelemetryConfig {
* @return New tracer's instance.
*/
public static Tracer createTracer(String instrumentationName) {
- final Tracer tracer = OpenTelemetry.getTracer(instrumentationName);
+ OpenTelemetry.setGlobalPropagators(
+ DefaultContextPropagators.builder()
+ .addTextMapPropagator(HttpTraceContext.getInstance())
+ .build());
+ final Tracer tracer = OpenTelemetry.getGlobalTracer(instrumentationName);
// Only exports to Zipkin if it is up. Otherwise, ignore it.
// This is helpful to avoid exceptions for examples that do not require Zipkin.
if (isZipkinUp()) {
String httpUrl = String.format("http://localhost:%d", ZIPKIN_PORT);
ZipkinSpanExporter zipkinExporter =
- ZipkinSpanExporter.newBuilder()
+ ZipkinSpanExporter.builder()
.setEndpoint(httpUrl + ENDPOINT_V2_SPANS)
.setServiceName(InvokeClient.class.getName())
.build();
- OpenTelemetrySdk.getTracerProvider()
- .addSpanProcessor(SimpleSpanProcessor.newBuilder(zipkinExporter).build());
+ OpenTelemetrySdk.getGlobalTracerManagement()
+ .addSpanProcessor(SimpleSpanProcessor.builder(zipkinExporter).build());
} else {
System.out.println("WARNING: Zipkin is not available.");
}
final LoggingSpanExporter loggingExporter = new LoggingSpanExporter();
- OpenTelemetrySdk.getTracerProvider()
- .addSpanProcessor(SimpleSpanProcessor.newBuilder(loggingExporter).build());
+ OpenTelemetrySdk.getGlobalTracerManagement()
+ .addSpanProcessor(SimpleSpanProcessor.builder(loggingExporter).build());
return tracer;
}
diff --git a/examples/src/main/java/io/dapr/springboot/OpenTelemetryInterceptor.java b/examples/src/main/java/io/dapr/springboot/OpenTelemetryInterceptor.java
index 3bbdf5275..7a344240e 100644
--- a/examples/src/main/java/io/dapr/springboot/OpenTelemetryInterceptor.java
+++ b/examples/src/main/java/io/dapr/springboot/OpenTelemetryInterceptor.java
@@ -5,11 +5,12 @@
package io.dapr.springboot;
-import io.grpc.Context;
-import io.opentelemetry.OpenTelemetry;
-import io.opentelemetry.context.propagation.HttpTextFormat;
-import io.opentelemetry.trace.Span;
-import io.opentelemetry.trace.Tracer;
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.api.trace.Tracer;
+import io.opentelemetry.context.Context;
+import io.opentelemetry.context.propagation.TextMapPropagator;
+import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
@@ -18,17 +19,30 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.DispatcherType;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import java.util.Collections;
@Component
public class OpenTelemetryInterceptor implements HandlerInterceptor {
+ private static final TextMapPropagator.Getter HTTP_SERVLET_REQUEST_GETTER =
+ new TextMapPropagator.Getter<>() {
+ @Override
+ public Iterable keys(HttpServletRequest carrier) {
+ return Collections.list(carrier.getHeaderNames());
+ }
+ @Nullable
+ @Override
+ public String get(@Nullable HttpServletRequest carrier, String key) {
+ return carrier.getHeader(key);
+ }
+ };
@Autowired
Tracer tracer;
@Override
public boolean preHandle(
HttpServletRequest request, HttpServletResponse response, Object handler) {
- final HttpTextFormat textFormat = OpenTelemetry.getPropagators().getHttpTextFormat();
+ final TextMapPropagator textFormat = OpenTelemetry.getGlobalPropagators().getTextMapPropagator();
// preHandle is called twice for asynchronous request. For more information, read:
// https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/AsyncHandlerInterceptor.html
if (request.getDispatcherType() == DispatcherType.ASYNC) {
@@ -37,15 +51,7 @@ public class OpenTelemetryInterceptor implements HandlerInterceptor {
Span span;
try {
- Context context = textFormat.extract(
- Context.current(),
- request,
- new HttpTextFormat.Getter() {
- @Override
- public String get(HttpServletRequest req, String key) {
- return req.getHeader(key);
- }
- });
+ Context context = textFormat.extract(Context.current(), request, HTTP_SERVLET_REQUEST_GETTER);
request.setAttribute("opentelemetry-context", context);
span = tracer.spanBuilder(request.getRequestURI()).setParent(context).startSpan();
span.setAttribute("handler", "pre");
@@ -77,14 +83,8 @@ public class OpenTelemetryInterceptor implements HandlerInterceptor {
Context context = (Context) contextObject;
Span span = (Span) spanObject;
span.setAttribute("handler", "afterCompletion");
- final HttpTextFormat textFormat = OpenTelemetry.getPropagators().getHttpTextFormat();
- textFormat.inject(context, response,
- new HttpTextFormat.Setter() {
- @Override
- public void set(HttpServletResponse response, String key, String value) {
- response.addHeader(key, value);
- }
- });
+ final TextMapPropagator textFormat = OpenTelemetry.getGlobalPropagators().getTextMapPropagator();
+ textFormat.inject(context, response, HttpServletResponse::addHeader);
span.end();
}
diff --git a/sdk/pom.xml b/sdk/pom.xml
index 920710eb8..13b5ece6c 100644
--- a/sdk/pom.xml
+++ b/sdk/pom.xml
@@ -55,7 +55,7 @@
io.opentelemetry
opentelemetry-api
- 0.7.1
+ 0.10.0
io.opencensus
diff --git a/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java b/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java
index 1d87737f1..f9b4233ca 100644
--- a/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java
+++ b/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java
@@ -34,7 +34,6 @@ import io.grpc.CallOptions;
import io.grpc.Channel;
import io.grpc.ClientCall;
import io.grpc.ClientInterceptor;
-import io.grpc.Context;
import io.grpc.ForwardingClientCall;
import io.grpc.Metadata;
import io.grpc.Metadata.Key;
@@ -45,8 +44,9 @@ import io.opencensus.trace.SpanContext;
import io.opencensus.trace.propagation.BinaryFormat;
import io.opencensus.trace.propagation.SpanContextParseException;
import io.opencensus.trace.propagation.TextFormat;
-import io.opentelemetry.OpenTelemetry;
-import io.opentelemetry.context.propagation.HttpTextFormat;
+import io.opentelemetry.api.OpenTelemetry;
+import io.opentelemetry.context.Context;
+import io.opentelemetry.context.propagation.TextMapPropagator;
import org.jetbrains.annotations.Nullable;
import reactor.core.publisher.Mono;
@@ -66,6 +66,13 @@ import java.util.stream.Collectors;
*/
public class DaprClientGrpc extends AbstractDaprClient {
+ private static final TextMapPropagator.Setter