1*a24ffb47SSadaf Ebrahimi# OpenCensus JAX-RS 2*a24ffb47SSadaf Ebrahimi[![Build Status][travis-image]][travis-url] 3*a24ffb47SSadaf Ebrahimi[![Windows Build Status][appveyor-image]][appveyor-url] 4*a24ffb47SSadaf Ebrahimi[![Maven Central][maven-image]][maven-url] 5*a24ffb47SSadaf Ebrahimi 6*a24ffb47SSadaf EbrahimiThe *OpenCensus JAX-RS for Java* is a container and client filter for trace instrumentation when using JAX-RS for REST implementation in Java. 7*a24ffb47SSadaf Ebrahimi 8*a24ffb47SSadaf Ebrahimi## Quickstart 9*a24ffb47SSadaf Ebrahimi 10*a24ffb47SSadaf Ebrahimi### Add the dependencies to your project 11*a24ffb47SSadaf Ebrahimi 12*a24ffb47SSadaf EbrahimiFor Maven add to your `pom.xml`: 13*a24ffb47SSadaf Ebrahimi```xml 14*a24ffb47SSadaf Ebrahimi<dependencies> 15*a24ffb47SSadaf Ebrahimi <dependency> 16*a24ffb47SSadaf Ebrahimi <groupId>io.opencensus</groupId> 17*a24ffb47SSadaf Ebrahimi <artifactId>opencensus-api</artifactId> 18*a24ffb47SSadaf Ebrahimi <version>0.28.3</version> 19*a24ffb47SSadaf Ebrahimi </dependency> 20*a24ffb47SSadaf Ebrahimi <dependency> 21*a24ffb47SSadaf Ebrahimi <groupId>io.opencensus</groupId> 22*a24ffb47SSadaf Ebrahimi <artifactId>opencensus-contrib-http-jaxrs</artifactId> 23*a24ffb47SSadaf Ebrahimi <version>0.28.3</version> 24*a24ffb47SSadaf Ebrahimi </dependency> 25*a24ffb47SSadaf Ebrahimi</dependencies> 26*a24ffb47SSadaf Ebrahimi``` 27*a24ffb47SSadaf Ebrahimi 28*a24ffb47SSadaf EbrahimiFor Gradle add to your dependencies: 29*a24ffb47SSadaf Ebrahimi```groovy 30*a24ffb47SSadaf Ebrahimicompile 'io.opencensus:opencensus-api:0.28.3' 31*a24ffb47SSadaf Ebrahimicompile 'io.opencensus:opencensus-contrib-http-jaxrs:0.28.3' 32*a24ffb47SSadaf Ebrahimi``` 33*a24ffb47SSadaf Ebrahimi 34*a24ffb47SSadaf Ebrahimi### Usage 35*a24ffb47SSadaf Ebrahimi 36*a24ffb47SSadaf Ebrahimi#### Container Filter 37*a24ffb47SSadaf Ebrahimi 38*a24ffb47SSadaf EbrahimiThe container filter should be added to the JAX-RS `Application` class and endpoints should be annotated 39*a24ffb47SSadaf Ebrahimiwith `@Metrics` annotation. 40*a24ffb47SSadaf Ebrahimi 41*a24ffb47SSadaf Ebrahimi```java 42*a24ffb47SSadaf Ebrahimiclass MyApplication extends Application { 43*a24ffb47SSadaf Ebrahimi @Override 44*a24ffb47SSadaf Ebrahimi public Set<Class<?>> getClasses() { 45*a24ffb47SSadaf Ebrahimi Set<Class<?>> providers = new HashSet<>(super.getClasses()); 46*a24ffb47SSadaf Ebrahimi providers.add(JaxrsContainerFilter.class); 47*a24ffb47SSadaf Ebrahimi return providers; 48*a24ffb47SSadaf Ebrahimi } 49*a24ffb47SSadaf Ebrahimi} 50*a24ffb47SSadaf Ebrahimi``` 51*a24ffb47SSadaf Ebrahimi 52*a24ffb47SSadaf EbrahimiIt is possible to customize the filter by using the custom constructor. The below will 53*a24ffb47SSadaf Ebrahimiuse the `B3Format` for context propagation instead of the W3C text context format. 54*a24ffb47SSadaf Ebrahimi 55*a24ffb47SSadaf Ebrahimi```java 56*a24ffb47SSadaf Ebrahimiclass MyApplication extends Application { 57*a24ffb47SSadaf Ebrahimi @Override 58*a24ffb47SSadaf Ebrahimi public Set<Object> getSingletons() { 59*a24ffb47SSadaf Ebrahimi Set<Object> singletons = new HashSet<>(super.getSingletons()); 60*a24ffb47SSadaf Ebrahimi singletons.add(new JaxrsContainerFilter( 61*a24ffb47SSadaf Ebrahimi new JaxrsContainerExtractor(), 62*a24ffb47SSadaf Ebrahimi Tracing.getPropagationComponent().getB3Format(), 63*a24ffb47SSadaf Ebrahimi /* publicEndpoint= */ true)); 64*a24ffb47SSadaf Ebrahimi return singletons; 65*a24ffb47SSadaf Ebrahimi } 66*a24ffb47SSadaf Ebrahimi} 67*a24ffb47SSadaf Ebrahimi``` 68*a24ffb47SSadaf Ebrahimi 69*a24ffb47SSadaf Ebrahimi```java 70*a24ffb47SSadaf Ebrahimi@Metrics 71*a24ffb47SSadaf Ebrahimi@Path("/resource") 72*a24ffb47SSadaf Ebrahimiclass MyResource { 73*a24ffb47SSadaf Ebrahimi @GET 74*a24ffb47SSadaf Ebrahimi public Response resource() { 75*a24ffb47SSadaf Ebrahimi ... 76*a24ffb47SSadaf Ebrahimi } 77*a24ffb47SSadaf Ebrahimi} 78*a24ffb47SSadaf Ebrahimi``` 79*a24ffb47SSadaf Ebrahimi 80*a24ffb47SSadaf EbrahimiThe annotation may also be applied on method level. 81*a24ffb47SSadaf Ebrahimi 82*a24ffb47SSadaf Ebrahimi#### Client Filter 83*a24ffb47SSadaf Ebrahimi 84*a24ffb47SSadaf EbrahimiFilter should be added to the `WebTarget` instance when using JAX-RS as client. 85*a24ffb47SSadaf Ebrahimi 86*a24ffb47SSadaf Ebrahimi```java 87*a24ffb47SSadaf EbrahimiWebTarget target = ClientBuilder.newClient().target("endpoint"); 88*a24ffb47SSadaf Ebrahimitarget.register(JaxrsClientFilter.class); 89*a24ffb47SSadaf Ebrahimi``` 90*a24ffb47SSadaf Ebrahimi 91*a24ffb47SSadaf EbrahimiIt is possible to customize the filter using the custom constructor. The 92*a24ffb47SSadaf Ebrahimibelow will use the `B3Format` for context propagation instead of the default W3C 93*a24ffb47SSadaf Ebrahimitext context format. 94*a24ffb47SSadaf Ebrahimi 95*a24ffb47SSadaf Ebrahimi```java 96*a24ffb47SSadaf EbrahimiWebTarget target = ClientBuilder.newClient().target("endpoint"); 97*a24ffb47SSadaf Ebrahimitarget.register(new JaxrsClientFilter( 98*a24ffb47SSadaf Ebrahimi new JaxrsContainerExtractor(), 99*a24ffb47SSadaf Ebrahimi Tracing.getPropagationComponent().getB3Format())); 100*a24ffb47SSadaf Ebrahimi``` 101*a24ffb47SSadaf Ebrahimi 102*a24ffb47SSadaf Ebrahimi 103*a24ffb47SSadaf Ebrahimi[travis-image]: https://travis-ci.org/census-instrumentation/opencensus-java.svg?branch=master 104*a24ffb47SSadaf Ebrahimi[travis-url]: https://travis-ci.org/census-instrumentation/opencensus-java 105*a24ffb47SSadaf Ebrahimi[appveyor-image]: https://ci.appveyor.com/api/projects/status/hxthmpkxar4jq4be/branch/master?svg=true 106*a24ffb47SSadaf Ebrahimi[appveyor-url]: https://ci.appveyor.com/project/opencensusjavateam/opencensus-java/branch/master 107*a24ffb47SSadaf Ebrahimi[maven-image]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-contrib-http-jetty-client/badge.svg 108*a24ffb47SSadaf Ebrahimi[maven-url]: https://maven-badges.herokuapp.com/maven-central/io.opencensus/opencensus-contrib-jetty-client 109