org.eclipse.microprofile.opentracing.Traced Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of microprofile-opentracing-api Show documentation
Show all versions of microprofile-opentracing-api Show documentation
OpenTracing behaviors and APIs for MicroProfile :: API
The newest version!
/*
* Copyright (c) 2017 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* You may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eclipse.microprofile.opentracing;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import jakarta.enterprise.util.Nonbinding;
import jakarta.interceptor.InterceptorBinding;
/**
* This annotation allows fine-tuned control over which classes and methods create OpenTracing spans. By default, all
* JAX-RS methods implicitly have this annotation.
*
* This annotation applies to a class or a method. When applied to a class, this annotation is applied to all methods of
* the class. If the annotation is applied to a class and method then the annotation applied to the method takes
* precedence. The annotation starts a Span at the beginning of the method, and finishes the Span at the end of the
* method.
*
* This annotation also has {@code InterceptorBinding} for frameworks to process all of each application's explicit
* {@code Traced} annotations.
*
* @author Steve Fontes
*/
@Documented
@InterceptorBinding
@Target({TYPE, METHOD})
@Retention(RUNTIME)
public @interface Traced {
/**
* Defaults to true. If @Traced
is specified at the class level, then @Traced(false)
is
* used to annotate specific methods to disable creation of a Span for those methods. By default all JAX-RS endpoint
* methods are traced. To disable Span creation of a specific JAX-RS endpoint, the @Traced(false) annotation can be
* used.
*
* When the @Traced(false)
annotation is used for a JAX-RS endpoint method, the upstream SpanContext
* will not be extracted. Any Spans created, either automatically for outbound requests, or explicitly using an
* injected Tracer, will not have an upstream parent Span in the Span hierarchy.
*
* @return whether this method should be traced.
*/
@Nonbinding
boolean value() default true;
/**
* Default is "". If the @Traced
annotation finds the operationName as "", the default operation name
* is used. For a JAX-RS endpoint method, it is
* ${HTTP method}:${package name}.${class name}.${method name}
. If the annotated method is not a JAX-RS
* endpoint, the default operation name of the new Span for the method is:
* ${package name}.${class name}.${method name}
. If operationName is specified on a class, that
* operationName will be used for all methods of the class unless a method explicitly overrides it with its own
* operationName.
*
* @return the name to give the Span for this trace point.
*/
@Nonbinding
String operationName() default "";
}