Author: buildbot
Date: Tue Oct 20 23:47:04 2015
New Revision: 969690

Log:
Production update by buildbot for cxf

Modified:
    websites/production/cxf/content/cache/docs.pageCache
    websites/production/cxf/content/docs/using-apache-htrace.html

Modified: websites/production/cxf/content/cache/docs.pageCache
==============================================================================
Binary files - no diff available.

Modified: websites/production/cxf/content/docs/using-apache-htrace.html
==============================================================================
--- websites/production/cxf/content/docs/using-apache-htrace.html (original)
+++ websites/production/cxf/content/docs/using-apache-htrace.html Tue Oct 20 
23:47:04 2015
@@ -117,11 +117,11 @@ Apache CXF -- Using Apache HTrace
            <!-- Content -->
            <div class="wiki-content">
 <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1443275232486 {padding: 0px;}
-div.rbtoc1443275232486 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1443275232486 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1445384791745 {padding: 0px;}
+div.rbtoc1445384791745 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1445384791745 li {margin-left: 0px;padding-left: 0px;}
 
-/*]]>*/</style></p><div class="toc-macro rbtoc1443275232486">
+/*]]>*/</style></p><div class="toc-macro rbtoc1445384791745">
 <ul class="toc-indentation"><li><a shape="rect" 
href="#UsingApacheHTrace-Overview">Overview</a></li><li><a shape="rect" 
href="#UsingApacheHTrace-DistributedTracinginNutshell">Distributed Tracing in 
Nutshell</a></li><li><a shape="rect" 
href="#UsingApacheHTrace-DistributedTracinginApacheCXF">Distributed Tracing in 
Apache CXF</a></li><li><a shape="rect" 
href="#UsingApacheHTrace-ConfiguringClientconfigure.client">Configuring 
Client</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#UsingApacheHTrace-Configuringtracingheadernames">Configuring tracing 
header names</a></li></ul>
 </li><li><a shape="rect" 
href="#UsingApacheHTrace-ConfiguringServerconfigure.server">Configuring 
Server</a>
@@ -129,22 +129,46 @@ div.rbtoc1443275232486 li {margin-left:
 </li><li><a shape="rect" 
href="#UsingApacheHTrace-DistributedTracingInAction:UsageScenarios">Distributed 
Tracing In Action: Usage Scenarios</a>
 <ul class="toc-indentation"><li><a shape="rect" 
href="#UsingApacheHTrace-Example#1:ClientandServerwithdefaultdistributedtracingconfigured">Example
 #1: Client and Server with default distributed tracing 
configured</a></li><li><a shape="rect" 
href="#UsingApacheHTrace-Example#2:ClientandServerwithnestedtrace">Example #2: 
Client and Server with nested trace</a></li><li><a shape="rect" 
href="#UsingApacheHTrace-Example#3:ClientandServertracewithtimeline">Example 
#3: Client and Server trace with timeline</a></li><li><a shape="rect" 
href="#UsingApacheHTrace-Example#4:ClientandServerwithannotatedtrace(key/value)">Example
 #4: Client and Server with annotated trace (key/value)</a></li><li><a 
shape="rect" 
href="#UsingApacheHTrace-Example#5:ClientandServerwithparalleltrace(involvingthreadpools)">Example
 #5: Client and Server with parallel trace (involving thread 
pools)</a></li><li><a shape="rect" 
href="#UsingApacheHTrace-Example#6:ClientandServerwithasynchronousJAX-RSservice(server-side)">Exampl
 e #6: Client and Server with asynchronous JAX-RS service 
(server-side)</a></li><li><a shape="rect" 
href="#UsingApacheHTrace-Example#7:ClientandServerwithasynchronousinvocation(client-side)">Example
 #7: Client and Server with asynchronous invocation (client-side)</a></li></ul>
 </li><li><a shape="rect" 
