From 718c4c207ca923a3ccdf44a9bba0bed2af9add45 Mon Sep 17 00:00:00 2001
From: "tim.quinn@oracle.com"
+ * The {@link jakarta.enterprise.inject.spi.configurator.AnnotatedConstructorConfigurator} and + * {@link jakarta.enterprise.inject.spi.configurator.AnnotatedMethodConfigurator} interfaces share no common ancestor, so + * we have two subtypes of discovery, one for each: + * {@link io.helidon.microprofile.metrics.MetricAnnotationDiscoveryImpl.OfConstructor OfConstructor} and + * {@link io.helidon.microprofile.metrics.MetricAnnotationDiscoveryObserver.MetricAnnotationDiscovery.OfMethod ofMethod}. + *
+ * + */ +abstract class MetricAnnotationDiscoveryImpl implements MetricAnnotationDiscoveryObserver.MetricAnnotationDiscovery { + + static+ * Implementations make themselves known via the Java service loader mechanism. + *
+ *+ * Once registered, the observer is notified later, during {@code ProcessAnnotatedType}, for each metric annotation that is + * discovered to apply to an executable, via a + * {@link io.helidon.microprofile.metrics.MetricAnnotationDiscoveryObserver.MetricAnnotationDiscovery} event. + *
+ */ +public interface MetricAnnotationDiscoveryObserver { + + /** + * Notifies the observer that a metric annotation has been discovered to apply to a constructor or method. + * + * @param metricAnnotationDiscovery the discovery event + */ + void onDiscovery(MetricAnnotationDiscovery metricAnnotationDiscovery); + + /** + * Conveys information about the discovery of a metric annotation as it applies to an executable. + *+ * The discovery event describes the executable to which the metric annotation applies. + * This is not necessarily where the annotation appears, because a metric annotation which appears on the + * type applies to all methods and constructors on that type. + * In that case, the discovery event describes the discovery of the metric as applied + * to the method or constructor, not to the type itself. + * Further, a metric annotation declared at the type level triggers a separate discovery event for each constructor + * and method on the type. + *
+ */ + interface MetricAnnotationDiscovery { + + /** + * Returns the configurator for the annotated type containing the site to which the metric annotation applies. + * + * @return the configurator for the annotated type + */ + AnnotatedTypeConfigurator> annotatedTypeConfigurator(); + + /** + * Returns the {@link java.lang.annotation.Annotation} object for the metric annotation discovered. + * + * @return the annotation object for the metrics annotation + */ + Annotation annotation(); + + /** + * Requests that the default metrics interceptor not be used for the metric corresponding to the indicated annotation + * which appears on this method. + */ + void disableDefaultInterceptor(); + + /** + * Discovery of an annotation of interest on a constructor. + */ + interface OfConstructor extends MetricAnnotationDiscovery { + + /** + * + * @return the configurator for the constructor on which an annotation of interest appears + */ + AnnotatedConstructorConfigurator> configurator(); + } + + /** + * Discovery of an annotation of interest on a method. + */ + interface OfMethod extends MetricAnnotationDiscovery { + + /** + * + * @return the configurotor for the method on which an annotation of interest appears + */ + AnnotatedMethodConfigurator> configurator(); + } + } +} diff --git a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricAnnotationInfo.java b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricAnnotationInfo.java index 70b5ae433a5..c6edce347e4 100644 --- a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricAnnotationInfo.java +++ b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricAnnotationInfo.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Oracle and/or its affiliates. + * Copyright (c) 2021, 2022 Oracle and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -123,6 +123,10 @@ Class extends Annotation> annotationType() { return annotationType; } + Metadata metadata() { + return metadata; + } + Metric register(MetricRegistry registry) { return registration.register(registry, metadata, tags); } diff --git a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricRegistrationObserver.java b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricRegistrationObserver.java new file mode 100644 index 00000000000..16c13b49f24 --- /dev/null +++ b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricRegistrationObserver.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2022 Oracle and/or its affiliates. + * + * 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 io.helidon.microprofile.metrics; + +import io.helidon.microprofile.metrics.MetricAnnotationDiscoveryObserver.MetricAnnotationDiscovery; + +import org.eclipse.microprofile.metrics.Metadata; +import org.eclipse.microprofile.metrics.Metric; +import org.eclipse.microprofile.metrics.MetricID; + +/** + * Observer of the registration of metrics due to metric annotations applied to executables--constructors and methods. + *+ * Implementations make themselves known via the Java service loader mechanism. + *
+ *+ * Once registered, the observer is notified each time a metric required by a metric annotation is registered. + *
+ */ +public interface MetricRegistrationObserver { + + /** + * Notifies the observer that a metric has been registered due to a metric annotation that applies to an executable. + * + * @param discovery the {@link MetricAnnotationDiscovery} + * triggering this metric registration + * @param metadata the metrics {@link org.eclipse.microprofile.metrics.Metadata} for the indicated metric + * @param metricId the {@link org.eclipse.microprofile.metrics.MetricID} for the indicated metric + * @param metric the metric associated with the discovery index + */ + void onRegistration(MetricAnnotationDiscovery discovery, Metadata metadata, MetricID metricId, Metric metric); +} diff --git a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricUtil.java b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricUtil.java index 126faeb3137..9b46662ace3 100644 --- a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricUtil.java +++ b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2021 Oracle and/or its affiliates. + * Copyright (c) 2018, 2022 Oracle and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,77 +32,19 @@ import jakarta.enterprise.inject.spi.Annotated; import jakarta.enterprise.inject.spi.AnnotatedMember; -import jakarta.enterprise.inject.spi.AnnotatedMethod; import jakarta.enterprise.inject.spi.AnnotatedType; -import org.eclipse.microprofile.metrics.Metadata; import org.eclipse.microprofile.metrics.MetricRegistry; -import org.eclipse.microprofile.metrics.MetricType; import org.eclipse.microprofile.metrics.Tag; -import org.eclipse.microprofile.metrics.annotation.ConcurrentGauge; -import org.eclipse.microprofile.metrics.annotation.Counted; -import org.eclipse.microprofile.metrics.annotation.Metered; -import org.eclipse.microprofile.metrics.annotation.SimplyTimed; -import org.eclipse.microprofile.metrics.annotation.Timed; /** * Class MetricUtil. */ -public final class MetricUtil { +final class MetricUtil { private static final Logger LOGGER = Logger.getLogger(MetricUtil.class.getName()); private MetricUtil() { } - /** - * DO NOT USE THIS METHOD please, it will be removed. - *- * Instead, see {@link MatchingType}. - *
- * - * @param element element - * @param annotClass annotation class - * @param clazz class - * @param
* Earlier versions of this class detected app-provided producer fields and methods and triggered creation and registration
- * of the corresponding metrics upon such detection. As explained in
- * https://github.com/eclipse/microprofile-metrics/issues/456 and https://github.com/eclipse/microprofile-metrics/pull/594
+ * of the corresponding metrics upon such detection. As explained in this
+ * MP metrics issue
+ * and this MP metrics PR,
* this probably was never correct and does not work because {@code @Metric} no longer applies to producers per the
* MP metrics 3.0 spec. The issue and PR discussion explain how developers who provide their own producers should use
* CDI qualifiers on the producers (and, therefore, injection points) to avoid ambiguity between their own producers and
@@ -122,12 +128,16 @@ public class MetricsCdiExtension extends HelidonRestCdiExtension
+ * This implementation + *
*/ -class MetricAnnotationDiscoveryObserverImpl implements MetricAnnotationDiscoveryObserver { +class GrpcMetricAnnotationDiscoveryObserverImpl implements MetricAnnotationDiscoveryObserver { - static MetricAnnotationDiscoveryObserverImpl instance() { - return MetricAnnotationDiscoveryObserverImplFactory.instance(); + static GrpcMetricAnnotationDiscoveryObserverImpl instance() { + return GrpcMetricAnnotationDiscoveryObserverImplFactory.instance(); } private final Map- * This extension will process annotated types that are gRPC methods and - * ensure that those methods re properly intercepted with a gRPC metrics - * {@link io.grpc.ServerInterceptor}. - *
- * If a method is discovered that is annotated with both a metrics annotation and a gRPC
- * method type annotation they metrics annotation will be effectively removed from the CDI
- * bean so that normal Helidon metrics interceptors do not also intercept that method.
- */
-public class GrpcMetricsCdiExtension implements Extension {
-
-// /**
-// * Determine whether a method is annotated with both a metrics annotation
-// * and an annotation of type {@link io.helidon.microprofile.grpc.core.GrpcMethod}.
-// *
-// * @param configurator the {@link AnnotatedMethodConfigurator} representing
-// * the annotated method
-// *
-// * @return {@code true} if the method is a timed gRPC method
-// */
-// static boolean isRpcMethod(AnnotatedMethodConfigurator> configurator, Class extends Annotation> type) {
-// AnnotatedMethod method = AnnotatedMethod.create(configurator.getAnnotated().getJavaMember());
-// GrpcMethod rpcMethod = method.firstAnnotationOrMetaAnnotation(GrpcMethod.class);
-// if (rpcMethod != null) {
-// Annotation annotation = method.firstAnnotationOrMetaAnnotation(type);
-// return annotation != null;
-// }
-// return false;
-// }
-}
diff --git a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/MetricsConfigurer.java b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/MetricsConfigurer.java
index e863ce204c4..15da66920d5 100644
--- a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/MetricsConfigurer.java
+++ b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/MetricsConfigurer.java
@@ -22,7 +22,6 @@
import java.util.function.Supplier;
import java.util.logging.Level;
import java.util.logging.Logger;
-import java.util.stream.Collectors;
import io.helidon.grpc.metrics.GrpcMetrics;
import io.helidon.grpc.server.ServiceDescriptor;
@@ -69,15 +68,6 @@ public class MetricsConfigurer
SimplyTimed.class, MetricInfo.create(GrpcMetrics::simplyTimed, SimpleTimer.class)
);
- // Package-private for testing.
- record MetricInfo(Supplier
- * Once registered, the observer is notified later, during {@code ProcessAnnotatedType}, for each metric annotation that is + * Observers are notified during {@code ProcessAnnotatedType}, for each metric annotation that is * discovered to apply to an executable, via a * {@link io.helidon.microprofile.metrics.MetricAnnotationDiscoveryObserver.MetricAnnotationDiscovery} event. *
@@ -71,9 +71,9 @@ interface MetricAnnotationDiscovery { Annotation annotation(); /** - * Requests that the discovery be discarded, triggering no metric registration. + * Requests that the discovery be deactivated, thereby preventing it from triggering a metric registration. */ - void discard(); + void deactivate(); /** * Requests that the default metrics interceptor not be used for the metric corresponding to the indicated annotation diff --git a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricsCdiExtension.java b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricsCdiExtension.java index 601ddc7908c..163c6db5ce8 100644 --- a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricsCdiExtension.java +++ b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricsCdiExtension.java @@ -233,7 +233,7 @@ private void registerMetricsForAnnotatedSites() { for (RegistrationPrep registrationPrep : annotatedSites) { metricAnnotationDiscoveriesByExecutable.get(registrationPrep.executable()) .forEach(discovery -> { - if (discovery.isValid()) { // All annotation observers agreed to preserve the discovery. + if (discovery.isActive()) { // All annotation discovery observers agreed to preserve the discovery. org.eclipse.microprofile.metrics.Metric metric = registrationPrep.register(registry); MetricID metricID = new MetricID(registrationPrep.metricName(), registrationPrep.tags()); metricRegistrationObservers.forEach( @@ -445,7 +445,7 @@ private
* This implementation
diff --git a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricAnnotationDiscoveryObserverImplFactory.java b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricAnnotationDiscoveryObserverImplFactory.java
index 6ffd69a526e..5447dec8364 100644
--- a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricAnnotationDiscoveryObserverImplFactory.java
+++ b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricAnnotationDiscoveryObserverImplFactory.java
@@ -16,7 +16,7 @@
package io.helidon.microprofile.grpc.metrics;
import io.helidon.common.LazyValue;
-import io.helidon.microprofile.metrics.api.MetricAnnotationDiscoveryObserverProvider;
+import io.helidon.microprofile.metrics.spi.MetricAnnotationDiscoveryObserverProvider;
/**
* Factory for the gRPC metrics observer of metric annotation discoveries.
diff --git a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricRegistrationObserverImpl.java b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricRegistrationObserverImpl.java
index e379d1cbdf2..b2e39097132 100644
--- a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricRegistrationObserverImpl.java
+++ b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricRegistrationObserverImpl.java
@@ -18,15 +18,15 @@
import java.util.HashMap;
import java.util.Map;
-import io.helidon.microprofile.metrics.MetricAnnotationDiscoveryObserver.MetricAnnotationDiscovery;
-import io.helidon.microprofile.metrics.MetricRegistrationObserver;
+import io.helidon.microprofile.metrics.MetricAnnotationDiscovery;
+import io.helidon.microprofile.metrics.spi.MetricRegistrationObserver;
import org.eclipse.microprofile.metrics.Metadata;
import org.eclipse.microprofile.metrics.Metric;
import org.eclipse.microprofile.metrics.MetricID;
/**
- * The gRPC implementation of {@link io.helidon.microprofile.metrics.MetricRegistrationObserver} with a static factory method.
+ * The gRPC implementation of {@link io.helidon.microprofile.metrics.spi.MetricRegistrationObserver} with a static factory method.
*/
class GrpcMetricRegistrationObserverImpl implements MetricRegistrationObserver {
diff --git a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricRegistrationObserverImplFactory.java b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricRegistrationObserverImplFactory.java
index 495b43157f7..f254565e95c 100644
--- a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricRegistrationObserverImplFactory.java
+++ b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/GrpcMetricRegistrationObserverImplFactory.java
@@ -16,7 +16,7 @@
package io.helidon.microprofile.grpc.metrics;
import io.helidon.common.LazyValue;
-import io.helidon.microprofile.metrics.api.MetricRegistrationObserverProvider;
+import io.helidon.microprofile.metrics.spi.MetricRegistrationObserverProvider;
/**
* Factory for the gRPC metric registration observer.
diff --git a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/MetricsConfigurer.java b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/MetricsConfigurer.java
index 15da66920d5..929f55c1110 100644
--- a/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/MetricsConfigurer.java
+++ b/microprofile/grpc/metrics/src/main/java/io/helidon/microprofile/grpc/metrics/MetricsConfigurer.java
@@ -30,7 +30,7 @@
import io.helidon.microprofile.grpc.core.GrpcMethod;
import io.helidon.microprofile.grpc.server.AnnotatedServiceConfigurer;
import io.helidon.microprofile.grpc.server.GrpcServiceBuilder;
-import io.helidon.microprofile.metrics.MetricAnnotationDiscoveryObserver;
+import io.helidon.microprofile.metrics.MetricAnnotationDiscovery;
import org.eclipse.microprofile.metrics.Counter;
import org.eclipse.microprofile.metrics.Metadata;
@@ -171,12 +171,12 @@ private boolean isDiscovered(Method method) {
return GrpcMetricAnnotationDiscoveryObserverImpl.instance().isDiscovered(method);
}
- private Metadata metadata(MetricAnnotationDiscoveryObserver.MetricAnnotationDiscovery discovery) {
+ private Metadata metadata(MetricAnnotationDiscovery discovery) {
return GrpcMetricRegistrationObserverImpl.instance().metadata(discovery);
}
private Map
+ * The discovery event describes the executable to which the metric annotation applies.
+ * This is not necessarily where the annotation appears, because a metric annotation which appears on the
+ * type applies to all methods and constructors on that type.
+ * In that case, the discovery event describes the discovery of the metric as applied
+ * to the method or constructor, not to the type itself.
+ * Further, a metric annotation declared at the type level triggers a separate discovery event for each constructor
+ * and method on the type.
+ *
- * Implementations make themselves known via the Java service loader mechanism. - *
- *- * Observers are notified during {@code ProcessAnnotatedType}, for each metric annotation that is - * discovered to apply to an executable, via a - * {@link io.helidon.microprofile.metrics.MetricAnnotationDiscoveryObserver.MetricAnnotationDiscovery} event. - *
- */ -public interface MetricAnnotationDiscoveryObserver { - - /** - * Notifies the observer that a metric annotation has been discovered to apply to a constructor or method. - * - * @param metricAnnotationDiscovery the discovery event - */ - void onDiscovery(MetricAnnotationDiscovery metricAnnotationDiscovery); - - /** - * Conveys information about the discovery of a metric annotation as it applies to an executable. - *- * The discovery event describes the executable to which the metric annotation applies. - * This is not necessarily where the annotation appears, because a metric annotation which appears on the - * type applies to all methods and constructors on that type. - * In that case, the discovery event describes the discovery of the metric as applied - * to the method or constructor, not to the type itself. - * Further, a metric annotation declared at the type level triggers a separate discovery event for each constructor - * and method on the type. - *
- */ - interface MetricAnnotationDiscovery { - - /** - * Returns the configurator for the annotated type containing the site to which the metric annotation applies. - * - * @return the configurator for the annotated type - */ - AnnotatedTypeConfigurator> annotatedTypeConfigurator(); - - /** - * Returns the {@link java.lang.annotation.Annotation} object for the metric annotation discovered. - * - * @return the annotation object for the metrics annotation - */ - Annotation annotation(); - - /** - * Requests that the discovery be deactivated, thereby preventing it from triggering a metric registration. - */ - void deactivate(); - - /** - * Requests that the default metrics interceptor not be used for the metric corresponding to the indicated annotation - * which appears on this method. - */ - void disableDefaultInterceptor(); - - /** - * Discovery of an annotation of interest on a constructor. - */ - interface OfConstructor extends MetricAnnotationDiscovery { - - /** - * - * @return the configurator for the constructor on which an annotation of interest appears - */ - AnnotatedConstructorConfigurator> configurator(); - } - - /** - * Discovery of an annotation of interest on a method. - */ - interface OfMethod extends MetricAnnotationDiscovery { - - /** - * - * @return the configurotor for the method on which an annotation of interest appears - */ - AnnotatedMethodConfigurator> configurator(); - } - } -} diff --git a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricsCdiExtension.java b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricsCdiExtension.java index 163c6db5ce8..bea1f437c18 100644 --- a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricsCdiExtension.java +++ b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/MetricsCdiExtension.java @@ -51,8 +51,10 @@ import io.helidon.metrics.serviceapi.MetricsSupport; import io.helidon.microprofile.metrics.MetricAnnotationInfo.RegistrationPrep; import io.helidon.microprofile.metrics.MetricUtil.LookupResult; -import io.helidon.microprofile.metrics.api.MetricAnnotationDiscoveryObserverProvider; -import io.helidon.microprofile.metrics.api.MetricRegistrationObserverProvider; +import io.helidon.microprofile.metrics.spi.MetricAnnotationDiscoveryObserver; +import io.helidon.microprofile.metrics.spi.MetricAnnotationDiscoveryObserverProvider; +import io.helidon.microprofile.metrics.spi.MetricRegistrationObserver; +import io.helidon.microprofile.metrics.spi.MetricRegistrationObserverProvider; import io.helidon.microprofile.server.ServerCdiExtension; import io.helidon.servicecommon.restcdi.HelidonRestCdiExtension; import io.helidon.webserver.Routing; diff --git a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/spi/MetricAnnotationDiscoveryObserver.java b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/spi/MetricAnnotationDiscoveryObserver.java new file mode 100644 index 00000000000..19d6e2431e3 --- /dev/null +++ b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/spi/MetricAnnotationDiscoveryObserver.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Oracle and/or its affiliates. + * + * 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 io.helidon.microprofile.metrics.spi; + +import io.helidon.microprofile.metrics.MetricAnnotationDiscovery; + +/** + * Observer of the discovery of metric annotations which are applied to constructors and methods. + *+ * Implementations make themselves known via the Java service loader mechanism. + *
+ *+ * Observers are notified during {@code ProcessAnnotatedType}, for each metric annotation that is + * discovered to apply to an executable, via a + * {@link io.helidon.microprofile.metrics.MetricAnnotationDiscovery} event. + *
+ */ +public interface MetricAnnotationDiscoveryObserver { + + /** + * Notifies the observer that a metric annotation has been discovered to apply to a constructor or method. + * + * @param metricAnnotationDiscovery the discovery event + */ + void onDiscovery(MetricAnnotationDiscovery metricAnnotationDiscovery); + +} diff --git a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/api/MetricAnnotationDiscoveryObserverProvider.java b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/spi/MetricAnnotationDiscoveryObserverProvider.java similarity index 81% rename from microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/api/MetricAnnotationDiscoveryObserverProvider.java rename to microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/spi/MetricAnnotationDiscoveryObserverProvider.java index 759c2a62300..08acdf96959 100644 --- a/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/api/MetricAnnotationDiscoveryObserverProvider.java +++ b/microprofile/metrics/src/main/java/io/helidon/microprofile/metrics/spi/MetricAnnotationDiscoveryObserverProvider.java @@ -13,16 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.helidon.microprofile.metrics.api; +package io.helidon.microprofile.metrics.spi; import java.util.function.Supplier; -import io.helidon.microprofile.metrics.MetricAnnotationDiscoveryObserver; - /** * Specifies behavior of a provider for a metric annotation discovery observer. * - * @param