...
As it was mentioned before, you may use GlobalTracer utility class to pass the tracer around so, for example, any JAX-WS service will be able to retrieve the current tracer by invoking GlobalTracer.get() method.
Distributed Tracing with OpenTracing and OSGi
Most of the distributed tracers compatible with OpenTracing API could be deployed into OSGi container and as such, the integration is fully available for Apache CXF services running inside the container. For a complete example please take a look on jax_rs_tracing_opentracing_osgi sample project, but here is the typical OSGi Blueprint snippet in case of Jaeger.
Code Block | ||||
---|---|---|---|---|
| ||||
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cxf="http://cxf.apache.org/blueprint/core"
xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd
http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/blueprint/jaxrs.xsd">
<bean id="tracingFeature" class="org.apache.cxf.tracing.opentracing.jaxrs.OpenTracingFeature">
<argument index="0">
<bean factory-ref="withReporter" factory-method="getTracer" />
</argument>
</bean>
<bean id="samplerBuilder" class="io.jaegertracing.Configuration.SamplerConfiguration" />
<bean id="withType" factory-ref="samplerBuilder" factory-method="withType">
<argument index="0" value="const"/>
</bean>
<bean id="sampler" factory-ref="withType" factory-method="withParam">
<argument index="0">
<bean class="java.lang.Integer">
<argument value="1" />
</bean>
</argument>
</bean>
<bean id="senderBuilder" class="io.jaegertracing.Configuration.SenderConfiguration" />
<bean id="sender" factory-ref="senderBuilder" factory-method="withEndpoint">
<argument index="0" value="http://localhost:14268/api/traces"/>
</bean>
<bean id="reporterBuilder" class="io.jaegertracing.Configuration.ReporterConfiguration" />
<bean id="reporter" factory-ref="reporterBuilder" factory-method="withSender">
<argument index="0" ref="sender"/>
</bean>
<bean id="builder" class="io.jaegertracing.Configuration">
<argument index="0" value="cxf-server" />
</bean>
<bean id="withSampler" factory-ref="builder" factory-method="withSampler">
<argument index="0" ref="sampler"/>
</bean>
<bean id="withReporter" factory-ref="withSampler" factory-method="withReporter">
<argument index="0" ref="reporter"/>
</bean>
<cxf:bus>
<cxf:features>
<cxf:logging />
</cxf:features>
</cxf:bus>
<jaxrs:server id="catalogServer" address="/">
<jaxrs:serviceBeans>
...
</jaxrs:serviceBeans>
<jaxrs:providers>
<ref component-id="tracingFeature" />
</jaxrs:providers>
</jaxrs:server>
</blueprint> |