...
Distributed Tracing with OpenTelemetry and JAX-WS support
Distributed tracing in the Apache CXF is build primarily around JAX-RS 2.x implementation. However, JAX-WS is also supported but it requires to write some boiler-plate code and use OpenTelemetry Java SDK directly (the JAX-WS integration is going to be enhanced in the future). Essentially, from the server-side prospective the in/out interceptors, OpenTelemetryStartInterceptor and OpenTelemetryStopInterceptor respectively, should be configured as part of interceptor chains, either manually or using OpenTelemetryFeature. For example:
Code Block | ||||
---|---|---|---|---|
| ||||
final SdkTracerProvider sdkTracerProvider = SdkTracerProvider
.builder()
...
.build();
final OpenTelemetry openTelemetry = OpenTelemetrySdk
.builder()
.setTracerProvider(sdkTracerProvider)
...
.buildAndRegisterGlobal();
final Tracer tracer = openTelemetry.getTracer("tracer");
final JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
...
sf.getFeatures().add(new OpenTelemetryFeature(openTelemetry, tracer));
...
sf.create(); |
Similarly to the server-side, client-side needs own set of out/in interceptors, OpenTelemetryClientStartInterceptor and OpenTelemetryClientStopInterceptor (or OpenTelemetryClientFeature). Please notice the difference from server-side: OpenTelemetryClientStartInterceptor becomes out-interceptor while OpenTelemetryClientStopInterceptor becomes in-interceptor. For example:
Code Block | ||||
---|---|---|---|---|
| ||||
final SdkTracerProvider sdkTracerProvider = SdkTracerProvider
.builder()
...
.build();
final OpenTelemetry openTelemetry = OpenTelemetrySdk
.builder()
.setTracerProvider(sdkTracerProvider)
...
.buildAndRegisterGlobal();
final Tracer tracer = openTelemetry.getTracer("tracer");
final JaxWsProxyFactoryBean sf = new JaxWsProxyFactoryBean();
...
sf.getFeatures().add(new OpenTelemetryClientFeature(openTelemetry, tracer));
...
sf.create(); |
As it was mentioned before, you may use GlobalOpenTelemetry utility class to pass the tracer around so, for example, any JAX-WS service will be able to retrieve the current tracer by invoking GlobalOpenTelemetry.get() method.TBD
Distributed Tracing with OpenTelemetry and OSGi
...