Author: buildbot Date: Fri Aug 23 01:58:33 2019 New Revision: 1049204 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 Fri Aug 23 01:58:33 2019 @@ -100,15 +100,7 @@ Apache CXF -- Using Apache HTrace <div id="wrapper-menu-page-bottom"> <div id="menu-page"> <!-- NavigationBar --> -<div id="navigation"><ul class="alternate"><li><a shape="rect" href="overview.html">Overview</a></li><li><a shape="rect" href="how-tos.html">How-Tos</a></li><li><a shape="rect" href="frontends.html">Frontends</a></li><li><a shape="rect" href="databindings.html">DataBindings</a></li><li><a shape="rect" href="transports.html">Transports</a></li><li><a shape="rect" href="configuration.html">Configuration</a></li><li><a shape="rect" href="debugging-and-logging.html">Debugging and Logging</a></li><li><a shape="rect" href="tools.html">Tools</a></li><li><a shape="rect" href="restful-services.html">RESTful Services</a></li><li><a shape="rect" href="wsdl-bindings.html">WSDL Bindings</a></li><li><a shape="rect" href="service-routing.html">Service Routing</a></li><li><a shape="rect" href="dynamic-languages.html">Dynamic Languages</a></li><li><a shape="rect" href="ws-support.html">WS-* Support</a></li><li><a shape="rect" href="advanced-integration.html">Advanced Integration</a></li><li><a shape ="rect" href="deployment.html">Deployment</a></li><li><a shape="rect" href="schemas-and-namespaces.html">Use of Schemas and Namespaces</a></li></ul><hr><ul class="alternate"><li><p>Search</p></li></ul><form enctype="application/x-www-form-urlencoded" method="get" id="cse-search-box" action="http://www.google.com/cse"> - <div> - <input type="hidden" name="cx" value="002890367768291051730:o99qiwa09y4"> - <input type="hidden" name="ie" value="UTF-8"> - <input type="text" name="q" size="21"> - <input type="submit" name="sa" value="Search"> - </div> -</form> -<script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&lang=en"></script><hr><ul class="alternate"><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest/">API 3.2.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest-3.1.x/">API 3.1.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/">CXF Website</a></li></ul><p> </p><p><a shape="rect" class="external-link" href="http://www.apache.org/events/current-event.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://www.apache.org/events/current-event-125x125.png" data-image-src="http://www.apache.org/events/current-event-125x125.png"></span></a></p></div> +<div id="navigation"><ul class="alternate"><li><a shape="rect" href="overview.html">Overview</a></li><li><a shape="rect" href="how-tos.html">How-Tos</a></li><li><a shape="rect" href="frontends.html">Frontends</a></li><li><a shape="rect" href="databindings.html">DataBindings</a></li><li><a shape="rect" href="transports.html">Transports</a></li><li><a shape="rect" href="configuration.html">Configuration</a></li><li><a shape="rect" href="debugging-and-logging.html">Debugging and Logging</a></li><li><a shape="rect" href="tools.html">Tools</a></li><li><a shape="rect" href="restful-services.html">RESTful Services</a></li><li><a shape="rect" href="wsdl-bindings.html">WSDL Bindings</a></li><li><a shape="rect" href="service-routing.html">Service Routing</a></li><li><a shape="rect" href="dynamic-languages.html">Dynamic Languages</a></li><li><a shape="rect" href="ws-support.html">WS-* Support</a></li><li><a shape="rect" href="advanced-integration.html">Advanced Integration</a></li><li><a shape ="rect" href="deployment.html">Deployment</a></li><li><a shape="rect" href="schemas-and-namespaces.html">Use of Schemas and Namespaces</a></li></ul><hr><ul class="alternate"><li><p>Search</p></li></ul><div class="aui-message aui-message-error"><p class="title"><strong>Error rendering macro 'html'</strong></p><p>Your Confluence administrator has disallowed the use of Javascript in the HTML macro. This setting can be changed using HTML for Confluence Configuration. Please see your administrator for details.</p></div><hr><ul class="alternate"><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest/">API 3.2.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/javadoc/latest-3.1.x/">API 3.1.x (Javadoc)</a></li><li><a shape="rect" href="http://cxf.apache.org/">CXF Website</a></li></ul><p> </p><p><a shape="rect" class="external-link" href="http://www.apache.org/events/current-event.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-em bedded-image confluence-external-resource" src="http://www.apache.org/events/current-event-125x125.png" data-image-src="http://www.apache.org/events/current-event-125x125.png"></span></a></p></div> <!-- NavigationBar --> </div> </div> @@ -119,11 +111,11 @@ Apache CXF -- Using Apache HTrace <!-- Content --> <div class="wiki-content"> <div id="ConfluenceContent"><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1546790222248 {padding: 0px;} -div.rbtoc1546790222248 ul {list-style: disc;margin-left: 0px;} -div.rbtoc1546790222248 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1566525464347 {padding: 0px;} +div.rbtoc1566525464347 ul {list-style: disc;margin-left: 0px;} +div.rbtoc1566525464347 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1546790222248"> +/*]]>*/</style></p><div class="toc-macro rbtoc1566525464347"> <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-DistributedTracinginApacheCXFusingApacheHTrace">Distributed Tracing in Apache CXF using Apache HTrace</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> @@ -131,7 +123,7 @@ div.rbtoc1546790222248 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-DistributedTracingApacheHTraceandJAX-WSsupport">Distributed Tracing Apache HTrace and JAX-WS support</a></li><li><a shape="rect" href="#UsingApacheHTrace-PropagatingTraceDetailsToLogs">Propagating Trace Details To Logs</a></li><li><a shape="rect" href="#UsingApacheHTrace-AccessingApacheHTraceAPIs">Accessing Apache HTrace APIs</a></li><li><a shape="rect" href="#UsingApacheHTrace-FutureWork">Future Work</a></li></ul> -</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>The <a shape="rect" class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a> project has retired on<strong> 2018-04-11</strong> and is not developed anymore. The Apache CXF will no longer provide the <a shape="rect" class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a> integration, staring from <strong>3.3.0</strong> release. </p></div></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 128-bit ID. <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/tracer</strong> ID’s (normally IP address and pro cess 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 and downstream work.</p><p>From implementation perspective, 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 in context of distributed tracing are <strong>spa n 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" href="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 ov erhead (or just amount of traces) by limiting them to particular conditions.</p><h1 id="UsingApacheHTrace-DistributedTracinginApacheCXFusingApacheHTrace">Distributed Tracing in Apache CXF using Apache HTrace</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 technique 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> (<strong>4.x+</strong> release branch) 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/index.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 configu rable. 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 to pass the currently active <strong>span</strong> through HTTP headers on each service invocation. If there is no active spans, the new span will be created and passed through HTTP headers on per-invocation basis. Essentially, just registering the <strong>HTraceClientProvider</strong> on the client and <strong>HTraceProvider</strong> 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>(s).</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 relative 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 ways 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 panelCont ent pdl"> +</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>The <a shape="rect" class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a> project has retired on<strong> 2018-04-11</strong> and is not developed anymore. The Apache CXF retired the <a shape="rect" class="external-link" href="http://htrace.incubator.apache.org/index.html">Apache HTrace</a> integration, starting from <strong>3.3.0</strong> release. </p></div></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="externa l-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="re ct" 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 128-bit ID. <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/tracer</strong> ID’s (normally IP address and process name). Sp ans 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 and downstream work.</p><p>From implementation perspective, 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 in context of distributed tracing are <strong>span receivers</s trong> 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" href="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 jus t amount of traces) by limiting them to particular conditions.</p><h1 id="UsingApacheHTrace-DistributedTracinginApacheCXFusingApacheHTrace">Distributed Tracing in Apache CXF using Apache HTrace</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 technique 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> (<strong> 4.x+</strong> release branch) 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/index.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 def ault 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 to pass the currently active <strong>span</strong> through HTTP headers on each service invocation. If there is no active spans, the new span will be created and passed through HTTP headers on per-invocation basis. Essentially, just registering the <strong>HTraceClientProvider</strong> on the client and <strong>HTraceProvider</strong> 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>(s).</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 be ing 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 relative 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 ways 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"> <pre class="brush: java; gutter: false; theme: Default">final Map<String, String> properties = new HashMap<String, String>(); properties.put(Tracer.SPAN_RECEIVER_CLASSES_KEY, ...); properties.put(Tracer.SAMPLER_CLASSES_KEY, ...);