This is an automated email from the ASF dual-hosted git repository. radcortez pushed a commit to branch TOMEE-2408 in repository https://gitbox.apache.org/repos/asf/tomee.git
commit b86e49266b179b49ecea0d746e4bc3f7c5aa7822 Author: Roberto Cortez <radcor...@yahoo.com> AuthorDate: Fri Jan 18 23:14:07 2019 +0000 TOMEE-2408 - Initial rules to figure out if MP Health is required. --- .../cdi/TomEEMicroProfileExtension.java | 113 +++++++-------------- 1 file changed, 37 insertions(+), 76 deletions(-) diff --git a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/cdi/TomEEMicroProfileExtension.java b/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/cdi/TomEEMicroProfileExtension.java index 2765395..3881cfb 100644 --- a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/cdi/TomEEMicroProfileExtension.java +++ b/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/cdi/TomEEMicroProfileExtension.java @@ -18,6 +18,7 @@ package org.apache.tomee.microprofile.cdi; import org.apache.geronimo.microprofile.common.jaxrs.HealthChecksEndpoint; import org.apache.geronimo.microprofile.impl.health.cdi.CdiHealthChecksEndpoint; +import org.apache.geronimo.microprofile.impl.health.cdi.GeronimoHealthExtension; import org.apache.geronimo.microprofile.metrics.common.jaxrs.MetricsEndpoints; import org.apache.geronimo.microprofile.metrics.jaxrs.CdiMetricsEndpoints; import org.apache.geronimo.microprofile.openapi.jaxrs.OpenAPIEndpoint; @@ -26,30 +27,19 @@ import org.apache.openejb.assembler.classic.WebAppInfo; import org.apache.openejb.assembler.classic.event.AssemblerAfterApplicationCreated; import org.apache.openejb.loader.SystemInstance; import org.apache.openejb.observer.event.BeforeEvent; -import org.eclipse.microprofile.metrics.annotation.Counted; -import org.eclipse.microprofile.metrics.annotation.Gauge; -import org.eclipse.microprofile.metrics.annotation.Metered; -import org.eclipse.microprofile.metrics.annotation.Metric; -import org.eclipse.microprofile.metrics.annotation.Timed; import javax.annotation.Priority; import javax.enterprise.event.Observes; -import javax.enterprise.inject.spi.AfterBeanDiscovery; -import javax.enterprise.inject.spi.Annotated; -import javax.enterprise.inject.spi.AnnotatedType; +import javax.enterprise.inject.spi.AfterDeploymentValidation; import javax.enterprise.inject.spi.BeanManager; -import javax.enterprise.inject.spi.BeforeBeanDiscovery; import javax.enterprise.inject.spi.CDI; import javax.enterprise.inject.spi.Extension; -import javax.enterprise.inject.spi.ProcessAnnotatedType; -import javax.enterprise.inject.spi.ProcessInjectionPoint; -import javax.enterprise.inject.spi.WithAnnotations; +import java.util.Collection; +import java.util.Optional; -import static javax.interceptor.Interceptor.Priority.LIBRARY_BEFORE; +import static javax.interceptor.Interceptor.Priority.PLATFORM_AFTER; public class TomEEMicroProfileExtension implements Extension { - private static final int BEFORE_MICROPROFILE_EXTENSIONS = LIBRARY_BEFORE - 10; - private boolean requiresConfig; private boolean requiresJwt; private boolean requiresFaultTolerance; @@ -59,52 +49,27 @@ public class TomEEMicroProfileExtension implements Extension { private boolean requiresOpenTracing; private boolean requiresRestClient; - void beforeBeanDiscovery(@Observes - @Priority(BEFORE_MICROPROFILE_EXTENSIONS) final BeforeBeanDiscovery beforeBeanDiscovery) { - this.requiresConfig = true; - this.requiresJwt = true; - this.requiresFaultTolerance = true; - // MP Metrics is not required unless specific annotations are found (or additional REST enpoints are deployed) - this.requiresMetrics = false; - this.requiresHealth = true; - this.requiresOpenApi = true; - this.requiresOpenTracing = true; - this.requiresRestClient = true; - } + void afterDeploymentValidation( + @Observes + @Priority(PLATFORM_AFTER + 10) + final AfterDeploymentValidation afterDeploymentValidation, + final BeanManager beanManager) { + requiresConfig = true; - void processMPAnnotatedTypes(@Observes - @Priority(BEFORE_MICROPROFILE_EXTENSIONS) - @WithAnnotations({ - Metric.class, - Counted.class, - Gauge.class, - Metered.class, - Timed.class - }) final ProcessAnnotatedType<?> processAnnotatedType) { - - final AnnotatedType<?> annotatedType = processAnnotatedType.getAnnotatedType(); - if (annotatedType.getJavaClass().getName().startsWith("org.apache.geronimo.microprofile")) { - return; - } + requiresJwt = true; - hasMetricsAnnotations(annotatedType); - } + requiresFaultTolerance = true; - void processMPInjectionPoints(@Observes - @Priority(BEFORE_MICROPROFILE_EXTENSIONS) - final ProcessInjectionPoint<?, ?> processInjectionPoint) { - hasMetricsAnnotations(processInjectionPoint.getInjectionPoint().getAnnotated()); - } + requiresMetrics = false; + + final GeronimoHealthExtension healthExtension = beanManager.getExtension(GeronimoHealthExtension.class); + requiresHealth = !Optional.ofNullable(healthExtension.getChecks()).map(Collection::isEmpty).orElse(true); + + requiresOpenApi = false; + + requiresOpenTracing = false; - void processMPBeans(@Observes - @Priority(BEFORE_MICROPROFILE_EXTENSIONS) - final AfterBeanDiscovery afterBeanDiscovery, - final BeanManager beanManager) { - /* - final List<Interceptor<?>> interceptors = - beanManager.resolveInterceptors(AROUND_INVOKE, new AnnotationLiteral<Counted>() {}); - interceptors.isEmpty(); - */ + requiresRestClient = false; } public boolean requiresConfig() { @@ -139,18 +104,6 @@ public class TomEEMicroProfileExtension implements Extension { return requiresRestClient; } - private void hasMetricsAnnotations(final Annotated annotated) { - if (requiresMetrics) { - return; - } - - requiresMetrics = annotated.isAnnotationPresent(Metric.class) || - annotated.isAnnotationPresent(Counted.class) || - annotated.isAnnotationPresent(Gauge.class) || - annotated.isAnnotationPresent(Metered.class) || - annotated.isAnnotationPresent(Timed.class); - } - static { SystemInstance.get().addObserver(new TomEEMicroProfileAfterApplicationCreated()); } @@ -164,14 +117,22 @@ public class TomEEMicroProfileExtension implements Extension { CDI.current().getBeanManager().getExtension(TomEEMicroProfileExtension.class); final AppInfo app = afterApplicationCreated.getEvent().getApp(); for (final WebAppInfo webApp : app.webApps) { - if (webApp.restApplications.isEmpty()) { - webApp.restClass.removeIf(className -> className.equals(HealthChecksEndpoint.class.getName())); - webApp.restClass.removeIf(className -> className.equals(CdiHealthChecksEndpoint.class.getName())); - - webApp.restClass.removeIf(className -> className.equals(MetricsEndpoints.class.getName())); - webApp.restClass.removeIf(className -> className.equals(CdiMetricsEndpoints.class.getName())); + webApp.restClass.removeIf(className -> className.equals(HealthChecksEndpoint.class.getName())); + webApp.restClass.removeIf(className -> className.equals(MetricsEndpoints.class.getName())); - webApp.restClass.removeIf(className -> className.equals(OpenAPIEndpoint.class.getName())); + if (webApp.restApplications.isEmpty()) { + if (!microProfileExtension.requiresHealth()) { + webApp.restClass.removeIf( + className -> className.equals(CdiHealthChecksEndpoint.class.getName())); + } + + if (!microProfileExtension.requiresMetrics()) { + webApp.restClass.removeIf(className -> className.equals(CdiMetricsEndpoints.class.getName())); + } + + if (!microProfileExtension.requiresOpenApi()) { + webApp.restClass.removeIf(className -> className.equals(OpenAPIEndpoint.class.getName())); + } } } }