This is an automated email from the ASF dual-hosted git repository. rzo1 pushed a commit to branch mp7 in repository https://gitbox.apache.org/repos/asf/tomee.git
commit 91ca7aa5a36a688dd395c0ed54e5c92133ee9f11 Author: Richard Zowalla <[email protected]> AuthorDate: Tue Mar 17 15:29:05 2026 +0100 Upgrade MicroProfile 6.1 to 7.1: version bumps, metrics removal, telemetry TCK - Bump MP spec versions: Fault Tolerance 4.1, OpenAPI 4.1, Rest Client 4.0, Telemetry 2.1 - Bump SmallRye impls: Fault Tolerance 6.11.0, OpenAPI 4.2.4, OpenTelemetry 2.11.2 - Remove MicroProfile Metrics (dropped in MP 7.0): API, SmallRye impl, Micrometer, source code (VendorMetrics, MetricsFilterRegistration, MicroProfileMetricsEndpoint, MicroProfileMetricsRegistration), SPI registrations, TCK module, examples - Remove LegacyMetricsExtension from SystemInstance CDI extensions - Remove VendorMetrics from org.apache.openejb.extension SPI - Restructure Telemetry TCK into tracing/metrics/logs sub-modules (all 47 tests pass) - Update opentelemetry-semconv groupId and version (1.32.0) - Fix OpenApiTest to remove @Timed/MetricUnits usage --- boms/tomee-microprofile-api/pom.xml | 21 +- .../org/apache/openejb/loader/SystemInstance.java | 1 - examples/pom.xml | 5 - itests/tomee-microprofile-itests/pom.xml | 7 - .../tomee/microprofile/openapi/OpenApiTest.java | 10 - pom.xml | 24 +- tck/microprofile-tck/fault-tolerance/pom.xml | 7 - .../opentelemetry/{ => logs}/pom.xml | 43 ++-- .../logs/src/test/conf/logging.properties | 18 ++ .../tck/opentelemetry/ArquillianExtension.java | 21 +- .../tck/opentelemetry/ArquillianLifecycle.java | 2 +- .../OpenTelemetryTCKDeploymentProcessor.java | 47 ++++ .../tck/opentelemetry/StdoutRedirectListener.java | 62 +++++ ...org.jboss.arquillian.core.spi.LoadableExtension | 2 +- .../{ => logs}/src/test/resources/arquillian.xml | 1 + .../opentelemetry/{ => metrics}/pom.xml | 44 ++-- .../metrics/src/test/conf/logging.properties | 18 ++ .../tck/opentelemetry/ArquillianExtension.java | 2 +- .../tck/opentelemetry/ArquillianLifecycle.java | 2 +- .../OpenTelemetryTCKDeploymentProcessor.java | 46 ++++ ...org.jboss.arquillian.core.spi.LoadableExtension | 2 +- .../src/test/resources/arquillian.xml | 1 + tck/microprofile-tck/opentelemetry/pom.xml | 175 +------------- .../opentelemetry/{ => tracing}/pom.xml | 16 +- .../tck/opentelemetry/ArquillianExtension.java | 0 .../tck/opentelemetry/ArquillianLifecycle.java | 0 .../OpenTelemetryTCKDeploymentProcessor.java | 4 +- ...org.jboss.arquillian.core.spi.LoadableExtension | 0 .../src/test/resources/arquillian.xml | 0 tck/microprofile-tck/pom.xml | 13 - tomee/tomee-microprofile/mp-common/pom.xml | 38 --- .../metrics/MicroProfileMetricsEndpoint.java | 58 ----- .../metrics/MicroProfileMetricsRegistration.java | 51 ---- .../tomee/microprofile/metrics/VendorMetrics.java | 263 --------------------- .../META-INF/org.apache.openejb.extension | 1 - .../jakarta.servlet.ServletContainerInitializer | 1 - 36 files changed, 266 insertions(+), 740 deletions(-) diff --git a/boms/tomee-microprofile-api/pom.xml b/boms/tomee-microprofile-api/pom.xml index 7499c4b8a0..46b9124048 100644 --- a/boms/tomee-microprofile-api/pom.xml +++ b/boms/tomee-microprofile-api/pom.xml @@ -124,7 +124,7 @@ <dependency> <groupId>org.eclipse.microprofile.fault-tolerance</groupId> <artifactId>microprofile-fault-tolerance-api</artifactId> - <version>4.0.2</version> + <version>4.1</version> </dependency> <dependency> <groupId>org.eclipse.microprofile.health</groupId> @@ -136,20 +136,15 @@ <artifactId>microprofile-jwt-auth-api</artifactId> <version>2.1</version> </dependency> - <dependency> - <groupId>org.eclipse.microprofile.metrics</groupId> - <artifactId>microprofile-metrics-api</artifactId> - <version>5.1.0</version> - </dependency> <dependency> <groupId>org.eclipse.microprofile.openapi</groupId> <artifactId>microprofile-openapi-api</artifactId> - <version>3.1.2</version> + <version>4.1</version> </dependency> <dependency> <groupId>org.eclipse.microprofile.rest.client</groupId> <artifactId>microprofile-rest-client-api</artifactId> - <version>3.0.1</version> + <version>4.0</version> </dependency> </dependencies> </dependencyManagement> @@ -345,16 +340,6 @@ </exclusion> </exclusions> </dependency> - <dependency> - <groupId>org.eclipse.microprofile.metrics</groupId> - <artifactId>microprofile-metrics-api</artifactId> - <exclusions> - <exclusion> - <artifactId>*</artifactId> - <groupId>*</groupId> - </exclusion> - </exclusions> - </dependency> <dependency> <groupId>org.eclipse.microprofile.openapi</groupId> <artifactId>microprofile-openapi-api</artifactId> diff --git a/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java b/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java index f690577740..26611afaf3 100644 --- a/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java +++ b/container/openejb-loader/src/main/java/org/apache/openejb/loader/SystemInstance.java @@ -151,7 +151,6 @@ public final class SystemInstance { this.internalProperties.setProperty("tomee.mp.cdi.extensions", String.join(",", List.of( "io.smallrye.config.inject.ConfigExtension", "io.smallrye.faulttolerance.FaultToleranceExtension", - "io.smallrye.metrics.legacyapi.LegacyMetricsExtension", "io.smallrye.opentelemetry.implementation.cdi.OpenTelemetryExtension", "org.apache.cxf.microprofile.client.cdi.RestClientExtension", "org.apache.tomee.microprofile.faulttolerance.MPFaultToleranceCDIExtension", diff --git a/examples/pom.xml b/examples/pom.xml index 48f18dd458..ddbe5eaa6e 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -109,11 +109,6 @@ <module>mp-faulttolerance-timeout</module> <module>mp-jwt-bean-validation</module> <module>mp-jwt-bean-validation-strongly-typed</module> - <module>mp-metrics-counted</module> - <module>mp-metrics-histogram</module> - <module>mp-metrics-timed</module> - <module>mp-metrics-gauge</module> - <module>mp-metrics-metered</module> <module>mp-rest-jwt-jwk</module> <module>mp-rest-jwt-principal</module> <module>mp-rest-jwt-public-key</module> diff --git a/itests/tomee-microprofile-itests/pom.xml b/itests/tomee-microprofile-itests/pom.xml index 4094835ab7..4eafe3091e 100644 --- a/itests/tomee-microprofile-itests/pom.xml +++ b/itests/tomee-microprofile-itests/pom.xml @@ -88,13 +88,6 @@ <version>${version.microprofile.openapi}</version> <scope>compile</scope> </dependency> - <dependency> - <groupId>org.eclipse.microprofile.metrics</groupId> - <artifactId>microprofile-metrics-api</artifactId> - <version>${version.microprofile.metrics}</version> - <scope>compile</scope> - </dependency> - <dependency> <groupId>org.apache.tomee</groupId> <artifactId>openejb-cxf-rs</artifactId> diff --git a/itests/tomee-microprofile-itests/src/test/java/org/apache/tomee/microprofile/openapi/OpenApiTest.java b/itests/tomee-microprofile-itests/src/test/java/org/apache/tomee/microprofile/openapi/OpenApiTest.java index 5e4161d240..c2f04170b9 100644 --- a/itests/tomee-microprofile-itests/src/test/java/org/apache/tomee/microprofile/openapi/OpenApiTest.java +++ b/itests/tomee-microprofile-itests/src/test/java/org/apache/tomee/microprofile/openapi/OpenApiTest.java @@ -27,8 +27,6 @@ import org.apache.cxf.jaxrs.client.WebClient; import org.apache.johnzon.jaxrs.JohnzonProvider; import org.apache.tomee.server.composer.Archive; import org.apache.tomee.server.composer.TomEE; -import org.eclipse.microprofile.metrics.MetricUnits; -import org.eclipse.microprofile.metrics.annotation.Timed; import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.media.Content; import org.eclipse.microprofile.openapi.annotations.media.Schema; @@ -195,10 +193,6 @@ public class OpenApiTest { schema = @Schema(implementation = Properties.class)))}) @Operation(summary = "Outputs a list of books", description = "This method outputs a list of books") - @Timed(name = "get-all-books", - description = "Monitor the time getAll Method takes", - unit = MetricUnits.MILLISECONDS, - absolute = true) @GET @Path("/get") public String getId(@QueryParam( "id" ) Integer id) { @@ -245,10 +239,6 @@ public class OpenApiTest { schema = @Schema(implementation = Properties.class)))}) @Operation(summary = "Outputs a list of books", description = "This method outputs a list of books") - @Timed(name = "get-all-books", - description = "Monitor the time getAll Method takes", - unit = MetricUnits.MILLISECONDS, - absolute = true) @GET @Path("/get") public String getId(@QueryParam( "id" ) Integer id); diff --git a/pom.xml b/pom.xml index 72b92d92f1..86906c83b9 100644 --- a/pom.xml +++ b/pom.xml @@ -175,26 +175,23 @@ <maven.compiler.target>17</maven.compiler.target> <maven.compiler.release>17</maven.compiler.release> - <version.micrometer>1.12.5</version.micrometer> - <!-- Micro Profile APIs (6.1) --> + <!-- Micro Profile APIs (7.1) --> <version.microprofile.config>3.1</version.microprofile.config> - <version.microprofile.fault-tolerance>4.0.2</version.microprofile.fault-tolerance> + <version.microprofile.fault-tolerance>4.1</version.microprofile.fault-tolerance> <version.microprofile.health>4.0.1</version.microprofile.health> <version.microprofile.jwt>2.1</version.microprofile.jwt> - <version.microprofile.metrics>5.1.0</version.microprofile.metrics> - <version.microprofile.openapi>3.1.2</version.microprofile.openapi> - <version.microprofile.opentelemetry>1.1</version.microprofile.opentelemetry> - <version.microprofile.rest-client>3.0.1</version.microprofile.rest-client> + <version.microprofile.openapi>4.1</version.microprofile.openapi> + <version.microprofile.opentelemetry>2.1</version.microprofile.opentelemetry> + <version.microprofile.rest-client>4.0</version.microprofile.rest-client> <version.io.opentracing>0.33.0</version.io.opentracing> <!-- Micro Profile Impl. --> <version.microprofile.impl.config>3.16.0</version.microprofile.impl.config> - <version.microprofile.impl.fault-tolerance>6.4.3</version.microprofile.impl.fault-tolerance> + <version.microprofile.impl.fault-tolerance>6.11.0</version.microprofile.impl.fault-tolerance> <version.microprofile.impl.health>4.0.4</version.microprofile.impl.health> - <version.microprofile.impl.metrics>5.1.0</version.microprofile.impl.metrics> - <version.microprofile.impl.openapi>3.13.0</version.microprofile.impl.openapi> - <version.microprofile.impl.opentelemetry>2.7.0</version.microprofile.impl.opentelemetry> + <version.microprofile.impl.openapi>4.2.4</version.microprofile.impl.openapi> + <version.microprofile.impl.opentelemetry>2.11.2</version.microprofile.impl.opentelemetry> <!-- Jackson and snakeyaml required by OpenAPI Impl --> <version.jackson>2.21.1</version.jackson> @@ -975,11 +972,6 @@ <artifactId>microprofile-jwt-auth-api</artifactId> <version>${version.microprofile.jwt}</version> </dependency> - <dependency> - <groupId>org.eclipse.microprofile.metrics</groupId> - <artifactId>microprofile-metrics-api</artifactId> - <version>${version.microprofile.metrics}</version> - </dependency> <dependency> <groupId>org.eclipse.microprofile.openapi</groupId> <artifactId>microprofile-openapi-api</artifactId> diff --git a/tck/microprofile-tck/fault-tolerance/pom.xml b/tck/microprofile-tck/fault-tolerance/pom.xml index c2fdb8146b..69ea748821 100644 --- a/tck/microprofile-tck/fault-tolerance/pom.xml +++ b/tck/microprofile-tck/fault-tolerance/pom.xml @@ -111,13 +111,6 @@ <version>${project.version}</version> <scope>provided</scope> </dependency> - <dependency> - <groupId>io.smallrye</groupId> - <artifactId>smallrye-metrics</artifactId> - <version>${version.microprofile.impl.metrics}</version> - <scope>provided</scope> - </dependency> - <dependency> <groupId>${project.groupId}</groupId> <artifactId>apache-tomee</artifactId> diff --git a/tck/microprofile-tck/opentelemetry/pom.xml b/tck/microprofile-tck/opentelemetry/logs/pom.xml similarity index 78% copy from tck/microprofile-tck/opentelemetry/pom.xml copy to tck/microprofile-tck/opentelemetry/logs/pom.xml index 64229e9307..2f7869b6d8 100644 --- a/tck/microprofile-tck/opentelemetry/pom.xml +++ b/tck/microprofile-tck/opentelemetry/logs/pom.xml @@ -19,13 +19,13 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.tomee</groupId> - <artifactId>microprofile-tck</artifactId> + <artifactId>microprofile-opentelemetry-tck</artifactId> <version>11.0.0-SNAPSHOT</version> </parent> - <artifactId>microprofile-opentelemetry-tck</artifactId> + <artifactId>microprofile-telemetry-logs-tck</artifactId> - <name>TomEE :: TCK :: MicroProfile Open Telemetry TCK</name> + <name>TomEE :: TCK :: MicroProfile Telemetry Logs TCK</name> <build> <plugins> @@ -35,24 +35,8 @@ <configuration> <reuseForks>false</reuseForks> <dependenciesToScan> - <dependency>org.eclipse.microprofile.telemetry.tracing:microprofile-telemetry-tracing-tck</dependency> + <dependency>org.eclipse.microprofile.telemetry:microprofile-telemetry-logs-tck</dependency> </dependenciesToScan> - - <excludes> - <!-- - These tests pass on a local system but will fail on ASF Jenkins - org.eclipse.microprofile.telemetry.tracing.tck.async.MpRestClientAsyncTest.testIntegrationWithMpRestClientAsyncError - org.eclipse.microprofile.telemetry.tracing.tck.async.JaxRsClientAsyncTest.testIntegrationWithJaxRsClientError - --> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.async.MpRestClientAsyncTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.async.JaxRsClientAsyncTest</exclude> - - <!-- Optional tests --> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.rest.JaegerPropagationTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.rest.B3MultiPropagationTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.rest.B3PropagationTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.async.JaxRsServerAsyncTest</exclude> - </excludes> </configuration> </plugin> </plugins> @@ -99,8 +83,8 @@ <dependencies> <dependency> - <groupId>org.eclipse.microprofile.telemetry.tracing</groupId> - <artifactId>microprofile-telemetry-tracing-tck</artifactId> + <groupId>org.eclipse.microprofile.telemetry</groupId> + <artifactId>microprofile-telemetry-logs-tck</artifactId> <version>${version.microprofile.opentelemetry}</version> <scope>test</scope> </dependency> @@ -178,12 +162,6 @@ <scope>test</scope> </dependency> - <dependency> - <groupId>io.opentelemetry</groupId> - <artifactId>opentelemetry-semconv</artifactId> - <version>1.20.1-alpha</version> - </dependency> - <dependency> <groupId>org.apache.tomee</groupId> <artifactId>ziplock</artifactId> @@ -191,6 +169,13 @@ <scope>test</scope> </dependency> + <dependency> + <groupId>io.opentelemetry</groupId> + <artifactId>opentelemetry-exporter-logging</artifactId> + <version>1.49.0</version> + <scope>test</scope> + </dependency> + </dependencies> -</project> \ No newline at end of file +</project> diff --git a/tck/microprofile-tck/opentelemetry/logs/src/test/conf/logging.properties b/tck/microprofile-tck/opentelemetry/logs/src/test/conf/logging.properties new file mode 100644 index 0000000000..572b2d63a6 --- /dev/null +++ b/tck/microprofile-tck/opentelemetry/logs/src/test/conf/logging.properties @@ -0,0 +1,18 @@ +handlers = java.util.logging.FileHandler, 1catalina.java.util.logging.FileHandler, java.util.logging.ConsoleHandler + +java.util.logging.FileHandler.pattern = /tmp/tomee-otel-logs-tck%g.log +java.util.logging.FileHandler.limit = 0 +java.util.logging.FileHandler.count = 1 +java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter +java.util.logging.FileHandler.append = true +java.util.logging.FileHandler.level = ALL + +1catalina.java.util.logging.FileHandler.level = FINE +1catalina.java.util.logging.FileHandler.formatter = org.apache.juli.OneLineFormatter +1catalina.java.util.logging.FileHandler.prefix = catalina. + +java.util.logging.ConsoleHandler.level = FINE +java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter + +io.opentelemetry.level = FINE +io.opentelemetry.exporter.logging.level = FINE diff --git a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/MetricsFilterRegistration.java b/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java similarity index 55% rename from tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/MetricsFilterRegistration.java rename to tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java index 8f4807660e..87a6a885dd 100644 --- a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/MetricsFilterRegistration.java +++ b/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java @@ -14,22 +14,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.tomee.microprofile.metrics; +package org.apache.tomee.microprofile.tck.opentelemetry; -import io.smallrye.metrics.jaxrs.JaxRsMetricsFilter; -import jakarta.ws.rs.container.DynamicFeature; -import jakarta.ws.rs.container.ResourceInfo; -import jakarta.ws.rs.core.FeatureContext; -import jakarta.ws.rs.ext.Provider; -import org.apache.openejb.loader.SystemInstance; +import org.jboss.arquillian.core.spi.LoadableExtension; -@Provider -public class MetricsFilterRegistration implements DynamicFeature { +public class ArquillianExtension implements LoadableExtension { @Override - public void configure(ResourceInfo resourceInfo, FeatureContext context) { - if ("none".equals(SystemInstance.get().getOptions().get("tomee.mp.scan", "none"))) { - return; - } - context.register(JaxRsMetricsFilter.class); + public void register(ExtensionBuilder extensionBuilder) { + extensionBuilder.observer(ArquillianLifecycle.class).observer(OpenTelemetryTCKDeploymentProcessor.class); } -} \ No newline at end of file +} diff --git a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java b/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java similarity index 99% copy from tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java copy to tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java index eaf13e761b..5925d17783 100644 --- a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java +++ b/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java @@ -26,4 +26,4 @@ public class ArquillianLifecycle { public void beforeDeploy(@Observes BeforeDeploy event, TestClass testClass) { GlobalOpenTelemetry.resetForTest(); } -} \ No newline at end of file +} diff --git a/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java b/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java new file mode 100644 index 0000000000..e22bf4e4e3 --- /dev/null +++ b/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.tomee.microprofile.tck.opentelemetry; + +import io.opentelemetry.exporter.logging.SystemOutLogRecordExporter; +import org.apache.ziplock.JarLocation; +import org.jboss.arquillian.container.spi.client.deployment.DeploymentDescription; +import org.jboss.arquillian.container.spi.event.container.BeforeDeploy; +import org.jboss.arquillian.core.api.annotation.Observes; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; + +public class OpenTelemetryTCKDeploymentProcessor { + + public void observeDeployment(@Observes final BeforeDeploy beforeDeploy) { + DeploymentDescription deployment = beforeDeploy.getDeployment(); + Archive<?> testableArchive = deployment.getTestableArchive(); + if (testableArchive != null) { + process(testableArchive); + } else { + process(deployment.getArchive()); + } + } + + private void process(Archive<?> archive) { + if (archive instanceof WebArchive webapp) { + webapp.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); + webapp.addClass(StdoutRedirectListener.class); + webapp.addAsLibrary(JarLocation.jarLocation(SystemOutLogRecordExporter.class)); + } + } +} diff --git a/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/StdoutRedirectListener.java b/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/StdoutRedirectListener.java new file mode 100644 index 0000000000..910e3e3211 --- /dev/null +++ b/tck/microprofile-tck/opentelemetry/logs/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/StdoutRedirectListener.java @@ -0,0 +1,62 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.tomee.microprofile.tck.opentelemetry; + +import jakarta.servlet.ServletContextEvent; +import jakarta.servlet.ServletContextListener; +import jakarta.servlet.annotation.WebListener; + +import java.io.FileOutputStream; +import java.io.OutputStream; +import java.io.PrintStream; + +@WebListener +public class StdoutRedirectListener implements ServletContextListener { + + @Override + public void contextInitialized(ServletContextEvent sce) { + String logFilePath = System.getProperty("mptelemetry.tck.log.file.path"); + if (logFilePath != null) { + try { + final PrintStream original = System.out; + final OutputStream fileOut = new FileOutputStream(logFilePath, true); + PrintStream tee = new PrintStream(new OutputStream() { + @Override + public void write(int b) throws java.io.IOException { + original.write(b); + fileOut.write(b); + } + + @Override + public void write(byte[] b, int off, int len) throws java.io.IOException { + original.write(b, off, len); + fileOut.write(b, off, len); + } + + @Override + public void flush() throws java.io.IOException { + original.flush(); + fileOut.flush(); + } + }, true); + System.setOut(tee); + } catch (Exception e) { + // ignore + } + } + } +} diff --git a/tck/microprofile-tck/opentelemetry/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension b/tck/microprofile-tck/opentelemetry/logs/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension similarity index 94% copy from tck/microprofile-tck/opentelemetry/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension copy to tck/microprofile-tck/opentelemetry/logs/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension index 64afb3e3dc..6cd04885a7 100644 --- a/tck/microprofile-tck/opentelemetry/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension +++ b/tck/microprofile-tck/opentelemetry/logs/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension @@ -1 +1 @@ -org.apache.tomee.microprofile.tck.opentelemetry.ArquillianExtension \ No newline at end of file +org.apache.tomee.microprofile.tck.opentelemetry.ArquillianExtension diff --git a/tck/microprofile-tck/opentelemetry/src/test/resources/arquillian.xml b/tck/microprofile-tck/opentelemetry/logs/src/test/resources/arquillian.xml similarity index 97% copy from tck/microprofile-tck/opentelemetry/src/test/resources/arquillian.xml copy to tck/microprofile-tck/opentelemetry/logs/src/test/resources/arquillian.xml index 07db9eafa8..8467d4ecac 100644 --- a/tck/microprofile-tck/opentelemetry/src/test/resources/arquillian.xml +++ b/tck/microprofile-tck/opentelemetry/logs/src/test/resources/arquillian.xml @@ -33,6 +33,7 @@ <property name="appWorkingDir">target/workdir</property> <property name="cleanOnStartUp">true</property> <property name="properties"> + mptelemetry.tck.log.file.path = /tmp/tomee-otel-logs-tck0.log </property> </configuration> </container> diff --git a/tck/microprofile-tck/opentelemetry/pom.xml b/tck/microprofile-tck/opentelemetry/metrics/pom.xml similarity index 78% copy from tck/microprofile-tck/opentelemetry/pom.xml copy to tck/microprofile-tck/opentelemetry/metrics/pom.xml index 64229e9307..6c380355ab 100644 --- a/tck/microprofile-tck/opentelemetry/pom.xml +++ b/tck/microprofile-tck/opentelemetry/metrics/pom.xml @@ -19,13 +19,13 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.tomee</groupId> - <artifactId>microprofile-tck</artifactId> + <artifactId>microprofile-opentelemetry-tck</artifactId> <version>11.0.0-SNAPSHOT</version> </parent> - <artifactId>microprofile-opentelemetry-tck</artifactId> + <artifactId>microprofile-telemetry-metrics-tck</artifactId> - <name>TomEE :: TCK :: MicroProfile Open Telemetry TCK</name> + <name>TomEE :: TCK :: MicroProfile Telemetry Metrics TCK</name> <build> <plugins> @@ -35,24 +35,11 @@ <configuration> <reuseForks>false</reuseForks> <dependenciesToScan> - <dependency>org.eclipse.microprofile.telemetry.tracing:microprofile-telemetry-tracing-tck</dependency> + <dependency>org.eclipse.microprofile.telemetry:microprofile-telemetry-metrics-tck</dependency> </dependenciesToScan> - - <excludes> - <!-- - These tests pass on a local system but will fail on ASF Jenkins - org.eclipse.microprofile.telemetry.tracing.tck.async.MpRestClientAsyncTest.testIntegrationWithMpRestClientAsyncError - org.eclipse.microprofile.telemetry.tracing.tck.async.JaxRsClientAsyncTest.testIntegrationWithJaxRsClientError - --> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.async.MpRestClientAsyncTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.async.JaxRsClientAsyncTest</exclude> - - <!-- Optional tests --> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.rest.JaegerPropagationTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.rest.B3MultiPropagationTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.rest.B3PropagationTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.async.JaxRsServerAsyncTest</exclude> - </excludes> + <systemPropertyVariables> + <mptelemetry.tck.log.file.path>${project.build.directory}/tomee/apache-tomee-microprofile-11.0.0-SNAPSHOT/logs/otel-metrics.log</mptelemetry.tck.log.file.path> + </systemPropertyVariables> </configuration> </plugin> </plugins> @@ -99,8 +86,8 @@ <dependencies> <dependency> - <groupId>org.eclipse.microprofile.telemetry.tracing</groupId> - <artifactId>microprofile-telemetry-tracing-tck</artifactId> + <groupId>org.eclipse.microprofile.telemetry</groupId> + <artifactId>microprofile-telemetry-metrics-tck</artifactId> <version>${version.microprofile.opentelemetry}</version> <scope>test</scope> </dependency> @@ -179,9 +166,16 @@ </dependency> <dependency> - <groupId>io.opentelemetry</groupId> + <groupId>io.opentelemetry.semconv</groupId> <artifactId>opentelemetry-semconv</artifactId> - <version>1.20.1-alpha</version> + <version>1.32.0</version> + </dependency> + + <dependency> + <groupId>io.opentelemetry</groupId> + <artifactId>opentelemetry-exporter-logging</artifactId> + <version>1.49.0</version> + <scope>test</scope> </dependency> <dependency> @@ -193,4 +187,4 @@ </dependencies> -</project> \ No newline at end of file +</project> diff --git a/tck/microprofile-tck/opentelemetry/metrics/src/test/conf/logging.properties b/tck/microprofile-tck/opentelemetry/metrics/src/test/conf/logging.properties new file mode 100644 index 0000000000..b3ba6ec5f0 --- /dev/null +++ b/tck/microprofile-tck/opentelemetry/metrics/src/test/conf/logging.properties @@ -0,0 +1,18 @@ +handlers = java.util.logging.FileHandler, 1catalina.java.util.logging.FileHandler, java.util.logging.ConsoleHandler + +java.util.logging.FileHandler.pattern = /tmp/tomee-otel-metrics-tck.log +java.util.logging.FileHandler.limit = 50000000 +java.util.logging.FileHandler.count = 1 +java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter +java.util.logging.FileHandler.append = true +java.util.logging.FileHandler.level = ALL + +1catalina.java.util.logging.FileHandler.level = FINE +1catalina.java.util.logging.FileHandler.formatter = org.apache.juli.OneLineFormatter +1catalina.java.util.logging.FileHandler.prefix = catalina. + +java.util.logging.ConsoleHandler.level = FINE +java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter + +io.opentelemetry.level = FINE +io.opentelemetry.exporter.logging.level = FINE diff --git a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java b/tck/microprofile-tck/opentelemetry/metrics/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java similarity index 99% copy from tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java copy to tck/microprofile-tck/opentelemetry/metrics/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java index 2c42994ac9..87a6a885dd 100644 --- a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java +++ b/tck/microprofile-tck/opentelemetry/metrics/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java @@ -23,4 +23,4 @@ public class ArquillianExtension implements LoadableExtension { public void register(ExtensionBuilder extensionBuilder) { extensionBuilder.observer(ArquillianLifecycle.class).observer(OpenTelemetryTCKDeploymentProcessor.class); } -} \ No newline at end of file +} diff --git a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java b/tck/microprofile-tck/opentelemetry/metrics/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java similarity index 99% copy from tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java copy to tck/microprofile-tck/opentelemetry/metrics/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java index eaf13e761b..5925d17783 100644 --- a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java +++ b/tck/microprofile-tck/opentelemetry/metrics/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java @@ -26,4 +26,4 @@ public class ArquillianLifecycle { public void beforeDeploy(@Observes BeforeDeploy event, TestClass testClass) { GlobalOpenTelemetry.resetForTest(); } -} \ No newline at end of file +} diff --git a/tck/microprofile-tck/opentelemetry/metrics/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java b/tck/microprofile-tck/opentelemetry/metrics/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java new file mode 100644 index 0000000000..6f7fa7f69b --- /dev/null +++ b/tck/microprofile-tck/opentelemetry/metrics/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You 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.apache.tomee.microprofile.tck.opentelemetry; + +import io.opentelemetry.exporter.logging.LoggingMetricExporter; +import org.apache.ziplock.JarLocation; +import org.jboss.arquillian.container.spi.client.deployment.DeploymentDescription; +import org.jboss.arquillian.container.spi.event.container.BeforeDeploy; +import org.jboss.arquillian.core.api.annotation.Observes; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; + +public class OpenTelemetryTCKDeploymentProcessor { + + public void observeDeployment(@Observes final BeforeDeploy beforeDeploy) { + DeploymentDescription deployment = beforeDeploy.getDeployment(); + Archive<?> testableArchive = deployment.getTestableArchive(); + if (testableArchive != null) { + process(testableArchive); + } else { + process(deployment.getArchive()); + } + } + + private void process(Archive<?> archive) { + if (archive instanceof WebArchive webapp) { + webapp.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); + webapp.addAsLibrary(JarLocation.jarLocation(LoggingMetricExporter.class)); + } + } +} diff --git a/tck/microprofile-tck/opentelemetry/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension b/tck/microprofile-tck/opentelemetry/metrics/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension similarity index 94% copy from tck/microprofile-tck/opentelemetry/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension copy to tck/microprofile-tck/opentelemetry/metrics/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension index 64afb3e3dc..6cd04885a7 100644 --- a/tck/microprofile-tck/opentelemetry/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension +++ b/tck/microprofile-tck/opentelemetry/metrics/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension @@ -1 +1 @@ -org.apache.tomee.microprofile.tck.opentelemetry.ArquillianExtension \ No newline at end of file +org.apache.tomee.microprofile.tck.opentelemetry.ArquillianExtension diff --git a/tck/microprofile-tck/opentelemetry/src/test/resources/arquillian.xml b/tck/microprofile-tck/opentelemetry/metrics/src/test/resources/arquillian.xml similarity index 97% copy from tck/microprofile-tck/opentelemetry/src/test/resources/arquillian.xml copy to tck/microprofile-tck/opentelemetry/metrics/src/test/resources/arquillian.xml index 07db9eafa8..9e49793664 100644 --- a/tck/microprofile-tck/opentelemetry/src/test/resources/arquillian.xml +++ b/tck/microprofile-tck/opentelemetry/metrics/src/test/resources/arquillian.xml @@ -33,6 +33,7 @@ <property name="appWorkingDir">target/workdir</property> <property name="cleanOnStartUp">true</property> <property name="properties"> + mptelemetry.tck.log.file.path = /tmp/tomee-otel-metrics-tck.log </property> </configuration> </container> diff --git a/tck/microprofile-tck/opentelemetry/pom.xml b/tck/microprofile-tck/opentelemetry/pom.xml index 64229e9307..0dacf9f108 100644 --- a/tck/microprofile-tck/opentelemetry/pom.xml +++ b/tck/microprofile-tck/opentelemetry/pom.xml @@ -24,173 +24,14 @@ </parent> <artifactId>microprofile-opentelemetry-tck</artifactId> + <packaging>pom</packaging> - <name>TomEE :: TCK :: MicroProfile Open Telemetry TCK</name> + <name>TomEE :: TCK :: MicroProfile Telemetry TCK</name> - <build> - <plugins> - <plugin> - <artifactId>maven-surefire-plugin</artifactId> - <version>3.5.5</version> - <configuration> - <reuseForks>false</reuseForks> - <dependenciesToScan> - <dependency>org.eclipse.microprofile.telemetry.tracing:microprofile-telemetry-tracing-tck</dependency> - </dependenciesToScan> + <modules> + <module>tracing</module> + <module>metrics</module> + <module>logs</module> + </modules> - <excludes> - <!-- - These tests pass on a local system but will fail on ASF Jenkins - org.eclipse.microprofile.telemetry.tracing.tck.async.MpRestClientAsyncTest.testIntegrationWithMpRestClientAsyncError - org.eclipse.microprofile.telemetry.tracing.tck.async.JaxRsClientAsyncTest.testIntegrationWithJaxRsClientError - --> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.async.MpRestClientAsyncTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.async.JaxRsClientAsyncTest</exclude> - - <!-- Optional tests --> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.rest.JaegerPropagationTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.rest.B3MultiPropagationTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.rest.B3PropagationTest</exclude> - <exclude>org.eclipse.microprofile.telemetry.tracing.tck.async.JaxRsServerAsyncTest</exclude> - </excludes> - </configuration> - </plugin> - </plugins> - </build> - - <profiles> - <profile> - <id>mp-tck-all</id> - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-surefire-plugin</artifactId> - <executions> - <execution> - <id>tomee-plus</id> - <goals> - <goal>test</goal> - </goals> - <configuration> - <systemPropertyVariables> - <arquillian.launch>tomee-plus</arquillian.launch> - </systemPropertyVariables> - </configuration> - </execution> - <execution> - <id>tomee-plume</id> - <goals> - <goal>test</goal> - </goals> - <configuration> - <systemPropertyVariables> - <arquillian.launch>tomee-plume</arquillian.launch> - </systemPropertyVariables> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - </profile> - </profiles> - - <dependencies> - - <dependency> - <groupId>org.eclipse.microprofile.telemetry.tracing</groupId> - <artifactId>microprofile-telemetry-tracing-tck</artifactId> - <version>${version.microprofile.opentelemetry}</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.apache.tomee</groupId> - <artifactId>jakartaee-api</artifactId> - <version>${version.jakartaee-api}</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-rt-rs-client</artifactId> - <version>${version.cxf}</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.apache.johnzon</groupId> - <artifactId>johnzon-core</artifactId> - </dependency> - <dependency> - <groupId>org.apache.johnzon</groupId> - <artifactId>johnzon-mapper</artifactId> - </dependency> - <dependency> - <groupId>org.apache.johnzon</groupId> - <artifactId>johnzon-jsonb</artifactId> - </dependency> - <dependency> - <groupId>org.apache.johnzon</groupId> - <artifactId>johnzon-jaxrs</artifactId> - </dependency> - - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>apache-tomee</artifactId> - <version>${project.version}</version> - <type>zip</type> - <classifier>microprofile</classifier> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.testng</groupId> - <artifactId>testng</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>arquillian-tomee-remote</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.jboss.arquillian.testng</groupId> - <artifactId>arquillian-testng-container</artifactId> - <version>1.10.0.Final</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>org.eclipse.microprofile.config</groupId> - <artifactId>microprofile-config-api</artifactId> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>io.smallrye.config</groupId> - <artifactId>smallrye-config-common</artifactId> - <version>${version.microprofile.impl.config}</version> - <scope>test</scope> - </dependency> - - <dependency> - <groupId>io.opentelemetry</groupId> - <artifactId>opentelemetry-semconv</artifactId> - <version>1.20.1-alpha</version> - </dependency> - - <dependency> - <groupId>org.apache.tomee</groupId> - <artifactId>ziplock</artifactId> - <version>${project.version}</version> - <scope>test</scope> - </dependency> - - </dependencies> - -</project> \ No newline at end of file +</project> diff --git a/tck/microprofile-tck/opentelemetry/pom.xml b/tck/microprofile-tck/opentelemetry/tracing/pom.xml similarity index 94% copy from tck/microprofile-tck/opentelemetry/pom.xml copy to tck/microprofile-tck/opentelemetry/tracing/pom.xml index 64229e9307..73aaebd624 100644 --- a/tck/microprofile-tck/opentelemetry/pom.xml +++ b/tck/microprofile-tck/opentelemetry/tracing/pom.xml @@ -19,13 +19,13 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.tomee</groupId> - <artifactId>microprofile-tck</artifactId> + <artifactId>microprofile-opentelemetry-tck</artifactId> <version>11.0.0-SNAPSHOT</version> </parent> - <artifactId>microprofile-opentelemetry-tck</artifactId> + <artifactId>microprofile-telemetry-tracing-tck</artifactId> - <name>TomEE :: TCK :: MicroProfile Open Telemetry TCK</name> + <name>TomEE :: TCK :: MicroProfile Telemetry Tracing TCK</name> <build> <plugins> @@ -35,7 +35,7 @@ <configuration> <reuseForks>false</reuseForks> <dependenciesToScan> - <dependency>org.eclipse.microprofile.telemetry.tracing:microprofile-telemetry-tracing-tck</dependency> + <dependency>org.eclipse.microprofile.telemetry:microprofile-telemetry-tracing-tck</dependency> </dependenciesToScan> <excludes> @@ -99,7 +99,7 @@ <dependencies> <dependency> - <groupId>org.eclipse.microprofile.telemetry.tracing</groupId> + <groupId>org.eclipse.microprofile.telemetry</groupId> <artifactId>microprofile-telemetry-tracing-tck</artifactId> <version>${version.microprofile.opentelemetry}</version> <scope>test</scope> @@ -179,9 +179,9 @@ </dependency> <dependency> - <groupId>io.opentelemetry</groupId> + <groupId>io.opentelemetry.semconv</groupId> <artifactId>opentelemetry-semconv</artifactId> - <version>1.20.1-alpha</version> + <version>1.32.0</version> </dependency> <dependency> @@ -193,4 +193,4 @@ </dependencies> -</project> \ No newline at end of file +</project> diff --git a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java b/tck/microprofile-tck/opentelemetry/tracing/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java similarity index 100% rename from tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java rename to tck/microprofile-tck/opentelemetry/tracing/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianExtension.java diff --git a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java b/tck/microprofile-tck/opentelemetry/tracing/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java similarity index 100% rename from tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java rename to tck/microprofile-tck/opentelemetry/tracing/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/ArquillianLifecycle.java diff --git a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java b/tck/microprofile-tck/opentelemetry/tracing/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java similarity index 95% rename from tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java rename to tck/microprofile-tck/opentelemetry/tracing/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java index b4c6b9d500..6728988914 100644 --- a/tck/microprofile-tck/opentelemetry/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java +++ b/tck/microprofile-tck/opentelemetry/tracing/src/test/java/org/apache/tomee/microprofile/tck/opentelemetry/OpenTelemetryTCKDeploymentProcessor.java @@ -16,7 +16,7 @@ */ package org.apache.tomee.microprofile.tck.opentelemetry; -import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; +import io.opentelemetry.semconv.HttpAttributes; import org.apache.xbean.asm9.ClassReader; import org.apache.xbean.asm9.ClassVisitor; import org.apache.xbean.asm9.ClassWriter; @@ -49,7 +49,7 @@ public class OpenTelemetryTCKDeploymentProcessor { private void process(Archive<?> archive) { if (archive instanceof WebArchive webapp) { - webapp.addAsLibrary(JarLocation.jarLocation(SemanticAttributes.class)) // required for some tck classes + webapp.addAsLibrary(JarLocation.jarLocation(HttpAttributes.class)) // required for some tck classes .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); applyJaxRsClientAsyncTestVisibilityHack(webapp); diff --git a/tck/microprofile-tck/opentelemetry/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension b/tck/microprofile-tck/opentelemetry/tracing/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension similarity index 100% rename from tck/microprofile-tck/opentelemetry/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension rename to tck/microprofile-tck/opentelemetry/tracing/src/test/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension diff --git a/tck/microprofile-tck/opentelemetry/src/test/resources/arquillian.xml b/tck/microprofile-tck/opentelemetry/tracing/src/test/resources/arquillian.xml similarity index 100% rename from tck/microprofile-tck/opentelemetry/src/test/resources/arquillian.xml rename to tck/microprofile-tck/opentelemetry/tracing/src/test/resources/arquillian.xml diff --git a/tck/microprofile-tck/pom.xml b/tck/microprofile-tck/pom.xml index bf4b8b29ef..53e4c1f6ae 100644 --- a/tck/microprofile-tck/pom.xml +++ b/tck/microprofile-tck/pom.xml @@ -33,7 +33,6 @@ <module>config</module> <module>jwt</module> <module>health</module> - <module>metrics</module> <module>rest-client</module> <module>openapi</module> <module>fault-tolerance</module> @@ -81,18 +80,6 @@ <type>test-jar</type> <scope>test</scope> </dependency> - <dependency> - <groupId>org.eclipse.microprofile.metrics</groupId> - <artifactId>microprofile-metrics-api-tck</artifactId> - <version>${version.microprofile.metrics}</version> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.eclipse.microprofile.metrics</groupId> - <artifactId>microprofile-metrics-rest-tck</artifactId> - <version>${version.microprofile.metrics}</version> - <scope>test</scope> - </dependency> <dependency> <groupId>org.eclipse.microprofile.openapi</groupId> <artifactId>microprofile-openapi-tck</artifactId> diff --git a/tomee/tomee-microprofile/mp-common/pom.xml b/tomee/tomee-microprofile/mp-common/pom.xml index aea96e2728..cc8cc91a73 100644 --- a/tomee/tomee-microprofile/mp-common/pom.xml +++ b/tomee/tomee-microprofile/mp-common/pom.xml @@ -65,16 +65,6 @@ <artifactId>smallrye-health</artifactId> <version>${version.microprofile.impl.health}</version> </dependency> - <dependency> - <groupId>io.smallrye</groupId> - <artifactId>smallrye-metrics-api</artifactId> - <version>${version.microprofile.impl.metrics}</version> - </dependency> - <dependency> - <groupId>io.smallrye</groupId> - <artifactId>smallrye-metrics</artifactId> - <version>${version.microprofile.impl.metrics}</version> - </dependency> <dependency> <groupId>io.smallrye</groupId> <artifactId>smallrye-open-api</artifactId> @@ -145,11 +135,6 @@ <artifactId>microprofile-jwt-auth-api</artifactId> </dependency> - <dependency> - <groupId>org.eclipse.microprofile.metrics</groupId> - <artifactId>microprofile-metrics-api</artifactId> - </dependency> - <dependency> <groupId>org.eclipse.microprofile.openapi</groupId> <artifactId>microprofile-openapi-api</artifactId> @@ -225,29 +210,6 @@ </exclusions> </dependency> - <dependency> - <groupId>io.smallrye</groupId> - <artifactId>smallrye-metrics</artifactId> - <exclusions> - <exclusion> - <groupId>*</groupId> - <artifactId>microprofile-metrics-api</artifactId> - </exclusion> - </exclusions> - </dependency> - - <dependency> - <groupId>io.micrometer</groupId> - <artifactId>micrometer-core</artifactId> - <version>${version.micrometer}</version> - </dependency> - - <dependency> - <groupId>io.micrometer</groupId> - <artifactId>micrometer-registry-prometheus</artifactId> - <version>${version.micrometer}</version> - </dependency> - <dependency> <groupId>io.smallrye</groupId> <artifactId>smallrye-open-api</artifactId> diff --git a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/MicroProfileMetricsEndpoint.java b/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/MicroProfileMetricsEndpoint.java deleted file mode 100644 index 53a4a64884..0000000000 --- a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/MicroProfileMetricsEndpoint.java +++ /dev/null @@ -1,58 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.tomee.microprofile.metrics; - -import io.smallrye.metrics.MetricsRequestHandler; -import jakarta.inject.Inject; -import jakarta.servlet.annotation.WebServlet; -import jakarta.servlet.http.HttpServlet; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import java.io.IOException; -import java.util.Collections; -import java.util.stream.Stream; - -/** - * This is not a JAXRS endpoint but a regular servlet because the Smallrye handler does the remaining job - */ -@WebServlet(name = "metrics-servlet", urlPatterns = "/metrics/*") -public class MicroProfileMetricsEndpoint extends HttpServlet { - - @Inject - private MetricsRequestHandler metricsHandler; - - @Override - protected void doOptions(final HttpServletRequest req, final HttpServletResponse resp) throws IOException { - doGet(req, resp); - } - - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - final String requestPath = request.getContextPath().length() > 1 - ? request.getRequestURI().substring(request.getContextPath().length()) - : request.getRequestURI(); - final String method = request.getMethod(); - final Stream<String> acceptHeaders = Collections.list(request.getHeaders("Accept")).stream(); - - metricsHandler.handleRequest(requestPath, method, acceptHeaders, request.getParameterMap(), (status, message, headers) -> { - headers.forEach(response::addHeader); - response.setStatus(status); - response.getWriter().write(message); - }); - } -} diff --git a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/MicroProfileMetricsRegistration.java b/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/MicroProfileMetricsRegistration.java deleted file mode 100644 index 90575078cf..0000000000 --- a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/MicroProfileMetricsRegistration.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.tomee.microprofile.metrics; - -import io.smallrye.metrics.jaxrs.JaxRsMetricsServletFilter; -import jakarta.servlet.FilterRegistration; -import jakarta.servlet.ServletContainerInitializer; -import jakarta.servlet.ServletContext; -import jakarta.servlet.ServletException; -import jakarta.servlet.ServletRegistration; -import org.apache.openejb.loader.SystemInstance; - -import java.util.Set; - -/** - * Responsible for adding the SmallRye metrics filter in the chain to catch all servlet + JAX RS calls. It also - * adds the Metrics servlet endpoint to render the results. - * - */ -// todo do we want to be so restrictive with the HandlesTypes annotation for @Path @ApplicationPath @Servlet ... ? -public class MicroProfileMetricsRegistration implements ServletContainerInitializer { - - @Override - public void onStartup(final Set<Class<?>> classes, final ServletContext ctx) throws ServletException { - if ("none".equals(SystemInstance.get().getOptions().get("tomee.mp.scan", "none"))) { - return; - } - - final FilterRegistration.Dynamic metricsServletFilter = ctx.addFilter("mp-metrics-filter", JaxRsMetricsServletFilter.class); - metricsServletFilter.setAsyncSupported(true); - metricsServletFilter.addMappingForUrlPatterns(null, false, "/*"); - - final ServletRegistration.Dynamic servletRegistration = ctx.addServlet("mp-metrics-servlet", MicroProfileMetricsEndpoint.class); - servletRegistration.addMapping("/metrics/*"); - } - -} \ No newline at end of file diff --git a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/VendorMetrics.java b/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/VendorMetrics.java deleted file mode 100644 index cc06ddeca9..0000000000 --- a/tomee/tomee-microprofile/mp-common/src/main/java/org/apache/tomee/microprofile/metrics/VendorMetrics.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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.apache.tomee.microprofile.metrics; - -import io.smallrye.metrics.SharedMetricRegistries; -import io.smallrye.metrics.legacyapi.LegacyMetricRegistryAdapter; -import org.apache.openejb.assembler.classic.event.AssemblerAfterApplicationCreated; -import org.apache.openejb.loader.SystemInstance; -import org.apache.openejb.observer.Observes; -import org.apache.openejb.util.Join; -import org.eclipse.microprofile.metrics.Metadata; -import org.eclipse.microprofile.metrics.MetricRegistry; - -import javax.management.AttributeList; -import javax.management.MBeanAttributeInfo; -import javax.management.MBeanInfo; -import javax.management.MBeanServer; -import javax.management.MalformedObjectNameException; -import javax.management.ObjectInstance; -import javax.management.ObjectName; -import java.lang.management.ManagementFactory; -import java.util.*; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.stream.Collectors; - -/** - * This class exposes various vendor-specific metrics - * Our vendor specific stuff typically lives in openejb.management in JMX - * We have a slight issue that it doesn't look like we - * can tie it back to application (at the moment at least), - * so we probably just need to scrape everything each time. - */ -public class VendorMetrics { - - private static final Logger LOGGER = Logger.getLogger(VendorMetrics.class.getName()); - - public void afterApplicationDeployed(@Observes AssemblerAfterApplicationCreated event) { - if ("none".equals(SystemInstance.get().getOptions().get("tomee.mp.scan", "none"))) { - return; - } - - final MetricRegistry registry = SharedMetricRegistries.getOrCreate(MetricRegistry.VENDOR_SCOPE); - - if (! (registry instanceof LegacyMetricRegistryAdapter)) { - return; - } - - final MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); - final Set<ObjectInstance> objectInstances; - - try { - objectInstances = platformMBeanServer.queryMBeans(new ObjectName("openejb.management:*"), null); - } catch (MalformedObjectNameException e) { - LOGGER.severe("Unable to read MBeans under openejb.management"); - return; - } - - for (final ObjectInstance objectInstance : objectInstances) { - final ObjectName objectName = objectInstance.getObjectName(); - LOGGER.info("Adding vendor metrics for " + objectName); - LOGGER.info("Class name: " + objectInstance.getClassName()); - - final List<String> nameParts = new ArrayList<>(); - - if (objectName.getKeyProperty("ObjectType") != null) { - nameParts.add(objectName.getKeyProperty("ObjectType")); - if (objectName.getKeyProperty("DataSource") != null) { - nameParts.add(objectName.getKeyProperty("DataSource")); - } - } else if (objectName.getKeyProperty("j2eeType") != null) { - nameParts.add(objectName.getKeyProperty("j2eeType")); - if (objectName.getKeyProperty("name") != null) { - nameParts.add(objectName.getKeyProperty("name")); - } - } - - final String metricName = Join.join("_", nameParts); - - try { - final MBeanInfo mBeanInfo = platformMBeanServer.getMBeanInfo(objectName); - final JMXInfo jmxInfo = JMXInfo.from(objectName, mBeanInfo); - - jmxInfo.configureMetrics(registry, metricName); - - } catch (Exception e) { - LOGGER.log(Level.SEVERE, "Unable to configure metrics for " + objectName, e); - } - } - } - - - private static class JMXInfo { - private final ObjectName objectName; - private long lastUpdated = 0; - private Map<String, JMXAttribute> attributeMap = new HashMap<>(); - - private JMXInfo(ObjectName objectName) { - this.objectName = objectName; - } - - public static JMXInfo from(final ObjectName objectName, final MBeanInfo info) { - - final List<JMXAttribute> attributes = Arrays.stream(info.getAttributes()) - .filter(a -> JMXAttribute.getType(a.getType()) != null) - .map(a -> JMXAttribute.from(a)) - .collect(Collectors.toList()); - - - final JMXInfo jmxInfo = new JMXInfo(objectName); - attributes.forEach(a -> { - jmxInfo.attributeMap.put(a.getAttributeName(), a); - }); - - return jmxInfo; - } - - public synchronized void update() { - final long timeNow = System.currentTimeMillis(); - - // try not to hammer JMX, maybe make this configurable? - if ((timeNow - lastUpdated) < 5000) { - return; - } - - final MBeanServer platformMBeanServer = ManagementFactory.getPlatformMBeanServer(); - final String[] attributeNames = attributeMap.keySet().toArray(new String[0]); - final AttributeList attributes; - - try { - attributes = platformMBeanServer.getAttributes(objectName, attributeNames); - } catch (Exception e) { - LOGGER.log(Level.SEVERE, "Unable to read metrics from JMX", e); - return; - } - - attributes.asList().forEach(a -> { - final String name = a.getName(); - final Object value = a.getValue(); - - if (! Number.class.isInstance(value)) { - // Log? - return; - } - - final JMXAttribute jmxAttribute = attributeMap.get(name); - if (jmxAttribute == null) { - return; - } - - jmxAttribute.setCurrentValue(Number.class.cast(value)); - }); - - lastUpdated = timeNow; - } - - public Double get(final String attributeName) { - update(); - - final JMXAttribute jmxAttribute = attributeMap.get(attributeName); - if (jmxAttribute == null) { - throw new IllegalArgumentException("Attribute name: " + attributeName + " not known"); - } - - return jmxAttribute.toDouble(); - } - - public void configureMetrics(final MetricRegistry registry, final String metricName) { - attributeMap.values().forEach(a -> { - ((LegacyMetricRegistryAdapter) registry).counter( - Metadata - .builder() - .withName(metricName + "_" + a.getAttributeName()) - .build(), - a.getType(), - value -> get(a.attributeName) - ); - }); - } - } - - private static class JMXAttribute<T extends Number> { - private final String attributeName; - private final Class<T> type; - private T currentValue; - - public JMXAttribute(String attributeName, Class<T> type) { - this.attributeName = attributeName; - this.type = type; - } - - public static JMXAttribute from(final MBeanAttributeInfo attributeInfo) { - final String name = attributeInfo.getName(); - final Class<? extends Number> t = JMXAttribute.getType(attributeInfo.getType()); - - if (name == null || t == null) { - throw new IllegalArgumentException("Class and type must be specified"); - } - - return new JMXAttribute(name, t); - } - - public String getAttributeName() { - return attributeName; - } - - public Class<T> getType() { - return type; - } - - public T getCurrentValue() { - return currentValue; - } - - public void setCurrentValue(T currentValue) { - this.currentValue = currentValue; - } - - public Double toDouble() { - if (currentValue == null) { - return Double.NaN; - } - - return currentValue.doubleValue(); - } - - @Override - public String toString() { - return attributeName + "(" + type.getName() + "): " + currentValue; - } - - public static Class<? extends Number> getType(final String type) { - if ("int".equals(type)) { - return Integer.class; - } - if ("long".equals(type)) { - return Long.class; - } - if ("float".equals(type)) { - return Float.class; - } - if ("double".equals(type)) { - return Double.class; - } - - return null; - } - } -} diff --git a/tomee/tomee-microprofile/mp-common/src/main/resources/META-INF/org.apache.openejb.extension b/tomee/tomee-microprofile/mp-common/src/main/resources/META-INF/org.apache.openejb.extension deleted file mode 100644 index e4b4089001..0000000000 --- a/tomee/tomee-microprofile/mp-common/src/main/resources/META-INF/org.apache.openejb.extension +++ /dev/null @@ -1 +0,0 @@ -org.apache.tomee.microprofile.metrics.VendorMetrics \ No newline at end of file diff --git a/tomee/tomee-microprofile/mp-common/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer b/tomee/tomee-microprofile/mp-common/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer index ccc38a2e9c..e2fe588eb1 100644 --- a/tomee/tomee-microprofile/mp-common/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer +++ b/tomee/tomee-microprofile/mp-common/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer @@ -1,2 +1 @@ -org.apache.tomee.microprofile.metrics.MicroProfileMetricsRegistration org.apache.tomee.microprofile.openapi.MicroProfileOpenApiRegistration \ No newline at end of file