href="#UsingApacheHTrace-DistributedTracingandJAX-WSsupport">Distributed 
Tracing and JAX-WS support</a></li><li><a shape="rect" 
href="#UsingApacheHTrace-FutureWork">Future Work</a></li></ul>
-</div><h1 id="UsingApacheHTrace-Overview">Overview</h1><p><a shape="rect" 
class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a> is a 
tracing framework intended for use with distributed systems written in java. 
Since version <strong>3.1.3</strong>, Apache CXF fully supports integration 
with <a shape="rect" class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a>, both on 
client side and server side. This section gives a complete overview on how 
distributed tracing support is supported in JAX-RS applications built on top of 
Apache CXF.</p><h1 
id="UsingApacheHTrace-DistributedTracinginNutshell">Distributed Tracing in 
Nutshell</h1><p>Distributed tracing, first described by Google in <a 
shape="rect" class="external-link" 
href="http://research.google.com/pubs/pub36356.html"; rel="nofollow">Dapper, a 
Large-Scale Distributed Systems Tracing Infrastructure</a> paper became 
increasingly important topic these days. With 
 microservices (aka SOA) gaining more and more adoption, the typical 
applications are built using dozens or even hundreds of small, distributed 
pieces. The end-to-end traceability of the requests (or any kind of work 
performed on user's behalf) is hard task to accomplish, particularly taking 
into account asyncronous or/and concurrent invocations. <a shape="rect" 
class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a> is 
inspired by <a shape="rect" class="external-link" 
href="http://research.google.com/pubs/pub36356.html"; rel="nofollow">Dapper, a 
Large-Scale Distributed Systems Tracing Infrastructure</a> paper and 
essentially is a full-fledged distributed tracing framework.</p><p>Distributed 
tracing is additional instrumentation layer on top of new or existing 
applications. In terms of distributed tracing, <strong>span</strong> represents 
a basic unit of work. For example, executing database query is a 
<strong>span</strong>. <strong>Spans</strong> 
 are identified by a unique 64-bit ID for the <strong>span</strong> and another 
64-bit ID for the <strong>trace</strong> the span is a <strong>part</strong> 
of. <strong>Spans</strong> also have other data, such as 
<strong>descriptions</strong>, <strong>timelines</strong>,<strong> key-value 
annotations</strong>, the <strong>ID</strong> of the <strong>span</strong> that 
caused them (parent), and <strong>process</strong> ID&#8217;s (normally IP 
address and process name). Spans are started and stopped, and they keep track 
of their timing information. Once <strong>span</strong> is created, it should 
be stopped at some point in the future. In turn, <strong>trace</strong> is a 
set of spans forming a tree-like structure. For example, if you are running a 
JAX-RS service, a trace might be formed by a <strong>PUT</strong> 
request.</p><p>From implementation prospective, and in context of Java 
applications, <strong>spans</strong> are attached to their threads (in general, 
thread which created the
  <strong>span</strong> should close it). However it is possible to transfer 
<strong>spans</strong> from thread to thread in order to model a complex 
execution flows. It is also possible to have many <strong>spans</strong> in the 
same thread, as long as they are properly created and closed. In the next 
sections we are going to see the examples of that.</p><p>Another two important 
concepts of in context of distributed tracing are <strong>span 
receivers</strong> and <strong>samplers</strong>. Essentially, all spans 
(including start/stop time, key/value annotations, timelines, ..) should be 
persisted (or collected) somewhere. <strong>Span receiver</strong> is a 
collector within a process that is the destination of <strong>spans</strong> 
when a trace is running (it could be a console, local file, data store, ...). 
<a shape="rect" class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a> provides 
span receivers for <a shape="rect" class="external-link" h
 ref="http://hbase.apache.org";>Apache HBase</a>, <a shape="rect" 
