Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
final SdkTracerProvider sdkTracerProvider = SdkTracerProvider
     .builder()
     ...
     .build();

final OpenTelemetrySdkOpenTelemetry openTelemetrySdkopenTelemetry = OpenTelemetrySdk
    .builder()
    .setTracerProvider(sdkTracerProvider)
    ...
    .buildAndRegisterGlobal();

final Tracer tracer =  openTelemetrySdkopenTelemetry.getTracer("web-client");
                  
Response response = WebClient
    .create("http://localhost:9000/catalog", Arrays.asList(new OpenTelemetryClientProvider(openTelemetry,  tracer))
    .accept(MediaType.APPLICATION_JSON)
    .get();

...

Code Block
java
java
final SdkTracerProvider sdkTracerProvider = SdkTracerProvider
     .builder()
     ...
     .build();

final OpenTelemetrySdkOpenTelemetry openTelemetrySdkopenTelemetry = OpenTelemetrySdk
    .builder()
    .setTracerProvider(sdkTracerProvider)
    ...
    .buildAndRegisterGlobal();

final Tracer tracer =  openTelemetrySdkopenTelemetry.getTracer("jaxrs-client");
final OpenTelemetryClientProvider provider = new OpenTelemetryClientProvider(openTelemetrySdkopenTelemetry, tracer);
final Client client = ClientBuilder.newClient().register(provider);
 
final Response response = client
    .target("http://localhost:9000/catalog")
    .request()
    .accept(MediaType.APPLICATION_JSON)
    .get();

Configuring Server

Server

...

configuration is a bit simpler than the client one thanks to the feature class available, OpenTelemetryFeature. Depending on the way the Apache CXF is used to configure JAX-RS services, it could be part of JAX-RS application configuration, for example:

Code Block
java
java
@ApplicationPath("/")
public class CatalogApplication extends Application {
    @Override
    public Set<Object> getSingletons() {
        final SdkTracerProvider sdkTracerProvider = SdkTracerProvider
           .builder()
           ...
           .build();

       final OpenTelemetry openTelemetry = OpenTelemetrySdk
           .builder()
           .setTracerProvider(sdkTracerProvider)
           ...
           .buildAndRegisterGlobal();

        final Tracer tracer =  openTelemetry.getTracer("tracer");
        return new HashSet<>(
                Arrays.asList(
                    new OpenTelemetryFeature(openTelemetry,  tracer)
                )
            );
    }
}

Or it could be configured using JAXRSServerFactoryBean as well, for example:

Code Block
java
java
final SdkTracerProvider sdkTracerProvider = SdkTracerProvider
    .builder()
    ...
    .build();

final OpenTelemetry openTelemetry = OpenTelemetrySdk
    .builder()
    .setTracerProvider(sdkTracerProvider)
    ...
    .buildAndRegisterGlobal(); 
 
final Tracer tracer =  openTelemetry.getTracer("tracer"); 
final JAXRSServerFactoryBean factory = RuntimeDelegate.getInstance().createEndpoint(/* application instance */, JAXRSServerFactoryBean.class);
factory.setProvider(new OpenTelemetryFeature(openTelemetry,  tracer));
...
return factory.create();

Once the span processor(s) and sampler are properly configured, all generated spans are going to be collected and available for analysis and/or visualization.TBD

Distributed Tracing In Action: Usage Scenarios

...