class="external-link" href="https://flume.apache.org/";>Apache Flume</a> and <a 
shape="rect" class="external-link" href="http://zipkin.io/"; 
rel="nofollow">Twitter Zipkin</a>. From other side, <strong>samplers</strong> 
allow to control the frequency of the tracing (all the time, never, probability 
driven, ...). Using the <strong>sampler</strong> is the way to minimize tracing 
overhead (or just amount of traces) by limiting them to particular 
conditions.</p><h1 
id="UsingApacheHTrace-DistributedTracinginApacheCXF">Distributed Tracing in 
Apache CXF</h1><p><a shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> 
is a very popular framework for building services and web APIs. No doubts, it 
is going to play even more important role in context of microservices 
architecture letting developers to quickly build and deploy individual 
JAX-RS/JAX-WS services. As it was just mentioned before, distributed tracing is 
an essential tec
 hnique to monitor the application as whole, breaking the request to individual 
service traces as it goes through and crosses the boundaries of threads, 
processes and machines.</p><p>The current integration of distributed tracing in 
<a shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> supports <a 
shape="rect" class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a> only in 
JAX-RS 2.x applications. From high-level prospective, it consists of three main 
parts:</p><ul style="list-style-type: 
square;"><li><strong>TracerContext</strong> (injectable through 
<strong>@Context</strong> annotation)</li><li><strong>HTraceProvider</strong> 
(server-side JAX-RS provider) and <strong>HTraceClientProvider</strong> 
(client-side JAX-RS provider)</li><li><strong>HTraceFeature</strong> 
(server-side <a shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> 
feature to simplify <a shape="rect" class="external-link" 
href="http://htrace.incubator.apache.org/inde
 x.html">Apache HTrace</a> configuration and integration)</li></ul><p><a 
shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> uses HTTP headers to 
hand off tracing context from the client to the service and from the service to 
service. Those headers are used internally by <strong>HTraceProvider</strong> 
and <strong>HTraceClientProvider</strong>, but are configurable. The default 
header names are declared in the TracerHeaders class:</p><ul 
style="list-style-type: square;"><li><strong>X-Trace-Id</strong>: contains a 
current trace ID</li><li><strong>X-Span-Id</strong>: contains a current span 
ID</li></ul><p>By default, <strong>HTraceProvider</strong> will try pass the 
currently active <strong>span</strong> through HTTP headers on each service 
invocation. If there is no active span, the new span will be created and passed 
through HTTP headers on per-invocation basis. Essentially, just registering the 
<strong>HTraceProvider</strong> on the client and 
<strong>HTraceClientProvider</str
 ong> on the server is enough to have tracing context to be properly passed 
everywhere. The only configuration part which is necessary are <strong>span 
receiver(s)</strong> and <strong>sampler</strong>.</p><p>It is also worth to 
mention the way <a shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> 
attaches the description to <strong>spans</strong>. With regards to the client 
integration, the description becomes a full URL being invoked prefixed by HTTP 
method, for example: <strong>GET </strong><a shape="rect" class="external-link" 
href="http://localhost:8282/books"; 
rel="nofollow"><strong>http://localhost:8282</strong>/books</a>. On the server 
side integration, the description becomes a relation JAX-RS resource path 
prefixed by HTTP method, f.e.: <strong>GET books, POST book/123</strong></p><h1 
id="UsingApacheHTrace-ConfiguringClientconfigure.client">Configuring Client 
<span class="confluence-anchor-link" 
id="UsingApacheHTrace-configure.client"></span></h1><p>There are a couple
  of way the JAX-RS client could be configured, depending on the client 
implementation. <a shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> 
provides its own <strong>WebClient</strong> which could be configured just like 
that (in future versions, there would be a simpler ways to do that using client 
specific features):</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeContent panelContent pdl">
+</div><h1 id="UsingApacheHTrace-Overview">Overview</h1><p><a shape="rect" 
class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a> is a 
tracing framework intended for use with distributed systems written in java. 
Since version <strong>3.1.3</strong>, Apache CXF fully supports integration 
with <a shape="rect" class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a>, both on 
client side and server side. This section gives a complete overview on how 
distributed tracing support is supported in JAX-RS applications built on top of 
Apache CXF.</p><h1 
id="UsingApacheHTrace-DistributedTracinginNutshell">Distributed Tracing in 
Nutshell</h1><p>Distributed tracing, first described by Google in <a 
shape="rect" class="external-link" 
href="http://research.google.com/pubs/pub36356.html"; rel="nofollow">Dapper, a 
Large-Scale Distributed Systems Tracing Infrastructure</a> paper became 
increasingly important topic these days. With 
 microservices (aka SOA) gaining more and more adoption, the typical 
applications are built using dozens or even hundreds of small, distributed 
pieces. The end-to-end traceability of the requests (or any kind of work 
performed on user's behalf) is hard task to accomplish, particularly taking 
into account asyncronous or/and concurrent invocations. <a shape="rect" 
class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a> is 
inspired by <a shape="rect" class="external-link" 
href="http://research.google.com/pubs/pub36356.html"; rel="nofollow">Dapper, a 
Large-Scale Distributed Systems Tracing Infrastructure</a> paper and 
essentially is a full-fledged distributed tracing framework.</p><p>Distributed 
tracing is additional instrumentation layer on top of new or existing 
applications. In terms of distributed tracing, <strong>span</strong> represents 
a basic unit of work. For example, executing database query is a 
<strong>span</strong>. <strong>Spans</strong> 
 are identified by a unique 64-bit ID for the <strong>span</strong> and another 
64-bit ID for the <strong>trace</strong> the span is a <strong>part</strong> 
of. <strong>Spans</strong> also have other data, such as 
<strong>descriptions</strong>, <strong>timelines</strong>,<strong> key-value 
annotations</strong>, the <strong>ID</strong> of the <strong>span</strong> that 
caused them (parent), and <strong>process</strong> ID&#8217;s (normally IP 
address and process name). Spans are started and stopped, and they keep track 
of their timing information. Once <strong>span</strong> is created, it should 
be stopped at some point in the future. In turn, <strong>trace</strong> is a 
set of spans forming a tree-like structure. For example, if you are running a 
JAX-RS service, a trace might be formed by a <strong>PUT</strong> 
request.</p><p>From implementation prospective, and in context of Java 
applications, <strong>spans</strong> are attached to their threads (in general, 
thread which created the
  <strong>span</strong> should close it). However it is possible to transfer 
<strong>spans</strong> from thread to thread in order to model a complex 
execution flows. It is also possible to have many <strong>spans</strong> in the 
same thread, as long as they are properly created and closed. In the next 
sections we are going to see the examples of that.</p><p>Another two important 
concepts of in context of distributed tracing are <strong>span 
receivers</strong> and <strong>samplers</strong>. Essentially, all spans 
(including start/stop time, key/value annotations, timelines, ..) should be 
persisted (or collected) somewhere. <strong>Span receiver</strong> is a 
collector within a process that is the destination of <strong>spans</strong> 
when a trace is running (it could be a console, local file, data store, ...). 
<a shape="rect" class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a> provides 
span receivers for <a shape="rect" class="external-link" h
 ref="http://hbase.apache.org";>Apache HBase</a>, <a shape="rect" 
class="external-link" href="https://flume.apache.org/";>Apache Flume</a> and <a 
shape="rect" class="external-link" href="http://zipkin.io/"; 
rel="nofollow">Twitter Zipkin</a>. From other side, <strong>samplers</strong> 
allow to control the frequency of the tracing (all the time, never, probability 
driven, ...). Using the <strong>sampler</strong> is the way to minimize tracing 
overhead (or just amount of traces) by limiting them to particular 
conditions.</p><h1 
id="UsingApacheHTrace-DistributedTracinginApacheCXF">Distributed Tracing in 
Apache CXF</h1><p><a shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> 
is a very popular framework for building services and web APIs. No doubts, it 
is going to play even more important role in context of microservices 
architecture letting developers to quickly build and deploy individual 
JAX-RS/JAX-WS services. As it was just mentioned before, distributed tracing is 
an essential tec
 hnique to monitor the application as whole, breaking the request to individual 
service traces as it goes through and crosses the boundaries of threads, 
processes and machines.</p><p>The current integration of distributed tracing in 
<a shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> supports <a 
shape="rect" class="external-link" 
href="http://htrace.incubator.apache.org/index.html";>Apache HTrace</a> only in 
JAX-RS 2.x applications. From high-level prospective, it consists of three main 
parts:</p><ul style="list-style-type: 
square;"><li><strong>TracerContext</strong> (injectable through 
<strong>@Context</strong> annotation)</li><li><strong>HTraceProvider</strong> 
(server-side JAX-RS provider) and <strong>HTraceClientProvider</strong> 
(client-side JAX-RS provider)</li><li><strong>HTraceFeature</strong> 
(server-side <a shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> 
feature to simplify <a shape="rect" class="external-link" 
href="http://htrace.incubator.apache.org/inde
 x.html">Apache HTrace</a> configuration and integration)</li></ul><p><a 
shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> uses HTTP headers to 
hand off tracing context from the client to the service and from the service to 
service. Those headers are used internally by <strong>HTraceProvider</strong> 
and <strong>HTraceClientProvider</strong>, but are configurable. The default 
header names are declared in the TracerHeaders class:</p><ul 
style="list-style-type: square;"><li><strong>X-Span-Id</strong>: contains a 
current span ID</li></ul><p>By default, <strong>HTraceProvider</strong> will 
try pass the currently active <strong>span</strong> through HTTP headers on 
each service invocation. If there is no active span, the new span will be 
created and passed through HTTP headers on per-invocation basis. Essentially, 
just registering the <strong>HTraceProvider</strong> on the client and 
<strong>HTraceClientProvider</strong> on the server is enough to have tracing 
context to be proper
 ly passed everywhere. The only configuration part which is necessary are 
<strong>span receiver(s)</strong> and <strong>sampler</strong>.</p><p>It is 
also worth to mention the way <a shape="rect" 
href="http://cxf.apache.org/";>Apache CXF</a> attaches the description to 
<strong>spans</strong>. With regards to the client integration, the description 
becomes a full URL being invoked prefixed by HTTP method, for example: 
<strong>GET </strong><a shape="rect" class="external-link" 
href="http://localhost:8282/books"; 
rel="nofollow"><strong>http://localhost:8282</strong>/books</a>. On the server 
side integration, the description becomes a relation JAX-RS resource path 
prefixed by HTTP method, f.e.: <strong>GET books, POST book/123</strong></p><h1 
id="UsingApacheHTrace-ConfiguringClientconfigure.client">Configuring Client 
<span class="confluence-anchor-link" 
id="UsingApacheHTrace-configure.client"></span></h1><p>There are a couple of 
way the JAX-RS client could be configured, depending on the c
 lient implementation. <a shape="rect" href="http://cxf.apache.org/";>Apache 
CXF</a> provides its own <strong>WebClient</strong> which could be configured 
just like that (in future versions, there would be a simpler ways to do that 
using client specific features):</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">final Map&lt;String, String&gt; properties = new 
HashMap&lt;String, String&gt;();
-final HTraceConfiguration conf = HTraceConfiguration.fromMap(properties);
-Trace.addReceiver(new StandardOutSpanReceiver(conf));
+properties.put(Tracer.SPAN_RECEIVER_CLASSES_KEY, ...);
+properties.put(Tracer.SAMPLER_CLASSES_KEY, ...);
+
+/**
+ * For example:
+ *
+ * properties.put(Tracer.SPAN_RECEIVER_CLASSES_KEY, 
StandardOutSpanReceiver.class.getName());
+ * properties.put(Tracer.SAMPLER_CLASSES_KEY, AlwaysSampler.class.getName());
+ */
         
-final HTraceClientProvider provider = new HTraceClientProvider(new 
AlwaysSampler(conf));
+final Tracer tracer = new Tracer.Builder()
+    .name("webclient")
+    .conf(HTraceConfiguration.fromMap(properties))
+    .build();
+                
+final HTraceClientProvider provider = new HTraceClientProvider(tracer);
 final Response response = WebClient
     .create("http://localhost:9000/catalog";, Arrays.asList(provider))
     .accept(MediaType.APPLICATION_JSON)
     .get();</pre>
 </div></div><p>The configuration based on using the standard JAX-RS 
<strong>Client</strong> is very similar:</p><div class="code panel pdl" 
style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">final Map&lt;String, String&gt; properties = new 
HashMap&lt;String, String&gt;();
-final HTraceConfiguration conf = HTraceConfiguration.fromMap(properties);
-Trace.addReceiver(new StandardOutSpanReceiver(conf));
+properties.put(Tracer.SPAN_RECEIVER_CLASSES_KEY, ...);
+properties.put(Tracer.SAMPLER_CLASSES_KEY, ...);
+
+/**
+ * For example:
+ *
+ * properties.put(Tracer.SPAN_RECEIVER_CLASSES_KEY, 
StandardOutSpanReceiver.class.getName());
+ * properties.put(Tracer.SAMPLER_CLASSES_KEY, AlwaysSampler.class.getName());
+ */
+        
+final Tracer tracer = new Tracer.Builder()
+    .name("jaxrs-client")
+    .conf(HTraceConfiguration.fromMap(properties))
+    .build();
                 
-final HTraceClientProvider provider = new HTraceClientProvider(new 
AlwaysSampler(conf));
+final HTraceClientProvider provider = new HTraceClientProvider(tracer);
 final Client client = ClientBuilder.newClient().register(provider);
 
 final Response response = client
@@ -152,39 +176,45 @@ final Response response = client
     .request()
     .accept(MediaType.APPLICATION_JSON)
     .get();</pre>
-</div></div><h3 
id="UsingApacheHTrace-Configuringtracingheadernames">Configuring tracing header 
names</h3><p>To change the default HTTP header names, used to transfer the 
tracing context from client to server, it is enough to define two properties 
only: <strong>TracerHeaders.HEADER_SPAN_ID</strong> and 
<strong>TracerHeaders.HEADER_TRACE_ID</strong>. For example:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</div></div><h3 
id="UsingApacheHTrace-Configuringtracingheadernames">Configuring tracing header 
names</h3><p>To change the default HTTP header names, used to transfer the 
tracing context from client to server, it is enough to define one property: 
<strong>TracerHeaders.HEADER_SPAN_ID</strong>. For example:</p><div class="code 
panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">final ClientConfiguration config = 
WebClient.getConfig(client);
 config.getRequestContext().put(TracerHeaders.HEADER_SPAN_ID, 
"CUSTOM_HEADER_SPAN_ID");
-config.getRequestContext().put(TracerHeaders.HEADER_TRACE_ID, 
"CUSTOM_HEADER_TRACE_ID");</pre>
+</pre>
 </div></div><div class="confluence-information-macro 
confluence-information-macro-warning"><span class="aui-icon aui-icon-small 
aui-iconfont-error confluence-information-macro-icon"></span><div 
class="confluence-information-macro-body"><p>It is very important to keep 
client and server HTTP headers configuration in sync, otherwise the server 
won't be able to establish the current tracing context 
properly.</p></div></div><h1 
id="UsingApacheHTrace-ConfiguringServerconfigure.server">Configuring Server 
<span class="confluence-anchor-link" 
id="UsingApacheHTrace-configure.server"></span></h1><p>Server configuration is 
a bit simpler than client one thanks to the feature class 
available,&#160;<strong>HTraceFeature</strong>. Depending on the way 
the&#160;<a shape="rect" href="http://cxf.apache.org/";>Apache CXF</a> is used 
to configure JAX-RS services, it could be part of JAX-RS application 
configuration, for example:</p><div class="code panel pdl" style="border-width: 
1px;"><div class="codeCo
 ntent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">@ApplicationPath("/")
 public class CatalogApplication extends Application {
     @Override
     public Set&lt;Object&gt; getSingletons() {
-        final Map&lt;String, String&gt; properties = new HashMap&lt;String, 
String&gt;();
-        properties.put("span.receiver", 
StandardOutSpanReceiver.class.getName());
-        properties.put("sampler", AlwaysSampler.class.getName());
+        final HashMap&lt;String, String&gt; properties = new 
HashMap&lt;String, String&gt;();
+        properties.put(Tracer.SPAN_RECEIVER_CLASSES_KEY, ...);
+        properties.put(Tracer.SAMPLER_CLASSES_KEY, ...);
+       
+        /**
+         * For example:
+         *
+         * properties.put(Tracer.SPAN_RECEIVER_CLASSES_KEY, 
StandardOutSpanReceiver.class.getName());
+         * properties.put(Tracer.SAMPLER_CLASSES_KEY, 
AlwaysSampler.class.getName());
+         */
 
-        return new HashSet&lt;Object&gt;(
+       &#160;return new HashSet&lt;Object&gt;(
             Arrays.asList(
-                new HTraceFeature(HTraceConfiguration.fromMap(properties))
+                new HTraceFeature(HTraceConfiguration.fromMap(properties), 
"tracer")
             )
         );
     }
 }</pre>
 </div></div><p>Or it could be configured using 
<strong>JAXRSServerFactoryBean</strong> as well, for example:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">final Map&lt;String, String&gt; properties = new 
HashMap&lt;String, String&gt;();
-properties.put("span.receiver", StandardOutSpanReceiver.class.getName());
-properties.put("sampler", AlwaysSampler.class.getName());
+properties.put(Tracer.SPAN_RECEIVER_CLASSES_KEY, ...);
+properties.put(Tracer.SAMPLER_CLASSES_KEY, ...);
 
 final JAXRSServerFactoryBean factory = 
RuntimeDelegate.getInstance().createEndpoint(/* application instance */, 
JAXRSServerFactoryBean.class);
-factory.setFeatures(Arrays.&lt; Feature &gt;asList(new 
HTraceFeature(HTraceConfiguration.fromMap(properties))));
+factory.setFeatures(Arrays.&lt; Feature &gt;asList(new 
HTraceFeature(HTraceConfiguration.fromMap(properties), "tracer")));
 ...
 return factory.create();</pre>
-</div></div><p>Once the <strong>span receiver(s)</strong> and 
<strong>sampler</strong> are properly configured, all generated 
<strong>spans</strong> are going to be collected and available for analysis 
and/or visualization.</p><h3 
id="UsingApacheHTrace-Configuringtracingheadernames.1">Configuring tracing 
header names</h3><p>As with the client, to change the default HTTP header 
names, used to establish the tracing context on the server, it is enough to 
define two properties only: <strong>TracerHeaders.HEADER_SPAN_ID</strong> and 
<strong>TracerHeaders.HEADER_TRACE_ID</strong>. For example:</p><div 
class="code panel pdl" style="border-width: 1px;"><div class="codeContent 
panelContent pdl">
+</div></div><p>Once the <strong>span receiver(s)</strong> and 
<strong>sampler</strong> are properly configured, all generated 
<strong>spans</strong> are going to be collected and available for analysis 
and/or visualization.</p><h3 
id="UsingApacheHTrace-Configuringtracingheadernames.1">Configuring tracing 
header names</h3><p>As with the client, to change the default HTTP header 
names, used to establish the tracing context on the server, it is enough to 
define single property: <strong>TracerHeaders.HEADER_SPAN_ID</strong>. For 
example:</p><div class="code panel pdl" style="border-width: 1px;"><div 
class="codeContent panelContent pdl">
 <pre class="brush: java; gutter: false; theme: Default" 
style="font-size:12px;">final Map&lt;String, Object&gt; headers = new 
HashMap&lt;String, Object&gt;();
 headers.put(TracerHeaders.HEADER_SPAN_ID, "CUSTOM_HEADER_SPAN_ID");
-headers.put(TracerHeaders.HEADER_TRACE_ID, "CUSTOM_HEADER_TRACE_ID");
             
 final JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
 sf.setProperties(headers);


Reply via email to