From 68af269cab0e5f2a7a0e1d22d0242a9bbade120e Mon Sep 17 00:00:00 2001 From: David Chan Date: Sun, 21 Jul 2024 23:24:57 -0400 Subject: [PATCH 001/166] re-enable metrics --- .../monitor/fat/RequestTimingMetricsTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/dev/com.ibm.ws.request.timing.monitor_fat/fat/src/com/ibm/ws/request/timing/monitor/fat/RequestTimingMetricsTest.java b/dev/com.ibm.ws.request.timing.monitor_fat/fat/src/com/ibm/ws/request/timing/monitor/fat/RequestTimingMetricsTest.java index 74668a4b3c9..d0b43b8756c 100644 --- a/dev/com.ibm.ws.request.timing.monitor_fat/fat/src/com/ibm/ws/request/timing/monitor/fat/RequestTimingMetricsTest.java +++ b/dev/com.ibm.ws.request.timing.monitor_fat/fat/src/com/ibm/ws/request/timing/monitor/fat/RequestTimingMetricsTest.java @@ -204,7 +204,7 @@ public void testBasic() throws Exception { * @throws Exception */ @Mode(TestMode.LITE) - //@Test + @Test public void testHungThreads() throws Exception { final String testName = "testHungThreads"; Log.info(c, testName, "Entry"); @@ -310,7 +310,7 @@ public void testHungThreads() throws Exception { * @throws Exception */ @Mode(TestMode.LITE) - //@Test + @Test public void testSlowServletRequest() throws Exception { final String METHOD_NAME = "testSlowServletRequest"; @@ -420,7 +420,7 @@ private void setCountDownLatchInServlet(int numbrequests) throws Exception { * allow a test to finish * * @param countToWaitFor - * Value looked for in CountDownLatch + * Value looked for in CountDownLatch * @throws Exception */ private void waitInServletForCountDownLatch(int countToWaitFor) throws Exception { @@ -502,13 +502,13 @@ private void checkStrings(String metricsText, String[] expectedString, String[] * test * * @param th - * -- array of threads + * -- array of threads * @param numReqs - * -- number of requests is the number of threads needed + * -- number of requests is the number of threads needed * @param servletTestName - * -- Used for request to servlet + * -- Used for request to servlet * @param testMethodName - * -- Used for printing to logs + * -- Used for printing to logs */ private void createRequestThreads(Thread[] th, int numReqs) { // Send N servlet requests to server, last request used to terminate From a718744f3ca901600a47ee667b29588d79fa2cf2 Mon Sep 17 00:00:00 2001 From: Jon Hawkes Date: Mon, 22 Jul 2024 19:22:56 +0100 Subject: [PATCH 002/166] Add globalId back into registration EPR --- .../src/com/ibm/ws/wsat/service/WSATUtil.java | 19 ++++++++++++++----- .../CoorContextOutInterceptor.java | 5 +++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/dev/com.ibm.ws.wsat.common/src/com/ibm/ws/wsat/service/WSATUtil.java b/dev/com.ibm.ws.wsat.common/src/com/ibm/ws/wsat/service/WSATUtil.java index b4856b06df2..4c352d374a1 100644 --- a/dev/com.ibm.ws.wsat.common/src/com/ibm/ws/wsat/service/WSATUtil.java +++ b/dev/com.ibm.ws.wsat.common/src/com/ibm/ws/wsat/service/WSATUtil.java @@ -29,18 +29,27 @@ public class WSATUtil { private static final TraceComponent TC = Tr.register(WSATUtil.class); - public static EndpointReferenceType createEpr(String hostname, String... recoveryIds) { + public static EndpointReferenceType createEpr(String hostname) { EndpointReferenceType epr = new EndpointReferenceType(); AttributedURIType uri = new AttributedURIType(); uri.setValue(hostname); epr.setAddress(uri); - ReferenceParametersType para = new ReferenceParametersType(); + epr.setReferenceParameters(new ReferenceParametersType()); + return epr; + } + + public static EndpointReferenceType createEpr(String hostname, String globalId, String recoveryId) { + EndpointReferenceType epr = WSATUtil.createEpr(hostname); - if (recoveryIds.length > 0 && recoveryIds[0] != null) { - para.getAny().add(new JAXBElement(Constants.WS_WSAT_REC_REF, String.class, recoveryIds[0])); + final ReferenceParametersType para = epr.getReferenceParameters(); + + if (recoveryId != null && !recoveryId.isEmpty()) { + para.getAny().add(new JAXBElement(Constants.WS_WSAT_REC_REF, String.class, recoveryId)); + } + if (globalId != null && !globalId.isEmpty()) { + para.getAny().add(new JAXBElement(Constants.WS_WSAT_CTX_REF, String.class, globalId)); } - epr.setReferenceParameters(para); return epr; } diff --git a/dev/com.ibm.ws.wsat.webservice/src/com/ibm/ws/wsat/interceptor/CoorContextOutInterceptor.java b/dev/com.ibm.ws.wsat.webservice/src/com/ibm/ws/wsat/interceptor/CoorContextOutInterceptor.java index f0e65be797e..682cebf5cd3 100644 --- a/dev/com.ibm.ws.wsat.webservice/src/com/ibm/ws/wsat/interceptor/CoorContextOutInterceptor.java +++ b/dev/com.ibm.ws.wsat.webservice/src/com/ibm/ws/wsat/interceptor/CoorContextOutInterceptor.java @@ -109,9 +109,10 @@ public void handleMessage(Message message) throws Fault { + "/" + WSCoorConstants.COORDINATION_REGISTRATION_ENDPOINT; - EndpointReferenceType localRegEpr = WSATUtil.createEpr(regHost, tranService != null ? tranService.getRecoveryId() : null); + final String recoveryId = tranService != null ? tranService.getRecoveryId() : null; - WSATContext ctx = WSCoorUtil.getHandlerService().handleClientRequest(); + final WSATContext ctx = WSCoorUtil.getHandlerService().handleClientRequest(); + final EndpointReferenceType localRegEpr = WSATUtil.createEpr(regHost, ctx.getId(), recoveryId); CoordinationContext cc = WSCoorUtil.createCoordinationContext(ctx, localRegEpr); dataBinding = new JAXBDataBinding(CoordinationContext.class); From bd2b28c4c496fbd34f58ba52c6dae5e2bc843b2d Mon Sep 17 00:00:00 2001 From: Roger Cundiff Date: Mon, 22 Jul 2024 17:17:24 -0500 Subject: [PATCH 003/166] Add insecure provider message --- .../crypto/common/resources/CryptoCommonMessages.nlsprops | 6 +++++- .../src/com/ibm/ws/crypto/common/CryptoMessageUtils.java | 7 +++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/dev/com.ibm.ws.crypto.common/resources/com/ibm/ws/crypto/common/resources/CryptoCommonMessages.nlsprops b/dev/com.ibm.ws.crypto.common/resources/com/ibm/ws/crypto/common/resources/CryptoCommonMessages.nlsprops index 7beefbd6cef..b51c2fff919 100644 --- a/dev/com.ibm.ws.crypto.common/resources/com/ibm/ws/crypto/common/resources/CryptoCommonMessages.nlsprops +++ b/dev/com.ibm.ws.crypto.common/resources/com/ibm/ws/crypto/common/resources/CryptoCommonMessages.nlsprops @@ -30,4 +30,8 @@ CRYPTO_INSECURE.useraction=Use the suggested secure algorithm. CRYPTO_INSECURE_REPLACED=CWWKS5901W: The {0} configuration element specifies the {1} insecure cryptographic algorithm. The {2} secure algorithm is used instead. CRYPTO_INSECURE_REPLACED.explanation=The insecure cryptographic algorithm was replaced with the secure algorithm. -CRYPTO_INSECURE_REPLACED.useraction=No action is required. \ No newline at end of file +CRYPTO_INSECURE_REPLACED.useraction=No action is required. + +CRYPTO_INSECURE_PROVIDER=CWWKS5902W: The {0} configuration element uses the {1} insecure cryptographic algorithm. Consider replacing the configuration with a different provider if this is a concern. +CRYPTO_INSECURE_PROVIDER.explanation=The algorithm is no longer considered cryptographically secure. +CRYPTO_INSECURE_PROVIDER.useraction=Consider replacing the configuration with a different provider if this is a concern. \ No newline at end of file diff --git a/dev/com.ibm.ws.crypto.common/src/com/ibm/ws/crypto/common/CryptoMessageUtils.java b/dev/com.ibm.ws.crypto.common/src/com/ibm/ws/crypto/common/CryptoMessageUtils.java index a3567a6b545..c03d0ff1a0c 100644 --- a/dev/com.ibm.ws.crypto.common/src/com/ibm/ws/crypto/common/CryptoMessageUtils.java +++ b/dev/com.ibm.ws.crypto.common/src/com/ibm/ws/crypto/common/CryptoMessageUtils.java @@ -32,6 +32,13 @@ public static void logInsecureAlgorithmReplaced(String configProperty, String in } } + public static void logInsecureProvider(String provider, String insecureAlgorithm) { + // TODO remove beta check + if (isRunningBetaMode()) { + Tr.warning(tc, "CRYPTO_INSECURE_PROVIDER", provider, insecureAlgorithm); + } + } + // TODO remove beta check static boolean isRunningBetaMode() { return ProductInfo.getBetaEdition(); From f41bde17bfd833bcfaa3d24abd8630e68b783b8a Mon Sep 17 00:00:00 2001 From: Wilalberto Rodriguez Date: Fri, 29 Sep 2023 10:12:07 -0500 Subject: [PATCH 004/166] Add headers to scim We want to add additional headers to the SCIM-2.0 responses. --- .../com/ibm/ws/security/wim/scim20/rest/SCIMRESTHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dev/com.ibm.ws.security.wim.scim.2.0/src/com/ibm/ws/security/wim/scim20/rest/SCIMRESTHandler.java b/dev/com.ibm.ws.security.wim.scim.2.0/src/com/ibm/ws/security/wim/scim20/rest/SCIMRESTHandler.java index 0fadab3b038..e939807ce7a 100644 --- a/dev/com.ibm.ws.security.wim.scim.2.0/src/com/ibm/ws/security/wim/scim20/rest/SCIMRESTHandler.java +++ b/dev/com.ibm.ws.security.wim.scim.2.0/src/com/ibm/ws/security/wim/scim20/rest/SCIMRESTHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018 IBM Corporation and others. + * Copyright (c) 2018, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -428,6 +428,8 @@ public void handleRequest(RESTRequest request, RESTResponse response) throws IOE if (jsonResponse != null) { response.getWriter().write(jsonResponse); } + response.setResponseHeader("X-Content-Type-Options","nosniff"); + response.setResponseHeader("Content-Security-Policy", "default-src 'self'"); response.getWriter().flush(); response.getWriter().close(); } From 85ddcf8ac75220279b905ff8f0f0d398aa0dbef8 Mon Sep 17 00:00:00 2001 From: Roger Cundiff Date: Tue, 23 Jul 2024 11:33:22 -0500 Subject: [PATCH 005/166] message review update --- .../ws/crypto/common/resources/CryptoCommonMessages.nlsprops | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/com.ibm.ws.crypto.common/resources/com/ibm/ws/crypto/common/resources/CryptoCommonMessages.nlsprops b/dev/com.ibm.ws.crypto.common/resources/com/ibm/ws/crypto/common/resources/CryptoCommonMessages.nlsprops index b51c2fff919..158b0b6bd34 100644 --- a/dev/com.ibm.ws.crypto.common/resources/com/ibm/ws/crypto/common/resources/CryptoCommonMessages.nlsprops +++ b/dev/com.ibm.ws.crypto.common/resources/com/ibm/ws/crypto/common/resources/CryptoCommonMessages.nlsprops @@ -32,6 +32,6 @@ CRYPTO_INSECURE_REPLACED=CWWKS5901W: The {0} configuration element specifies the CRYPTO_INSECURE_REPLACED.explanation=The insecure cryptographic algorithm was replaced with the secure algorithm. CRYPTO_INSECURE_REPLACED.useraction=No action is required. -CRYPTO_INSECURE_PROVIDER=CWWKS5902W: The {0} configuration element uses the {1} insecure cryptographic algorithm. Consider replacing the configuration with a different provider if this is a concern. +CRYPTO_INSECURE_PROVIDER=CWWKS5902W: The {0} configuration element uses the {1} insecure cryptographic algorithm. Consider replacing the configuration with a different provider if security is a concern. CRYPTO_INSECURE_PROVIDER.explanation=The algorithm is no longer considered cryptographically secure. -CRYPTO_INSECURE_PROVIDER.useraction=Consider replacing the configuration with a different provider if this is a concern. \ No newline at end of file +CRYPTO_INSECURE_PROVIDER.useraction=Consider replacing the configuration with a different provider if security is a concern. \ No newline at end of file From f2903bd105c8d4c15bbd12b14ac66b44729dcf3a Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Fri, 19 Jul 2024 14:59:50 -0500 Subject: [PATCH 006/166] Setup Jakarta Data recreates for Eclipselink --- .../.classpath | 1 + dev/com.ibm.ws.jpa.tests.jpa_32_fat/bnd.bnd | 3 +- .../fat/src/com/ibm/ws/jpa/FATSuite.java | 2 + .../ibm/ws/jpa/jpa32/JPABootstrapTest.java | 11 --- .../ws/jpa/jpa32/JakartaDataRecreateTest.java | 86 +++++++++++++++++++ .../bootstrap.properties | 15 ++++ .../JakartaDataRecreateServer/server.xml | 46 ++++++++++ .../WEB-INF/classes/META-INF/persistence.xml | 27 ++++++ .../jpa/data/tests/models/Coordinate.java | 38 ++++++++ .../tests/web/JakartaDataRecreateServlet.java | 33 +++++++ .../web/TestJPABootstrapServlet.java | 4 +- 11 files changed, 253 insertions(+), 13 deletions(-) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JakartaDataRecreateTest.java create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/bootstrap.properties create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/server.xml create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/resources/jpa-3.2/web/WEB-INF/classes/META-INF/persistence.xml create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Coordinate.java create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/.classpath b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/.classpath index 20e1a33163f..d8576463ad6 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/.classpath +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/.classpath @@ -3,6 +3,7 @@ + diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/bnd.bnd b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/bnd.bnd index f57c2f9c49e..921035feda5 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/bnd.bnd +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/bnd.bnd @@ -16,7 +16,8 @@ bVersion=1.0 src: \ fat/src,\ test-applications/helpers/DatabaseManagement/src,\ - test-applications/jpabootstrap/src + test-applications/jpabootstrap/src,\ + test-applications/jakartadata/src fat.project: true tested.features: databaseRotation, persistence-3.2, persistencecontainer-3.2, servlet-6.1 diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/FATSuite.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/FATSuite.java index 08187cf4121..d6c4a390a19 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/FATSuite.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/FATSuite.java @@ -20,6 +20,7 @@ import org.testcontainers.containers.JdbcDatabaseContainer; import com.ibm.ws.jpa.jpa32.JPABootstrapTest; +import com.ibm.ws.jpa.jpa32.JakartaDataRecreateTest; import componenttest.containers.TestContainerSuite; import componenttest.rules.repeater.RepeatTests; @@ -28,6 +29,7 @@ @RunWith(Suite.class) @SuiteClasses({ JPABootstrapTest.class, + JakartaDataRecreateTest.class, componenttest.custom.junit.runner.AlwaysPassesTest.class }) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JPABootstrapTest.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JPABootstrapTest.java index 7601242adcd..73c4bf716a6 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JPABootstrapTest.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JPABootstrapTest.java @@ -19,7 +19,6 @@ import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Test; import org.junit.runner.RunWith; import org.testcontainers.containers.JdbcDatabaseContainer; @@ -91,14 +90,4 @@ public static void tearDown() throws Exception { server1.stopServer("CWWJP9991W", "Missing PostgreSQL10JsonPlatform"); // Generated with postgres db, since we don't include the postgres plugin); } - - @Test - public void testJPA32Bootstrap() throws Exception { - runTest(SPECLEVEL); - } - - private void runTest(String spec) throws Exception { - FATServletClient.runTest(server1, APP_NAME + "_" + spec + "/TestJPABootstrap", "testPersistenceUnitBootstrap"); - - } } diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JakartaDataRecreateTest.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JakartaDataRecreateTest.java new file mode 100644 index 00000000000..5ec7764a697 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JakartaDataRecreateTest.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package com.ibm.ws.jpa.jpa32; + +import org.jboss.shrinkwrap.api.Filters; +import org.jboss.shrinkwrap.api.GenericArchive; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.importer.ExplodedImporter; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.runner.RunWith; +import org.testcontainers.containers.JdbcDatabaseContainer; + +import com.ibm.websphere.simplicity.ShrinkHelper; +import com.ibm.ws.jpa.FATSuite; + +import componenttest.annotation.MinimumJavaLevel; +import componenttest.annotation.Server; +import componenttest.annotation.TestServlet; +import componenttest.custom.junit.runner.FATRunner; +import componenttest.topology.database.container.DatabaseContainerType; +import componenttest.topology.database.container.DatabaseContainerUtil; +import componenttest.topology.impl.LibertyServer; +import componenttest.topology.utils.PrivHelper; +import io.openliberty.jpa.data.tests.web.JakartaDataRecreateServlet; + +/** + * Recreate issues found during development of Jakarta Data with EclipseLink + * using pure Jakarta Persistence. + * + * These tests should be contributed back to EclipseLink as these issues are resovled. + */ +@RunWith(FATRunner.class) +@MinimumJavaLevel(javaLevel = 17) +public class JakartaDataRecreateTest { + public static final String APP_NAME = "jakartadata"; + public static final String SERVLET = "JakartaDataRecreate"; + public static final String SPECLEVEL = "3.2"; + + @Server("JakartaDataRecreateServer") + @TestServlet(servlet = JakartaDataRecreateServlet.class, path = APP_NAME + "_" + SPECLEVEL + "/" + SERVLET) + public static LibertyServer server; + + public static final JdbcDatabaseContainer testContainer = FATSuite.testContainer; + + @BeforeClass + public static void setUp() throws Exception { + PrivHelper.generateCustomPolicy(server, PrivHelper.JAXB_PERMISSION); + + //Get driver name + server.addEnvVar("DB_DRIVER", DatabaseContainerType.valueOf(testContainer).getDriverName()); + + //Setup server DataSource properties + DatabaseContainerUtil.setupDataSourceProperties(server, testContainer); + + createApplication(SPECLEVEL); + server.startServer(); + } + + private static void createApplication(String specLevel) throws Exception { + final String resPath = "test-applications/" + APP_NAME + "/resources/jpa-" + specLevel + "/web/"; + + WebArchive app = ShrinkWrap.create(WebArchive.class, APP_NAME + "_" + specLevel + ".war"); + app.addPackage("io.openliberty.jpa.data.tests.models"); + app.addPackage("io.openliberty.jpa.data.tests.web"); + app.merge(ShrinkWrap.create(GenericArchive.class).as(ExplodedImporter.class).importDirectory(resPath).as(GenericArchive.class), + "/", + Filters.includeAll()); + ShrinkHelper.exportDropinAppToServer(server, app); + } + + @AfterClass + public static void tearDown() throws Exception { + server.stopServer("CWWJP9991W", + "Missing PostgreSQL10JsonPlatform"); // Generated with postgres db, since we don't include the postgres plugin); + } + +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/bootstrap.properties b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/bootstrap.properties new file mode 100644 index 00000000000..c33f78ae0f0 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/bootstrap.properties @@ -0,0 +1,15 @@ +############################################################################### +# Copyright (c) 2024 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# IBM Corporation - initial API and implementation +############################################################################### +bootstrap.include=../testports.properties +# Test requires JPA trace to be enabled, do not disable! +traceSpecification=JPA=all \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/server.xml b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/server.xml new file mode 100644 index 00000000000..41c0508a81a --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/server.xml @@ -0,0 +1,46 @@ + + + + + persistence-3.2 + servlet-6.1 + + componenttest-2.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/resources/jpa-3.2/web/WEB-INF/classes/META-INF/persistence.xml b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/resources/jpa-3.2/web/WEB-INF/classes/META-INF/persistence.xml new file mode 100644 index 00000000000..b9e67eb9c84 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/resources/jpa-3.2/web/WEB-INF/classes/META-INF/persistence.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Coordinate.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Coordinate.java new file mode 100644 index 00000000000..c69c55dd4e3 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Coordinate.java @@ -0,0 +1,38 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import java.util.UUID; + +/** + * Recreate from Jakarta Data TCK + */ +@jakarta.persistence.Entity +public class Coordinate { + @jakarta.persistence.Id + public UUID id; + + public double x; + + public float y; + + public static Coordinate of(String id, double x, float y) { + Coordinate c = new Coordinate(); + c.id = UUID.nameUUIDFromBytes(id.getBytes()); + c.x = x; + c.y = y; + return c; + } + + @Override + public String toString() { + return "Coordinate@" + Integer.toHexString(hashCode()) + "(" + x + "," + y + ")" + ":" + id; + } +} \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java new file mode 100644 index 00000000000..b2ae129fadb --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.web; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import componenttest.app.FATServlet; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; +import jakarta.servlet.annotation.WebServlet; + +@SuppressWarnings("serial") +@WebServlet(urlPatterns = "/JakartaDataRecreate") +public class JakartaDataRecreateServlet extends FATServlet { + + @PersistenceContext(unitName = "RecreatePersistenceUnit") + private EntityManager em; + + @Test + public void alwaysPasses() { + assertTrue(true); + } + +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jpabootstrap/src/jpabootstrap/web/TestJPABootstrapServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jpabootstrap/src/jpabootstrap/web/TestJPABootstrapServlet.java index 9d7637f1f31..69e8253c32f 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jpabootstrap/src/jpabootstrap/web/TestJPABootstrapServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jpabootstrap/src/jpabootstrap/web/TestJPABootstrapServlet.java @@ -4,7 +4,7 @@ * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-2.0/ - * + * * SPDX-License-Identifier: EPL-2.0 * * Contributors: @@ -13,6 +13,7 @@ package jpabootstrap.web; import org.junit.Assert; +import org.junit.Test; import componenttest.app.FATServlet; import jakarta.annotation.Resource; @@ -31,6 +32,7 @@ public class TestJPABootstrapServlet extends FATServlet { @Resource private UserTransaction tx; + @Test public void testPersistenceUnitBootstrap() throws Exception { tx.begin(); SimpleTestEntity entity = new SimpleTestEntity(); From 8ede48f8d60ed77a86abbf2c1d895cdc89214f94 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Fri, 19 Jul 2024 15:26:59 -0500 Subject: [PATCH 007/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28912 --- .../tests/web/JakartaDataRecreateServlet.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index b2ae129fadb..a03a7f1834a 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -9,14 +9,21 @@ *******************************************************************************/ package io.openliberty.jpa.data.tests.web; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import java.util.UUID; + +import org.junit.Ignore; import org.junit.Test; import componenttest.app.FATServlet; +import io.openliberty.jpa.data.tests.models.Coordinate; +import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jakarta.servlet.annotation.WebServlet; +import jakarta.transaction.UserTransaction; @SuppressWarnings("serial") @WebServlet(urlPatterns = "/JakartaDataRecreate") @@ -25,9 +32,51 @@ public class JakartaDataRecreateServlet extends FATServlet { @PersistenceContext(unitName = "RecreatePersistenceUnit") private EntityManager em; + @Resource + private UserTransaction tx; + @Test public void alwaysPasses() { assertTrue(true); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28912") + public void testOLGH28912() throws Exception { + Coordinate original = Coordinate.of("testOLGH28912", 10, 15f); + UUID id = original.id; + Coordinate result; + + tx.begin(); + + try { + em.persist(original); + + em.createQuery("UPDATE Coordinate SET x = :newX, y = y / :yDivisor WHERE id = :id") //FAILURE PARSING QUERY HERE + .setParameter("newX", 11) + .setParameter("yDivisor", 5) + .setParameter("id", id) + .executeUpdate(); + + result = em.createQuery("SELECT Coordinate WHERE id = :id", Coordinate.class) + .setParameter("id", id) + .getSingleResult(); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreated + * java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: + * Exception Description: Syntax error parsing [UPDATE Coordinate SET x = :newX, y = y / :yDivisor WHERE id = :id]. + * [37, 38] The left expression is not an arithmetic expression. + */ + throw e; + } + + assertEquals(id, result.id); + assertEquals(11, result.x, 0.001); + assertEquals(5f, result.y, 0.001); + } + } From 152f15d5bc87108845db5b82d6c06dbf68ea8cab Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Fri, 19 Jul 2024 15:50:35 -0500 Subject: [PATCH 008/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28913 --- .../jpa/data/tests/models/AsciiCharacter.java | 77 +++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 32 ++++++++ 2 files changed, 109 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AsciiCharacter.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AsciiCharacter.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AsciiCharacter.java new file mode 100644 index 00000000000..457dc3b78ea --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AsciiCharacter.java @@ -0,0 +1,77 @@ +/** + * + */ +package io.openliberty.jpa.data.tests.models; + +import java.io.Serializable; + +/** + * Recreate from Jakarta Data TCK + */ +@jakarta.persistence.Entity +public class AsciiCharacter implements Serializable { + private static final long serialVersionUID = 1L; + + @jakarta.persistence.Id + private long id; + + private int numericValue; + + private String hexadecimal; + + private char thisCharacter; + + private boolean isControl; + + public static AsciiCharacter of(int numericValue) { + AsciiCharacter inst = new AsciiCharacter(); + inst.id = numericValue; + inst.numericValue = numericValue; + inst.hexadecimal = Integer.toHexString(numericValue); + inst.thisCharacter = (char) numericValue; + inst.isControl = Character.isISOControl(inst.thisCharacter); + + return inst; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public int getNumericValue() { + return numericValue; + } + + public void setNumericValue(int numericValue) { + this.numericValue = numericValue; + } + + public String getHexadecimal() { + return hexadecimal; + } + + public void setHexadecimal(String hexadecimal) { + this.hexadecimal = hexadecimal; + } + + public char getThisCharacter() { + return thisCharacter; + } + + public void setThisCharacter(char thisCharacter) { + this.thisCharacter = thisCharacter; + } + + public boolean isControl() { + return isControl; + } + + public void setControl(boolean isControl) { + this.isControl = isControl; + } + +} \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index a03a7f1834a..7f84b854dd2 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -18,6 +18,7 @@ import org.junit.Test; import componenttest.app.FATServlet; +import io.openliberty.jpa.data.tests.models.AsciiCharacter; import io.openliberty.jpa.data.tests.models.Coordinate; import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; @@ -79,4 +80,35 @@ public void testOLGH28912() throws Exception { assertEquals(5f, result.y, 0.001); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28913") + public void testOLGH28913() throws Exception { + AsciiCharacter character = AsciiCharacter.of(80); //P + String result; + + tx.begin(); + + try { + em.persist(character); + + result = em.createQuery("SELECT hexadecimal FROM AsciiCharacter WHERE hexadecimal IS NOT NULL AND thisCharacter = ?1", String.class) //FAILURE PARSING QUERY HERE + .setParameter(1, character.getThisCharacter()) + .getSingleResult(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreated + * java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: + * Exception Description: Problem compiling [SELECT hexadecimal FROM AsciiCharacter WHERE hexadecimal IS NOT NULL AND thisCharacter = ?1]. + * [7, 18] The identification variable 'hexadecimal' is not defined in the FROM clause. + */ + throw e; + } + + assertEquals(character.getHexadecimal(), result); + } + } From 453502956b9360f4c0550904029e72d8fbef3963 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Fri, 19 Jul 2024 16:07:03 -0500 Subject: [PATCH 009/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28908 --- .../jpa/data/tests/models/AsciiCharacter.java | 10 ++++- .../jpa/data/tests/models/Person.java | 28 ++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 44 +++++++++++++++++++ 3 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Person.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AsciiCharacter.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AsciiCharacter.java index 457dc3b78ea..54734a70d76 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AsciiCharacter.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AsciiCharacter.java @@ -1,6 +1,12 @@ -/** +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ * - */ + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ package io.openliberty.jpa.data.tests.models; import java.io.Serializable; diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Person.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Person.java new file mode 100644 index 00000000000..6ad6b65e35b --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Person.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat + */ +@Entity +public class Person { + + @Id + public long ssn_id; + + public String firstName; + + public String lastName; + +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 7f84b854dd2..acee9481681 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -20,6 +20,7 @@ import componenttest.app.FATServlet; import io.openliberty.jpa.data.tests.models.AsciiCharacter; import io.openliberty.jpa.data.tests.models.Coordinate; +import io.openliberty.jpa.data.tests.models.Person; import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; @@ -111,4 +112,47 @@ public void testOLGH28913() throws Exception { assertEquals(character.getHexadecimal(), result); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28908") + public void testOLGH28908() throws Exception { + Person p = new Person(); + p.firstName = "John"; + p.lastName = "Jacobs"; + p.ssn_id = 111111111l; + + Person result; + + tx.begin(); + + try { + em.persist(p); + + em.createQuery("UPDATE Person SET firstName=:newFirstName WHERE id(this)=:ssn") + .setParameter("newFirstName", "Jack") + .setParameter("ssn", p.ssn_id) + .executeUpdate(); + + result = em.createQuery("SELECT Person WHERE ssn_id=:ssn", Person.class) + .setParameter("ssn", p.ssn_id) + .getSingleResult(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreated + * java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: + * Exception Description: Internal problem encountered while compiling [UPDATE Person SET firstName=:newFirstName WHERE id(this)=:ssn]. + * Internal Exception: java.lang.NullPointerException: Cannot invoke "org.eclipse.persistence.internal.jpa.jpql.Declaration.getDescriptor()" + * because the return value of "org.eclipse.persistence.internal.jpa.jpql.JPQLQueryContext.getDeclaration(java.lang.String)" is null + */ + throw e; + } + + assertEquals(p.ssn_id, result.ssn_id); + assertEquals("Jack", result.firstName); + assertEquals(p.lastName, result.lastName); + } + } From 31ee7b2ba13e825ee833eeb141babaec29aa89e6 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Fri, 19 Jul 2024 16:38:01 -0500 Subject: [PATCH 010/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28874 --- .../jpa/data/tests/models/NaturalNumber.java | 110 ++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 59 ++++++++++ 2 files changed, 169 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/NaturalNumber.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/NaturalNumber.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/NaturalNumber.java new file mode 100644 index 00000000000..e8f00b64005 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/NaturalNumber.java @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import java.io.Serializable; + +/** + * Recreate from Jakarta Data TCK + */ +@jakarta.persistence.Entity +public class NaturalNumber implements Serializable { + private static final long serialVersionUID = 1L; + + public enum NumberType { + ONE, PRIME, COMPOSITE + } + + @jakarta.persistence.Id + private long id; //AKA the value + + private boolean isOdd; + + private Short numBitsRequired; + + private NumberType numType; // enum of ONE | PRIME | COMPOSITE + + private long floorOfSquareRoot; + + public static NaturalNumber of(int value) { + boolean isOne = value == 1; + boolean isOdd = value % 2 == 1; + long sqrRoot = squareRoot(value); + boolean isPrime = isOdd ? isPrime(value, sqrRoot) : (value == 2); + + NaturalNumber inst = new NaturalNumber(); + inst.id = value; + inst.isOdd = isOdd; + inst.numBitsRequired = bitsRequired(value); + inst.numType = isOne ? NumberType.ONE : isPrime ? NumberType.PRIME : NumberType.COMPOSITE; + inst.floorOfSquareRoot = sqrRoot; + + return inst; + } + + private static Short bitsRequired(int value) { + return (short) (Math.floor(Math.log(value) / Math.log(2)) + 1); + } + + private static long squareRoot(int value) { + return (long) Math.floor(Math.sqrt(value)); + } + + private static boolean isPrime(int value, long largestPossibleFactor) { + if (value == 1) + return false; + + for (int i = 2; i <= largestPossibleFactor; i++) { + if (value % i == 0) + return false; + } + return true; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public boolean isOdd() { + return isOdd; + } + + public void setOdd(boolean isOdd) { + this.isOdd = isOdd; + } + + public Short getNumBitsRequired() { + return numBitsRequired; + } + + public void setNumBitsRequired(Short numBitsRequired) { + this.numBitsRequired = numBitsRequired; + } + + public NumberType getNumType() { + return numType; + } + + public void setNumType(NumberType numType) { + this.numType = numType; + } + + public long getFloorOfSquareRoot() { + return floorOfSquareRoot; + } + + public void setFloorOfSquareRoot(long floorOfSquareRoot) { + this.floorOfSquareRoot = floorOfSquareRoot; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index acee9481681..9a9ba4b6960 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -12,6 +12,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import org.junit.Ignore; @@ -20,6 +22,7 @@ import componenttest.app.FATServlet; import io.openliberty.jpa.data.tests.models.AsciiCharacter; import io.openliberty.jpa.data.tests.models.Coordinate; +import io.openliberty.jpa.data.tests.models.NaturalNumber; import io.openliberty.jpa.data.tests.models.Person; import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; @@ -155,4 +158,60 @@ public void testOLGH28908() throws Exception { assertEquals(p.lastName, result.lastName); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28874") + public void testOLGH28874() throws Exception { + NaturalNumber two = NaturalNumber.of(2); + NaturalNumber three = NaturalNumber.of(3); + NaturalNumber result1 = null, result2 = null; + + List exceptions = new ArrayList<>(); + + tx.begin(); + em.persist(two); + em.persist(three); + tx.commit(); + + tx.begin(); + try { + result1 = em.createQuery("FROM NaturalNumber WHERE isOdd = false AND numType = io.openliberty.jpa.data.tests.models.NaturalNumber.NumberType.PRIME", + NaturalNumber.class) + .getSingleResult(); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + exceptions.add(e); + } + + tx.begin(); + try { + result2 = em.createQuery("FROM NaturalNumber WHERE this.isOdd = false AND this.numType = io.openliberty.jpa.data.tests.models.NaturalNumber.NumberType.PRIME", + NaturalNumber.class) + .getSingleResult(); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + exceptions.add(e); + } + + if (!exceptions.isEmpty()) { + + /* + * Recreate + * Exception Description: Object comparisons can only be used with OneToOneMappings. Other mapping comparisons must be done through query keys or direct attribute level + * comparisons. + * Mapping: [org.eclipse.persistence.mappings.DirectToFieldMapping[numType-->NATURALNUMBER.NUMTYPE]] + * Expression: [ + * Query Key numType + * Base io.openliberty.jpa.data.tests.models.NaturalNumber] + * Query: ReadAllQuery(referenceClass=NaturalNumber + * jpql="FROM NaturalNumber WHERE isOdd = false AND numType = io.openliberty.jpa.data.tests.models.NaturalNumber.NumberType.PRIME") + */ + throw exceptions.get(0); + } + + assertEquals(2l, result1.getId(), 0.001f); + assertEquals(2l, result2.getId(), 0.001f); + } + } From 1f247d5b4348195ad9e34949e6cf60d170fcfeff Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Mon, 22 Jul 2024 10:24:38 -0500 Subject: [PATCH 011/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28920 --- .../jpa/data/tests/models/Rebate.java | 76 +++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 58 +++++++++++++- 2 files changed, 131 insertions(+), 3 deletions(-) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Rebate.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Rebate.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Rebate.java new file mode 100644 index 00000000000..e1e03c9e489 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Rebate.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Version; + +// +// Recreate from io.openliberty.data.internal_fat_jpa +// +//public record Rebate( +// Integer id, // TODO use @GeneratedValue +// double amount, +// String customerId, +// LocalTime purchaseMadeAt, +// LocalDate purchaseMadeOn, +// Rebate.Status status, +// LocalDateTime updatedAt, +// Integer version) { // TODO rename to something other than version, and use @Version +// public static enum Status { +// DENIED, SUBMITTED, VERIFIED, PAID +// } +//} + +@Entity +public class Rebate { + + @Id + @GeneratedValue + public Integer id; + + public double amount; + + public String customerId; + + public LocalTime purchaseMadeAt; + + public LocalDate purchaseMadeOn; + + public Rebate.Status status; + + public LocalDateTime updatedAt; + + @Version + Integer version; + + public static Rebate of(double amount, String customerId, LocalTime purchaseMadeAt, LocalDate purchaseMadeOn, Status status, LocalDateTime updatedAt, int version) { + Rebate inst = new Rebate(); + inst.amount = amount; + inst.customerId = customerId; + inst.purchaseMadeAt = purchaseMadeAt; + inst.purchaseMadeOn = purchaseMadeOn; + inst.status = status; + inst.updatedAt = updatedAt; + inst.version = version; + + return inst; + } + + public static enum Status { + DENIED, SUBMITTED, VERIFIED, PAID + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 9a9ba4b6960..be1e82b7961 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -12,6 +12,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -24,6 +27,8 @@ import io.openliberty.jpa.data.tests.models.Coordinate; import io.openliberty.jpa.data.tests.models.NaturalNumber; import io.openliberty.jpa.data.tests.models.Person; +import io.openliberty.jpa.data.tests.models.Rebate; +import io.openliberty.jpa.data.tests.models.Rebate.Status; import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; @@ -72,7 +77,6 @@ public void testOLGH28912() throws Exception { /* * Recreated - * java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: * Exception Description: Syntax error parsing [UPDATE Coordinate SET x = :newX, y = y / :yDivisor WHERE id = :id]. * [37, 38] The left expression is not an arithmetic expression. */ @@ -105,7 +109,6 @@ public void testOLGH28913() throws Exception { /* * Recreated - * java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: * Exception Description: Problem compiling [SELECT hexadecimal FROM AsciiCharacter WHERE hexadecimal IS NOT NULL AND thisCharacter = ?1]. * [7, 18] The identification variable 'hexadecimal' is not defined in the FROM clause. */ @@ -145,7 +148,6 @@ public void testOLGH28908() throws Exception { /* * Recreated - * java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: * Exception Description: Internal problem encountered while compiling [UPDATE Person SET firstName=:newFirstName WHERE id(this)=:ssn]. * Internal Exception: java.lang.NullPointerException: Cannot invoke "org.eclipse.persistence.internal.jpa.jpql.Declaration.getDescriptor()" * because the return value of "org.eclipse.persistence.internal.jpa.jpql.JPQLQueryContext.getDeclaration(java.lang.String)" is null @@ -214,4 +216,54 @@ public void testOLGH28874() throws Exception { assertEquals(2l, result2.getId(), 0.001f); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28920") + public void testOLGH28920() throws Exception { + Rebate r1 = Rebate.of(10.00, "testOLGH28920", LocalTime.now().minusHours(1), LocalDate.now(), Status.SUBMITTED, LocalDateTime.now(), 1); + Rebate r2 = Rebate.of(12.00, "testOLGH28920", LocalTime.now().minusHours(1), LocalDate.now(), Status.PAID, LocalDateTime.now(), 2); + Rebate r3 = Rebate.of(14.00, "testOLGH28920", LocalTime.now().minusHours(1), LocalDate.now(), Status.PAID, LocalDateTime.now(), 2); + + List paidRebates; + + tx.begin(); + em.persist(r1); + em.persist(r2); + em.persist(r3); + tx.commit(); + + tx.begin(); + try { + + paidRebates = em.createQuery( + "SELECT NEW io.openliberty.jpa.data.tests.models.Rebate(id, amount, customerId, purchaseMadeAt, purchaseMadeOn, status, updatedAt, version) " + + "FROM Rebate " + + "WHERE customerId=?1 AND status=io.openliberty.jpa.data.tests.models.Rebate.Status.PAID " + + "ORDER BY amount DESC, id ASC", Rebate.class) + .setParameter(1, "testOLGH28920") + .getResultList(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * Exception Description: Syntax error parsing [SELECT NEW io.openliberty.jpa.data.tests.models.Rebate(id, amount, customerId, purchaseMadeAt, purchaseMadeOn, status, + * updatedAt, version) FROM Rebate WHERE customerId=?1 AND status=io.openliberty.jpa.data.tests.models.Rebate.Status.PAID ORDER BY amount DESC, id ASC]. + * [55, 57] The identification variable 'id' cannot be a reserved word. + * [130, 137] The identification variable 'version' cannot be a reserved word. + */ + throw e; + } + + assertEquals(2, paidRebates.size()); + assertEquals(14.00, paidRebates.get(0).amount, 0.001); + } + + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28909") + public void testOLGH28909() throws Exception { + + } + } From fb4dc376e4fa9baa018d05cab414e1426bc794b9 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Mon, 22 Jul 2024 10:45:24 -0500 Subject: [PATCH 012/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28909 --- .../jpa/data/tests/models/Box.java | 39 ++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 40 ++++++++++++++++++- 2 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Box.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Box.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Box.java new file mode 100644 index 00000000000..1c893bd4acb --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Box.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +/** + * Recreate from Jakarta Data TCK + */ +@jakarta.persistence.Entity +public class Box { + @jakarta.persistence.Id + public String boxIdentifier; + + public int length; + + public int width; + + public int height; + + public static Box of(String id, int length, int width, int height) { + Box box = new Box(); + box.boxIdentifier = id; + box.length = length; + box.width = width; + box.height = height; + return box; + } + + @Override + public String toString() { + return "Box@" + Integer.toHexString(hashCode()) + ":" + length + "x" + width + "x" + height + ":" + boxIdentifier; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index be1e82b7961..c2da2c8aa1a 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -24,6 +24,7 @@ import componenttest.app.FATServlet; import io.openliberty.jpa.data.tests.models.AsciiCharacter; +import io.openliberty.jpa.data.tests.models.Box; import io.openliberty.jpa.data.tests.models.Coordinate; import io.openliberty.jpa.data.tests.models.NaturalNumber; import io.openliberty.jpa.data.tests.models.Person; @@ -138,7 +139,7 @@ public void testOLGH28908() throws Exception { .setParameter("ssn", p.ssn_id) .executeUpdate(); - result = em.createQuery("SELECT Person WHERE ssn_id=:ssn", Person.class) + result = em.createQuery("SELECT Person WHERE ssn_id = :ssn", Person.class) .setParameter("ssn", p.ssn_id) .getSingleResult(); @@ -263,6 +264,43 @@ public void testOLGH28920() throws Exception { @Test @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28909") public void testOLGH28909() throws Exception { + Box cube = Box.of("testOLGH28909", 1, 1, 1); + + Box wall; //box with no width + + tx.begin(); + em.persist(cube); + tx.commit(); + + tx.begin(); + try { + em.createQuery("UPDATE Box SET length = length + ?1, width = width - ?1, height = height * ?2") + .setParameter(1, 1) + .setParameter(2, 2) + .executeUpdate(); + + wall = em.createQuery("SELECT Box WHERE boxIdentifier = :id", Box.class) + .setParameter("id", "testOLGH28909") + .getSingleResult(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * Exception Description: Syntax error parsing [UPDATE Box SET length = length + ?1, width = width - ?1, height = height * ?2]. + * [30, 30] The left parenthesis is missing from the LENGTH expression. + * [45, 50] The left expression is not an arithmetic expression. + * [66, 72] The left expression is not an arithmetic expression. + */ + throw e; + } + + assertEquals("testOLGH28909", wall.boxIdentifier); + assertEquals(2, wall.length); // 1+1 + assertEquals(0, wall.length); // 1-1 + assertEquals(2, wall.height); // 1*2 } From 8f086891eda1ab5e65cd29c39b997f620b197f9e Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Mon, 22 Jul 2024 11:14:12 -0500 Subject: [PATCH 013/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28931 --- .../jpa/data/tests/models/Business.java | 110 ++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 34 ++++++ 2 files changed, 144 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Business.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Business.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Business.java new file mode 100644 index 00000000000..76f8764e940 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Business.java @@ -0,0 +1,110 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat_jpa + */ +@Entity +public class Business { + + public String name; + + @GeneratedValue + @Id + public int id; + + @Embedded + public Location location; + + public static Business of(float latitude, float longitude, String city, String state, int zip, + int houseNum, String streetName, String streetDir, String name) { + Business inst = new Business(); + Street street = new Street(streetName, streetDir); + Address address = new Address(city, state, zip, houseNum, street); + + inst.name = name; + inst.location = new Location(address, latitude, longitude); + + return inst; + } + + @Embeddable + public static class Location { + + @Embedded + public Address address; + + @Column(columnDefinition = "DECIMAL(8,5) NOT NULL") + public float latitude; + + @Column(columnDefinition = "DECIMAL(8,5) NOT NULL") + public float longitude; + + public Location() { + } + + public Location(Address address, float latitude, float longitude) { + this.address = address; + this.latitude = latitude; + this.longitude = longitude; + } + } + + @Embeddable + public static class Address { + + public String city; + + public int houseNum; + + public String state; + + @Embedded + public Street street; + + public int zip; + + public Address() { + } + + Address(String city, String state, int zip, int houseNum, Street street) { + this.city = city; + this.state = state; + this.zip = zip; + this.houseNum = houseNum; + this.street = street; + } + } + + @Embeddable + public static class Street { + + public String direction; + + @Column(name = "STREETNAME") + public String name; + + public Street() { + } + + public Street(String name, String direction) { + this.name = name; + this.direction = direction; + } + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index c2da2c8aa1a..d840c46ba8a 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -25,6 +25,7 @@ import componenttest.app.FATServlet; import io.openliberty.jpa.data.tests.models.AsciiCharacter; import io.openliberty.jpa.data.tests.models.Box; +import io.openliberty.jpa.data.tests.models.Business; import io.openliberty.jpa.data.tests.models.Coordinate; import io.openliberty.jpa.data.tests.models.NaturalNumber; import io.openliberty.jpa.data.tests.models.Person; @@ -301,7 +302,40 @@ public void testOLGH28909() throws Exception { assertEquals(2, wall.length); // 1+1 assertEquals(0, wall.length); // 1-1 assertEquals(2, wall.height); // 1*2 + } + + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28931") + public void testOLGH28931() throws Exception { + Business ibmRoc = Business.of(44.05887f, -92.50355f, "Rochester", "Minnesota", 55901, 2800, "37th St", "NW", "IBM Rochester"); + Business ibmRTP = Business.of(35.90481f, -78.85026f, "Durham", "North Carolina", 27703, 4204, "Miami Blvd", "S", "IBM RTP"); + + Business result; + + tx.begin(); + em.persist(ibmRoc); + em.persist(ibmRTP); + tx.commit(); + + tx.begin(); + try { + result = em.createQuery("FROM Business WHERE location.address.city=?1 ORDER BY name", Business.class) + .setParameter(1, "Rochester") + .getSingleResult(); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * Exception Description: Internal problem encountered while compiling [FROM Business WHERE location.address.city=?1 ORDER BY name]. + * Internal Exception: java.lang.IndexOutOfBoundsException: Index 1 out of bounds for length 1 + */ + throw e; + } + assertEquals("IBM Rochester", result.name); + assertEquals(55901, result.location.address.zip); } } From aaa483c0c2e9ace06c712edd8633b6d1faa9c819 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Mon, 22 Jul 2024 13:46:37 -0500 Subject: [PATCH 014/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28925 --- .../jpa/data/tests/models/Prime.java | 50 +++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 44 ++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Prime.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Prime.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Prime.java new file mode 100644 index 00000000000..60850e04cb6 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Prime.java @@ -0,0 +1,50 @@ +/** + * + */ +package io.openliberty.jpa.data.tests.models; + +import java.util.ArrayList; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat + */ +@Entity +public class Prime { + public String binaryDigits; + + public boolean even; + + public String hex; + + public String name; + + @Id + public long numberId; + + public String romanNumeral; + + public ArrayList romanNumeralSymbols; + + public int sumOfBits; + + public static Prime of(long number, String romanNumeral, String name) { + Prime inst = new Prime(); + inst.binaryDigits = Long.toBinaryString(number); + inst.even = number % 2 == 0; + inst.hex = Long.toHexString(number); + inst.name = name; + inst.romanNumeral = romanNumeral; + inst.numberId = number; + inst.sumOfBits = Long.bitCount(number); + if (romanNumeral != null) { + inst.romanNumeralSymbols = new ArrayList<>(romanNumeral.length()); + for (int i = 0; i < romanNumeral.length(); i++) + inst.romanNumeralSymbols.add(romanNumeral.substring(i, i + 1)); + } + + return inst; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index d840c46ba8a..db09e34f8e7 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -29,6 +29,7 @@ import io.openliberty.jpa.data.tests.models.Coordinate; import io.openliberty.jpa.data.tests.models.NaturalNumber; import io.openliberty.jpa.data.tests.models.Person; +import io.openliberty.jpa.data.tests.models.Prime; import io.openliberty.jpa.data.tests.models.Rebate; import io.openliberty.jpa.data.tests.models.Rebate.Status; import jakarta.annotation.Resource; @@ -338,4 +339,47 @@ public void testOLGH28931() throws Exception { assertEquals(55901, result.location.address.zip); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28925") + public void testOLGH28925() throws Exception { + Prime two = Prime.of(2, "II", "two"); + Prime three = Prime.of(3, "III", "three"); + Prime five = Prime.of(5, "V", "five"); + Prime seven = Prime.of(7, "VII", "seven"); + + List primes; + + tx.begin(); + em.persist(two); + em.persist(three); + em.persist(five); + em.persist(seven); + tx.commit(); + + tx.begin(); + try { + primes = em.createQuery("SELECT ID(THIS) FROM Prime o WHERE (o.name = :numberName OR :numeral=o.romanNumeral OR o.hex =:hex OR ID(THIS)=:num) ORDER BY o.numberId", + Prime.class) + .setParameter("numberName", "two") + .setParameter("numeral", "III") + .setParameter("hex", "5") + .setParameter("num", 7) + .getResultList(); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * Exception Description: Problem compiling [SELECT ID(THIS) FROM Prime o WHERE (o.name = :numberName OR :numeral=o.romanNumeral OR o.hex =:hex OR ID(THIS)=:num) ORDER + * BY o.numberId]. + * [10, 14] The identification variable 'THIS' is not defined in the FROM clause. + * [108, 112] The identification variable 'THIS' is not defined in the FROM clause. + */ + throw e; + } + + assertEquals(4, primes.size()); + } + } From e69e82c3ca8e656dd8be9c2f504c65e1e8f4db57 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Tue, 23 Jul 2024 08:04:19 -0500 Subject: [PATCH 015/166] recreate https://github.com/OpenLiberty/open-liberty/issues/29117 --- .../jpa/data/tests/models/Segment.java | 58 +++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 16 +++++ 2 files changed, 74 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java new file mode 100644 index 00000000000..3b455bddac5 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Segment.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Embedded; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat_jpa + * + * The problem here is with the entity itself + * TODO: uncomment @Entity + * TODO: remove constructor from Point + */ +//@Entity +public class Segment { + + @GeneratedValue + @Id + public Long id; + + @Embedded + @Column(nullable = false) + public Point pointA; + + @Embedded + @Column(nullable = false) + public Point pointB; + + @Embeddable + public static record Point(int x, int y) { + /** + * Recreate + * Exception Description: The instance creation method [io.openliberty.jpa.data.tests.models.Segment$Point.<Default Constructor>], + * with no parameters, does not exist, or is not accessible. + */ + public Point() { + this(0, 0); + } + } + + public static Segment of(int x1, int y1, int x2, int y2) { + Segment inst = new Segment(); + inst.pointA = new Point(x1, y1); + inst.pointB = new Point(x2, y2); + return inst; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index db09e34f8e7..a858425d923 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -32,6 +32,7 @@ import io.openliberty.jpa.data.tests.models.Prime; import io.openliberty.jpa.data.tests.models.Rebate; import io.openliberty.jpa.data.tests.models.Rebate.Status; +import io.openliberty.jpa.data.tests.models.Segment; import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; @@ -382,4 +383,19 @@ public void testOLGH28925() throws Exception { assertEquals(4, primes.size()); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/29117") + public void testOLGH29117() throws Exception { + Segment unitRadius = Segment.of(0, 0, 0, 1); + + tx.begin(); + try { + em.persist(unitRadius); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + throw e; + } + } + } From 099ef6426a5253f34751673d7d99292e256b1112 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Tue, 23 Jul 2024 13:48:30 -0500 Subject: [PATCH 016/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28545 --- .../bootstrap.properties | 2 +- .../bootstrap.properties | 2 +- .../jpa/data/tests/models/City.java | 48 +++++ .../jpa/data/tests/models/CityId.java | 56 ++++++ .../jpa/data/tests/models/Package.java | 46 +++++ .../tests/web/JakartaDataRecreateServlet.java | 188 +++++++++++++++++- 6 files changed, 338 insertions(+), 4 deletions(-) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/CityId.java create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Package.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JPABootstrapFATServer/bootstrap.properties b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JPABootstrapFATServer/bootstrap.properties index c33f78ae0f0..01345f9031c 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JPABootstrapFATServer/bootstrap.properties +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JPABootstrapFATServer/bootstrap.properties @@ -12,4 +12,4 @@ ############################################################################### bootstrap.include=../testports.properties # Test requires JPA trace to be enabled, do not disable! -traceSpecification=JPA=all \ No newline at end of file +com.ibm.ws.logging.trace.specification==JPA=all \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/bootstrap.properties b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/bootstrap.properties index c33f78ae0f0..c6464258fae 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/bootstrap.properties +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/publish/servers/JakartaDataRecreateServer/bootstrap.properties @@ -12,4 +12,4 @@ ############################################################################### bootstrap.include=../testports.properties # Test requires JPA trace to be enabled, do not disable! -traceSpecification=JPA=all \ No newline at end of file +com.ibm.ws.logging.trace.specification=*=info:JPA=all:eclipselink=all \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java new file mode 100644 index 00000000000..e8d15f0968a --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java @@ -0,0 +1,48 @@ +/** + * + */ +package io.openliberty.jpa.data.tests.models; + +import java.util.Set; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.IdClass; +import jakarta.persistence.Version; + +/** + * + */ +@Entity +@IdClass(CityId.class) +public class City { + // TODO uncomment to reproduce EclipseLink bug with selecting an attribute that is a collection type. + //@ElementCollection(fetch = FetchType.EAGER) + public Set areaCodes; + + @Version + long changeCount; + + @Id + public String name; + + public int population; + + @Id + public String stateName; + + public City() { + } + + City(String name, String state, int population, Set areaCodes) { + this.name = name; + this.stateName = state; + this.population = population; + this.areaCodes = areaCodes; + } + + @Override + public String toString() { + return "City of " + name + ", " + stateName + " pop " + population + " in " + areaCodes + " v" + changeCount; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/CityId.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/CityId.java new file mode 100644 index 00000000000..28437720fc3 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/CityId.java @@ -0,0 +1,56 @@ +/** + * + */ +package io.openliberty.jpa.data.tests.models; + +import java.io.Serializable; +import java.util.Objects; + +/** + * + */ +public class CityId implements Serializable { + private static final long serialVersionUID = 1L; + + public String name; + + private String stateName; + + public CityId() { + } + + public CityId(String name, String state) { + this.name = name; + this.stateName = state; + } + + @Override + public boolean equals(Object o) { + CityId c; + return CityId.class.equals(o.getClass()) && + Objects.equals(name, (c = (CityId) o).name) && + Objects.equals(stateName, c.stateName); + } + + public String getStateName() { + return stateName; + } + + @Override + public int hashCode() { + return Objects.hash(name, stateName); + } + + public static CityId of(String name, String state) { + return new CityId(name, state); + } + + public void setStateName(String v) { + stateName = v; + } + + @Override + public String toString() { + return name + ", " + stateName; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Package.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Package.java new file mode 100644 index 00000000000..97b8508b0a4 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Package.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat + */ +@Entity +public class Package { + + public String description; + + @Id + public int id; + + public float height; + + public float length; + + public float width; + + public static Package of(int id, float length, float width, float height, String description) { + Package inst = new Package(); + inst.id = id; + inst.length = length; + inst.width = width; + inst.height = height; + inst.description = description; + return inst; + } + + @Override + public String toString() { + return "Package id=" + id + "; L=" + length + "; W=" + width + "; H=" + height + " " + description; + } +} \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index a858425d923..3c41c8dce69 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -9,6 +9,7 @@ *******************************************************************************/ package io.openliberty.jpa.data.tests.web; +import static componenttest.annotation.SkipIfSysProp.DB_Oracle; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -22,12 +23,14 @@ import org.junit.Ignore; import org.junit.Test; +import componenttest.annotation.SkipIfSysProp; import componenttest.app.FATServlet; import io.openliberty.jpa.data.tests.models.AsciiCharacter; import io.openliberty.jpa.data.tests.models.Box; import io.openliberty.jpa.data.tests.models.Business; import io.openliberty.jpa.data.tests.models.Coordinate; import io.openliberty.jpa.data.tests.models.NaturalNumber; +import io.openliberty.jpa.data.tests.models.Package; import io.openliberty.jpa.data.tests.models.Person; import io.openliberty.jpa.data.tests.models.Prime; import io.openliberty.jpa.data.tests.models.Rebate; @@ -35,6 +38,7 @@ import io.openliberty.jpa.data.tests.models.Segment; import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; +import jakarta.persistence.LockModeType; import jakarta.persistence.PersistenceContext; import jakarta.servlet.annotation.WebServlet; import jakarta.transaction.UserTransaction; @@ -343,6 +347,8 @@ public void testOLGH28931() throws Exception { @Test @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28925") public void testOLGH28925() throws Exception { + deleteAllEntities(Prime.class); // Cleanup any left over entities + Prime two = Prime.of(2, "II", "two"); Prime three = Prime.of(3, "III", "three"); Prime five = Prime.of(5, "V", "five"); @@ -372,8 +378,9 @@ public void testOLGH28925() throws Exception { /* * Recreate - * Exception Description: Problem compiling [SELECT ID(THIS) FROM Prime o WHERE (o.name = :numberName OR :numeral=o.romanNumeral OR o.hex =:hex OR ID(THIS)=:num) ORDER - * BY o.numberId]. + * Exception Description: Problem compiling [SELECT ID(THIS) FROM Prime o + * WHERE (o.name = :numberName OR :numeral=o.romanNumeral OR o.hex =:hex OR ID(THIS)=:num) + * ORDER BY o.numberId]. * [10, 14] The identification variable 'THIS' is not defined in the FROM clause. * [108, 112] The identification variable 'THIS' is not defined in the FROM clause. */ @@ -398,4 +405,181 @@ public void testOLGH29117() throws Exception { } } + @Test + @SkipIfSysProp(DB_Oracle) // Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28545 + public void testOLGH28545_1() throws Exception { + deleteAllEntities(Package.class); // Cleanup any left over entities + + Package p1 = Package.of(1, 1.0f, 1.0f, 1.0f, "testOLGH28545-1"); + Package p2 = Package.of(2, 1.0f, 2.0f, 1.0f, "testOLGH28545-2"); + + Package result; + + tx.begin(); + em.persist(p1); + em.persist(p2); + tx.commit(); + + tx.begin(); + try { + result = em.createQuery("SELECT o FROM Package o ORDER BY o.width DESC", Package.class) + .setLockMode(LockModeType.PESSIMISTIC_WRITE) + .setMaxResults(1) + .getSingleResult(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + throw e; + } + + /** + * Reproduce + * Generated SQL: + * + *
+         *   SELECT ID AS a1, DESCRIPTION AS a2, HEIGHT AS a3, LENGTH AS a4, WIDTH AS a5
+         *   FROM PACKAGE
+         *   WHERE (ID) IN (
+         *   SELECT a1 FROM (
+         *       SELECT a1, ROWNUM rnum  FROM (
+         *         SELECT ID AS a1, DESCRIPTION AS a2, HEIGHT AS a3, LENGTH AS a4, WIDTH AS a5
+         *         FROM PACKAGE
+         *         ORDER BY a1  // This nested order is what determines the result, instead of the outer order, when limiting the results.
+         *       ) WHERE ROWNUM <= ?
+         *     ) WHERE rnum > ?
+         *   )  ORDER BY WIDTH DESC FOR UPDATE
+         * 
+ */ + assertEquals(p2.description, result.description); + } + + @Test + @SkipIfSysProp(DB_Oracle) // Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28545 + public void testOLGH28545_2() throws Exception { + deleteAllEntities(Package.class); // Cleanup any left over entities + + Package p1 = Package.of(1, 1.0f, 1.0f, 1.0f, "testOLGH28545-1"); + Package p2 = Package.of(2, 1.0f, 2.0f, 1.0f, "testOLGH28545-2"); + + List results; + + tx.begin(); + em.persist(p1); + em.persist(p2); + tx.commit(); + + tx.begin(); + try { + results = em.createQuery("SELECT o.id FROM Package o ORDER BY o.width DESC", Integer.class) + .setLockMode(LockModeType.PESSIMISTIC_WRITE) + .setMaxResults(1) + .getResultList(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + throw e; + } + + /** + * Reproduce + * Generated SQL: + * + *
+         *   SELECT ID AS a1
+         *   FROM PACKAGE
+         *   WHERE (ID) IN (
+         *     SELECT null FROM (  // ID will never be IN the result of a SELECT NULL statement therefore no results will ever be returned
+         *       SELECT null, ROWNUM rnum  FROM (
+         *         SELECT ID AS a1
+         *         FROM PACKAGE
+         *         ORDER BY null
+         *       ) WHERE ROWNUM <= ?
+         *     ) WHERE rnum > ?
+         *   )  ORDER BY WIDTH DESC FOR UPDATE
+         * 
+ */ + assertEquals(1, results.size()); + assertEquals(2, results.get(0).intValue()); + + } + + @Test + @SkipIfSysProp(DB_Oracle) // Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28545 + public void testOLGH28545_3() throws Exception { + deleteAllEntities(Prime.class); + + Prime two = Prime.of(2, "II", "two"); + Prime three = Prime.of(3, "III", "three"); + Prime five = Prime.of(5, "V", "five"); + Prime seven = Prime.of(7, "VII", "seven"); + + List lengths; + + tx.begin(); + em.persist(two); + em.persist(three); + em.persist(five); + em.persist(seven); + tx.commit(); + + tx.begin(); + try { + lengths = em.createQuery("SELECT DISTINCT LENGTH(p.romanNumeral) FROM Prime p " + + "WHERE p.numberId <= ?1 ORDER BY LENGTH(p.romanNumeral) DESC", Integer.class) + .setParameter(1, 5) + .setMaxResults(4) + .getResultList(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /** + * Recreate + * + * Internal Exception: java.sql.SQLSyntaxErrorException: ORA-00918: LENGTH(ROMANNUMERAL): column ambiguously specified - appears in and + * https://docs.oracle.com/error-help/db/ora-00918/ + * Error Code: 918 + * Call: + * + *
+             *   SELECT * FROM (
+             *     SELECT a.*, ROWNUM rnum  FROM (
+             *       SELECT DISTINCT LENGTH(ROMANNUMERAL), LENGTH(ROMANNUMERAL)
+             *       FROM PRIME
+             *       WHERE (NUMBERID <= ?)
+             *       ORDER BY LENGTH(ROMANNUMERAL) DESC
+             *     ) a WHERE ROWNUM <= ?
+             *   ) WHERE rnum > ?
+             * 
+ * + * bind => [3 parameters bound] + */ + throw e; + } + + assertEquals(3, lengths.size()); + assertEquals(3, lengths.get(0).intValue()); // III + assertEquals(2, lengths.get(1).intValue()); // II + assertEquals(1, lengths.get(2).intValue()); // V + + } + + /** + * Utility method to drop all entities from table. + * + * Order to tests is not guaranteed and thus we should be pessimistic and + * delete all entities when we reuse an entity between tests. + * + * @param clazz - the entity class + */ + private void deleteAllEntities(Class clazz) throws Exception { + tx.begin(); + em.createQuery("DELETE FROM " + clazz.getSimpleName()) + .executeUpdate(); + tx.commit(); + } + } From 01eed80853d2c3262be56bf041b264db2e84d58e Mon Sep 17 00:00:00 2001 From: Manuel Saldana Date: Thu, 4 Feb 2021 17:01:44 -0500 Subject: [PATCH 017/166] Initial code design for SameSite=None known incompatible clients --- .../channel/internal/HttpBaseMessageImpl.java | 31 +- .../internal/cookies/SameSiteCookieUtils.java | 272 ++++++++++++++++++ .../test/api/SameSiteCookieUtilsTest.java | 250 ++++++++++++++++ 3 files changed, 542 insertions(+), 11 deletions(-) create mode 100644 dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/cookies/SameSiteCookieUtils.java create mode 100644 dev/com.ibm.ws.transport.http/test/com/ibm/ws/http/channel/test/api/SameSiteCookieUtilsTest.java diff --git a/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/HttpBaseMessageImpl.java b/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/HttpBaseMessageImpl.java index aa8bb2adea0..c868039b134 100644 --- a/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/HttpBaseMessageImpl.java +++ b/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/HttpBaseMessageImpl.java @@ -40,6 +40,7 @@ import com.ibm.ws.http.channel.internal.cookies.CookieCacheData; import com.ibm.ws.http.channel.internal.cookies.CookieHeaderByteParser; import com.ibm.ws.http.channel.internal.cookies.CookieUtils; +import com.ibm.ws.http.channel.internal.cookies.SameSiteCookieUtils; import com.ibm.ws.http.channel.internal.inbound.HttpInboundLink; import com.ibm.ws.http.channel.internal.inbound.HttpInboundServiceContextImpl; import com.ibm.ws.http.dispatcher.internal.HttpDispatcher; @@ -671,7 +672,7 @@ public String getVersion() { * * @param version * @throws NullPointerException - * if the input version is null + * if the input version is null */ @Override public void setVersion(VersionValues version) { @@ -693,7 +694,7 @@ public void setVersion(VersionValues version) { * @param version * @throws UnsupportedProtocolVersionException * @throws NullPointerException - * if input version is null + * if input version is null */ @Override public void setVersion(String version) throws UnsupportedProtocolVersionException { @@ -714,7 +715,7 @@ public void setVersion(String version) throws UnsupportedProtocolVersionExceptio * @param version * @throws UnsupportedProtocolVersionException * @throws NullPointerException - * if input version is null + * if input version is null */ @Override public void setVersion(byte[] version) throws UnsupportedProtocolVersionException { @@ -746,7 +747,7 @@ public void setCurrentDate() { * * @param length * @throws IllegalArgumentException - * if input length is invalid + * if input length is invalid */ @Override public void setContentLength(long length) { @@ -1841,7 +1842,7 @@ private String parseMIMEType() { * * @param type * @throws NullPointerException - * if input string is null + * if input string is null */ @Override public void setMIMEType(String type) { @@ -1903,7 +1904,7 @@ private Charset parseCharset() { * If the content type is null, or there is no explicit character encoding, null is returned. * * @param contentType - * a content type header. + * a content type header. * @return Returns the character encoding for this flow, or null if the given * content-type header is null or if no character enoding is present * in the content-type header. @@ -1940,7 +1941,7 @@ private String parseCharacterEncoding(String contentType) { * * @param set * @throws NullPointerException - * if the input Charset is null + * if the input Charset is null */ @Override public void setCharset(Charset set) { @@ -2703,7 +2704,7 @@ protected void getAllCookies(String name, HttpHeaderKeys header, ListHttpCookie to add. + * the HttpCookie to add. * @param cookieType * @return TRUE if the cookie was set successfully otherwise returns FALSE. * if setcookie constraints are violated. @@ -2762,7 +2763,7 @@ protected boolean cookieCacheExists(HttpHeaderKeys header) { * @param header * @return the caching data for the particular set of Cookies. * @throws IllegalArgumentException - * if the header is not a cookie header + * if the header is not a cookie header */ private CookieCacheData getCookieCache(HttpHeaderKeys header) { // 347066 - removed sync because we only allow 1 thread to be working @@ -2862,9 +2863,9 @@ public boolean containsCookie(String name, HttpHeaderKeys header) { * Marshall the list of Cookies into the base header storage area. * * @param list - * the list of new cookies. + * the list of new cookies. * @param header - * the type of header the new cookies are intended for. + * the type of header the new cookies are intended for. */ private void marshallCookies(List list, HeaderKeys header) { @@ -2970,6 +2971,14 @@ else if (getServiceContext().getHttpConfig().onlySameSiteStar()) { } } + if (cookie.getAttribute("samesite") != null && cookie.getAttribute("samesite").equals(HttpConfigConstants.SameSite.NONE.getName())) { + String userAgent = getServiceContext().getRequest().getHeader(HttpHeaderKeys.HDR_USER_AGENT).asString(); + if (userAgent != null && SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)) { + //TODO: do we remove Secure, probably should be retained. + cookie.setAttribute("samesite", null); + } + } + String value = CookieUtils.toString(cookie, header, getServiceContext().getHttpConfig().isv0CookieDateRFC1123compat(), getServiceContext().getHttpConfig().shouldSkipCookiePathQuotes()); if (null != value) { diff --git a/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/cookies/SameSiteCookieUtils.java b/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/cookies/SameSiteCookieUtils.java new file mode 100644 index 00000000000..ebf07f450f7 --- /dev/null +++ b/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/cookies/SameSiteCookieUtils.java @@ -0,0 +1,272 @@ +/******************************************************************************* + * Copyright (c) 2021 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package com.ibm.ws.http.channel.internal.cookies; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.ibm.websphere.ras.Tr; +import com.ibm.websphere.ras.TraceComponent; +import com.ibm.ws.ffdc.FFDCFilter; +import com.ibm.ws.http.channel.internal.HttpMessages; + +/** + * + */ +public class SameSiteCookieUtils { + + /** RAS tracing variable */ + private static final TraceComponent tc = Tr.register(CookieUtils.class, + HttpMessages.HTTP_TRACE_NAME, + HttpMessages.HTTP_BUNDLE); + + private static final int UNSUPPORTED_IOS_VERSION = 12; + private static final int UNSUPPORTED_MACOS_MAJOR_VERSION = 10; + private static final int UNSUPPORTED_MACOS_MINOR_VERSION = 14; + private static final Pattern IosVersion = Pattern.compile(".*\\(ip.+; cpu .*os (\\d+)[_\\d]*.*\\) applewebkit\\/.*"); + private static final Pattern MacOsVersion = Pattern.compile(".*\\(macintosh;.*mac os x (\\d+)_(\\d+)[_\\d]*.*\\) applewebkit\\/.*"); + private static final Pattern Safari = Pattern.compile(".*version\\/.* safari\\/.*"); + private static final Pattern MacEmbeddedBrowser = Pattern.compile("^mozilla\\/[\\.\\d]+ \\(macintosh;.*mac os x [_\\d]+\\) applewebkit\\/[\\.\\d]+ \\(khtml, like gecko\\)$"); + + private static final Pattern ucBrowser = Pattern.compile(".*ucbrowser/.*"); + private static final Pattern ucBrowserVersion = Pattern.compile(".*ucbrowser/(\\d+)\\.(\\d+)\\.(\\d+)[\\.\\d]*.*"); + + private static final int UC_MAJOR_VERSION = 12; + private static final int UC_MINOR_VERSION = 13; + private static final int UC_BUILD_VERSION = 2; + + private static final Pattern chromiumBased = Pattern.compile(".*chrom(e|ium).*"); + private static final Pattern chromiumVersion = Pattern.compile(".*chrom[^\\/]+\\/(\\d+)[\\.\\d]*.*"); + + private static final int CHROMIUM_MIN_MAJOR_VERSION = 51; + private static final int CHROMIUM_MAX_MAJOR_VERSION = 66; + + /** + * Default constructor for the utility class. + */ + private SameSiteCookieUtils() { + // nothing to do + } + + /** + * Compares the request's user agent against a regex of known incompatible + * clients for the SameSite=None cookie attribute. If the client is incompatible, + * this method will return true. + * + * @param userAgent + * @return + */ + public static boolean isSameSiteNoneIncompatible(String userAgent) { + + String normalizedUserAgent = userAgent.toLowerCase().trim(); + return hasWebKitSameSiteBug(normalizedUserAgent) || dropsUnrecognizedSameSiteAttribute(normalizedUserAgent); + } + + /** + * Compares the request's user agent against a regex of known clients that have + * the Web Kit SameSite bug. Versions of Safari and embedded browsers on MACOS 10.14 + * and all browsers on iOS 12. These versions will erroneously treat cookies marked with + * SameSite=None as if they were marked with SameSite=Strict. + * + * @param userAgent + * @return + */ + private static boolean hasWebKitSameSiteBug(String userAgent) { + return isIosVersion(UNSUPPORTED_IOS_VERSION, userAgent) || + (isMacOSVersion(UNSUPPORTED_MACOS_MAJOR_VERSION, UNSUPPORTED_MACOS_MINOR_VERSION, userAgent) && (isSafari(userAgent) || isMacEmbeddedBrowser(userAgent))); + } + + /** + * Compares the request's user agent against a regex to identify if a specific IOS version + * is being utilized. + * + * @param major + * @param userAgent + * @return + */ + private static boolean isIosVersion(int major, String userAgent) { + boolean isSameVersion = false; + + try { + Matcher m = IosVersion.matcher(userAgent); + if (m.matches()) { + int version = Integer.parseInt(m.group(1)); + isSameVersion = (version == major); + } + } catch (Exception e) { + FFDCFilter.processException(e, SameSiteCookieUtils.class.getName() + ".isIosVersion", "1"); + if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) { + Tr.debug(tc, "Exception while parsing IOS User-Agent; " + userAgent); + } + } + + return isSameVersion; + } + + /** + * Compares the request's user agent against a regex to identify if the MAC OS version + * matches a specific version (major.minor format). + * + * @param major + * @param minor + * @param userAgent + * @return + */ + private static boolean isMacOSVersion(int major, int minor, String userAgent) { + boolean isSameVersion = false; + try { + Matcher m = MacOsVersion.matcher(userAgent); + + if (m.matches()) { + int majorVersion = Integer.parseInt(m.group(1)); + int minorVersion = Integer.parseInt(m.group(2)); + + isSameVersion = (majorVersion == major && minorVersion == minor); + } + } catch (Exception e) { + FFDCFilter.processException(e, SameSiteCookieUtils.class.getName() + ".isMacOSVersion", "1"); + if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) { + Tr.debug(tc, "Exception while parsing IOS User-Agent; " + userAgent); + } + } + return isSameVersion; + } + + private static boolean isSafari(String userAgent) { + return Safari.matcher(userAgent).matches() && !isChromiumBased(userAgent); + } + + private static boolean isMacEmbeddedBrowser(String userAgent) { + return MacEmbeddedBrowser.matcher(userAgent).matches(); + } + + /** + * Compares the request's user agent against a regex of known clients that + * incorrectly handle the SameSite attribute. + * + * Versions of Chrome from Chrome 51 to Chrome 66 (inclusive on both ends) + * will reject cookies with SameSite=None. This also affects older versions + * of Chromium derived browsers, as well as Android WebView. + * + * Versions of UC browser on Android prior to version 12.13.2 reject cookies + * with SameSite=None. + * + * @param userAgent + * @return + */ + private static boolean dropsUnrecognizedSameSiteAttribute(String userAgent) { + + boolean isUnsupportedUserAgent = false; + + if (isUcBrowser(userAgent)) { + isUnsupportedUserAgent = !isUcBrowserSameSiteCompatible(userAgent); + } + + else if (isChromiumBased(userAgent)) { + isUnsupportedUserAgent = !isChromiumVersionSameSiteCompatible(userAgent); + } + + return isUnsupportedUserAgent; + } + + /** + * Evaluates the User-Agent to verify if it is a UC browser client. + * + * @param userAgent + * @return + */ + private static boolean isUcBrowser(String userAgent) { + return ucBrowser.matcher(userAgent).matches(); + } + + /** + * Evaluates a UC Browser User-Agent to identify if the version is + * supports the use of the SameSite=None attribute. Any version prior to + * version 12.13.2 will be considered to be unsupported. + * + * @param userAgent + * @return + */ + private static boolean isUcBrowserSameSiteCompatible(String userAgent) { + + boolean supportsSameSite = false; + try { + Matcher m = ucBrowserVersion.matcher(userAgent); + if (m.matches()) { + + int majorVersion = Integer.parseInt(m.group(1)); + int minorVersion = Integer.parseInt(m.group(2)); + int buildVersion = Integer.parseInt(m.group(3)); + + if (majorVersion != UC_MAJOR_VERSION) { + supportsSameSite = majorVersion > UC_MAJOR_VERSION; + } else if (minorVersion != UC_MINOR_VERSION) { + supportsSameSite = minorVersion > UC_MINOR_VERSION; + } + + else { + supportsSameSite = buildVersion >= UC_BUILD_VERSION; + } + + } + } catch (Exception e) { + FFDCFilter.processException(e, SameSiteCookieUtils.class.getName() + ".isUcBrowserSameSiteCompatible", "1"); + if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) { + Tr.debug(tc, "Exception while parsing UC based User-Agent; " + userAgent); + } + supportsSameSite = true; + } + + return supportsSameSite; + + } + + /** + * Evaluates the User-Agent to verify if it is a Chromium based client. + * + * @param userAgent + * @return + */ + private static boolean isChromiumBased(String userAgent) { + return chromiumBased.matcher(userAgent).matches(); + } + + /** + * Evaluates a Chromium based User-Agent to identify if the version + * supports the use of the SameSite=None attribute. Any version from + * version 51 to 66 (inclusive on both ends) will be considered to be + * unsupported. This applies to both Chrome and Chromium derived browsers. + * + * @param userAgent + * @return + */ + private static boolean isChromiumVersionSameSiteCompatible(String userAgent) { + boolean supportsSameSite = true; + + try { + Matcher m = chromiumVersion.matcher(userAgent); + if (m.matches()) { + int majorVersion = Integer.parseInt(m.group(1)); + supportsSameSite = !((majorVersion >= CHROMIUM_MIN_MAJOR_VERSION) && + (majorVersion <= CHROMIUM_MAX_MAJOR_VERSION)); + + } + } catch (Exception e) { + FFDCFilter.processException(e, SameSiteCookieUtils.class.getName() + ".isChromiumVersionSameSiteCompatible", "1"); + if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) { + Tr.debug(tc, "Exception while parsing Chromium based User-Agent; " + userAgent); + } + } + + return supportsSameSite; + } + +} diff --git a/dev/com.ibm.ws.transport.http/test/com/ibm/ws/http/channel/test/api/SameSiteCookieUtilsTest.java b/dev/com.ibm.ws.transport.http/test/com/ibm/ws/http/channel/test/api/SameSiteCookieUtilsTest.java new file mode 100644 index 00000000000..82d00f3f107 --- /dev/null +++ b/dev/com.ibm.ws.transport.http/test/com/ibm/ws/http/channel/test/api/SameSiteCookieUtilsTest.java @@ -0,0 +1,250 @@ +/******************************************************************************* + * Copyright (c) 2021 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package com.ibm.ws.http.channel.test.api; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.ibm.ws.http.channel.internal.cookies.SameSiteCookieUtils; + +import test.common.SharedOutputManager; + +/** + * Test methods from the SameSiteCookieUtils class. + */ +public class SameSiteCookieUtilsTest { + + private static SharedOutputManager outputMgr; + + /** + * Capture stdout/stderr output to the manager. + * + * @throws Exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + outputMgr = SharedOutputManager.getInstance(); + outputMgr.captureStreams(); + } + + /** + * Final teardown work when class is exiting. + * + * @throws Exception + */ + @AfterClass + public static void tearDownAfterClass() throws Exception { + // Make stdout and stderr "normal" + outputMgr.restoreStreams(); + } + + /** + * Individual teardown after each test. + * + * @throws Exception + */ + @After + public void tearDown() throws Exception { + // Clear the output generated after each method invocation + outputMgr.resetStreams(); + } + + /** + * + * Tests compatibility of SameSite=None on Chrome user agents. + * + * Specification - Versions of Chrome from Chrome 51 to Chrome 66 (inclusive on both + * ends) will reject a cookie with SameSite=None. This also affects older versions of Chromium + * derived browsers as well as Android WebView. Prior to Chrome 51, SameSite was ignored and + * cookies were treated as if SameSite=None. + */ + @Test + public void testChromeCompatibility() { + try { + + String userAgent; + + //Prior to Chrome 51, SameSite is ignored, therefore these user-agents are not strictly incompatible. + //Expected to return false + + //Chrome 50 + userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test Chrome Versions 51 - 66, including WebView + //Expected to return true + String[] incompatibleChromeUserAgents = new String[] { + //Chrome 51 + "Mozilla/5.0 doogiePIM/1.0.4.2 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36", + //Chrome 52 + "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36", + //Chrome 53 + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2883.87 Safari/537.36", + //Chrome 54 + "Mozilla/5.0 Chrome/54.0.2840.99 Safari/537.36", + //Chrome 55 + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36", + //Chrome 56 + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36", + //Chrome 57 + "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36", + //Chrome 58 + "Mozilla/5.0 (Linux; Android 8.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Klar/1.0 Chrome/58.0.3029.121 Mobile Safari/537.36", + //Chrome 59 + "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36", + //Chrome 60 + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.78 Safari/537.36", + //Chrome 61 + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36", + //Chrome 62 + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3165.0 Safari/537.36", + //Chrome 63 + "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3213.3 Safari/537.36", + //Chrome 64 + "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36", + //Chrome 65" + "Mozilla/5.0 (Win) AppleWebKit/1000.0 (KHTML, like Gecko) Chrome/65.663 Safari/1000.01", + //Chrome 66 + "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3334.0 Safari/537.36", + //Chrome 66 Webview + "Mozilla/5.0 (Linux; Android 4.4.4; One Build/KTU84L.H4) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.0.0 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/28.0.0.20.16;]" + + }; + + for (String currentUserAgent : incompatibleChromeUserAgents) { + assertTrue(SameSiteCookieUtils.isSameSiteNoneIncompatible(currentUserAgent)); + } + + //Versions Chrome 67 forward support SameSite=None. Test a supported newer version. + //Expected to return false. + //Chrome 67 + userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.2526.73 Safari/537.36"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test UC browser before 12.13.2 + //Test UC browser on 12.13.2 + //Test UC browser after 12.13.2 + //test bad format of product + + } catch (Throwable t) { + outputMgr.failWithThrowable("testChromeCompatibility", t); + } + } + + /** + * + * Tests compatibility of SameSite=None on UC user agents. + * + * Specification - Versions of UC Browser on Android prior to version 12.13.2 will + * reject a cookie with SameSite=None. This behavior was corrected in newer versions of + * UC Browser. + * + */ + @Test + public void testUCBrowserCompatibility() { + try { + + String userAgent; + + //Test a version prior to 12.13.2 + //UC Browser @ 10.7 + userAgent = "UCWEB/2.0 (MIDP-2.0; U; Adr 4.0.4; en-US; ZTE_U795) U2/1.0.0 UCBrowser/10.7.6.805 U2/1.0.0 Mobile"; + assertTrue(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test a version on version 12, but before 12.13.2 + userAgent = "Mozilla/5.0 (Linux; U; Android 7.1.1; en-US; Lenovo K8 Note Build/NMB26.54-74) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.0.0.1088 Mobile Safari/537.36"; + assertTrue(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Border test on version where fix was delivered + //UC Browser @ 12.13.2 + userAgent = "Mozilla/5.0 (Linux; U; Android 8.0.0; en-US; Pixel XL Build/OPR3.170623.007) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/12.13.2.1005 U3/0.8.0 Mobile Safari/534.30"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test on a version after fix was delivered + //UC Browser @ 12.13.4 + userAgent = "Mozilla/5.0 (Linux; U; Android 8.0.0; en-US; Pixel XL Build/OPR3.170623.007) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/12.13.4.1005 U3/0.8.0 Mobile Safari/534.30"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test on a future major version + //UC Browser @ 13.0.8 + userAgent = "Mozilla/5.0 (Linux; U; Android 9; en-US; Redmi Note 5 Pro Build/PKQ1.180904.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/13.0.8.1291 Mobile Safari/537.36"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + } catch (Throwable t) { + outputMgr.failWithThrowable("testUCBrowserCompatibility", t); + } + } + + /** + * + * Tests compatibility of SameSite=None on MacOS and iOS. + * + * Specification - Versions of Safari and embedded browsers on MACOS 10.14 and all + * browsers on iOS12 will erroneously treat cookies marked with SameSite=None as + * if they were marked SameSite=Strict. This has been fixed on newer versions of + * iOS and MacOS. + * + */ + @Test + public void testMacOSAndIOSCompatibility() { + try { + + String userAgent; + + //Test Safari @ MacOS 10.14 - Expected to return true. + userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15"; + assertTrue(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test Embedded @ MacOS 10.14 - Expected to return true + userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/537.36 (KHTML, like Gecko)"; + assertTrue(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test Safari @ MacOS after 10.14 - Expected to return false + userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/601.1.39 (KHTML, like Gecko) Version/10.1.2 Safari/601.1.39"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test Safari @ MacOS 10.15.1 - major.minor.release version format on a supported user-agent + userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Safari/605.1.15"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test Multiple Browsers in iOS 12 - Expected to return true for any browser. + // Safari + userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/ 604.1.21 (KHTML, like Gecko) Version/ 12.0 Mobile/17A6278a Safari/602.1.26"; + assertTrue(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + //Chrome + userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/70.0.3538.75 Mobile/15E148 Safari/605.1"; + assertTrue(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + //Firefox + userAgent = "Mozilla/5.0 (iPad; CPU OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/13.2b11866 Mobile/16A366 Safari/605.1.15"; + assertTrue(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test a browser after iOS version 12 (@ IOS 13) + userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/66.6 Mobile/14A5297c Safari/602.1"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //TODO: considerations + //Test user agent on Safari and macOS before 10.14 + + //Test user agent on MacEmbedded browser and macOS before 10.14 + //Test user agent on MacEmbedded browser and macOS after 10.14 + //Test user agent on iOS before 12 + + } catch (Throwable t) { + outputMgr.failWithThrowable("testMACOSAndIOSCompatibility", t); + } + } + +} \ No newline at end of file From c7c8a39f44fdffbce2028577752557a945e8b7ea Mon Sep 17 00:00:00 2001 From: Thomas Smith Date: Tue, 9 Jul 2024 16:24:02 -0400 Subject: [PATCH 018/166] Added Unit Tests & Remove Partitioned from Cookies with SameSiteNone Copyright Cleanup Remove Partitioned from Cookies with SameSiteNone Cleanup Copyright & Comments --- .../channel/internal/HttpBaseMessageImpl.java | 7 ++-- .../internal/cookies/SameSiteCookieUtils.java | 7 ++-- .../test/api/SameSiteCookieUtilsTest.java | 33 ++++++++++++------- 3 files changed, 28 insertions(+), 19 deletions(-) diff --git a/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/HttpBaseMessageImpl.java b/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/HttpBaseMessageImpl.java index c868039b134..ff3616f6fcd 100644 --- a/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/HttpBaseMessageImpl.java +++ b/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/HttpBaseMessageImpl.java @@ -6,9 +6,6 @@ * http://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 - * - * Contributors: - * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.ws.http.channel.internal; @@ -2976,6 +2973,10 @@ else if (getServiceContext().getHttpConfig().onlySameSiteStar()) { if (userAgent != null && SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)) { //TODO: do we remove Secure, probably should be retained. cookie.setAttribute("samesite", null); + // Partitioned should only be included when SameSite=None, so if it is incompatible Partitioned should be removed as well + if (partitionedValue != null) { + cookie.setAttribute("partitioned", null); + } } } diff --git a/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/cookies/SameSiteCookieUtils.java b/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/cookies/SameSiteCookieUtils.java index ebf07f450f7..b7c038d10af 100644 --- a/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/cookies/SameSiteCookieUtils.java +++ b/dev/com.ibm.ws.transport.http/src/com/ibm/ws/http/channel/internal/cookies/SameSiteCookieUtils.java @@ -1,12 +1,11 @@ /******************************************************************************* * Copyright (c) 2021 IBM Corporation and others. * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html + * http://www.eclipse.org/legal/epl-2.0/ * - * Contributors: - * IBM Corporation - initial API and implementation + * SPDX-License-Identifier: EPL-2.0 *******************************************************************************/ package com.ibm.ws.http.channel.internal.cookies; diff --git a/dev/com.ibm.ws.transport.http/test/com/ibm/ws/http/channel/test/api/SameSiteCookieUtilsTest.java b/dev/com.ibm.ws.transport.http/test/com/ibm/ws/http/channel/test/api/SameSiteCookieUtilsTest.java index 82d00f3f107..11637d4ba9a 100644 --- a/dev/com.ibm.ws.transport.http/test/com/ibm/ws/http/channel/test/api/SameSiteCookieUtilsTest.java +++ b/dev/com.ibm.ws.transport.http/test/com/ibm/ws/http/channel/test/api/SameSiteCookieUtilsTest.java @@ -1,12 +1,11 @@ /******************************************************************************* - * Copyright (c) 2021 IBM Corporation and others. + * Copyright (c) 2021, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 + * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html + * http://www.eclipse.org/legal/epl-2.0/ * - * Contributors: - * IBM Corporation - initial API and implementation + * SPDX-License-Identifier: EPL-2.0 *******************************************************************************/ package com.ibm.ws.http.channel.test.api; @@ -212,10 +211,23 @@ public void testMacOSAndIOSCompatibility() { userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/537.36 (KHTML, like Gecko)"; assertTrue(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + //Test Embedded @ MacOS before 10.14 - Expected to return false + //Older versions also most likely don't work, but there have been no reported issues so best not to introduce a change + userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/537.36 (KHTML, like Gecko)"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + + //Test Embedded @ MacOS after 10.14 - Expected to return false + userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/537.36 (KHTML, like Gecko)"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + //Test Safari @ MacOS after 10.14 - Expected to return false userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/601.1.39 (KHTML, like Gecko) Version/10.1.2 Safari/601.1.39"; assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + //Test Safari @ MacOS before 10.14 - Expected to return false. + userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); + //Test Safari @ MacOS 10.15.1 - major.minor.release version format on a supported user-agent userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Safari/605.1.15"; assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); @@ -235,16 +247,13 @@ public void testMacOSAndIOSCompatibility() { userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/66.6 Mobile/14A5297c Safari/602.1"; assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); - //TODO: considerations - //Test user agent on Safari and macOS before 10.14 - - //Test user agent on MacEmbedded browser and macOS before 10.14 - //Test user agent on MacEmbedded browser and macOS after 10.14 - //Test user agent on iOS before 12 + //Test a browser before iOS version 12 (@ iOS 11) + userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/66.6 Mobile/14A5297c Safari/602.1"; + assertFalse(SameSiteCookieUtils.isSameSiteNoneIncompatible(userAgent)); } catch (Throwable t) { outputMgr.failWithThrowable("testMACOSAndIOSCompatibility", t); } } -} \ No newline at end of file +} From c417b4e43745d78edf2a131b122b6753231c3520 Mon Sep 17 00:00:00 2001 From: Thomas Smith Date: Fri, 12 Jul 2024 13:59:39 -0400 Subject: [PATCH 019/166] Working FAT Tests for Incompatible Clients --- .../.classpath | 1 + .../bnd.bnd | 3 +- .../fat/src/com/ibm/ws/fat/wc/FATSuite.java | 12 +- .../WCSameSiteIncompatibleClientsTests.java | 257 ++++++++++++++++++ .../bootstrap.properties | 15 + .../servers/servlet40_incompatible/server.xml | 32 +++ .../resources/IncompatibleClientSetCookie.jsp | 33 +++ .../servlets/IncompatibleClientServlet.java | 42 +++ 8 files changed, 389 insertions(+), 6 deletions(-) create mode 100644 dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/fat/src/com/ibm/ws/fat/wc/tests/WCSameSiteIncompatibleClientsTests.java create mode 100644 dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/publish/servers/servlet40_incompatible/bootstrap.properties create mode 100644 dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/publish/servers/servlet40_incompatible/server.xml create mode 100644 dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/test-applications/IncompatibleClientTest.war/resources/IncompatibleClientSetCookie.jsp create mode 100644 dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/test-applications/IncompatibleClientTest.war/src/incompatible/servlets/IncompatibleClientServlet.java diff --git a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/.classpath b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/.classpath index eacda96c49d..7bd2cbdeda9 100644 --- a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/.classpath +++ b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/.classpath @@ -1,6 +1,7 @@ + diff --git a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/bnd.bnd b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/bnd.bnd index 93f71d30580..3d1a58d9aef 100644 --- a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/bnd.bnd +++ b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/bnd.bnd @@ -15,7 +15,8 @@ src: \ test-applications/ResponseHeadersTest.war/src,\ test-applications/SameSiteTest.war/src,\ test-applications/SameSiteSecurityTest.war/src,\ - test-applications/PartitionedTest.war/src + test-applications/PartitionedTest.war/src,\ + test-applications/IncompatibleClientTest.war/src fat.project: true diff --git a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/fat/src/com/ibm/ws/fat/wc/FATSuite.java b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/fat/src/com/ibm/ws/fat/wc/FATSuite.java index 0f93be519ff..721f151abc3 100644 --- a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/fat/src/com/ibm/ws/fat/wc/FATSuite.java +++ b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/fat/src/com/ibm/ws/fat/wc/FATSuite.java @@ -23,6 +23,7 @@ import com.ibm.ws.fat.wc.tests.WCResponseHeadersTest; import com.ibm.ws.fat.wc.tests.WCSameSiteCookieAttributeSecurityTest; import com.ibm.ws.fat.wc.tests.WCSameSiteCookieAttributeTests; +import com.ibm.ws.fat.wc.tests.WCSameSiteIncompatibleClientsTests; import componenttest.custom.junit.runner.FATRunner; import componenttest.rules.repeater.EmptyAction; @@ -47,11 +48,12 @@ */ @RunWith(Suite.class) @SuiteClasses({ - WCResponseHeadersTest.class, - WCSameSiteCookieAttributeTests.class, - WCSameSiteCookieAttributeSecurityTest.class, - WCPartitionedAttributeTests.class, - WCPartitionedCookieAttributeSecurityTest.class + // WCResponseHeadersTest.class, + // WCSameSiteCookieAttributeTests.class, + // WCSameSiteCookieAttributeSecurityTest.class, + // WCPartitionedAttributeTests.class, + // WCPartitionedCookieAttributeSecurityTest.class, + WCSameSiteIncompatibleClientsTests.class }) public class FATSuite { diff --git a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/fat/src/com/ibm/ws/fat/wc/tests/WCSameSiteIncompatibleClientsTests.java b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/fat/src/com/ibm/ws/fat/wc/tests/WCSameSiteIncompatibleClientsTests.java new file mode 100644 index 00000000000..b944921fe25 --- /dev/null +++ b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/fat/src/com/ibm/ws/fat/wc/tests/WCSameSiteIncompatibleClientsTests.java @@ -0,0 +1,257 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package com.ibm.ws.fat.wc.tests; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import java.util.Collections; +import java.util.logging.Logger; + +import org.apache.hc.client5.http.classic.methods.HttpGet; +import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.io.entity.EntityUtils; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.ibm.websphere.simplicity.ShrinkHelper; +import com.ibm.websphere.simplicity.config.HttpEndpoint; +import com.ibm.websphere.simplicity.config.HttpSession; +import com.ibm.websphere.simplicity.config.ServerConfiguration; + +import componenttest.annotation.Server; +import componenttest.custom.junit.runner.FATRunner; +import componenttest.topology.impl.LibertyServer; + +/** + * Tests for Incompatible SameSite=None Clients + * Incompatible clients are based on this https://www.chromium.org/updates/same-site/incompatible-clients/ + */ +@RunWith(FATRunner.class) +public class WCSameSiteIncompatibleClientsTests { + private static final Logger LOG = Logger.getLogger(WCSameSiteIncompatibleClientsTests.class.getName()); + private static final String APP_NAME = "IncompatibleClientTest"; + + @Server("servlet40_incompatible") + public static LibertyServer server; + + @BeforeClass + public static void before() throws Exception { + // Create the IncompatibleClientTest.war application + ShrinkHelper.defaultDropinApp(server, APP_NAME + ".war", "incompatible.servlets"); + + // Start the server and use the class name so we can find logs easily. + server.startServer(WCSameSiteIncompatibleClientsTests.class.getSimpleName() + ".log"); + } + + @AfterClass + public static void tearDown() throws Exception { + // Stop the server + + if (server != null && server.isStarted()) { + server.stopServer(); + } + } + + /* + * Helper method to be run for all versions since the implementation is userAgent dependent + * Drives a request with the provided userAgent and returns true if the SameSite cookie is part of the response + */ + private boolean isCompatibleVersion(String userAgent) throws Exception{ + String url = "http://" + server.getHostname() + ":" + server.getHttpDefaultPort() + "/" + APP_NAME + "/IncompatibleClientServlet"; + + LOG.info("Navigating to url: " + url); + + CloseableHttpClient client = null; + CloseableHttpResponse response = null; + boolean headerFound = false; + HttpGet getMethod = new HttpGet(url); + getMethod.setHeader("User-Agent", userAgent); + Header[] headers = null; + + try { + client = HttpClientBuilder.create().build(); + response = client.execute(getMethod); + String responseText = EntityUtils.toString(response.getEntity()); + + LOG.info("Response Text:" + responseText); + + // Check whether the SameSite=None cookie is received + for (Header cookieHeader : response.getHeaders("Set-Cookie")) { + String cookieHeaderValue = cookieHeader.getValue(); + LOG.info("Header Name: " + cookieHeader.getName()); + LOG.info("Header Value: " + cookieHeaderValue); + + if (cookieHeaderValue.startsWith("AddCookieCookie")) { + if (cookieHeaderValue.contains("SameSite=None")) { + headerFound = true; + } + } + } + + } finally { + if (client != null) + client.close(); + if (response != null) + response.close(); + } + + return headerFound; + } + + /* + * Confirm that compatible versions after iOS 12 work + */ + @Test + public void testiOSAfterFix() throws Exception { + String userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 13_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/66.6 Mobile/14A5297c Safari/602.1"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that compatible versions after MacOS 10.14 work on Safari + */ + @Test + public void testMacOSSafariAfterFix() throws Exception { + String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/601.1.39 (KHTML, like Gecko) Version/10.1.2 Safari/601.1.39"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that compatible versions after MacOS 10.14 work on embedded browsers + */ + @Test + public void testMacOSEmbeddedAfterFix() throws Exception { + String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15) AppleWebKit/537.36 (KHTML, like Gecko)"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that compatible versions after UCBrowser 12.13.4 work + */ + @Test + public void testUCBrowserAfterFix() throws Exception { + String userAgent = "Mozilla/5.0 (Linux; U; Android 8.0.0; en-US; Pixel XL Build/OPR3.170623.007) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/12.13.4.1005 U3/0.8.0 Mobile Safari/534.30"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that compatible versions after Chrome 66 work + */ + @Test + public void testChromeAfterFix() throws Exception { + String userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.2526.73 Safari/537.36"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that the incompatible border version iOS 12 doesn't work + */ + @Test + public void testIncompatibleiOS() throws Exception { + String userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/ 604.1.21 (KHTML, like Gecko) Version/ 12.0 Mobile/17A6278a Safari/602.1.26"; + assertFalse("SameSite=None cookie was received when it shouldn't have been for the incompatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that the incompatible border version MacOS 10.14 with embedded browsers doesn't work + */ + @Test + public void testIncompatibleMacOSEmbedded() throws Exception { + String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/537.36 (KHTML, like Gecko)"; + assertFalse("SameSite=None cookie was received when it shouldn't have been for the incompatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that the incompatible border version MacOS 10.14 with Safari doesn't work + */ + @Test + public void testIncompatibleMacOSSafari() throws Exception { + String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15"; + assertFalse("SameSite=None cookie was received when it shouldn't have been for the incompatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that the compatible border version UC Browser 12.13.2 works + */ + @Test + public void testCompatibleUCBrowser() throws Exception { + String userAgent = "Mozilla/5.0 (Linux; U; Android 8.0.0; en-US; Pixel XL Build/OPR3.170623.007) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/12.13.2.1005 U3/0.8.0 Mobile Safari/534.30"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that the incompatible border versions Chrome 51 and 66 don't work + */ + @Test + public void testIncompatibleChrome() throws Exception { + String userAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3334.0 Safari/537.36"; + assertFalse("SameSite=None cookie was received when it shouldn't have been for the incompatible client:" + userAgent, isCompatibleVersion(userAgent)); + userAgent = "Mozilla/5.0 doogiePIM/1.0.4.2 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.84 Safari/537.36"; + assertFalse("SameSite=None cookie was received when it shouldn't have been for the incompatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Technically, versions prior to iOS 12 are also most likely incompatible, but there have been no issues reported for treating them as compatible. + * Confirm that the versions prior to iOS 12 are compatible + */ + @Test + public void testiOSBeforeFix() throws Exception { + String userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/66.6 Mobile/14A5297c Safari/602.1"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Technically, versions prior to MacOS 10.14 are also most likely incompatible, but there have been no issues reported for treating them as compatible. + * Confirm that the versions prior to MacOS 10.14 with embedded browsers are compatible + */ + @Test + public void testMacOSEmbeddedBeforeFix() throws Exception { + String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/537.36 (KHTML, like Gecko)"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Technically, versions prior to MacOS 10.14 are also most likely incompatible, but there have been no issues reported for treating them as compatible. + * Confirm that the versions prior to MacOS 10.14 with Safari are compatible + */ + @Test + public void testMacOSSafariBeforeFix() throws Exception { + String userAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Safari/605.1.15"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Confirm that the versions prior to UCBrowser 12.13.2 are incompatible + */ + @Test + public void testUCBrowserBeforeFix() throws Exception { + String userAgent = "Mozilla/5.0 (Linux; U; Android 7.1.1; en-US; Lenovo K8 Note Build/NMB26.54-74) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.0.0.1088 Mobile Safari/537.36"; + assertFalse("SameSite=None cookie was received when it shouldn't have been for the incompatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + + /* + * Prior to Chrome 51, SameSite is ignored, therefore these user-agents are not strictly incompatible. + * Confirm that the versions prior to Chrome 51 are compatible + */ + @Test + public void testChromeBeforeFix() throws Exception { + String userAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"; + assertTrue("SameSite=None cookie was not received when it should have been for the compatible client:" + userAgent, isCompatibleVersion(userAgent)); + } + +} diff --git a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/publish/servers/servlet40_incompatible/bootstrap.properties b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/publish/servers/servlet40_incompatible/bootstrap.properties new file mode 100644 index 00000000000..c443239ee7d --- /dev/null +++ b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/publish/servers/servlet40_incompatible/bootstrap.properties @@ -0,0 +1,15 @@ +############################################################################### +# Copyright (c) 2020, 2024 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +bootstrap.include=../testports.properties +osgi.console=7777 +com.ibm.ws.logging.trace.specification=*=info=enabled:HTTPChannel=all:TCPChannel=all:GenericBNF=all +com.ibm.ws.logging.max.file.size=20 +com.ibm.ws.logging.max.files=10 +com.ibm.ws.logging.trace.format=BASIC diff --git a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/publish/servers/servlet40_incompatible/server.xml b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/publish/servers/servlet40_incompatible/server.xml new file mode 100644 index 00000000000..43e9610677b --- /dev/null +++ b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/publish/servers/servlet40_incompatible/server.xml @@ -0,0 +1,32 @@ + + + + + + + servlet-4.0 + jsp-2.3 + + + + + + + + + + \ No newline at end of file diff --git a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/test-applications/IncompatibleClientTest.war/resources/IncompatibleClientSetCookie.jsp b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/test-applications/IncompatibleClientTest.war/resources/IncompatibleClientSetCookie.jsp new file mode 100644 index 00000000000..8ecb80c0dbf --- /dev/null +++ b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/test-applications/IncompatibleClientTest.war/resources/IncompatibleClientSetCookie.jsp @@ -0,0 +1,33 @@ + +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1"%> + + + + + IncompatibleClientSetCookie + + + <% + out.println("SameSite Set-Cookie JSP Test!"); + + if(response.containsHeader("Set-Cookie")) { + out.println("Response contained a Set-Cookie header and we are replacing them: "); + } + + for(String header:response.getHeaders("Set-Cookie")) { + out.println(header); + } + + %> + + + \ No newline at end of file diff --git a/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/test-applications/IncompatibleClientTest.war/src/incompatible/servlets/IncompatibleClientServlet.java b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/test-applications/IncompatibleClientTest.war/src/incompatible/servlets/IncompatibleClientServlet.java new file mode 100644 index 00000000000..9c12a8d941e --- /dev/null +++ b/dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/test-applications/IncompatibleClientTest.war/src/incompatible/servlets/IncompatibleClientServlet.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package incompatible.servlets; + +import java.io.IOException; +import java.io.PrintWriter; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * Sends out SameSite=None cookies + * These cookies should not make it back to the test as part of the response unless a compatible client is used + */ + +@WebServlet(urlPatterns = "/IncompatibleClientServlet") +public class IncompatibleClientServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + PrintWriter writer = response.getWriter(); + writer.print("Welcome to the IncompatibleClientServlet!"); + + // TODO: Add more coverage with Session cookies + + response.addHeader("set-cookie", "AddHeaderCookie; SameSite=None"); + response.addCookie(new Cookie("AddCookieCookie", "sugar")); + } +} From 29a940314c999db6ebe33cfc4ca7485bc7fcb64b Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Tue, 23 Jul 2024 14:31:33 -0500 Subject: [PATCH 020/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/29073 --- .../jpa/data/tests/models/City.java | 27 ++++++++------ .../jpa/data/tests/models/CityId.java | 10 ++++- .../tests/web/JakartaDataRecreateServlet.java | 37 +++++++++++++++++++ .../src/test/jakarta/data/jpa/web/City.java | 2 +- 4 files changed, 62 insertions(+), 14 deletions(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java index e8d15f0968a..6e1454712ff 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java @@ -1,6 +1,12 @@ -/** +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ * - */ + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ package io.openliberty.jpa.data.tests.models; import java.util.Set; @@ -11,7 +17,7 @@ import jakarta.persistence.Version; /** - * + * Recreate from io.openliberty.data.internal_fat_jpa */ @Entity @IdClass(CityId.class) @@ -31,14 +37,13 @@ public class City { @Id public String stateName; - public City() { - } - - City(String name, String state, int population, Set areaCodes) { - this.name = name; - this.stateName = state; - this.population = population; - this.areaCodes = areaCodes; + public static City of(String name, String state, int population, Set areaCodes) { + City inst = new City(); + inst.name = name; + inst.stateName = state; + inst.population = population; + inst.areaCodes = areaCodes; + return inst; } @Override diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/CityId.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/CityId.java index 28437720fc3..4ecca16cdbb 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/CityId.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/CityId.java @@ -1,6 +1,12 @@ -/** +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ * - */ + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ package io.openliberty.jpa.data.tests.models; import java.io.Serializable; diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 3c41c8dce69..ce4fbe919ea 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -18,6 +18,7 @@ import java.time.LocalTime; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.UUID; import org.junit.Ignore; @@ -28,6 +29,8 @@ import io.openliberty.jpa.data.tests.models.AsciiCharacter; import io.openliberty.jpa.data.tests.models.Box; import io.openliberty.jpa.data.tests.models.Business; +import io.openliberty.jpa.data.tests.models.City; +import io.openliberty.jpa.data.tests.models.CityId; import io.openliberty.jpa.data.tests.models.Coordinate; import io.openliberty.jpa.data.tests.models.NaturalNumber; import io.openliberty.jpa.data.tests.models.Package; @@ -564,6 +567,40 @@ public void testOLGH28545_3() throws Exception { assertEquals(3, lengths.get(0).intValue()); // III assertEquals(2, lengths.get(1).intValue()); // II assertEquals(1, lengths.get(2).intValue()); // V + } + + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/29073") + public void testOLGH29073() throws Exception { + City RochesterMN = City.of("Rochester", "Minnesota", 121878, Set.of(55901, 55902, 55903, 55904, 55906)); + City RochesterNY = City.of("Rochester", "New York", 209352, Set.of(14601, 14602, 14603, 14604, 14606)); + + List rochesters; + + tx.begin(); + em.persist(RochesterMN); + em.persist(RochesterNY); + tx.commit(); + + tx.begin(); + try { + rochesters = em.createQuery("SELECT ID(THIS) FROM City WHERE (name=?1) ORDER BY population DESC", CityId.class) + .setParameter(1, "Rochester") + .getResultList(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * io.openliberty.jpa.data.tests.web.JakartaDataRecreateServlet + * java.lang.ClassCastException: java.lang.String incompatible with io.openliberty.jpa.data.tests.models.CityId + */ + throw e; + } + + assertEquals(2, rochesters.size()); + assertEquals("New York", rochesters.get(0).getStateName()); + assertEquals("Minnesota", rochesters.get(1).getStateName()); } diff --git a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/City.java b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/City.java index a7ff7f07db3..96f36a5b07d 100644 --- a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/City.java +++ b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/City.java @@ -20,7 +20,7 @@ import jakarta.persistence.Version; /** - * + * Recreate from io.openliberty.data.internal_fat_jpa */ @Entity @IdClass(CityId.class) From 1febfef3c767a126fcda24cee131662badd6f00c Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Wed, 24 Jul 2024 08:51:23 -0500 Subject: [PATCH 021/166] recreate https://github.com/OpenLiberty/open-liberty/issues/28368 --- .../jpa/data/tests/models/Prime.java | 10 +++- .../jpa/data/tests/models/PurchaseOrder.java | 43 +++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 46 +++++++++++++++++++ 3 files changed, 97 insertions(+), 2 deletions(-) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/PurchaseOrder.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Prime.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Prime.java index 60850e04cb6..9cf89d446d6 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Prime.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Prime.java @@ -1,6 +1,12 @@ -/** +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ * - */ + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ package io.openliberty.jpa.data.tests.models; import java.util.ArrayList; diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/PurchaseOrder.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/PurchaseOrder.java new file mode 100644 index 00000000000..3232db8be16 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/PurchaseOrder.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import java.util.UUID; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Version; + +/** + * Recreate from io.openliberty.data.internal_fat_jpa + */ +@Entity(name = "Orders") // overrides the default name PurchaseOrder +public class PurchaseOrder { + + @GeneratedValue(strategy = GenerationType.UUID) + @Id + public UUID id; + + public String purchasedBy; + + public float total; + + @Version + public int versionNum; + + public static PurchaseOrder of(String purchasedBy, float total) { + PurchaseOrder inst = new PurchaseOrder(); + inst.purchasedBy = purchasedBy; + inst.total = total; + return inst; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index ce4fbe919ea..1bf00045c36 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -10,7 +10,9 @@ package io.openliberty.jpa.data.tests.web; import static componenttest.annotation.SkipIfSysProp.DB_Oracle; +import static componenttest.annotation.SkipIfSysProp.DB_Postgres; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.time.LocalDate; @@ -36,6 +38,7 @@ import io.openliberty.jpa.data.tests.models.Package; import io.openliberty.jpa.data.tests.models.Person; import io.openliberty.jpa.data.tests.models.Prime; +import io.openliberty.jpa.data.tests.models.PurchaseOrder; import io.openliberty.jpa.data.tests.models.Rebate; import io.openliberty.jpa.data.tests.models.Rebate.Status; import io.openliberty.jpa.data.tests.models.Segment; @@ -44,6 +47,7 @@ import jakarta.persistence.LockModeType; import jakarta.persistence.PersistenceContext; import jakarta.servlet.annotation.WebServlet; +import jakarta.transaction.RollbackException; import jakarta.transaction.UserTransaction; @SuppressWarnings("serial") @@ -601,7 +605,49 @@ public void testOLGH29073() throws Exception { assertEquals(2, rochesters.size()); assertEquals("New York", rochesters.get(0).getStateName()); assertEquals("Minnesota", rochesters.get(1).getStateName()); + } + + @Test + @SkipIfSysProp(DB_Postgres) //Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28368 + public void testOLGH28368() throws Exception { + PurchaseOrder order1 = PurchaseOrder.of("testOLGH28368-1", 12.55f); + PurchaseOrder order2 = PurchaseOrder.of("testOLGH28368-2", 12.55f); + + tx.begin(); + em.persist(order1); + em.persist(order2); + tx.commit(); + + assertNotNull(order1.id); //order1 is now detached + + tx.begin(); + try { + List results = em.createQuery("SELECT p FROM Orders p WHERE p.id=?1", PurchaseOrder.class) + .setParameter(1, order1.id) + .getResultList(); + + assertEquals(1, results.size()); + assertEquals(order1.purchasedBy, results.get(0).purchasedBy); + + em.remove(results.get(0)); + tx.commit(); + } catch (RollbackException x) { + /* + * Recreate + * Internal Exception: org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = uuid + * Hint: No operator matches the given name and argument types. You might need to add explicit type casts. + * Position: 31 + * Error Code: 0 + * Call: DELETE FROM ORDERS WHERE ((ID = ?) AND (VERSIONNUM = ?)) + * bind => [2 parameters bound] + * Query: DeleteObjectQuery(io.openliberty.jpa.data.tests.models.PurchaseOrder@b659d1ca) + */ + throw x; + } catch (Exception e) { + tx.rollback(); + throw e; // Unexpected + } } /** From c2727914afea5a2a57614c31cf0e48e5bc0de080 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Wed, 24 Jul 2024 11:17:48 -0500 Subject: [PATCH 022/166] Recrate https://github.com/OpenLiberty/open-liberty/issues/28813 --- .../WEB-INF/classes/META-INF/persistence.xml | 3 +- .../data/tests/models/DemographicInfo.java | 60 +++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 49 +++++++++++++++ 3 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/DemographicInfo.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/resources/jpa-3.2/web/WEB-INF/classes/META-INF/persistence.xml b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/resources/jpa-3.2/web/WEB-INF/classes/META-INF/persistence.xml index b9e67eb9c84..32b6d803185 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/resources/jpa-3.2/web/WEB-INF/classes/META-INF/persistence.xml +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/resources/jpa-3.2/web/WEB-INF/classes/META-INF/persistence.xml @@ -21,7 +21,8 @@ - + + \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/DemographicInfo.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/DemographicInfo.java new file mode 100644 index 00000000000..1e1e5fb73d1 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/DemographicInfo.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat_jpa + */ +@Entity +public class DemographicInfo { + + @Column + public Instant collectedOn; + + @GeneratedValue + @Id + public BigInteger id; + + @Column + public BigDecimal publicDebt; + + @Column + public BigDecimal intragovernmentalDebt; + + @Column + public BigInteger numFullTimeWorkers; + + public static DemographicInfo of(int year, int month, int day, + long numFullTimeWorkers, + double intragovernmentalDebt, double publicDebt) { + DemographicInfo inst = new DemographicInfo(); + inst.collectedOn = ZonedDateTime.of(year, month, day, 12, 0, 0, 0, ZoneId.of("America/New_York")).toInstant(); + inst.numFullTimeWorkers = BigInteger.valueOf(numFullTimeWorkers); + inst.intragovernmentalDebt = BigDecimal.valueOf(intragovernmentalDebt); + inst.publicDebt = BigDecimal.valueOf(publicDebt); + return inst; + } + + @Override + public String toString() { + return "DemographicInfo from " + collectedOn; + } +} \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 1bf00045c36..d0cb4d247ce 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -15,9 +15,12 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; +import java.time.ZoneId; +import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -34,6 +37,7 @@ import io.openliberty.jpa.data.tests.models.City; import io.openliberty.jpa.data.tests.models.CityId; import io.openliberty.jpa.data.tests.models.Coordinate; +import io.openliberty.jpa.data.tests.models.DemographicInfo; import io.openliberty.jpa.data.tests.models.NaturalNumber; import io.openliberty.jpa.data.tests.models.Package; import io.openliberty.jpa.data.tests.models.Person; @@ -650,6 +654,51 @@ public void testOLGH28368() throws Exception { } } + @Test // Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28813 + public void testOLGH28813() throws Exception { + final ZoneId EASTERN = ZoneId.of("America/New_York"); + + DemographicInfo US2024 = DemographicInfo.of(2024, 4, 30, 133809000, 7136033799632.56, 27480960216618.32); + DemographicInfo US2023 = DemographicInfo.of(2023, 4, 28, 134060000, 6852746625848.93, 24605068022566.94); + DemographicInfo US2022 = DemographicInfo.of(2022, 4, 29, 132250000, 6526909395140.41, 23847245116757.60); + DemographicInfo US2007 = DemographicInfo.of(2007, 4, 30, 121090000, 3833110332444.19, 5007058051986.64); + + tx.begin(); + em.persist(US2024); + em.persist(US2023); + em.persist(US2022); + em.persist(US2007); + tx.commit(); + + List results; + + tx.begin(); + try { + results = em.createQuery("SELECT o FROM DemographicInfo o WHERE (o.publicDebt BETWEEN ?1 AND ?2) ORDER BY o.publicDebt", DemographicInfo.class) + .setParameter(1, BigDecimal.valueOf(5000000000000.00)) + .setParameter(2, BigDecimal.valueOf(10000000000000.00)) + .getResultList(); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * TODO unable to recreate issue + * Exception Description: The object [2007-04-30 11:00:00.0], of class [class java.lang.String], + * from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[collectedOn-->WLPDemographicInfo.COLLECTEDON]] + * with descriptor [RelationalDescriptor(test.jakarta.data.jpa.web.DemographicInfo --> [DatabaseTable(WLPDemographicInfo)])], + * could not be converted to [class java.time.Instant]. + * Internal Exception: java.time.format.DateTimeParseException: Text '2007-04-30 11:00:00.0' could not be parsed at index 10 + */ + throw e; + } + + assertEquals(1, results.size()); + assertEquals(2007, results.get(0).collectedOn.atZone(EASTERN).get(ChronoField.YEAR)); + + System.out.println(results.get(0).toString()); + } + /** * Utility method to drop all entities from table. * From e4ef7e8ee2364a6823e50ea9e982f4b4b2aa1374 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Wed, 24 Jul 2024 11:36:31 -0500 Subject: [PATCH 023/166] recreate https://github.com/OpenLiberty/open-liberty/issues/28928 --- .../jpa/data/tests/models/Item.java | 42 ++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 48 +++++++++++++++++++ 2 files changed, 90 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Item.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Item.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Item.java new file mode 100644 index 00000000000..fa24e938664 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Item.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import java.util.UUID; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat_exp + */ +@Entity +public class Item { + public String description; + + public String name; + + @Id + @GeneratedValue + public UUID pk; // Do not add Id to this name. It should be detectable based on type alone. + + public float price; + + public long version; + + public static Item of(String description, String name, float price) { + Item inst = new Item(); + inst.description = description; + inst.name = name; + inst.price = price; + return inst; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index d0cb4d247ce..8cf15422441 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -38,6 +38,7 @@ import io.openliberty.jpa.data.tests.models.CityId; import io.openliberty.jpa.data.tests.models.Coordinate; import io.openliberty.jpa.data.tests.models.DemographicInfo; +import io.openliberty.jpa.data.tests.models.Item; import io.openliberty.jpa.data.tests.models.NaturalNumber; import io.openliberty.jpa.data.tests.models.Package; import io.openliberty.jpa.data.tests.models.Person; @@ -699,6 +700,53 @@ public void testOLGH28813() throws Exception { System.out.println(results.get(0).toString()); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28928") + public void testOLGH28928() throws Exception { + Item apple = Item.of("testOLGH28928-a", "apple", 7.00f); + Item ball = Item.of("testOLGH28928-b", "ball", 10.00f); + Item carrot = Item.of("testOLGH28928-c", "carrot", 0.50f); + + Float maxPrice; + Float minPrice; + Float avgPrice; + + tx.begin(); + em.persist(apple); + em.persist(ball); + em.persist(carrot); + tx.commit(); + + tx.begin(); + try { + + maxPrice = em.createQuery("SELECT MAX(price) FROM Item", Float.class) + .getSingleResult(); + + minPrice = em.createQuery("SELECT MIN(price) FROM Item", Float.class) + .getSingleResult(); + + avgPrice = em.createQuery("SELECT AVG(price) FROM Item", Float.class) + .getSingleResult(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: + * Exception Description: Syntax error parsing [SELECT MAX(price) FROM Item]. + * [11, 16] The encapsulated expression is not a valid expression. + */ + throw e; + } + + assertEquals(10.00f, maxPrice, 0.01f); + assertEquals(0.50f, minPrice, 0.01f); + assertEquals(5.833f, avgPrice, 0.01f); + } + /** * Utility method to drop all entities from table. * From f12be43fa7e147e9c4037633549753ad0a342c71 Mon Sep 17 00:00:00 2001 From: Jared Anderson Date: Tue, 23 Jul 2024 17:54:02 -0500 Subject: [PATCH 024/166] Performance improvements for feature list utility - Get XMLInputFactory instance once and store statically instead of getting a new one each time in DefaultConfigurationList - Update to use List.get() method instead of using an Iterator in FeatureDefinitionUtils - Cache MetaTypeInformationSpecification per bundle to avoid parsing the same bundle multiple times in FeatureList. This is the critical change in this PR - Update to not get the value length over and over and use StringBuilder.setLength() instead of StringBuilder.delete() in MetaTypeHelper - Use a Map to get the AttributeDefinition value instead of calling equals 9 times potentially in parseType() method in SchemaMetaTypeParser - Also short circuit iterating over the jar file entries if there is not an entry for OSGI-INF/metatype in SchemaMetaTypeParser --- .../xml/internal/metatype/MetaTypeHelper.java | 10 ++-- .../internal/schema/SchemaMetaTypeParser.java | 59 ++++++++----------- .../generator/DefaultConfigurationList.java | 5 +- .../internal/generator/FeatureList.java | 35 ++++++----- .../subsystem/FeatureDefinitionUtils.java | 9 ++- 5 files changed, 61 insertions(+), 57 deletions(-) diff --git a/dev/com.ibm.ws.config/src/com/ibm/ws/config/xml/internal/metatype/MetaTypeHelper.java b/dev/com.ibm.ws.config/src/com/ibm/ws/config/xml/internal/metatype/MetaTypeHelper.java index ea913e44857..5a75f92cda3 100644 --- a/dev/com.ibm.ws.config/src/com/ibm/ws/config/xml/internal/metatype/MetaTypeHelper.java +++ b/dev/com.ibm.ws.config/src/com/ibm/ws/config/xml/internal/metatype/MetaTypeHelper.java @@ -1,10 +1,10 @@ /******************************************************************************* - * Copyright (c) 2010, 2014 IBM Corporation and others. + * Copyright (c) 2010, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-2.0/ - * + * * SPDX-License-Identifier: EPL-2.0 * * Contributors: @@ -24,13 +24,13 @@ public class MetaTypeHelper { public static final List parseValue(String value) { List values = new ArrayList(); StringBuilder builder = new StringBuilder(); - for (int i = 0; i < value.length(); i++) { + for (int i = 0, valueLength = value.length(); i < valueLength; i++) { char ch = value.charAt(i); if (ch == ',') { values.add(builder.toString()); - builder.delete(0, builder.length()); + builder.setLength(0); } else if (ch == '\\') { - if (i + 1 < value.length()) { + if (i + 1 < valueLength) { // add next builder.append(value.charAt(++i)); } else { diff --git a/dev/com.ibm.ws.config/src/com/ibm/ws/config/xml/internal/schema/SchemaMetaTypeParser.java b/dev/com.ibm.ws.config/src/com/ibm/ws/config/xml/internal/schema/SchemaMetaTypeParser.java index 530bf2c3f55..84315aab5ec 100644 --- a/dev/com.ibm.ws.config/src/com/ibm/ws/config/xml/internal/schema/SchemaMetaTypeParser.java +++ b/dev/com.ibm.ws.config/src/com/ibm/ws/config/xml/internal/schema/SchemaMetaTypeParser.java @@ -1,10 +1,10 @@ /******************************************************************************* - * Copyright (c) 2012, 2014 IBM Corporation and others. + * Copyright (c) 2012, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-2.0/ - * + * * SPDX-License-Identifier: EPL-2.0 * * Contributors: @@ -81,6 +81,20 @@ public class SchemaMetaTypeParser { public static final String PROP_EXT = ".properties"; private static final ResourceBundle _msgs = ResourceBundle.getBundle(XMLConfigConstants.NLS_PROPS); + private static final Map typeMap = new HashMap<>(); + + static { + typeMap.put("long", AttributeDefinition.LONG); + typeMap.put("double", AttributeDefinition.DOUBLE); + typeMap.put("float", AttributeDefinition.FLOAT); + typeMap.put("integer", AttributeDefinition.INTEGER); + typeMap.put("byte", AttributeDefinition.BYTE); + typeMap.put("char", AttributeDefinition.CHARACTER); + typeMap.put("boolean", AttributeDefinition.BOOLEAN); + typeMap.put("short", AttributeDefinition.SHORT); + typeMap.put("password", AttributeDefinition.PASSWORD); + } + private final XMLInputFactory inputFactory; private final List metatypeList; MetaTypeInformationSpecification metatype = null; @@ -99,9 +113,9 @@ public SchemaMetaTypeParser(Locale locale, List j, String productName) { /** * Constructor. - * + * * @param generatorOptions The user options wrapper. - * @param prodJars The Map of bundle jars organized by product (core, usr, prodExt1, prodExt2 ...) + * @param prodJars The Map of bundle jars organized by product (core, usr, prodExt1, prodExt2 ...) */ public SchemaMetaTypeParser(Locale locale, Map> prodJars) { inputFactory = DesignatedXMLInputFactory.newInstance(); @@ -114,7 +128,7 @@ public SchemaMetaTypeParser(Locale locale, Map> prodJars) { * Since we don't have have the luxury of OSGi framework getting the OCDs for us, * we need to look up all the metatype.xml files from each jar manually and * construct a metatypeinformation which will be passed to SchemaWriter - * + * * @param jars * @return StreamSource containing all the metatype XMLs */ @@ -165,7 +179,8 @@ public List getMetatypeInformation() { return metatypeList; } - private void parse(InputStream metatypeXML, JarFile jarFile, boolean generateNewMetatype, Map metatypePropMap, String productName) throws XMLStreamException, IOException { + private void parse(InputStream metatypeXML, JarFile jarFile, boolean generateNewMetatype, Map metatypePropMap, + String productName) throws XMLStreamException, IOException { XMLStreamReader xmlStreamReader = inputFactory.createXMLStreamReader(metatypeXML); DepthAwareXMLStreamReader parser = new DepthAwareXMLStreamReader(xmlStreamReader); @@ -229,7 +244,7 @@ private void parseMetaData(DepthAwareXMLStreamReader parser) throws XMLStreamExc private void warning(String message, Object... args) { // Don't generate an error when this is being run by the mbean. Not all - // bundles may be included by a running server. + // bundles may be included by a running server. String msg = message; try { msg = _msgs.getString(message); @@ -245,7 +260,7 @@ private void warning(String message, Object... args) { /** * Tries to generate the correct metatype properties location according to locale - * + * * @param metatypeName * @return a String with the correct metatype properties location */ @@ -459,7 +474,7 @@ private String parseObject(DepthAwareXMLStreamReader parser) { } /** - * + * * @param xmlStreamReader * @return */ @@ -484,29 +499,7 @@ private String[] parseOption(DepthAwareXMLStreamReader parser) { * @return */ private int parseType(String type) { - type = type.toLowerCase(); - if (type.equals("long")) { - return AttributeDefinition.LONG; - } else if (type.equals("double")) { - return AttributeDefinition.DOUBLE; - } else if (type.equals("float")) { - return AttributeDefinition.FLOAT; - } else if (type.equals("integer")) { - return AttributeDefinition.INTEGER; - } else if (type.equals("byte")) { - return AttributeDefinition.BYTE; - } else if (type.equals("char")) { - return AttributeDefinition.CHARACTER; - } else if (type.equals("boolean")) { - return AttributeDefinition.BOOLEAN; - } else if (type.equals("short")) { - return AttributeDefinition.SHORT; - } else if (type.equals("password")) { - return AttributeDefinition.PASSWORD; - } else { - //defaults to string at least that's what SchemaWriter does - return AttributeDefinition.STRING; - } + //defaults to string at least that's what SchemaWriter does + return typeMap.getOrDefault(type.toLowerCase(), AttributeDefinition.STRING); } - } diff --git a/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/DefaultConfigurationList.java b/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/DefaultConfigurationList.java index d06b7144266..ded357309be 100644 --- a/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/DefaultConfigurationList.java +++ b/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/DefaultConfigurationList.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015 IBM Corporation and others. + * Copyright (c) 2015, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -62,6 +62,7 @@ public class DefaultConfigurationList { private static final String DEFAULT_INSTANCE = "defaultInstance"; private static final String PROVIDING_FEATURES = "providingFeatures"; + private static final XMLInputFactory xmlInputFactory = XMLInputFactory.newInstance(); private final Map features; private final FeatureListOptions options; @@ -174,7 +175,7 @@ public BundleWrapperFile(ManifestElement element) throws XMLStreamException, Fac ZipEntry defaultConfigFile = jar.getEntry(fileFilter); if (defaultConfigFile != null) { - this.reader = XMLInputFactory.newInstance().createXMLStreamReader(jar.getInputStream(defaultConfigFile)); + this.reader = xmlInputFactory.createXMLStreamReader(jar.getInputStream(defaultConfigFile)); // Parse the config into a list of top level elements. parseConfig(elements, existing, notExisting); diff --git a/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/FeatureList.java b/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/FeatureList.java index e6193ff166a..95319edb366 100644 --- a/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/FeatureList.java +++ b/dev/com.ibm.ws.kernel.feature.cmdline/src/com/ibm/ws/kernel/feature/internal/generator/FeatureList.java @@ -4,7 +4,7 @@ * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-2.0/ - * + * * SPDX-License-Identifier: EPL-2.0 * * Contributors: @@ -81,6 +81,7 @@ public class FeatureList { private final static boolean writingJavaVersion = Boolean.getBoolean("ibm.javaVersion"); private static final List> possibleJavaVersions = new ArrayList>(); private static final Map> eeToCapability = new HashMap>(); + private static final Map> metaTypes = new HashMap<>(); private static File installDir; private static boolean gaBuild = true; @@ -297,19 +298,25 @@ private void writeFeature(FeatureListWriter writer, ManifestFileProcessor mfp, F elements.add("variable"); } boolean includeInternal = options.getIncludeInternals(); - SchemaMetaTypeParser parser = new SchemaMetaTypeParser(Locale.getDefault(), new ArrayList(bundles), productName); - List info = parser.getMetatypeInformation(); - for (MetaTypeInformationSpecification spec : info) { - for (ObjectClassDefinitionSpecification ocds : spec.getObjectClassSpecifications()) { - if (includeInternal || !!!"internal".equals(ocds.getName())) { - if (ocds.getExtensionUris().contains(XMLConfigConstants.METATYPE_EXTENSION_URI)) { - Map attribs = ocds.getExtensionAttributes(XMLConfigConstants.METATYPE_EXTENSION_URI); - if (attribs != null) { - String isBeta = attribs.get("beta"); - if ( ! (gaBuild && "true".equals(isBeta))) { - String alias = attribs.get("alias"); - if (alias != null && !attribs.containsKey("childAlias")) { - elements.add(alias); + for (File bundle : bundles) { + List info = metaTypes.get(bundle.getAbsolutePath()); + if (info == null) { + SchemaMetaTypeParser parser = new SchemaMetaTypeParser(Locale.getDefault(), Collections.singletonList(bundle), productName); + info = parser.getMetatypeInformation(); + metaTypes.put(bundle.getAbsolutePath(), info); + } + for (MetaTypeInformationSpecification spec : info) { + for (ObjectClassDefinitionSpecification ocds : spec.getObjectClassSpecifications()) { + if (includeInternal || !!!"internal".equals(ocds.getName())) { + if (ocds.getExtensionUris().contains(XMLConfigConstants.METATYPE_EXTENSION_URI)) { + Map attribs = ocds.getExtensionAttributes(XMLConfigConstants.METATYPE_EXTENSION_URI); + if (attribs != null) { + String isBeta = attribs.get("beta"); + if ( ! (gaBuild && "true".equals(isBeta))) { + String alias = attribs.get("alias"); + if (alias != null && !attribs.containsKey("childAlias")) { + elements.add(alias); + } } } } diff --git a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/subsystem/FeatureDefinitionUtils.java b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/subsystem/FeatureDefinitionUtils.java index e9c37606c1e..8a8d1dbae2a 100644 --- a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/subsystem/FeatureDefinitionUtils.java +++ b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/subsystem/FeatureDefinitionUtils.java @@ -771,7 +771,9 @@ Collection getConstituents(SubsystemContentType type) { List data = ManifestHeaderProcessor.parseExportString(contents); result = new ArrayList(data.size()); Set preventDups = new HashSet<>(); - for (NameValuePair content : data) { + + for (int idx = 0, size = data.size(); idx < size; ++idx) { + NameValuePair content = data.get(idx); if (preventDups.add(content.getName())) { result.add(new FeatureResourceImpl(content.getName(), content.getAttributes(), iAttr.bundleRepositoryType, iAttr.featureName, iAttr.activationType)); } @@ -781,10 +783,11 @@ Collection getConstituents(SubsystemContentType type) { } if (type != null) { - Collection unfiltered = result; + List unfiltered = result; result = new ArrayList(); - for (FeatureResource resource : unfiltered) { + for (int idx = 0, size = unfiltered.size(); idx < size; idx++) { + FeatureResource resource = unfiltered.get(idx); if (resource.isType(type)) { result.add(resource); } From fcdc04fcd2f6539b0f67fc39460a27d181ac1da1 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Wed, 24 Jul 2024 14:34:15 -0500 Subject: [PATCH 025/166] recreate https://github.com/OpenLiberty/open-liberty/issues/28589 --- .../jpa/data/tests/models/City.java | 5 +- .../tests/web/JakartaDataRecreateServlet.java | 110 ++++++++++++++++++ 2 files changed, 113 insertions(+), 2 deletions(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java index 6e1454712ff..180eb27b175 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/City.java @@ -11,7 +11,9 @@ import java.util.Set; +import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; import jakarta.persistence.Id; import jakarta.persistence.IdClass; import jakarta.persistence.Version; @@ -22,8 +24,7 @@ @Entity @IdClass(CityId.class) public class City { - // TODO uncomment to reproduce EclipseLink bug with selecting an attribute that is a collection type. - //@ElementCollection(fetch = FetchType.EAGER) + @ElementCollection(fetch = FetchType.EAGER) public Set areaCodes; @Version diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 8cf15422441..675f65e31c9 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -581,6 +581,8 @@ public void testOLGH28545_3() throws Exception { @Test @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/29073") public void testOLGH29073() throws Exception { + deleteAllEntities(City.class); + City RochesterMN = City.of("Rochester", "Minnesota", 121878, Set.of(55901, 55902, 55903, 55904, 55906)); City RochesterNY = City.of("Rochester", "New York", 209352, Set.of(14601, 14602, 14603, 14604, 14606)); @@ -747,6 +749,114 @@ public void testOLGH28928() throws Exception { assertEquals(5.833f, avgPrice, 0.01f); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28589") + public void testOLGH28589_1() throws Exception { + deleteAllEntities(City.class); + + City RochesterMN = City.of("Rochester", "Minnesota", 121878, Set.of(55901, 55902, 55903, 55904, 55906)); + City RochesterNY = City.of("Rochester", "New York", 209352, Set.of(14601, 14602, 14603, 14604, 14606)); + + List RochesterAreaCodes; + + tx.begin(); + em.persist(RochesterMN); + em.persist(RochesterNY); + tx.commit(); + + tx.begin(); + try { + RochesterAreaCodes = em.createQuery("SELECT o.areaCodes FROM City o WHERE (o.name=?1)", Set.class) + .setParameter(1, "Rochester") + .getResultList(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + throw e; + } + + System.out.println(RochesterAreaCodes); + System.out.println(RochesterAreaCodes.get(0)); + + /** + * Recreate + * expected: <2> but was:<10> + * Expected: [[55901, 55902, 55903, 55904, 55906], [14601, 14602, 14603, 14604, 14606]] + * Actual: [[55901], [55902], [55903], [55904], [55906], [14601], [14602], [14603], [14604], [14606]] + */ + assertEquals(2, RochesterAreaCodes.size()); + assertTrue(RochesterAreaCodes.contains(Set.of(55901, 55902, 55903, 55904, 55906))); + assertTrue(RochesterAreaCodes.contains(Set.of(14601, 14602, 14603, 14604, 14606))); + } + + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28589") + public void testOLGH28589_2() throws Exception { + deleteAllEntities(City.class); + + City RedWingMN = City.of("Red Wing", "Minnesota", 16672, Set.of(55066)); + + Set RedWingAreaCodes; + + tx.begin(); + em.persist(RedWingMN); + tx.commit(); + + tx.begin(); + try { + RedWingAreaCodes = em.createQuery("SELECT o.areaCodes FROM City o WHERE (o.name=?1)", Set.class) + .setParameter(1, "Red Wing") + .getSingleResult(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * java.lang.ClassCastException: java.lang.Integer incompatible with java.util.Set + */ + throw e; + } + + assertEquals(1, RedWingAreaCodes.size()); + assertEquals(55066, RedWingAreaCodes.stream().findFirst()); + } + + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28589") + public void testOLGH28589_3() throws Exception { + deleteAllEntities(City.class); + + City RochesterMN = City.of("Rochester", "Minnesota", 121878, Set.of(55901, 55902, 55903, 55904, 55906)); + + Set RochesterAreaCodes; + + tx.begin(); + em.persist(RochesterMN); + tx.commit(); + + tx.begin(); + try { + RochesterAreaCodes = em.createQuery("SELECT o.areaCodes FROM City o WHERE (o.name=?1)", Set.class) + .setParameter(1, "Rochester") + .getSingleResult(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + /* + * Recreate + * jakarta.persistence.NonUniqueResultException: More than one result was returned from Query.getSingleResult() + */ + throw e; + } + + assertEquals(5, RochesterAreaCodes.size()); + assertTrue(RochesterAreaCodes.containsAll(Set.of(55901, 55902, 55903, 55904, 55906))); + } + /** * Utility method to drop all entities from table. * From e24dcc89b4dda51c6745e7c63100eec7b2918211 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Wed, 24 Jul 2024 16:02:08 -0500 Subject: [PATCH 026/166] recreate https://github.com/OpenLiberty/open-liberty/issues/24926 --- .../jpa/data/tests/models/Line.java | 87 +++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 43 +++++++++ 2 files changed, 130 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Line.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Line.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Line.java new file mode 100644 index 00000000000..c51047d5726 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Line.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import jakarta.persistence.AttributeOverride; +import jakarta.persistence.AttributeOverrides; +import jakarta.persistence.Column; +import jakarta.persistence.Embeddable; +import jakarta.persistence.Embedded; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat + * Instead of using house, use this simpler Entity + */ +@Entity +public class Line { + @GeneratedValue + @Id + public Long id; + + @Embedded + @AttributeOverrides({ + @AttributeOverride(name = "x", column = @Column(name = "x_A")), + @AttributeOverride(name = "y", column = @Column(name = "y_A")) + }) + @Column + public Point pointA; + + @Embedded + @AttributeOverrides({ + @AttributeOverride(name = "x", column = @Column(name = "x_B")), + @AttributeOverride(name = "y", column = @Column(name = "y_B")) + }) + @Column + + public Point pointB; + + @Embeddable + public static class Point { + + public int x; + + public int y; + + public static Point of(int x, int y) { + Point inst = new Point(); + inst.x = x; + inst.y = y; + return inst; + } + + @Override + public String toString() { + return "Point [x=" + x + ", y=" + y + "]"; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Point other = (Point) obj; + return x == other.x && y == other.y; + } + + } + + public static Line of(int x1, int y1, int x2, int y2) { + Line inst = new Line(); + inst.pointA = Point.of(x1, y1); + inst.pointB = Point.of(x2, y2); + return inst; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 675f65e31c9..429318a6fe8 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -13,6 +13,7 @@ import static componenttest.annotation.SkipIfSysProp.DB_Postgres; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.math.BigDecimal; @@ -39,6 +40,8 @@ import io.openliberty.jpa.data.tests.models.Coordinate; import io.openliberty.jpa.data.tests.models.DemographicInfo; import io.openliberty.jpa.data.tests.models.Item; +import io.openliberty.jpa.data.tests.models.Line; +import io.openliberty.jpa.data.tests.models.Line.Point; import io.openliberty.jpa.data.tests.models.NaturalNumber; import io.openliberty.jpa.data.tests.models.Package; import io.openliberty.jpa.data.tests.models.Person; @@ -857,6 +860,46 @@ public void testOLGH28589_3() throws Exception { assertTrue(RochesterAreaCodes.containsAll(Set.of(55901, 55902, 55903, 55904, 55906))); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/24926") + public void testOLGH24926() throws Exception { + Line unitRadius = Line.of(0, 0, 1, 1); + + Line origin; + + tx.begin(); + em.persist(unitRadius); + tx.commit(); + + tx.begin(); + em.createQuery("UPDATE Line o SET o.pointB = ?1 WHERE (o.id=?2)") + .setParameter(1, null) + .setParameter(2, unitRadius.id) + .executeUpdate(); // UPDATE LINE SET x_B = ? WHERE (ID = ?) bind => [null, 5] + tx.commit(); + + tx.begin(); + try { + origin = em.createQuery("SELECT o FROM Line o WHERE (o.id=?1)", Line.class) + .setParameter(1, unitRadius.id) + .getSingleResult(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + throw e; + } + + assertEquals(Point.of(0, 0), origin.pointA); + + /* + * Recreate + * Expected: null + * Actual: Point [x=0, y=1] + */ + assertNull("PointB was not null, instead: " + origin.pointB, origin.pointB); + } + /** * Utility method to drop all entities from table. * From 0c501ce9993b82701a41a9fd72b95f52a1fd1635 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Thu, 25 Jul 2024 09:30:52 -0500 Subject: [PATCH 027/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28737 --- .../ws/jpa/jpa32/JakartaDataRecreateTest.java | 1 + .../tests/web/JakartaDataRecreateServlet.java | 44 +++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JakartaDataRecreateTest.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JakartaDataRecreateTest.java index 5ec7764a697..c6e4cb5ecbc 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JakartaDataRecreateTest.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/fat/src/com/ibm/ws/jpa/jpa32/JakartaDataRecreateTest.java @@ -80,6 +80,7 @@ private static void createApplication(String specLevel) throws Exception { @AfterClass public static void tearDown() throws Exception { server.stopServer("CWWJP9991W", + "WTRN0074E: Exception caught from before_completion synchronization operation", // RuntimeException test, expected "Missing PostgreSQL10JsonPlatform"); // Generated with postgres db, since we don't include the postgres plugin); } diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 429318a6fe8..a59eb434f78 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -11,12 +11,15 @@ import static componenttest.annotation.SkipIfSysProp.DB_Oracle; import static componenttest.annotation.SkipIfSysProp.DB_Postgres; +import static componenttest.annotation.SkipIfSysProp.DB_SQLServer; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; import java.math.BigDecimal; +import java.sql.SQLIntegrityConstraintViolationException; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -54,6 +57,7 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.LockModeType; import jakarta.persistence.PersistenceContext; +import jakarta.persistence.PersistenceException; import jakarta.servlet.annotation.WebServlet; import jakarta.transaction.RollbackException; import jakarta.transaction.UserTransaction; @@ -286,6 +290,8 @@ public void testOLGH28920() throws Exception { @Test @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28909") public void testOLGH28909() throws Exception { + deleteAllEntities(Box.class); + Box cube = Box.of("testOLGH28909", 1, 1, 1); Box wall; //box with no width @@ -900,6 +906,44 @@ public void testOLGH24926() throws Exception { assertNull("PointB was not null, instead: " + origin.pointB, origin.pointB); } + @Test + @SkipIfSysProp({ DB_Postgres, DB_SQLServer }) //Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28737 + public void testOLGH28737() throws Exception { + deleteAllEntities(Box.class); + + Box cube = Box.of("testOLGH28737", 1, 1, 1); + Box wall = Box.of("testOLGH28737", 1, 0, 1); + + tx.begin(); + try { + em.persist(cube); + em.persist(wall); + tx.commit(); + } catch (RollbackException e) { + assertTrue(e.getCause() instanceof PersistenceException); + Throwable cause = e.getCause(); + + //Ensure PersistenceException was caused by SQLIntegrityConstraintViolationException + while (cause != null) { + if (cause instanceof SQLIntegrityConstraintViolationException) { + return; // passing result + } + cause = cause.getCause(); + } + + /* + * Recreate - !! NOT AN ECLIPSELINK ISSUE !! + * Caused by the PostgreSQL and Microsoft SQLServer drivers not throwing SQLIntegrityConstraintViolationException + * PostgreSQL: https://github.com/pgjdbc/pgjdbc/issues/963 + * SQLServer: https://github.com/microsoft/mssql-jdbc/issues/1199 + */ + fail("Caught PersistenceException, but it was not caused by SQLIntegrityConstraintViolationException"); + } catch (Exception e) { + tx.rollback(); + throw e; + } + } + /** * Utility method to drop all entities from table. * From df7879a7b2e1fac6f18f4dc3055a775c957e3540 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Thu, 25 Jul 2024 10:49:45 -0500 Subject: [PATCH 028/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28289 --- .../tests/web/JakartaDataRecreateServlet.java | 74 +++++++++++++++++++ .../jakarta/data/web/DataTestServlet.java | 1 - 2 files changed, 74 insertions(+), 1 deletion(-) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index a59eb434f78..397e0cd4949 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -9,6 +9,7 @@ *******************************************************************************/ package io.openliberty.jpa.data.tests.web; +import static componenttest.annotation.SkipIfSysProp.DB_DB2; import static componenttest.annotation.SkipIfSysProp.DB_Oracle; import static componenttest.annotation.SkipIfSysProp.DB_Postgres; import static componenttest.annotation.SkipIfSysProp.DB_SQLServer; @@ -944,6 +945,79 @@ public void testOLGH28737() throws Exception { } } + @Test + @SkipIfSysProp(DB_DB2) //Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28289 + public void testOLGH28289() throws Exception { + deleteAllEntities(Package.class); + + Package p1 = Package.of(70071, 17.0f, 17.1f, 7.7f, "testOLGH28289#70071"); // tallest and smallest length + Package p2 = Package.of(70077, 77.0f, 17.7f, 7.7f, "testOLGH28289#70077"); // tallest and largest length + Package p3 = Package.of(70007, 70.0f, 10.7f, 0.7f, "testOLGH28289#70007"); + + List tallToShort; + + tx.begin(); + em.persist(p1); + em.persist(p2); + em.persist(p3); + tx.commit(); + + tx.begin(); + try { + tallToShort = em.createQuery("SELECT o FROM Package o WHERE (o.height + * SELECT * FROM ( + * SELECT * FROM ( + * SELECT EL_TEMP.*, ROWNUMBER() OVER() AS EL_ROWNM + * FROM ( + * SELECT ID AS a1, DESCRIPTION AS a2, HEIGHT AS a3, LENGTH AS a4, WIDTH AS a5 + * FROM PACKAGE + * WHERE (HEIGHT < ?) + * ORDER BY HEIGHT DESC, LENGTH + * ) AS EL_TEMP + * ) AS EL_TEMP2 WHERE EL_ROWNM <= ? + * ) AS EL_TEMP3 WHERE EL_ROWNM > ? + * FOR READ ONLY WITH RS USE AND KEEP UPDATE LOCKS // When this is added to query the ordering is ignored + * + * bind => [8.0, 2, 0] + * + */ + assertEquals(70071, tallToShort.get(0).id); + assertEquals(70077, tallToShort.get(1).id); + } + + /** + * Utility method to drop all entities from table. + * + * Order to tests is not guaranteed and thus we should be pessimistic and + * delete all entities when we reuse an entity between tests. + * + * @param clazz - the entity class + * @param aka - "also known as" if the table has a different name than the entity + */ + private void deleteAllEntities(Class clazz, String aka) throws Exception { + tx.begin(); + em.createQuery("DELETE FROM " + aka) + .executeUpdate(); + tx.commit(); + } + /** * Utility method to drop all entities from table. * diff --git a/dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web/DataTestServlet.java b/dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web/DataTestServlet.java index fe288e80594..cc3f9329c8e 100644 --- a/dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web/DataTestServlet.java +++ b/dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web/DataTestServlet.java @@ -12,7 +12,6 @@ *******************************************************************************/ package test.jakarta.data.web; -import static componenttest.annotation.SkipIfSysProp.DB_DB2; import static componenttest.annotation.SkipIfSysProp.DB_Oracle; import static componenttest.annotation.SkipIfSysProp.DB_Postgres; import static componenttest.annotation.SkipIfSysProp.DB_SQLServer; From 1483d53229d4e8898066114fb2ff1b9b014bc2bf Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Thu, 25 Jul 2024 11:28:36 -0500 Subject: [PATCH 029/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28078 --- .../jpa/data/tests/models/Account.java | 46 +++++++++++++++++++ .../jpa/data/tests/models/AccountId.java | 36 +++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 31 +++++++++++++ .../data/jpa/web/DataJPATestServlet.java | 8 +--- 4 files changed, 115 insertions(+), 6 deletions(-) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Account.java create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AccountId.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Account.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Account.java new file mode 100644 index 00000000000..933b70a5b1d --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Account.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import jakarta.persistence.EmbeddedId; +import jakarta.persistence.Entity; + +/** + * Recreate from io.openliberty.data.internal_fat_jpa + */ +@Entity +public class Account { + + @EmbeddedId + public AccountId accountId; + + public double balance; + + public String bankName; + + public boolean checking; + + public String owner; + + public static Account of(long accountNum, long routingNum, String bankName, boolean checking, double balance, String owner) { + Account inst = new Account(); + inst.accountId = AccountId.of(accountNum, routingNum); + inst.bankName = bankName; + inst.checking = checking; + inst.balance = balance; + inst.owner = owner; + return inst; + } + + @Override + public String toString() { + return bankName + ' ' + accountId + " $" + balance + " owned by " + owner + (checking ? " with checking" : ""); + } +} \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AccountId.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AccountId.java new file mode 100644 index 00000000000..af111f3f61b --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/AccountId.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import jakarta.persistence.Embeddable; + +@Embeddable +public class AccountId { + + public long accountNum; + public long routingNum; + + public AccountId() { + } + + public AccountId(long accountNum, long routingNum) { + this.accountNum = accountNum; + this.routingNum = routingNum; + } + + public static AccountId of(long accountNum, long routingNum) { + return new AccountId(accountNum, routingNum); + } + + @Override + public String toString() { + return "AccountId:" + accountNum + ":" + routingNum; + } +} \ No newline at end of file diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 397e0cd4949..a4e00571e1c 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -36,6 +36,8 @@ import componenttest.annotation.SkipIfSysProp; import componenttest.app.FATServlet; +import io.openliberty.jpa.data.tests.models.Account; +import io.openliberty.jpa.data.tests.models.AccountId; import io.openliberty.jpa.data.tests.models.AsciiCharacter; import io.openliberty.jpa.data.tests.models.Box; import io.openliberty.jpa.data.tests.models.Business; @@ -1002,6 +1004,35 @@ public void testOLGH28289() throws Exception { assertEquals(70077, tallToShort.get(1).id); } + @Test + //"Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28078 + public void testOLGH28078() throws Exception { + Account Checking = Account.of(123456, 123456, "Wells Fargo", true, 1000.00, "Jimmy Cricket"); + Account Savings = Account.of(654321, 123456, "Wells Fargo", false, 8569.15, "Jimmy Cricket"); + + List results; + + tx.begin(); + em.persist(Checking); + em.persist(Savings); + tx.commit(); + + tx.begin(); + try { + results = em.createQuery("SELECT o FROM Account o WHERE (o.accountId=?1)", Account.class) + .setParameter(1, AccountId.of(123456, 123456)) + .getResultList(); //Unable to recreate + tx.commit(); + } catch (Exception e) { + tx.rollback(); + throw e; + } + + assertEquals(1, results.size()); + assertEquals(1000.00, results.get(0).balance, 0.01); + + } + /** * Utility method to drop all entities from table. * diff --git a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java index fea186a6eba..77e28f47a93 100644 --- a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java +++ b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java @@ -2142,12 +2142,8 @@ public void testLiteralDouble() { assertEquals(1L, accounts.countByOwnerAndBalanceBetween("Laura TestLiteralDouble", 331.159, 331.161)); - // TODO Enable the following once fixed, - //Account account = accounts.findByAccountId(id); - //assertEquals(331.16, account.balance, 0.001); - // Failure is: - // Caused by: java.lang.NullPointerException: Cannot read field "index" because "key" is null - // at org.eclipse.persistence.internal.sessions.ArrayRecord.get(ArrayRecord.java:139) ... + Account account = accounts.findByAccountId(id); + assertEquals(331.16, account.balance, 0.001); assertEquals(2L, accounts.deleteByOwnerEndsWith("TestLiteralDouble")); } From 9e985f8153269fb84f87007e17fc733b70b04adf Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Thu, 25 Jul 2024 13:28:59 -0500 Subject: [PATCH 030/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/27696 --- .../tests/web/JakartaDataRecreateServlet.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index a4e00571e1c..e1dfae758a8 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -1007,6 +1007,8 @@ public void testOLGH28289() throws Exception { @Test //"Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28078 public void testOLGH28078() throws Exception { + deleteAllEntities(Account.class); + Account Checking = Account.of(123456, 123456, "Wells Fargo", true, 1000.00, "Jimmy Cricket"); Account Savings = Account.of(654321, 123456, "Wells Fargo", false, 8569.15, "Jimmy Cricket"); @@ -1033,6 +1035,54 @@ public void testOLGH28078() throws Exception { } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/27696") + public void testOLGH27696() throws Exception { + deleteAllEntities(Account.class); + + Account a1 = Account.of(1005380, 70081, "Think Bank", true, 552.18, "Aaron testOLGH27696"); + Account a2 = Account.of(1004470, 70081, "Think Bank", true, 443.94, "Brian testOLGH27696"); + Account a3 = Account.of(1006380, 70081, "Think Bank", true, 160.63, "Cole testOLGH27696"); + Account a4 = Account.of(1007590, 70081, "Think Bank", true, 793.30, "Dean testOLGH27696"); + + List accounts; + + tx.begin(); + em.persist(a1); + em.persist(a2); + em.persist(a3); + em.persist(a4); + tx.commit(); + + tx.begin(); + try { + accounts = em.createQuery("SELECT o FROM Account o WHERE (o.accountId IN ?1 OR o.owner=?2) ORDER BY o.owner DESC", Account.class) + .setParameter(1, Set.of(AccountId.of(1005380, 70081), AccountId.of(1004470, 70081), AccountId.of(1006380, 70081))) + .setParameter(2, "Elizabeth testOLGH27696") + .getResultList(); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * Internal Exception: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "," at line 1, column 99. + * Error Code: 20000 + * Call: SELECT BALANCE, BANKNAME, CHECKING, OWNER, ACCOUNTNUM, ROUTINGNUM FROM ACCOUNT WHERE (((ACCOUNTNUM, ROUTINGNUM) IN (AccountId:1006380:70081, + * AccountId:1005380:70081, AccountId:1004470:70081)) OR (OWNER = 'Elizabeth testOLGH27696')) ORDER BY OWNER DESC + * Query: ReadAllQuery(referenceClass=Account + * sql="SELECT BALANCE, BANKNAME, CHECKING, OWNER, ACCOUNTNUM, ROUTINGNUM FROM ACCOUNT WHERE (((ACCOUNTNUM, ROUTINGNUM) IN ?) OR (OWNER = ?)) ORDER BY OWNER DESC") + */ + throw e; + } + + assertEquals(4, accounts.size()); + assertEquals(a4.owner, accounts.get(0).owner); + assertEquals(a3.owner, accounts.get(1).owner); + assertEquals(a2.owner, accounts.get(2).owner); + assertEquals(a1.owner, accounts.get(3).owner); + } + /** * Utility method to drop all entities from table. * From aa4b5cf7c049cc467b28f3cff06398592dcadee9 Mon Sep 17 00:00:00 2001 From: Nathan Rauh Date: Thu, 25 Jul 2024 14:05:26 -0500 Subject: [PATCH 031/166] Issue #28078 remove workaround for EclipseLink issue now that it is fixed --- .../src/test/jakarta/data/jpa/web/DataJPATestServlet.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java index fea186a6eba..77e28f47a93 100644 --- a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java +++ b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java @@ -2142,12 +2142,8 @@ public void testLiteralDouble() { assertEquals(1L, accounts.countByOwnerAndBalanceBetween("Laura TestLiteralDouble", 331.159, 331.161)); - // TODO Enable the following once fixed, - //Account account = accounts.findByAccountId(id); - //assertEquals(331.16, account.balance, 0.001); - // Failure is: - // Caused by: java.lang.NullPointerException: Cannot read field "index" because "key" is null - // at org.eclipse.persistence.internal.sessions.ArrayRecord.get(ArrayRecord.java:139) ... + Account account = accounts.findByAccountId(id); + assertEquals(331.16, account.balance, 0.001); assertEquals(2L, accounts.deleteByOwnerEndsWith("TestLiteralDouble")); } From 7c7a3feb35b836955788ae2fe583d95fbdd4b8d9 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Thu, 25 Jul 2024 14:02:35 -0500 Subject: [PATCH 032/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28905 --- .../jpa/data/tests/models/Triangle.java | 74 +++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 43 +++++++++++ 2 files changed, 117 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Triangle.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Triangle.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Triangle.java new file mode 100644 index 00000000000..b81f803705b --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Triangle.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import java.util.Arrays; + +import jakarta.persistence.Basic; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat_jpa + */ +@Entity +public class Triangle { + + @Basic(optional = false) + @GeneratedValue + @Id + public Integer distinctKey; + + @Basic(optional = true) + public Byte hypotenuse; + + @Basic(optional = false) + public short perimeter; + + @Basic(optional = false) + public Short sameLengthSides; // 0, 2, or 3 + + @Basic(optional = false) + public byte[] sides; + + public static Triangle of(byte side1, byte side2, byte side3) { + Triangle inst = new Triangle(); + inst.perimeter = (short) (side1 + side2 + side3); + inst.sides = new byte[] { side1, side2, side3 }; + inst.sameLengthSides = side1 == side2 && side2 == side3 ? (short) 3 // + : side1 == side2 || side2 == side3 || side1 == side3 ? (short) 2 // + : 0; + byte longest = 0; + byte[] others = new byte[2]; + int i = 0; + + for (byte s : inst.sides) + if (s > longest) { + if (longest > 0) + others[i++] = longest; + longest = s; + } else if (s <= 0) { + throw new IllegalArgumentException("side " + s); + } else { + others[i++] = s; + } + + inst.hypotenuse = longest * longest == others[0] * others[0] + others[1] * others[1] ? longest : null; + + return inst; + } + + @Override + public String toString() { + return "Triangle#" + distinctKey + " sides " + Arrays.toString(sides) + ", " + + sameLengthSides + "of same length, perimeter " + perimeter + ", hypotenuse " + hypotenuse; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index e1dfae758a8..93f8b2334a4 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -56,6 +56,7 @@ import io.openliberty.jpa.data.tests.models.Rebate; import io.openliberty.jpa.data.tests.models.Rebate.Status; import io.openliberty.jpa.data.tests.models.Segment; +import io.openliberty.jpa.data.tests.models.Triangle; import jakarta.annotation.Resource; import jakarta.persistence.EntityManager; import jakarta.persistence.LockModeType; @@ -1083,6 +1084,48 @@ public void testOLGH27696() throws Exception { assertEquals(a1.owner, accounts.get(3).owner); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28905") + public void testOLGH28905() throws Exception { + Triangle t1_0 = Triangle.of((byte) 13, (byte) 84, (byte) 85); + + Triangle t1_1; + + tx.begin(); + em.persist(t1_0); + tx.commit(); + + assertNotNull(t1_0.distinctKey); //t1_0 is detached + + tx.begin(); + try { + em.createQuery("UPDATE Triangle SET this.sides=?2, this.perimeter=?3 WHERE this.distinctKey=?1") + .setParameter(1, t1_0.distinctKey) + .setParameter(2, new byte[] { 36, 77, 85 }) + .setParameter(3, (short) (198)) + .executeUpdate(); + + t1_1 = em.createQuery("SELECT o FROM Triangle o WHERE o.distinctKey=?1", Triangle.class) + .setParameter(0, t1_0.distinctKey) + .getSingleResult(); + + tx.commit(); + } catch (Exception e) { + tx.rollback(); + /* + * Recreate + * java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: + * Exception Description: Problem compiling [UPDATE Triangle SET this.sides=?2, this.perimeter=?3 WHERE this.distinctKey=?1]. + * [20, 30] The state field cannot be resolved. + * [37, 51] The state field cannot be resolved. + */ + throw e; + } + + assertEquals(198, t1_1.perimeter); + + } + /** * Utility method to drop all entities from table. * From 5a535f140caac973a8e9318af1a0516c96fdbaaa Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Thu, 25 Jul 2024 14:38:49 -0500 Subject: [PATCH 033/166] Recreate https://github.com/OpenLiberty/open-liberty/issues/28898 --- .../jpa/data/tests/models/Reciept.java | 36 +++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 39 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Reciept.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Reciept.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Reciept.java new file mode 100644 index 00000000000..609fab63474 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Reciept.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; + +/** + * Recreate from io.openliberty.data.internal_fat + * Record -> Class + */ +@Entity +public class Reciept { + + @Id + public long purchaseId; + + public String customer; + + public float total; + + public static Reciept of(long purchaseId, String customer, float total) { + Reciept inst = new Reciept(); + inst.purchaseId = purchaseId; + inst.customer = customer; + inst.total = total; + return inst; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index 93f8b2334a4..b1a36f7bfae 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -55,6 +55,7 @@ import io.openliberty.jpa.data.tests.models.PurchaseOrder; import io.openliberty.jpa.data.tests.models.Rebate; import io.openliberty.jpa.data.tests.models.Rebate.Status; +import io.openliberty.jpa.data.tests.models.Reciept; import io.openliberty.jpa.data.tests.models.Segment; import io.openliberty.jpa.data.tests.models.Triangle; import jakarta.annotation.Resource; @@ -1123,7 +1124,45 @@ public void testOLGH28905() throws Exception { } assertEquals(198, t1_1.perimeter); + } + + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28898") + public void testOLGH28898() throws Exception { + Reciept r1 = Reciept.of(00012, "Billy", 12.5f); + Reciept r2 = Reciept.of(00013, "Bobby", 9.75f); + + int count; + + tx.begin(); + em.persist(r1); + em.persist(r2); + tx.commit(); + + tx.begin(); + try { + count = em.createQuery("DELETE FROM Reciept WHERE this.total < :max") + .setParameter("max", 10.00f) + .executeUpdate(); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * org.eclipse.persistence.exceptions.QueryException + * Exception Description: Object comparisons can only use the equal() or notEqual() operators. Other comparisons must be done through query keys or direct attribute + * level comparisons. + * Expression: [ + * Relation operator [ < ] + * Base io.openliberty.jpa.data.tests.models.Reciept + * Parameter max] + * Query: DeleteAllQuery(referenceClass=Reciept jpql="DELETE FROM Reciept WHERE this.total < :max") + */ + throw e; + } + assertEquals(1, count); } /** From e1df58c00ea897455bec9a76f49605e3368798bd Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Thu, 25 Jul 2024 15:02:43 -0500 Subject: [PATCH 034/166] recreate https://github.com/OpenLiberty/open-liberty/issues/28895 --- .../jpa/data/tests/models/Product.java | 44 +++++++++++++++++++ .../tests/web/JakartaDataRecreateServlet.java | 38 ++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Product.java diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Product.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Product.java new file mode 100644 index 00000000000..e9795488ba0 --- /dev/null +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/models/Product.java @@ -0,0 +1,44 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jpa.data.tests.models; + +import java.util.UUID; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.Version; + +/** + * Recreate from io.openliberty.data.internal_fat + */ +@Entity +public class Product { + public String description; + + public String name; + + @Id + @GeneratedValue + public UUID pk; + + public float price; + + @Version + public long version; + + public static Product of(String description, String name, float price) { + Product inst = new Product(); + inst.name = name; + inst.description = description; + inst.price = price; + return inst; + } +} diff --git a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java index b1a36f7bfae..77fb7ae6b85 100644 --- a/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java +++ b/dev/com.ibm.ws.jpa.tests.jpa_32_fat/test-applications/jakartadata/src/io/openliberty/jpa/data/tests/web/JakartaDataRecreateServlet.java @@ -52,6 +52,7 @@ import io.openliberty.jpa.data.tests.models.Package; import io.openliberty.jpa.data.tests.models.Person; import io.openliberty.jpa.data.tests.models.Prime; +import io.openliberty.jpa.data.tests.models.Product; import io.openliberty.jpa.data.tests.models.PurchaseOrder; import io.openliberty.jpa.data.tests.models.Rebate; import io.openliberty.jpa.data.tests.models.Rebate.Status; @@ -1165,6 +1166,43 @@ public void testOLGH28898() throws Exception { assertEquals(1, count); } + @Test + @Ignore("Reference issue: https://github.com/OpenLiberty/open-liberty/issues/28895") + public void testOLGH28895() throws Exception { + Product p1 = Product.of("testOLGH28895-1", "Ball", 12.50f); + Product p2 = Product.of("testOLGH28895-2", "Skate", 15.50f); + + tx.begin(); + em.persist(p1); + em.persist(p2); + tx.commit(); + + int count; + + tx.begin(); + try { + count = em.createQuery("DELETE FROM Product WHERE this.name LIKE ?1") + .setParameter(1, "B%") + .executeUpdate(); + tx.commit(); + } catch (Exception e) { + tx.rollback(); + + /* + * Recreate + * org.eclipse.persistence.exceptions.DatabaseException + * Internal Exception: java.sql.SQLSyntaxErrorException: Syntax error: Encountered "LIKE" at line 1, column 28. + * Error Code: 20000 + * Call: DELETE FROM PRODUCT WHERE LIKE ? + * bind => [B%] + * Query: DeleteAllQuery(referenceClass=Product sql="DELETE FROM PRODUCT WHERE LIKE ?") + */ + throw e; + } + + assertEquals(1, count); + } + /** * Utility method to drop all entities from table. * From cc9a2082202865cf1384ebf33ba2ba66f9d1568d Mon Sep 17 00:00:00 2001 From: Jon Hawkes Date: Thu, 25 Jul 2024 18:13:27 +0100 Subject: [PATCH 035/166] Prevent resources bleeding into other tests --- .../fat/src/tests/MultiServerTest.java | 2 +- .../web/endtoend/client/endtoend/EndToEndClientServlet.java | 5 ++--- .../endtoend/src/web/endtoend/server/HelloImplTwoway.java | 5 ++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/dev/com.ibm.ws.wsat_fat.multi/fat/src/tests/MultiServerTest.java b/dev/com.ibm.ws.wsat_fat.multi/fat/src/tests/MultiServerTest.java index 37d3a89a8ec..5bab740709c 100644 --- a/dev/com.ibm.ws.wsat_fat.multi/fat/src/tests/MultiServerTest.java +++ b/dev/com.ibm.ws.wsat_fat.multi/fat/src/tests/MultiServerTest.java @@ -116,7 +116,7 @@ public void before() throws Exception { */ @Test @ExpectedFFDC(value = { "javax.transaction.xa.XAException", "javax.transaction.RollbackException" }) - public void composite() throws Exception { + public void compositeTest() throws Exception { String method = "composite"; Log.info(getClass(), method, "Running testThreeServerTwoCallParticipant1VotingRollback"); testThreeServerTwoCallParticipant1VotingRollback(); diff --git a/dev/com.ibm.ws.wsat_fat.multi/test-applications/endtoend/src/web/endtoend/client/endtoend/EndToEndClientServlet.java b/dev/com.ibm.ws.wsat_fat.multi/test-applications/endtoend/src/web/endtoend/client/endtoend/EndToEndClientServlet.java index 550e8a4f127..cdc9e33c12c 100644 --- a/dev/com.ibm.ws.wsat_fat.multi/test-applications/endtoend/src/web/endtoend/client/endtoend/EndToEndClientServlet.java +++ b/dev/com.ibm.ws.wsat_fat.multi/test-applications/endtoend/src/web/endtoend/client/endtoend/EndToEndClientServlet.java @@ -98,7 +98,7 @@ protected String get(HttpServletRequest request) throws ServletException, IOExce boolean result = enlistXAResource("commit", XAResourceImpl.DIRECTION_COMMIT); if (result == true) { System.out.println("Reply from server: " - + proxy.sayHello("commitclear", XAResourceImpl.DIRECTION_COMMIT)); + + proxy.sayHello("commit", XAResourceImpl.DIRECTION_COMMIT)); userTransaction.commit(); System.out.println("client user transaction commit"); finalOutput = "Finish Twoway message"; @@ -340,11 +340,10 @@ protected String get(HttpServletRequest request) throws ServletException, IOExce private boolean enlistXAResource(String vote, int expectedDirection){ boolean result = false; try { - XAResourceImpl.clear(); final ExtendedTransactionManager TM = TransactionManagerFactory .getTransactionManager(); final Serializable xaResInfo = XAResourceInfoFactory - .getXAResourceInfo(0); + .getXAResourceInfo(); XAResourceImpl xaRes; if (vote.equals("rollback")) { xaRes = XAResourceFactoryImpl.instance().getXAResourceImpl( diff --git a/dev/com.ibm.ws.wsat_fat.multi/test-applications/endtoend/src/web/endtoend/server/HelloImplTwoway.java b/dev/com.ibm.ws.wsat_fat.multi/test-applications/endtoend/src/web/endtoend/server/HelloImplTwoway.java index 306da50690d..cfc10d65dbf 100644 --- a/dev/com.ibm.ws.wsat_fat.multi/test-applications/endtoend/src/web/endtoend/server/HelloImplTwoway.java +++ b/dev/com.ibm.ws.wsat_fat.multi/test-applications/endtoend/src/web/endtoend/server/HelloImplTwoway.java @@ -45,7 +45,7 @@ public String sayHello(String vote, int expectedDirection){ final ExtendedTransactionManager TM = TransactionManagerFactory .getTransactionManager(); final Serializable xaResInfo = XAResourceInfoFactory - .getXAResourceInfo(0); + .getXAResourceInfo(); XAResourceImpl xaRes; if (vote.startsWith("rollback")) { xaRes = XAResourceFactoryImpl.instance().getXAResourceImpl( @@ -75,11 +75,10 @@ public String callAnother(String URL, String vote1, String vote2, int expectedDi System.out.println("callAnother("+URL+", "+vote1+", "+vote2+", "+expectedDirection+")"); boolean result = false; try { - XAResourceImpl.clear(); final ExtendedTransactionManager TM = TransactionManagerFactory .getTransactionManager(); final Serializable xaResInfo = XAResourceInfoFactory - .getXAResourceInfo(0); + .getXAResourceInfo(); XAResourceImpl xaRes; if (vote1.equals("rollback")) { xaRes = XAResourceFactoryImpl.instance().getXAResourceImpl( From 3b02d053e8386bcad2c233ec6639d7a34323b9fa Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Thu, 25 Jul 2024 15:06:53 -0500 Subject: [PATCH 036/166] Fixes --- .../src/test/jakarta/data/web/DataTestServlet.java | 1 + .../src/test/jakarta/data/jpa/web/City.java | 2 +- .../src/test/jakarta/data/jpa/web/DataJPATestServlet.java | 8 ++++++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web/DataTestServlet.java b/dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web/DataTestServlet.java index cc3f9329c8e..fe288e80594 100644 --- a/dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web/DataTestServlet.java +++ b/dev/io.openliberty.data.internal_fat/test-applications/DataTestApp/src/test/jakarta/data/web/DataTestServlet.java @@ -12,6 +12,7 @@ *******************************************************************************/ package test.jakarta.data.web; +import static componenttest.annotation.SkipIfSysProp.DB_DB2; import static componenttest.annotation.SkipIfSysProp.DB_Oracle; import static componenttest.annotation.SkipIfSysProp.DB_Postgres; import static componenttest.annotation.SkipIfSysProp.DB_SQLServer; diff --git a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/City.java b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/City.java index 96f36a5b07d..a7ff7f07db3 100644 --- a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/City.java +++ b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/City.java @@ -20,7 +20,7 @@ import jakarta.persistence.Version; /** - * Recreate from io.openliberty.data.internal_fat_jpa + * */ @Entity @IdClass(CityId.class) diff --git a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java index 77e28f47a93..fea186a6eba 100644 --- a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java +++ b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java @@ -2142,8 +2142,12 @@ public void testLiteralDouble() { assertEquals(1L, accounts.countByOwnerAndBalanceBetween("Laura TestLiteralDouble", 331.159, 331.161)); - Account account = accounts.findByAccountId(id); - assertEquals(331.16, account.balance, 0.001); + // TODO Enable the following once fixed, + //Account account = accounts.findByAccountId(id); + //assertEquals(331.16, account.balance, 0.001); + // Failure is: + // Caused by: java.lang.NullPointerException: Cannot read field "index" because "key" is null + // at org.eclipse.persistence.internal.sessions.ArrayRecord.get(ArrayRecord.java:139) ... assertEquals(2L, accounts.deleteByOwnerEndsWith("TestLiteralDouble")); } From edc06a86acf67ce3797c0f4aac57e8da4afffaba Mon Sep 17 00:00:00 2001 From: Nathan Rauh Date: Fri, 26 Jul 2024 11:37:13 -0500 Subject: [PATCH 037/166] Issue #28078 adjust workaround which is still needed to allow more of test to run --- .../src/test/jakarta/data/jpa/web/DataJPATestServlet.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java index 77e28f47a93..cc010e8fb4b 100644 --- a/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java +++ b/dev/io.openliberty.data.internal_fat_jpa/test-applications/DataJPATestApp/src/test/jakarta/data/jpa/web/DataJPATestServlet.java @@ -251,6 +251,9 @@ public void init(ServletConfig config) throws ServletException { demographics.write(new DemographicInfo(2004, 4, 30, 114520000, 2974811477645.08, 4158978012936.35)); demographics.write(new DemographicInfo(2003, 4, 30, 113320000, 2757535748111.21, 3702844997678.07)); demographics.write(new DemographicInfo(2002, 4, 30, 112700000, 2582340471146.16, 3402336886067.70)); + + // TODO remove this workaround for intermittent issue triggered by test ordering once 28078 is fixed + testLiteralDouble(); } /** @@ -2128,10 +2131,10 @@ Comparator. comparing(o -> o.houseNumber) * Use a repository method with a Query that hard codes a literal for a double value in E notation, * as is done in an example within the spec. */ - @Test + // enable once 28078 is fixed @Test public void testLiteralDouble() { // Clear out data before test - accounts.deleteByOwnerEndsWith("testLiteralDouble"); + accounts.deleteByOwnerEndsWith("TestLiteralDouble"); accounts.create(new Account(1006520, 28002, "Think Bank", true, 21.04, "Lester TestLiteralDouble")); accounts.create(new Account(2003291, 28002, "Think Bank", true, 331.01, "Laura TestLiteralDouble")); From 99dcb86bc0eadefa4da5a3b7dce530d446f6d00b Mon Sep 17 00:00:00 2001 From: Jared Anderson Date: Fri, 26 Jul 2024 12:37:58 -0500 Subject: [PATCH 038/166] Add xxxContainer versionless features - Update test case to handle noship and beta features and generate the features with the right kind / edition - Add processing of Container features for Java / Jakarta EE - Add Container versionless feature files --- .../ibm/ws/feature/tests/VersionlessTest.java | 75 ++++++++++--------- .../utils/VersionlessFeatureCreator.java | 14 ++-- .../utils/VersionlessFeatureDefinition.java | 52 +++++++------ ...rnal.versionless.dataContainer-1.0.feature | 8 ++ ...ernal.versionless.jpaContainer-2.1.feature | 8 ++ ...ernal.versionless.jpaContainer-2.2.feature | 8 ++ ...ernal.versionless.jpaContainer-3.0.feature | 8 ++ ...ernal.versionless.jpaContainer-3.1.feature | 8 ++ ...ernal.versionless.jpaContainer-3.2.feature | 8 ++ ...ernal.versionless.jsfContainer-2.2.feature | 8 ++ ...ernal.versionless.jsfContainer-2.3.feature | 8 ++ ...ernal.versionless.jsfContainer-3.0.feature | 8 ++ ...ernal.versionless.jsfContainer-4.0.feature | 8 ++ ...ernal.versionless.jsfContainer-4.1.feature | 8 ++ ...nal.versionless.jsonbContainer-1.0.feature | 8 ++ ...nal.versionless.jsonbContainer-2.0.feature | 8 ++ ...nal.versionless.jsonbContainer-3.0.feature | 8 ++ ...nal.versionless.jsonpContainer-1.1.feature | 8 ++ ...nal.versionless.jsonpContainer-2.0.feature | 8 ++ ...nal.versionless.jsonpContainer-2.1.feature | 8 ++ .../io.openliberty.dataContainer-1.0.feature | 1 + ...nliberty.versionless.dataContainer.feature | 9 +++ ...berty.versionless.dataContainer.properties | 16 ++++ .../io.openliberty.facesContainer-3.0.feature | 1 + .../io.openliberty.facesContainer-4.0.feature | 1 + .../io.openliberty.facesContainer-4.1.feature | 1 + ...liberty.versionless.facesContainer.feature | 9 +++ ...erty.versionless.facesContainer.properties | 16 ++++ ...bsphere.appserver.jpaContainer-2.1.feature | 2 + ...bsphere.appserver.jpaContainer-2.2.feature | 1 + ...enliberty.versionless.jpaContainer.feature | 9 +++ ...iberty.versionless.jpaContainer.properties | 16 ++++ ...bsphere.appserver.jsfContainer-2.2.feature | 1 + ...bsphere.appserver.jsfContainer-2.3.feature | 1 + ...enliberty.versionless.jsfContainer.feature | 9 +++ ...iberty.versionless.jsfContainer.properties | 16 ++++ ...phere.appserver.jsonbContainer-1.0.feature | 1 + .../io.openliberty.jsonbContainer-2.0.feature | 1 + .../io.openliberty.jsonbContainer-3.0.feature | 1 + ...liberty.versionless.jsonbContainer.feature | 9 +++ ...erty.versionless.jsonbContainer.properties | 16 ++++ ...phere.appserver.jsonpContainer-1.1.feature | 1 + .../io.openliberty.jsonpContainer-2.0.feature | 1 + .../io.openliberty.jsonpContainer-2.1.feature | 1 + ...liberty.versionless.jsonpContainer.feature | 9 +++ ...erty.versionless.jsonpContainer.properties | 16 ++++ ...enliberty.persistenceContainer-3.0.feature | 1 + ...enliberty.persistenceContainer-3.1.feature | 1 + ...enliberty.persistenceContainer-3.2.feature | 1 + ...y.versionless.persistenceContainer.feature | 9 +++ ...ersionless.persistenceContainer.properties | 16 ++++ 51 files changed, 408 insertions(+), 62 deletions(-) create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.dataContainer-1.0.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-2.1.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-2.2.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.0.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.1.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.2.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-2.2.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-2.3.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-3.0.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-4.0.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-4.1.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-1.0.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-2.0.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-3.0.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-1.1.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-2.0.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-2.1.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer/io.openliberty.versionless.dataContainer.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer/resources/l10n/io.openliberty.versionless.dataContainer.properties create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer/io.openliberty.versionless.facesContainer.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer/resources/l10n/io.openliberty.versionless.facesContainer.properties create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer/io.openliberty.versionless.jpaContainer.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer/resources/l10n/io.openliberty.versionless.jpaContainer.properties create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer/io.openliberty.versionless.jsfContainer.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer/resources/l10n/io.openliberty.versionless.jsfContainer.properties create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer/io.openliberty.versionless.jsonbContainer.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer/resources/l10n/io.openliberty.versionless.jsonbContainer.properties create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer/io.openliberty.versionless.jsonpContainer.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer/resources/l10n/io.openliberty.versionless.jsonpContainer.properties create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer/io.openliberty.versionless.persistenceContainer.feature create mode 100644 dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer/resources/l10n/io.openliberty.versionless.persistenceContainer.properties diff --git a/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/tests/VersionlessTest.java b/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/tests/VersionlessTest.java index 910cd4c56ae..3720d54beaa 100644 --- a/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/tests/VersionlessTest.java +++ b/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/tests/VersionlessTest.java @@ -99,9 +99,17 @@ private static void processFeatureInfo(FeatureInfo featureInfo, Set System.out.println(" [ " + depName + " ** NOT FOUND ** ]"); // Only include dependent features that do not have tolerates. If a feature depends on particular version it will have been // included in the convenience feature due to how tolerates works to not be transitive. - } else if (!attr.containsKey("ibm.tolerates:") || depName.startsWith("com.ibm.websphere.appserver.jdbc-") || !depInfo.getKind().equals("ga")) { + } else if (!attr.containsKey("ibm.tolerates:") || depName.startsWith("com.ibm.websphere.appserver.jdbc-")) { if (depInfo.isPublic()) { publicDepFeatures.add(depInfo); + // Check for a Container feature and add it to the list of features + String possibleContainerFeature = depInfo.getBaseName() + "Container-" + depInfo.getVersion(); + FeatureInfo containerFeatureInfo = getFeature(possibleContainerFeature); + if (containerFeatureInfo != null) { + if (processedDepFeatures.add(containerFeatureInfo.getName())) { + publicDepFeatures.add(containerFeatureInfo); + } + } } processFeatureInfo(depInfo, publicDepFeatures, processedDepFeatures); } @@ -428,42 +436,39 @@ public void listSelectorDetails() { //each feature dependency of the platform Set publicDepFeatures = getAllPublicDependentFeatures(featureInfo); for (FeatureInfo depInfo : publicDepFeatures) { - //Only process features in "ga" - if (depInfo.getKind().equals("ga")) { - System.out.println(" [ " + depInfo.getBaseName() + " - " + depInfo.getVersion() + " ]"); + System.out.println(" [ " + depInfo.getBaseName() + " - " + depInfo.getVersion() + " ]"); - if (depInfo.isAlsoKnownAsSet()) { - System.out.println(" [ AKA: " + depInfo.getAlsoKnownAs() + " ]"); - } + if (depInfo.isAlsoKnownAsSet()) { + System.out.println(" [ AKA: " + depInfo.getAlsoKnownAs() + " ]"); + } - // - String featureTitle = depInfo.getShortName().split("-")[0]; //Just the name not the version + // + String featureTitle = depInfo.getShortName().split("-")[0]; //Just the name not the version - //add features to our map and add data on its platform-version link - if (versionlessFeatures.containsKey(featureTitle)) { - versionlessFeatures.get(featureTitle) - .addFeaturePlatform(new String[] { depInfo.getShortName(), baseName.replace("javaee", "jakartaee") + "-" + version, - depInfo.getName() }); - } else { - versionlessFeatures.put(featureTitle, - new VersionlessFeatureDefinition(featureTitle, featureTitle, - new String[] { depInfo.getShortName(), - baseName.replace("javaee", "jakartaee") + "-" + version, - depInfo.getName() }, - depInfo.getEdition(), - depInfo.getKind())); - } + //add features to our map and add data on its platform-version link + if (versionlessFeatures.containsKey(featureTitle)) { + versionlessFeatures.get(featureTitle) + .addFeaturePlatformAndKind(new String[] { depInfo.getShortName(), baseName.replace("javaee", "jakartaee") + "-" + version, + depInfo.getName(), depInfo.getKind() }); + } else { + versionlessFeatures.put(featureTitle, + new VersionlessFeatureDefinition(featureTitle, featureTitle, + new String[] { depInfo.getShortName(), + baseName.replace("javaee", "jakartaee") + "-" + version, + depInfo.getName(), + depInfo.getKind() }, + depInfo.getEdition())); + } - //Keep track of features with updated names via the alsoknownas metadata - if (depInfo.isAlsoKnownAsSet()) { - String aka = depInfo.getAlsoKnownAs().split("-")[0]; - if (!aka.equals(featureTitle)) { - if (versionlessFeatures.get(featureTitle).getAlsoKnownAs() == null) { - versionlessFeatures.get(featureTitle).setAlsoKnownAs(aka); - } - if (versionlessFeatures.containsKey(aka)) { - versionlessFeatures.get(aka).setAKAFutureFeature(featureTitle); - } + //Keep track of features with updated names via the alsoknownas metadata + if (depInfo.isAlsoKnownAsSet()) { + String aka = depInfo.getAlsoKnownAs().split("-")[0]; + if (!aka.equals(featureTitle)) { + if (versionlessFeatures.get(featureTitle).getAlsoKnownAs() == null) { + versionlessFeatures.get(featureTitle).setAlsoKnownAs(aka); + } + if (versionlessFeatures.containsKey(aka)) { + versionlessFeatures.get(aka).setAKAFutureFeature(featureTitle); } } } @@ -559,9 +564,7 @@ public Map> getSelectorCohorts() { "opentracing", "jndi", "restConnector", // restConnector-2.0 was erroneously added to jakartaee-9.1 - "jpaContainer", // jpa depends on jpaContainer - "persistenceContainer" // persistence depends on persistenceContainer. - )); + "bells")); private static Map versions = new HashMap<>(); diff --git a/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/utils/VersionlessFeatureCreator.java b/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/utils/VersionlessFeatureCreator.java index abd1bc60be2..2d567bd3f53 100644 --- a/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/utils/VersionlessFeatureCreator.java +++ b/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/utils/VersionlessFeatureCreator.java @@ -34,9 +34,9 @@ public boolean createFeatureFiles(VersionlessFeatureDefinition feature, Versionl // this feature is the older version of an newer feature // ex. ejb // in this scenario we add the future feature versions - ArrayList temp = akaFeature.getFeaturesAndPlatform(); + ArrayList temp = akaFeature.getFeaturesAndPlatformAndKind(); for (String[] featAndPlat : temp) { - feature.addFeaturePlatform(featAndPlat); + feature.addFeaturePlatformAndKind(featAndPlat); } } else { if (feature.getAKAFutureFeature() != null) { @@ -54,7 +54,7 @@ public boolean createFeatureFiles(VersionlessFeatureDefinition feature, Versionl // features[1] == the name of the platform it depends on ex. jakartaPlatform-8.0 // features[2] == the full name of the feature ex. com.ibm.ws.servlet-4.0 if (feature.getAlsoKnownAs() == null) { - for (String[] features : feature.getFeaturesAndPlatform()) { + for (String[] features : feature.getFeaturesAndPlatformAndKind()) { //Code for utilizing the ee/mp versions to add within the private feature defs String[] dependencyVersions = feature.getAllDependencyVersions(features[0], features[1].split("-")[0]); @@ -70,7 +70,7 @@ public boolean createFeatureFiles(VersionlessFeatureDefinition feature, Versionl } if (createPrivateVersionedFeature(feature.getFeatureName(), akaFeature == null ? null : akaFeature.getFeatureName(), features[0].split("-")[1], x, y, - features[2], feature.getEdition(), feature.getKind())) { + features[2], feature.getEdition(), features[3])) { generatedNewFile = true; } } @@ -109,6 +109,10 @@ private boolean createPrivateVersionedFeature(String featureName, String akaFeat writer.newLine(); writer.append("-features= \\"); writer.newLine(); + if ("noship".equals(kind)) { + writer.append(" io.openliberty.noShip-1.0, \\"); + writer.newLine(); + } if (x != null && y != null) { writer.append(" " + x + "-" + y + ", \\"); writer.newLine(); @@ -117,7 +121,7 @@ private boolean createPrivateVersionedFeature(String featureName, String akaFeat writer.newLine(); writer.append("kind=" + kind); writer.newLine(); - writer.append("edition=" + edition); + writer.append("edition=" + ("noship".equals(kind) ? "full" : edition)); writer.newLine(); writer.close(); diff --git a/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/utils/VersionlessFeatureDefinition.java b/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/utils/VersionlessFeatureDefinition.java index 9185be9b834..9b92d27e99e 100644 --- a/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/utils/VersionlessFeatureDefinition.java +++ b/dev/com.ibm.websphere.appserver.features/test/src/com/ibm/ws/feature/utils/VersionlessFeatureDefinition.java @@ -6,27 +6,24 @@ public class VersionlessFeatureDefinition { private final String featureName; private final String subsystemName; - private final ArrayList featuresAndPlatform; + private final ArrayList featuresAndPlatformAndKind; private String alsoKnownAs; private String akaFutureFeature; private final String edition; - private final String kind; - public VersionlessFeatureDefinition(String featureName, String subsystemName, ArrayList featuresAndPlatform, String editon, String kind) { + public VersionlessFeatureDefinition(String featureName, String subsystemName, ArrayList featuresAndPlatformAndKind, String editon) { this.featureName = featureName; this.subsystemName = subsystemName; - this.featuresAndPlatform = featuresAndPlatform; + this.featuresAndPlatformAndKind = featuresAndPlatformAndKind; this.edition = editon; - this.kind = kind; } - public VersionlessFeatureDefinition(String featureName, String subsystemName, String[] featureAndPlatform, String edition, String kind) { + public VersionlessFeatureDefinition(String featureName, String subsystemName, String[] featureAndPlatformAndKind, String edition) { this.featureName = featureName; this.subsystemName = subsystemName; - this.featuresAndPlatform = new ArrayList(); - featuresAndPlatform.add(featureAndPlatform); + this.featuresAndPlatformAndKind = new ArrayList(); + featuresAndPlatformAndKind.add(featureAndPlatformAndKind); this.edition = edition; - this.kind = kind; } /** @@ -70,21 +67,21 @@ public void setAKAFutureFeature(String futureFeature) { /** * Get the features mapped to their platform dependency * EX: - * jpa-2.2, jakartaPlatform-8.0 - * persistence-3.0, JakartaPlatform-9.1 + * jpa-2.2, jakartaPlatform-8.0, ga + * persistence-3.0, JakartaPlatform-9.1, ga * * @return */ - public ArrayList getFeaturesAndPlatform() { - return this.featuresAndPlatform; + public ArrayList getFeaturesAndPlatformAndKind() { + return this.featuresAndPlatformAndKind; } - public void addFeaturePlatform(String[] featurePlatform) { - featuresAndPlatform.add(featurePlatform); + public void addFeaturePlatformAndKind(String[] featurePlatformAndKind) { + featuresAndPlatformAndKind.add(featurePlatformAndKind); } - public void addFeaturePlatform(String feature, String platform) { - featuresAndPlatform.add(new String[] { feature, platform }); + public void addFeaturePlatformAndKind(String feature, String platform, String kind) { + featuresAndPlatformAndKind.add(new String[] { feature, platform, kind }); } /** @@ -95,7 +92,7 @@ public void addFeaturePlatform(String feature, String platform) { public String[] getPreferredAndTolerates() { ArrayList versions = new ArrayList(); - for (String[] featAndPlat : featuresAndPlatform) { + for (String[] featAndPlat : featuresAndPlatformAndKind) { if (!versions.contains(featAndPlat[0].split("-")[1])) { versions.add(featAndPlat[0].split("-")[1]); } @@ -127,7 +124,7 @@ public String[] getPreferredAndTolerates(ArrayList versions) { public ArrayList getAllVersions() { ArrayList versions = new ArrayList(); - for (String[] featAndPlat : featuresAndPlatform) { + for (String[] featAndPlat : featuresAndPlatformAndKind) { if (!versions.contains(featAndPlat[0].split("-")[1])) { versions.add(featAndPlat[0].split("-")[1]); } @@ -149,8 +146,8 @@ public String[] getAllDependencyVersions(String versionedFeature, String depende String result = ""; String currentLow = "" + Double.MAX_VALUE; - for (int i = 0; i < featuresAndPlatform.size(); i++) { - String[] fnp = featuresAndPlatform.get(i); + for (int i = 0; i < featuresAndPlatformAndKind.size(); i++) { + String[] fnp = featuresAndPlatformAndKind.get(i); if (fnp[0].equals(versionedFeature)) { if (fnp[1].contains(dependency + "-")) { //Should leave you with "(version number).feature" ex. "1.2" @@ -196,6 +193,19 @@ public static int compareVersions(String version1, String version2) { * @return the kind */ public String getKind() { + String kind = "noship"; + for (int i = 0; i < featuresAndPlatformAndKind.size(); i++) { + if ("ga".equals(kind)) { + break; + } + String[] fnp = featuresAndPlatformAndKind.get(i); + String versionKind = fnp[3]; + // If current kind is noship, then just set it to what versionKind is. It is going to either be noship, beta or ga + // If version kind is ga, then set kind to version kind. Otherwise leave it be beta or ga because it wouldn't change + if ("noship".equals(kind) || "ga".equals(versionKind)) { + kind = versionKind; + } + } return kind; } } \ No newline at end of file diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.dataContainer-1.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.dataContainer-1.0.feature new file mode 100644 index 00000000000..b413dcf6838 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.dataContainer-1.0.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.dataContainer-1.0 +visibility=private +singleton=true +-features= \ + io.openliberty.dataContainer-1.0 +kind=beta +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-2.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-2.1.feature new file mode 100644 index 00000000000..edcb88093a6 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-2.1.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jpaContainer-2.1 +visibility=private +singleton=true +-features= \ + com.ibm.websphere.appserver.jpaContainer-2.1 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-2.2.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-2.2.feature new file mode 100644 index 00000000000..c3db5c33fea --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-2.2.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jpaContainer-2.2 +visibility=private +singleton=true +-features= \ + com.ibm.websphere.appserver.jpaContainer-2.2 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.0.feature new file mode 100644 index 00000000000..1ba507124cd --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.0.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jpaContainer-3.0 +visibility=private +singleton=true +-features= \ + io.openliberty.persistenceContainer-3.0 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.1.feature new file mode 100644 index 00000000000..bdd0aa74261 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.1.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jpaContainer-3.1 +visibility=private +singleton=true +-features= \ + io.openliberty.persistenceContainer-3.1 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.2.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.2.feature new file mode 100644 index 00000000000..35a9246673a --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jpaContainer-3.2.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jpaContainer-3.2 +visibility=private +singleton=true +-features= \ + io.openliberty.persistenceContainer-3.2 +kind=beta +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-2.2.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-2.2.feature new file mode 100644 index 00000000000..9a2240f6bab --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-2.2.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsfContainer-2.2 +visibility=private +singleton=true +-features= \ + com.ibm.websphere.appserver.jsfContainer-2.2 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-2.3.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-2.3.feature new file mode 100644 index 00000000000..5e59ff5a02f --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-2.3.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsfContainer-2.3 +visibility=private +singleton=true +-features= \ + com.ibm.websphere.appserver.jsfContainer-2.3 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-3.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-3.0.feature new file mode 100644 index 00000000000..58fd9171fab --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-3.0.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsfContainer-3.0 +visibility=private +singleton=true +-features= \ + io.openliberty.facesContainer-3.0 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-4.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-4.0.feature new file mode 100644 index 00000000000..a27770ca4a6 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-4.0.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsfContainer-4.0 +visibility=private +singleton=true +-features= \ + io.openliberty.facesContainer-4.0 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-4.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-4.1.feature new file mode 100644 index 00000000000..f6b55efbb51 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsfContainer-4.1.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsfContainer-4.1 +visibility=private +singleton=true +-features= \ + io.openliberty.facesContainer-4.1 +kind=beta +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-1.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-1.0.feature new file mode 100644 index 00000000000..ae67a3a4fd3 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-1.0.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsonbContainer-1.0 +visibility=private +singleton=true +-features= \ + com.ibm.websphere.appserver.jsonbContainer-1.0 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-2.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-2.0.feature new file mode 100644 index 00000000000..294cf09cf59 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-2.0.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsonbContainer-2.0 +visibility=private +singleton=true +-features= \ + io.openliberty.jsonbContainer-2.0 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-3.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-3.0.feature new file mode 100644 index 00000000000..a9ca8d70730 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonbContainer-3.0.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsonbContainer-3.0 +visibility=private +singleton=true +-features= \ + io.openliberty.jsonbContainer-3.0 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-1.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-1.1.feature new file mode 100644 index 00000000000..bfed4b0e85e --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-1.1.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsonpContainer-1.1 +visibility=private +singleton=true +-features= \ + com.ibm.websphere.appserver.jsonpContainer-1.1 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-2.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-2.0.feature new file mode 100644 index 00000000000..999c960f1bd --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-2.0.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsonpContainer-2.0 +visibility=private +singleton=true +-features= \ + io.openliberty.jsonpContainer-2.0 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-2.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-2.1.feature new file mode 100644 index 00000000000..9b0e277c65a --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/private/io.openliberty.internal.versionless.jsonpContainer-2.1.feature @@ -0,0 +1,8 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.internal.versionless.jsonpContainer-2.1 +visibility=private +singleton=true +-features= \ + io.openliberty.jsonpContainer-2.1 +kind=ga +edition=core diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer-1.0/io.openliberty.dataContainer-1.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer-1.0/io.openliberty.dataContainer-1.0.feature index ee3838dc34e..d1cc49e7e56 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer-1.0/io.openliberty.dataContainer-1.0.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer-1.0/io.openliberty.dataContainer-1.0.feature @@ -23,3 +23,4 @@ kind=beta edition=core WLP-Activation-Type: parallel WLP-InstantOn-Enabled: true +WLP-Platform: jakartaee-11.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer/io.openliberty.versionless.dataContainer.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer/io.openliberty.versionless.dataContainer.feature new file mode 100644 index 00000000000..856fc14d9c5 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer/io.openliberty.versionless.dataContainer.feature @@ -0,0 +1,9 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.versionless.dataContainer +visibility=public +IBM-ShortName: dataContainer +Subsystem-Name: dataContainer +-features=io.openliberty.internal.versionless.dataContainer-1.0 +kind=beta +edition=core +WLP-InstantOn-Enabled: true diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer/resources/l10n/io.openliberty.versionless.dataContainer.properties b/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer/resources/l10n/io.openliberty.versionless.dataContainer.properties new file mode 100644 index 00000000000..2e7db776631 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/dataContainer/resources/l10n/io.openliberty.versionless.dataContainer.properties @@ -0,0 +1,16 @@ +############################################################################### +# Copyright (c) 2024 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +# +#ISMESSAGEFILE FALSE +#NLS_ENCODING=UNICODE +#NLS_MESSAGEFORMAT_NONE +# + +description=This feature enables support for versionless dataContainer diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-3.0/io.openliberty.facesContainer-3.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-3.0/io.openliberty.facesContainer-3.0.feature index c958fe47ed2..aed4af9a53d 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-3.0/io.openliberty.facesContainer-3.0.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-3.0/io.openliberty.facesContainer-3.0.feature @@ -25,3 +25,4 @@ IBM-API-Package: org.jboss.weld;type="internal",\ kind=ga edition=core WLP-Activation-Type: parallel +WLP-Platform: jakartaee-9.1 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-4.0/io.openliberty.facesContainer-4.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-4.0/io.openliberty.facesContainer-4.0.feature index 6ab0a775ba1..48fd392ec31 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-4.0/io.openliberty.facesContainer-4.0.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-4.0/io.openliberty.facesContainer-4.0.feature @@ -24,3 +24,4 @@ IBM-API-Package: org.jboss.weld;type="internal",\ kind=ga edition=core WLP-Activation-Type: parallel +WLP-Platform: jakartaee-10.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-4.1/io.openliberty.facesContainer-4.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-4.1/io.openliberty.facesContainer-4.1.feature index 6bf5be48ab4..bd4b65f6c2c 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-4.1/io.openliberty.facesContainer-4.1.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer-4.1/io.openliberty.facesContainer-4.1.feature @@ -24,3 +24,4 @@ IBM-API-Package: org.jboss.weld;type="internal",\ kind=beta edition=core WLP-Activation-Type: parallel +WLP-Platform: jakartaee-11.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer/io.openliberty.versionless.facesContainer.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer/io.openliberty.versionless.facesContainer.feature new file mode 100644 index 00000000000..706a8254f3e --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer/io.openliberty.versionless.facesContainer.feature @@ -0,0 +1,9 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.versionless.facesContainer +visibility=public +IBM-ShortName: facesContainer +Subsystem-Name: facesContainer +-features=io.openliberty.internal.versionless.jsfContainer-2.2; ibm.tolerates:="2.3,3.0,4.0,4.1" +kind=ga +edition=core +WLP-InstantOn-Enabled: true diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer/resources/l10n/io.openliberty.versionless.facesContainer.properties b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer/resources/l10n/io.openliberty.versionless.facesContainer.properties new file mode 100644 index 00000000000..1c7b40a41b2 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/facesContainer/resources/l10n/io.openliberty.versionless.facesContainer.properties @@ -0,0 +1,16 @@ +############################################################################### +# Copyright (c) 2024 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +# +#ISMESSAGEFILE FALSE +#NLS_ENCODING=UNICODE +#NLS_MESSAGEFORMAT_NONE +# + +description=This feature enables support for versionless facesContainer diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer-2.1/com.ibm.websphere.appserver.jpaContainer-2.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer-2.1/com.ibm.websphere.appserver.jpaContainer-2.1.feature index 1240c007100..1f2fa38f850 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer-2.1/com.ibm.websphere.appserver.jpaContainer-2.1.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer-2.1/com.ibm.websphere.appserver.jpaContainer-2.1.feature @@ -30,3 +30,5 @@ IBM-App-ForceRestart: uninstall, \ -bundles=com.ibm.ws.jpa.container.v21, \ com.ibm.ws.jpa.container, \ com.ibm.ws.jpa.container.thirdparty +WLP-Platform: javaee-7.0 + \ No newline at end of file diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer-2.2/com.ibm.websphere.appserver.jpaContainer-2.2.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer-2.2/com.ibm.websphere.appserver.jpaContainer-2.2.feature index 69d35bd132f..dcba13b03a7 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer-2.2/com.ibm.websphere.appserver.jpaContainer-2.2.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer-2.2/com.ibm.websphere.appserver.jpaContainer-2.2.feature @@ -32,3 +32,4 @@ IBM-App-ForceRestart: uninstall, \ com.ibm.ws.jpa.container.thirdparty WLP-Activation-Type: parallel WLP-InstantOn-Enabled: true +WLP-Platform: javaee-8.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer/io.openliberty.versionless.jpaContainer.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer/io.openliberty.versionless.jpaContainer.feature new file mode 100644 index 00000000000..dcce318905d --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer/io.openliberty.versionless.jpaContainer.feature @@ -0,0 +1,9 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.versionless.jpaContainer +visibility=public +IBM-ShortName: jpaContainer +Subsystem-Name: jpaContainer +-features=io.openliberty.internal.versionless.jpaContainer-2.1; ibm.tolerates:="2.2,3.0,3.1,3.2" +kind=ga +edition=core +WLP-InstantOn-Enabled: true diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer/resources/l10n/io.openliberty.versionless.jpaContainer.properties b/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer/resources/l10n/io.openliberty.versionless.jpaContainer.properties new file mode 100644 index 00000000000..8a01b187925 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jpaContainer/resources/l10n/io.openliberty.versionless.jpaContainer.properties @@ -0,0 +1,16 @@ +############################################################################### +# Copyright (c) 2024 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +# +#ISMESSAGEFILE FALSE +#NLS_ENCODING=UNICODE +#NLS_MESSAGEFORMAT_NONE +# + +description=This feature enables support for versionless jpaContainer diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer-2.2/com.ibm.websphere.appserver.jsfContainer-2.2.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer-2.2/com.ibm.websphere.appserver.jsfContainer-2.2.feature index a03f26cbb92..62992d15cab 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer-2.2/com.ibm.websphere.appserver.jsfContainer-2.2.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer-2.2/com.ibm.websphere.appserver.jsfContainer-2.2.feature @@ -18,3 +18,4 @@ IBM-App-ForceRestart: install, uninstall -jars=com.ibm.ws.jsfContainer; location:=lib/ kind=ga edition=core +WLP-Platform: javaee-7.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer-2.3/com.ibm.websphere.appserver.jsfContainer-2.3.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer-2.3/com.ibm.websphere.appserver.jsfContainer-2.3.feature index f155c676f79..2fe801fd9e1 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer-2.3/com.ibm.websphere.appserver.jsfContainer-2.3.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer-2.3/com.ibm.websphere.appserver.jsfContainer-2.3.feature @@ -24,3 +24,4 @@ IBM-API-Package: org.jboss.weld;type="internal",\ -jars=com.ibm.ws.jsfContainer; location:=lib/ kind=ga edition=core +WLP-Platform: javaee-8.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer/io.openliberty.versionless.jsfContainer.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer/io.openliberty.versionless.jsfContainer.feature new file mode 100644 index 00000000000..d19cc3d2f94 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer/io.openliberty.versionless.jsfContainer.feature @@ -0,0 +1,9 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.versionless.jsfContainer +visibility=public +IBM-ShortName: jsfContainer +Subsystem-Name: jsfContainer +-features=io.openliberty.internal.versionless.jsfContainer-2.2; ibm.tolerates:="2.3,3.0,4.0,4.1" +kind=ga +edition=core +WLP-InstantOn-Enabled: true diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer/resources/l10n/io.openliberty.versionless.jsfContainer.properties b/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer/resources/l10n/io.openliberty.versionless.jsfContainer.properties new file mode 100644 index 00000000000..e4d2a2307b1 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsfContainer/resources/l10n/io.openliberty.versionless.jsfContainer.properties @@ -0,0 +1,16 @@ +############################################################################### +# Copyright (c) 2024 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +# +#ISMESSAGEFILE FALSE +#NLS_ENCODING=UNICODE +#NLS_MESSAGEFORMAT_NONE +# + +description=This feature enables support for versionless jsfContainer diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-1.0/com.ibm.websphere.appserver.jsonbContainer-1.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-1.0/com.ibm.websphere.appserver.jsonbContainer-1.0.feature index 10b9c1af46c..7dba23fa1cb 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-1.0/com.ibm.websphere.appserver.jsonbContainer-1.0.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-1.0/com.ibm.websphere.appserver.jsonbContainer-1.0.feature @@ -14,3 +14,4 @@ Subsystem-Name: JavaScript Object Notation Binding 1.0 via Bells -bundles=com.ibm.ws.jsonb.service kind=ga edition=core +WLP-Platform: javaee-8.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-2.0/io.openliberty.jsonbContainer-2.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-2.0/io.openliberty.jsonbContainer-2.0.feature index 574f095cbcb..5f063ba67cb 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-2.0/io.openliberty.jsonbContainer-2.0.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-2.0/io.openliberty.jsonbContainer-2.0.feature @@ -16,3 +16,4 @@ Subsystem-Name: Jakarta JSON Binding 2.0 Container kind=ga edition=core WLP-Activation-Type: parallel +WLP-Platform: jakartaee-9.1 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-3.0/io.openliberty.jsonbContainer-3.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-3.0/io.openliberty.jsonbContainer-3.0.feature index a056692a07c..5ff41a00791 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-3.0/io.openliberty.jsonbContainer-3.0.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer-3.0/io.openliberty.jsonbContainer-3.0.feature @@ -16,3 +16,4 @@ Subsystem-Name: Jakarta JSON Binding 3.0 Container kind=ga edition=core WLP-Activation-Type: parallel +WLP-Platform: jakartaee-10.0,jakartaee-11.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer/io.openliberty.versionless.jsonbContainer.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer/io.openliberty.versionless.jsonbContainer.feature new file mode 100644 index 00000000000..27598704a1e --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer/io.openliberty.versionless.jsonbContainer.feature @@ -0,0 +1,9 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.versionless.jsonbContainer +visibility=public +IBM-ShortName: jsonbContainer +Subsystem-Name: jsonbContainer +-features=io.openliberty.internal.versionless.jsonbContainer-1.0; ibm.tolerates:="2.0,3.0" +kind=ga +edition=core +WLP-InstantOn-Enabled: true diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer/resources/l10n/io.openliberty.versionless.jsonbContainer.properties b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer/resources/l10n/io.openliberty.versionless.jsonbContainer.properties new file mode 100644 index 00000000000..fd7549d2045 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonbContainer/resources/l10n/io.openliberty.versionless.jsonbContainer.properties @@ -0,0 +1,16 @@ +############################################################################### +# Copyright (c) 2024 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +# +#ISMESSAGEFILE FALSE +#NLS_ENCODING=UNICODE +#NLS_MESSAGEFORMAT_NONE +# + +description=This feature enables support for versionless jsonbContainer diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-1.1/com.ibm.websphere.appserver.jsonpContainer-1.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-1.1/com.ibm.websphere.appserver.jsonpContainer-1.1.feature index 3aa866e22b9..60face96192 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-1.1/com.ibm.websphere.appserver.jsonpContainer-1.1.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-1.1/com.ibm.websphere.appserver.jsonpContainer-1.1.feature @@ -10,3 +10,4 @@ Subsystem-Name: JavaScript Object Notation Processing 1.1 via Bells -features=com.ibm.websphere.appserver.jsonpImpl-1.1.0 kind=ga edition=core +WLP-Platform: javaee-8.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-2.0/io.openliberty.jsonpContainer-2.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-2.0/io.openliberty.jsonpContainer-2.0.feature index 3389b211f68..895c6f5a4b3 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-2.0/io.openliberty.jsonpContainer-2.0.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-2.0/io.openliberty.jsonpContainer-2.0.feature @@ -12,3 +12,4 @@ Subsystem-Name: Jakarta JSON Processing 2.0 Container kind=ga edition=core WLP-Activation-Type: parallel +WLP-Platform: jakartaee-9.1 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-2.1/io.openliberty.jsonpContainer-2.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-2.1/io.openliberty.jsonpContainer-2.1.feature index cbc7aff200f..97d7f35c59c 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-2.1/io.openliberty.jsonpContainer-2.1.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer-2.1/io.openliberty.jsonpContainer-2.1.feature @@ -12,3 +12,4 @@ Subsystem-Name: Jakarta JSON Processing 2.1 Container kind=ga edition=core WLP-Activation-Type: parallel +WLP-Platform: jakartaee-10.0,jakartaee-11.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer/io.openliberty.versionless.jsonpContainer.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer/io.openliberty.versionless.jsonpContainer.feature new file mode 100644 index 00000000000..0256076f461 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer/io.openliberty.versionless.jsonpContainer.feature @@ -0,0 +1,9 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.versionless.jsonpContainer +visibility=public +IBM-ShortName: jsonpContainer +Subsystem-Name: jsonpContainer +-features=io.openliberty.internal.versionless.jsonpContainer-1.1; ibm.tolerates:="2.0,2.1" +kind=ga +edition=core +WLP-InstantOn-Enabled: true diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer/resources/l10n/io.openliberty.versionless.jsonpContainer.properties b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer/resources/l10n/io.openliberty.versionless.jsonpContainer.properties new file mode 100644 index 00000000000..702e8eb9a11 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/jsonpContainer/resources/l10n/io.openliberty.versionless.jsonpContainer.properties @@ -0,0 +1,16 @@ +############################################################################### +# Copyright (c) 2024 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +# +#ISMESSAGEFILE FALSE +#NLS_ENCODING=UNICODE +#NLS_MESSAGEFORMAT_NONE +# + +description=This feature enables support for versionless jsonpContainer diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.0/io.openliberty.persistenceContainer-3.0.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.0/io.openliberty.persistenceContainer-3.0.feature index 05676fae6bf..62f0eeea0ad 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.0/io.openliberty.persistenceContainer-3.0.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.0/io.openliberty.persistenceContainer-3.0.feature @@ -25,3 +25,4 @@ IBM-App-ForceRestart: uninstall, \ com.ibm.ws.jpa.container.thirdparty.jakarta WLP-Activation-Type: parallel WLP-InstantOn-Enabled: true +WLP-Platform: jakartaee-9.1 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.1/io.openliberty.persistenceContainer-3.1.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.1/io.openliberty.persistenceContainer-3.1.feature index e085b2b66f8..cab4fcf95ae 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.1/io.openliberty.persistenceContainer-3.1.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.1/io.openliberty.persistenceContainer-3.1.feature @@ -25,3 +25,4 @@ IBM-App-ForceRestart: uninstall, \ com.ibm.ws.jpa.container.thirdparty.jakarta WLP-Activation-Type: parallel WLP-InstantOn-Enabled: true +WLP-Platform: jakartaee-10.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.2/io.openliberty.persistenceContainer-3.2.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.2/io.openliberty.persistenceContainer-3.2.feature index 9f6ef3eb48e..590a599d5bc 100644 --- a/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.2/io.openliberty.persistenceContainer-3.2.feature +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer-3.2/io.openliberty.persistenceContainer-3.2.feature @@ -25,3 +25,4 @@ IBM-App-ForceRestart: uninstall, \ com.ibm.ws.jpa.container.thirdparty.jakarta WLP-Activation-Type: parallel WLP-InstantOn-Enabled: true +WLP-Platform: jakartaee-11.0 diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer/io.openliberty.versionless.persistenceContainer.feature b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer/io.openliberty.versionless.persistenceContainer.feature new file mode 100644 index 00000000000..5fd06b9789d --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer/io.openliberty.versionless.persistenceContainer.feature @@ -0,0 +1,9 @@ +-include= ~${workspace}/cnf/resources/bnd/feature.props +symbolicName=io.openliberty.versionless.persistenceContainer +visibility=public +IBM-ShortName: persistenceContainer +Subsystem-Name: persistenceContainer +-features=io.openliberty.internal.versionless.jpaContainer-2.1; ibm.tolerates:="2.2,3.0,3.1,3.2" +kind=ga +edition=core +WLP-InstantOn-Enabled: true diff --git a/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer/resources/l10n/io.openliberty.versionless.persistenceContainer.properties b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer/resources/l10n/io.openliberty.versionless.persistenceContainer.properties new file mode 100644 index 00000000000..482263f4f05 --- /dev/null +++ b/dev/com.ibm.websphere.appserver.features/visibility/public/persistenceContainer/resources/l10n/io.openliberty.versionless.persistenceContainer.properties @@ -0,0 +1,16 @@ +############################################################################### +# Copyright (c) 2024 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +############################################################################### +# +#ISMESSAGEFILE FALSE +#NLS_ENCODING=UNICODE +#NLS_MESSAGEFORMAT_NONE +# + +description=This feature enables support for versionless persistenceContainer From 0c05e12f2a7d602d2efd30bcf017ed9e66feac1b Mon Sep 17 00:00:00 2001 From: David Chan Date: Fri, 26 Jul 2024 12:20:18 -0400 Subject: [PATCH 039/166] Do not add attributes if not present --- .../internal/http/MPTelemetryHTTPMetricsAdapterImpl.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/http/MPTelemetryHTTPMetricsAdapterImpl.java b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/http/MPTelemetryHTTPMetricsAdapterImpl.java index efb1827700f..8fc8dcee340 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/http/MPTelemetryHTTPMetricsAdapterImpl.java +++ b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/http/MPTelemetryHTTPMetricsAdapterImpl.java @@ -92,10 +92,9 @@ private Attributes retrieveAttributes(HttpStatAttributes httpStatAttributes) { attributesBuilder.put(HTTP_REQUEST_METHOD, httpStatAttributes.getRequestMethod()); attributesBuilder.put(URL_SCHEME, httpStatAttributes.getScheme()); - Long status = Long.valueOf(httpStatAttributes.getResponseStatus().orElse(-1)); - attributesBuilder.put(HTTP_RESPONSE_STATUS_CODE, status); + httpStatAttributes.getResponseStatus().ifPresent(status -> attributesBuilder.put(HTTP_RESPONSE_STATUS_CODE, Long.valueOf(status))); - attributesBuilder.put(HTTP_ROUTE, httpStatAttributes.getHttpRoute().orElse("")); + httpStatAttributes.getHttpRoute().ifPresent(route -> attributesBuilder.put(HTTP_ROUTE, route)); attributesBuilder.put(NETWORK_PROTOCOL_NAME, httpStatAttributes.getNetworkProtocolName()); attributesBuilder.put(NETWORK_PROTOCOL_VERSION, httpStatAttributes.getNetworkProtocolVersion()); @@ -103,9 +102,7 @@ private Attributes retrieveAttributes(HttpStatAttributes httpStatAttributes) { attributesBuilder.put(SERVER_ADDRESS, httpStatAttributes.getServerName()); attributesBuilder.put(SERVER_PORT, Long.valueOf(httpStatAttributes.getServerPort())); - if (httpStatAttributes.getErrorType().isPresent()) { - attributesBuilder.put(ERROR_TYPE, httpStatAttributes.getErrorType().get()); - } + httpStatAttributes.getErrorType().ifPresent(error -> attributesBuilder.put(ERROR_TYPE, error)); return attributesBuilder.build(); } From ff82282bd770109194d0c4747fa224c1ec75d7d1 Mon Sep 17 00:00:00 2001 From: Thomas Johnson Date: Wed, 24 Jul 2024 15:21:53 -0500 Subject: [PATCH 040/166] JAX-WS: Add enableSchemaValidation tests --- .../endpoint/AbstractJaxWsWebEndpoint.java | 7 +- .../EnableSchemaValidationWebServiceTest.java | 529 ++++++++++++++++++ .../jaxws/config/fat/FATSuite.java | 1 + .../global-false-server.xml | 2 - .../global-true-server.xml | 2 - .../incorrect-servicename-server.xml | 2 - .../servicename-false-global-true-server.xml | 4 - .../servicename-false-server.xml | 6 +- .../servicename-true-global-false-server.xml | 4 - .../servicename-true-server.xml | 3 - .../global-false-server.xml | 13 + .../global-true-server.xml | 13 + .../incorrect-portname-server.xml | 13 + .../portname-false-global-true-server.xml | 15 + .../portname-false-server.xml | 13 + .../portname-true-global-false-server.xml | 15 + .../portname-true-server.xml | 13 + .../server.xml | 11 + .../bootstrap.properties | 3 +- .../bootstrap.properties | 2 + .../jvm.options | 1 + .../server.xml | 13 + .../bootstrap.properties | 3 +- .../resources/WEB-INF/wsdl/SimpleEcho.wsdl | 56 ++ .../{SimpleEcho.java => SimpleEchoImpl.java} | 6 +- .../jaxws/fat/stubclient/client/Echo.java | 68 +++ .../fat/stubclient/client/EchoResponse.java | 70 +++ .../fat/stubclient/client/ObjectFactory.java | 87 +++ .../client/SimpleDispatchClientServlet.java | 165 ++++++ .../fat/stubclient/client/SimpleEcho.java | 5 +- .../stubclient/client/SimpleEchoService.java | 76 +-- 31 files changed, 1158 insertions(+), 63 deletions(-) create mode 100644 dev/io.openliberty.jaxws.config_fat/fat/src/io/openliberty/jaxws/config/fat/EnableSchemaValidationWebServiceTest.java create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/global-false-server.xml create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/global-true-server.xml create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/incorrect-portname-server.xml create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-false-global-true-server.xml create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-false-server.xml create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-true-global-false-server.xml create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-true-server.xml create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/server.xml create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/bootstrap.properties create mode 100644 dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/jvm.options create mode 100755 dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/server.xml create mode 100644 dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/resources/WEB-INF/wsdl/SimpleEcho.wsdl rename dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/{SimpleEcho.java => SimpleEchoImpl.java} (77%) create mode 100755 dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/Echo.java create mode 100755 dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/EchoResponse.java create mode 100755 dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/ObjectFactory.java create mode 100644 dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleDispatchClientServlet.java diff --git a/dev/com.ibm.ws.jaxws.2.3.common/src/com/ibm/ws/jaxws/endpoint/AbstractJaxWsWebEndpoint.java b/dev/com.ibm.ws.jaxws.2.3.common/src/com/ibm/ws/jaxws/endpoint/AbstractJaxWsWebEndpoint.java index 039764325e1..877b16de404 100755 --- a/dev/com.ibm.ws.jaxws.2.3.common/src/com/ibm/ws/jaxws/endpoint/AbstractJaxWsWebEndpoint.java +++ b/dev/com.ibm.ws.jaxws.2.3.common/src/com/ibm/ws/jaxws/endpoint/AbstractJaxWsWebEndpoint.java @@ -29,6 +29,7 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.xml.namespace.QName; import javax.xml.ws.handler.Handler; import org.apache.cxf.catalog.OASISCatalogManager; @@ -289,13 +290,15 @@ public Void run() throws IOException { */ private void configureWebServicesConfig() { - // Get the portName from the Liberty's EndpointInfo - String portName = endpointInfo.getPortComponentName(); boolean debug = tc.isDebugEnabled(); // Use CXF's EndpointInfo to set the configuration properties org.apache.cxf.service.model.EndpointInfo cxfEndpointInfo = destination.getEndpointInfo(); + // Get the portName from the Liberty's EndpointInfo + QName portNameQname = endpointInfo.getWsdlPort(); + String portName = portNameQname.getLocalPart(); + if (debug) { Tr.debug(tc, portName + " will be used to find webService Configuration"); } diff --git a/dev/io.openliberty.jaxws.config_fat/fat/src/io/openliberty/jaxws/config/fat/EnableSchemaValidationWebServiceTest.java b/dev/io.openliberty.jaxws.config_fat/fat/src/io/openliberty/jaxws/config/fat/EnableSchemaValidationWebServiceTest.java new file mode 100644 index 00000000000..39a308053f0 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/fat/src/io/openliberty/jaxws/config/fat/EnableSchemaValidationWebServiceTest.java @@ -0,0 +1,529 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jaxws.config.fat; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.io.BufferedReader; +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.ProtocolException; +import java.net.URL; +import java.util.logging.Logger; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.ibm.websphere.simplicity.ShrinkHelper; +import com.ibm.websphere.simplicity.log.Log; + +import componenttest.annotation.Server; +import componenttest.custom.junit.runner.FATRunner; +import componenttest.topology.impl.LibertyServer; +import componenttest.topology.utils.HttpUtils; + +/** + * This test suite tests the following variations of the server.xml configuration: + * + * 1.) enableSchemValidation="true" - "global" setting + * 2.) enableschemaValiation="false" - "global" setting + * 3.) enableSchemValidation="true" portName="SayHelloService" - portName setting + * 4.) enableSchemValidation="false" portName="SayHelloService" - portName setting + * 5.) Combination of 1 and 4 + * 6.) Combination of 2 and 3 + * 7.) enableSchemValidation="false" PortName="IncorrectPortName" - dispatchMsged client setting with the wrong PortName + * + * This Test uses a Mock endpoint to create "bad" responses that the client will fail to unmarshall unless enableSchemaValidation=false + * + * @see io.openliberty.jaxws.fat.mock.endpoint.MockJaxwsEndpointServlet + * + * Each test uses a specific server.xml configuration that's reconfigured at test start. It calls the @see SimpleDispatchClientServlet servlet + * along with a HTTP request parameter. That parameter is added to the SOAP Request, and when the mock JAX-WS endpoint receives the request, it checks for the string + * and correlates it to the "bad" response the endpoint then returns. After the client recieves the inbound response, the test checks the response from the + * SimpleDispatchClientServlet servlet + * for the specified response or exception in the server logs. + * + */ +@RunWith(FATRunner.class) +public class EnableSchemaValidationWebServiceTest { + + Logger LOG = Logger.getLogger("EnableSchemaValidationWebServiceTest.class"); + + private static final String APP_NAME = "simpleTestService"; + + // Max timeout set to 5 minutes in milliseconds + private final static int REQUEST_TIMEOUT = 300000; + + @Server("EnableSchemaValidationWebServiceTestServer") + public static LibertyServer server; + + @BeforeClass + public static void setUp() throws Exception { + + + ShrinkHelper.defaultDropinApp(server, APP_NAME, "io.openliberty.jaxws.fat.stubclient", + "io.openliberty.jaxws.fat.stubclient.client"); + + server.startServer("EnableSchemaValidationWebServiceTest.log"); + + assertNotNull("Application hello does not appear to have started.", server.waitForStringInLog("CWWKZ0001I:.*" + APP_NAME)); + } + + @AfterClass + public static void tearDown() throws Exception { + if (server != null && server.isStarted()) { + server.stopServer(); + } + } + + /** + * Have to reconfig to the initial server.xml after each test, since each configuration + * might be repeated across multiple tests + * + * @throws Exception + */ + @After + public void reconfigOnAfter() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/server.xml", "CWWKG0017I"); + } + + + // Global True Tests + + /** + * Test the global setting of enableSchemaValidation=true in server.xml, with an additional element following the element + * which will return a successful response because default validation is off by default. + * + * Server config - global-true-server.xml + * Expected response - cvc-complex-type.2.4.d + * + * @throws Exception + */ + @Test + public void testAddedElementGlobalSchemaValidationTrue() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/global-true-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected Unmarshalling Error: cvc-complex-type.2.4.d, but was " + response, response.contains("cvc-complex-type.2.4.d")); + } + + + /** + * Test the global setting of enableSchemaValidation=true in server.xml, with the wrong element name where element is expected + * which will cause an cvc-complex-type.2.4.a exception with the default schema validation enabled. + * + * Server config - global-true-server.xml + * Expected response - Unmarshalling Error: cvc-complex-type.2.4.a + * + * @throws Exception + */ + @Test + public void testWrongElementNameGlobalSchemaValidationTrue() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/global-true-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementName + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementName"); + // Log response to output.txt + LOG.info("testWrongElementNameGlobalSchemaValidationTrue - Response = " + response); + + + assertTrue("Expected Unmarshalling Error: cvc-complex-type.2.4.a, but was " + response, response.contains("cvc-complex-type.2.4.a")); + } + + /** + * Test the global setting of enableSchemaValidation=true in server.xml, with the wrong namespace in the element + * which will cause an cvc-complex-type.2.4.a exception with the default schema validation enabled. + * + * Server config - global-true-server.xml + * Expected response - cvc-complex-type.2.4.a + * + * @throws Exception + */ + @Test + public void testWrongNamespaceGlobalSchemaValidationTrue() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/global-true-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongNamespace + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongNamespace"); + // Log response to output.txt + LOG.info("testWrongNamespaceGlobalSchemaValidationTrue - Response = " + response); + + + assertTrue("Expected Unmarshalling Error: cvc-complex-type.2.4.a, but was " + response, response.contains("cvc-complex-type.2.4.a")); + } + + /** + * Test the global setting of enableSchemaValidation=true in server.xml, with the wrong content in the element + * The response will contain an addtional child element which will cause an Unexected Element exception + * with the default schema validation enabled. + * + * Server config - global-true-server.xml + * Expected response - cvc-type.3.1.2 + * + * @throws Exception + */ + @Test + public void testWrongElementContentGlobalSchemaValidationTrue() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/global-true-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementContent + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementContent"); + // Log response to output.txt + LOG.info("testWrongElementContentGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected Unmarshalling Error: cvc-type.3.1.2, but was " + response, response.contains("cvc-type.3.1.2")); + } + + // GLOBAL FALSE TESTS + + /** + * Test the global setting of enableSchemaValidation=false in server.xml, with an additional element following the element + * which will cause s No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - global-false-server.xml + * Expected response - AddedElement + * + * @throws + */ + @Test + public void testAddedElementGlobalSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/global-false-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + /** + * Test the global setting of enableSchemaValidation=false in server.xml, with an additional element following the element + * which will cause s No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - global-false-server.xml + * Expected response - Unmarshalling Error: cvc-complex-type.2.4.a + * + * @throws + */ + @Test + public void testWrongElementGlobalSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/global-false-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementName + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementName"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + /** + * Test the global setting of enableSchemaValidation=false in server.xml, with an additional element following the element + * which will cause s No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - global-false-server.xml + * Expected response - WrongNamespace + * + * @throws + */ + @Test + public void testWrongNamespaceGlobalSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/global-false-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongNamespace + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongNamespace"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + /** + * Test the global setting of enableSchemaValidation=false in server.xml, with an additional element following the element + * which will cause s No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - global-false-server.xml + * Expected response - WrongElementContent + * + * @throws + */ + @Test + public void testWrongElementContentGlobalSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/global-false-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementContent + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementContent"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + + + // PORTNAME True Tests + + /** + * Test the portName setting of enableSchemaValidation=true in server.xml, with an additional element following the element + * which will return a successful response because default validation is off by default. + * + * Server config - portname-true-server.xml + * Expected response - cvc-complex-type.2.4.d + * + * @throws Exception + */ + @Test + public void testAddedElementPortNameSchemaValidationTrue() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-true-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected Unmarshalling Error: cvc-complex-type.2.4.d, but was " + response, response.contains("cvc-complex-type.2.4.d")); + } + + + /** + * Test the portName setting of enableSchemaValidation=true in server.xml, with the wrong element name where element is expected + * which will cause an cvc-complex-type.2.4.a exception with the default schema validation enabled. + * + * Server config - portname-true-server.xml + * Expected response - Unmarshalling Error: cvc-complex-type.2.4.a + * + * @throws Exception + */ + @Test + public void testWrongElementNamePortNameSchemaValidationTrue() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-true-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementName + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementName"); + // Log response to output.txt + LOG.info("testWrongElementNameGlobalSchemaValidationTrue - Response = " + response); + + + assertTrue("Expected Unmarshalling Error: cvc-complex-type.2.4.a, but was " + response, response.contains("cvc-complex-type.2.4.a")); + } + + /** + * Test the portName setting of enableSchemaValidation=true in server.xml, with the wrong namespace in the element + * which will cause an cvc-complex-type.2.4.a exception with the default schema validation enabled. + * + * Server config - portname-true-server.xml + * Expected response - cvc-complex-type.2.4.a + * + * @throws Exception + */ + @Test + public void testWrongNamespacePortNameSchemaValidationTrue() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-true-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongNamespace + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongNamespace"); + // Log response to output.txt + LOG.info("testWrongNamespaceGlobalSchemaValidationTrue - Response = " + response); + + + assertTrue("Expected Unmarshalling Error: cvc-complex-type.2.4.a, but was " + response, response.contains("cvc-complex-type.2.4.a")); + } + + /** + * Test the portName setting of enableSchemaValidation=true in server.xml, with the wrong content in the element + * The response will contain an addtional child element which will cause an Unexected Element exception + * with the default schema validation enabled. + * + * Server config - portname-true-server.xml + * Expected response - cvc-type.3.1.2 + * + * @throws Exception + */ + @Test + public void testWrongElementContentPortNameSchemaValidationTrue() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-true-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementContent + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementContent"); + // Log response to output.txt + LOG.info("testWrongElementContentGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected Unmarshalling Error: cvc-type.3.1.2, but was " + response, response.contains("cvc-type.3.1.2")); + } + + // PORTNAME FALSE TESTS + + /** + * Test the portName setting of enableSchemaValidation=false in server.xml, with an additional element following the element + * which will cause s No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - portname-false-server.xml + * Expected response - AddedElement + * + * @throws + */ + @Test + public void testAddedElementPortNameSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-false-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + /** + * Test the portName setting of enableSchemaValidation=false in server.xml, with an additional element following the element + * which will cause s No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - portname-false-server.xml + * Expected response - Unmarshalling Error: cvc-complex-type.2.4.a + * + * @throws + */ + @Test + public void testWrongElementPortNameSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-false-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementName + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementName"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + /** + * Test the portName setting of enableSchemaValidation=false in server.xml, with an additional element following the element + * which will cause s No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - portname-false-server.xml + * Expected response - WrongNamespace + * + * @throws + */ + @Test + public void testWrongNamespacePortNameSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-false-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongNamespace + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongNamespace"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + /** + * Test the portName setting of enableSchemaValidation=false in server.xml, with an additional element following the element + * which will cause s No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - portname-false-server.xml + * Expected response - WrongElementContent + * + * @throws + */ + @Test + public void testWrongElementContentPortNameSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-false-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementContent + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=WrongElementContent"); + // Log response to output.txt + LOG.info("testAddedElementGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + + // portName and Global Tests + + /** + * Test the portName takes precedent over the global setting of enableSchemaValidation=true in server.xml, with an additional element following the element + * which will causes No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - portname-true-global-false-server.xml + * Expected response - Unmarshalling Error: cvc-complex-type.2.4.d + * + * @throws Exception + */ + @Test + public void testAddedElementPortNameTrueGlobalSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-true-global-false-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement"); + // Log response to output.txt + LOG.info("testAddedElementPortNameTrueGlobalSchemaValidationFalse - Response = " + response); + + assertTrue("Expected Unmarshalling Error: cvc-complex-type.2.4.d, but was " + response, response.contains("cvc-complex-type.2.4.d")); + } + + /** + * Test the portName takes precedent over the global setting of enableSchemaValidation=false in server.xml, with an additional element following the element + * element + * which is ignored when schema validation is disabled. + * + * Server config - PortName-false-global-truee-server.xml + * Expected response - Hello, AddedElement + * + * @throws Exception + */ + @Test + public void testAddedElementPortNameFalseGlobalSchemaValidationTrue() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/portname-false-global-true-server.xml", "CWWKG0017I"); + + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement"); + // Log response to output.txt + LOG.info("testAddedElementPortNameFalseGlobalSchemaValidationTrue - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + + // incorrect portName tests + + /** + * Test the when the incorrect portName is given with enableSchemaValidation is set to true server.xml, with an additional element following the element + * will causes No child element is expected at this point exception with the default schema validation enabled. + * + * Server config - incorrect-portname-server.xml + * Expected response - echo + * + * @throws Exception + */ + @Test + public void testAddedElementIncorrectPortNameSchemaValidationFalse() throws Exception { + server.reconfigureServer("EnableSchemaValidationWebServiceTestServer/incorrect-portname-server.xml", "CWWKG0017I"); + + // Visit the URL: http://hostName:hostPort/simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement + String response = runTest(server, "simpleTestService/SimpleDispatchClientServlet?dispatchMsg=AddedElement"); + // Log response to output.txt + LOG.info("testAddedElementIncorrectPortNameSchemaValidatinFalse - Response = " + response); + + assertTrue("Expected echo response from server, but was " + response, response.contains("echo")); + } + + + private String runTest(LibertyServer server, String pathAndParams) throws ProtocolException, IOException { + URL url = new URL("http://" + server.getHostname() + ":" + server.getHttpDefaultPort() + "/" + pathAndParams); + Log.info(this.getClass(), "assertResponseNotNull", "Calling Application with URL=" + url.toString()); + + HttpURLConnection con = HttpUtils.getHttpConnection(url, HttpURLConnection.HTTP_OK, REQUEST_TIMEOUT); + BufferedReader br = HttpUtils.getConnectionStream(con); + String line = br.readLine(); + return line; + } +} diff --git a/dev/io.openliberty.jaxws.config_fat/fat/src/io/openliberty/jaxws/config/fat/FATSuite.java b/dev/io.openliberty.jaxws.config_fat/fat/src/io/openliberty/jaxws/config/fat/FATSuite.java index 85efdf1ea52..85aa1519211 100644 --- a/dev/io.openliberty.jaxws.config_fat/fat/src/io/openliberty/jaxws/config/fat/FATSuite.java +++ b/dev/io.openliberty.jaxws.config_fat/fat/src/io/openliberty/jaxws/config/fat/FATSuite.java @@ -21,6 +21,7 @@ @RunWith(Suite.class) @SuiteClasses({ EnableSchemaValidationTest.class, + EnableSchemaValidationWebServiceTest.class, IgnoreUnexpectedElementConfigTest.class, WebServiceBndServiceRefPropertiesConfigTest.class }) diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/global-false-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/global-false-server.xml index cb2baed57a9..f4728f60c72 100755 --- a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/global-false-server.xml +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/global-false-server.xml @@ -7,9 +7,7 @@ - - diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/global-true-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/global-true-server.xml index 81adaa3f32f..6c018623f5a 100755 --- a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/global-true-server.xml +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/global-true-server.xml @@ -6,8 +6,6 @@ - - diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/incorrect-servicename-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/incorrect-servicename-server.xml index 79f38c85364..dbd33094448 100755 --- a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/incorrect-servicename-server.xml +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/incorrect-servicename-server.xml @@ -6,8 +6,6 @@ - - diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-false-global-true-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-false-global-true-server.xml index db8fd28ccc0..a0accbc19dd 100755 --- a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-false-global-true-server.xml +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-false-global-true-server.xml @@ -3,13 +3,9 @@ jsp-2.2 jaxws-2.2 - - - - diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-false-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-false-server.xml index 2e199ba44c6..e36ca398278 100755 --- a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-false-server.xml +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-false-server.xml @@ -3,13 +3,9 @@ jsp-2.2 jaxws-2.2 - - - + - - diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-true-global-false-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-true-global-false-server.xml index ea3bdca1153..7b019725825 100755 --- a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-true-global-false-server.xml +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-true-global-false-server.xml @@ -3,13 +3,9 @@ jsp-2.2 jaxws-2.2 - - - - diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-true-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-true-server.xml index 6b48b599f55..b7e19b789f1 100755 --- a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-true-server.xml +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationTestServer/servicename-true-server.xml @@ -4,11 +4,8 @@ jaxws-2.2 - - - diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/global-false-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/global-false-server.xml new file mode 100755 index 00000000000..af655aa30e7 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/global-false-server.xml @@ -0,0 +1,13 @@ + + + jsp-2.2 + jaxws-2.2 + + + + + + + + + diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/global-true-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/global-true-server.xml new file mode 100755 index 00000000000..668c5d0d5da --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/global-true-server.xml @@ -0,0 +1,13 @@ + + + jsp-2.2 + jaxws-2.2 + + + + + + + + + diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/incorrect-portname-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/incorrect-portname-server.xml new file mode 100755 index 00000000000..e756b504527 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/incorrect-portname-server.xml @@ -0,0 +1,13 @@ + + + jsp-2.2 + jaxws-2.2 + + + + + + + + + diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-false-global-true-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-false-global-true-server.xml new file mode 100755 index 00000000000..3e9d26c5842 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-false-global-true-server.xml @@ -0,0 +1,15 @@ + + + jsp-2.2 + jaxws-2.2 + + + + + + + + + + + diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-false-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-false-server.xml new file mode 100755 index 00000000000..fb67ca96f14 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-false-server.xml @@ -0,0 +1,13 @@ + + + jsp-2.2 + jaxws-2.2 + + + + + + + + + diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-true-global-false-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-true-global-false-server.xml new file mode 100755 index 00000000000..2619ea45d0b --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-true-global-false-server.xml @@ -0,0 +1,15 @@ + + + jsp-2.2 + jaxws-2.2 + + + + + + + + + + + diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-true-server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-true-server.xml new file mode 100755 index 00000000000..19c6845f1d9 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/portname-true-server.xml @@ -0,0 +1,13 @@ + + + jsp-2.2 + jaxws-2.2 + + + + + + + + + diff --git a/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/server.xml b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/server.xml new file mode 100755 index 00000000000..420a4826930 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/files/EnableSchemaValidationWebServiceTestServer/server.xml @@ -0,0 +1,11 @@ + + + jsp-2.2 + jaxws-2.2 + + + + + + + diff --git a/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationTestServer/bootstrap.properties b/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationTestServer/bootstrap.properties index 31f32c6fd52..75609091400 100755 --- a/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationTestServer/bootstrap.properties +++ b/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationTestServer/bootstrap.properties @@ -1 +1,2 @@ -bootstrap.include=../testports.properties \ No newline at end of file +bootstrap.include=../testports.properties +com.ibm.ws.logging.trace.specification=*=info=enabled:com.ibm.ws.jaxws.*=all=enabled:org.apache.cxf.*=all=enabled \ No newline at end of file diff --git a/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/bootstrap.properties b/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/bootstrap.properties new file mode 100755 index 00000000000..75609091400 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/bootstrap.properties @@ -0,0 +1,2 @@ +bootstrap.include=../testports.properties +com.ibm.ws.logging.trace.specification=*=info=enabled:com.ibm.ws.jaxws.*=all=enabled:org.apache.cxf.*=all=enabled \ No newline at end of file diff --git a/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/jvm.options b/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/jvm.options new file mode 100644 index 00000000000..9ec5b94cf71 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/jvm.options @@ -0,0 +1 @@ +-Dcom.ibm.ws.beta.edition=true \ No newline at end of file diff --git a/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/server.xml b/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/server.xml new file mode 100755 index 00000000000..01a01f5c696 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/publish/servers/EnableSchemaValidationWebServiceTestServer/server.xml @@ -0,0 +1,13 @@ + + + jsp-2.2 + jaxws-2.2 + + + + + + + + + diff --git a/dev/io.openliberty.jaxws.config_fat/publish/servers/WebServiceRefBndConfigTestServer/bootstrap.properties b/dev/io.openliberty.jaxws.config_fat/publish/servers/WebServiceRefBndConfigTestServer/bootstrap.properties index a60cf080d56..75609091400 100755 --- a/dev/io.openliberty.jaxws.config_fat/publish/servers/WebServiceRefBndConfigTestServer/bootstrap.properties +++ b/dev/io.openliberty.jaxws.config_fat/publish/servers/WebServiceRefBndConfigTestServer/bootstrap.properties @@ -1,3 +1,2 @@ bootstrap.include=../testports.properties -# Uncomment for bnd proccessing trace -#com.ibm.ws.logging.trace.specification=*=info=enabled:com.ibm.ws.jaxws.*=all=enabled:com.ibm.ws.javaee.ddmodel.wsbnd.*=all=enabled \ No newline at end of file +com.ibm.ws.logging.trace.specification=*=info=enabled:com.ibm.ws.jaxws.*=all=enabled:org.apache.cxf.*=all=enabled \ No newline at end of file diff --git a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/resources/WEB-INF/wsdl/SimpleEcho.wsdl b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/resources/WEB-INF/wsdl/SimpleEcho.wsdl new file mode 100644 index 00000000000..7ac8fc497b2 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/resources/WEB-INF/wsdl/SimpleEcho.wsdl @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/SimpleEcho.java b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/SimpleEchoImpl.java similarity index 77% rename from dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/SimpleEcho.java rename to dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/SimpleEchoImpl.java index 2966f805610..ea1b37f5bcc 100755 --- a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/SimpleEcho.java +++ b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/SimpleEchoImpl.java @@ -11,8 +11,10 @@ import javax.jws.WebService; -@WebService -public class SimpleEcho { +import io.openliberty.jaxws.fat.stubclient.client.SimpleEcho; + +@WebService(serviceName="SimpleEchoService", portName="SimpleEchoPort") +public class SimpleEchoImpl implements SimpleEcho { public String echo(String value) { return value; diff --git a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/Echo.java b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/Echo.java new file mode 100755 index 00000000000..d9fc3fcce7e --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/Echo.java @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jaxws.fat.stubclient.client; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for echo complex type

. + * + *

The following schema fragment specifies the expected content contained within this class.

+ * + *
+ * <complexType name="echo">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="arg0" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "echo", propOrder = { + "arg0" +}) +public class Echo { + + protected String arg0; + + /** + * Gets the value of the arg0 property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getArg0() { + return arg0; + } + + /** + * Sets the value of the arg0 property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setArg0(String value) { + this.arg0 = value; + } + +} diff --git a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/EchoResponse.java b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/EchoResponse.java new file mode 100755 index 00000000000..1533ca54a1f --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/EchoResponse.java @@ -0,0 +1,70 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jaxws.fat.stubclient.client; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlType; + + +/** + *

Java class for echoResponse complex type

. + * + *

The following schema fragment specifies the expected content contained within this class.

+ * + *
+ * <complexType name="echoResponse">
+ *   <complexContent>
+ *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ *       <sequence>
+ *         <element name="return" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ *       </sequence>
+ *     </restriction>
+ *   </complexContent>
+ * </complexType>
+ * 
+ * + * + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlType(name = "echoResponse", propOrder = { + "_return" +}) +public class EchoResponse { + + @XmlElement(name = "return") + protected String _return; + + /** + * Gets the value of the return property. + * + * @return + * possible object is + * {@link String } + * + */ + public String getReturn() { + return _return; + } + + /** + * Sets the value of the return property. + * + * @param value + * allowed object is + * {@link String } + * + */ + public void setReturn(String value) { + this._return = value; + } + +} diff --git a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/ObjectFactory.java b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/ObjectFactory.java new file mode 100755 index 00000000000..2e704a2ca3e --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/ObjectFactory.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jaxws.fat.stubclient.client; + +import javax.xml.bind.JAXBElement; +import javax.xml.bind.annotation.XmlElementDecl; +import javax.xml.bind.annotation.XmlRegistry; +import javax.xml.namespace.QName; + + +/** + * This object contains factory methods for each + * Java content interface and Java element interface + * generated in the io.openliberty.jaxws.fat.stubclient package. + *

An ObjectFactory allows you to programatically + * construct new instances of the Java representation + * for XML content. The Java representation of XML + * content can consist of schema derived interfaces + * and classes representing the binding of schema + * type definitions, element declarations and model + * groups. Factory methods for each of these are + * provided in this class. + * + */ +@XmlRegistry +public class ObjectFactory { + + private static final QName _Echo_QNAME = new QName("http://stubclient.fat.jaxws.openliberty.io/", "echo"); + private static final QName _EchoResponse_QNAME = new QName("http://stubclient.fat.jaxws.openliberty.io/", "echoResponse"); + + /** + * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: io.openliberty.jaxws.fat.stubclient + * + */ + public ObjectFactory() { + } + + /** + * Create an instance of {@link Echo } + * + */ + public Echo createEcho() { + return new Echo(); + } + + /** + * Create an instance of {@link EchoResponse } + * + */ + public EchoResponse createEchoResponse() { + return new EchoResponse(); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link Echo }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link Echo }{@code >} + */ + @XmlElementDecl(namespace = "http://stubclient.fat.jaxws.openliberty.io/", name = "echo") + public JAXBElement createEcho(Echo value) { + return new JAXBElement(_Echo_QNAME, Echo.class, null, value); + } + + /** + * Create an instance of {@link JAXBElement }{@code <}{@link EchoResponse }{@code >} + * + * @param value + * Java instance representing xml element's value. + * @return + * the new instance of {@link JAXBElement }{@code <}{@link EchoResponse }{@code >} + */ + @XmlElementDecl(namespace = "http://stubclient.fat.jaxws.openliberty.io/", name = "echoResponse") + public JAXBElement createEchoResponse(EchoResponse value) { + return new JAXBElement(_EchoResponse_QNAME, EchoResponse.class, null, value); + } + +} diff --git a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleDispatchClientServlet.java b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleDispatchClientServlet.java new file mode 100644 index 00000000000..e9880df7700 --- /dev/null +++ b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleDispatchClientServlet.java @@ -0,0 +1,165 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.jaxws.fat.stubclient.client; + +import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; +import java.net.URL; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.namespace.QName; +import javax.xml.soap.MessageFactory; +import javax.xml.soap.SOAPConstants; +import javax.xml.soap.SOAPException; +import javax.xml.soap.SOAPMessage; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import javax.xml.ws.Dispatch; +import javax.xml.ws.Service; +import javax.xml.ws.WebServiceRef; +import javax.xml.ws.soap.MTOMFeature; +import javax.xml.ws.soap.SOAPBinding; + +import org.w3c.dom.DOMException; + +/* + * SimpleDispatchClientServlet is the test servlet that invokes the Web Service by + * using a "dispatchMsg" http request parameter passed by the test method. + * The servlet checks the value and uses it to determine which instance of the + * message that the dispatch client will use to invoke the Web Service + */ +@WebServlet("/SimpleDispatchClientServlet") +public class SimpleDispatchClientServlet extends HttpServlet { + + + + private static final long serialVersionUID = 4838332634689830661L; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + doPost(req, resp); + } + + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + // name of the message the dispatch client will send to use for this test + String dispatchMsg = req.getParameter("dispatchMsg"); + System.out.println("Test case will be using this dispatchMsg = " + dispatchMsg); + + QName qs = new QName("http://stubclient.fat.jaxws.openliberty.io/", "SimpleEchoService"); + QName qp = new QName("http://stubclient.fat.jaxws.openliberty.io/", "SimpleEchoPort"); + + // Use the SimpleEchoService to generate the dispatch object + SimpleEchoService echoService = new SimpleEchoService(); + // now create a dispatch object from it + //Dispatch dispatch = service.createDispatch(qp, StreamSource.class, Service.Mode.MESSAGE); + + // let's see if this has any chance of working.... + Dispatch dispatch = echoService.createDispatch( + qp, + StreamSource.class, + Service.Mode.MESSAGE); + + if (dispatch == null) { + throw new RuntimeException("dispatch is null!"); + } + + String msgString = ""; + // Pick which message to use based on the value provided by the request parameter + if(dispatchMsg.contains("AddedElement")) { + msgString = "\n" + + " \n" + + " \n" + + " echo\n" + + " AddedElement\n" // Additional element in the response + + " \n" + + " \n" + + ""; + } else if(dispatchMsg.contains("WrongElementName")) { + msgString = "\n" + + " \n" + + " \n" + + " Hello, WrongElementName\n" // change arg0 to wrongElement + + " \n" + + " \n" + + ""; + } else if (dispatchMsg.contains("WrongNamespace")) { + msgString = "\n" + + " \n" + + " \n" + + " Hello, WrongElementName\n" // change arg0 to namespace + + " \n" + + " \n" + + ""; + + } else if (dispatchMsg.contains("WrongElementContent")) { + msgString = "\n" + + " \n" + + " \n" + + " \n" + + " AddedElement\n" // Additional child element of arg0 + + " \n" + + " \n" + + " \n" + + ""; + } + + + if (msgString.equals("")) { + throw new RuntimeException("msgString is null!"); + } + + String responseText = ""; + try { + StreamSource response = dispatch.invoke(new StreamSource(new StringReader(msgString))); + + + responseText = parseSourceResponse(response); + } catch (Exception e) { + responseText = e.getMessage(); + } + + if (responseText != null) { + resp.getWriter().write(responseText); + } else { + resp.getWriter().write("Fail"); + } + + } + + /* + * Method for parsing response from StreamSource to a String + */ + private String parseSourceResponse(Source response) { + try { + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + TransformerFactory tFactory = TransformerFactory.newInstance(); + Transformer transformer = tFactory.newTransformer(); + transformer.transform(response, result); + String strResult = writer.toString(); + return strResult; + + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + +} \ No newline at end of file diff --git a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleEcho.java b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleEcho.java index c1fe8cc80f6..b1936247c18 100755 --- a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleEcho.java +++ b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleEcho.java @@ -13,6 +13,7 @@ import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; +import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.ws.RequestWrapper; import javax.xml.ws.ResponseWrapper; @@ -27,8 +28,8 @@ public interface SimpleEcho { */ @WebMethod @WebResult(targetNamespace = "") - @RequestWrapper(localName = "echo", targetNamespace = "http://stubclient.fat.jaxws.openliberty.io/", className = "com.ibm.ws.test.stubclient.client.Echo") - @ResponseWrapper(localName = "echoResponse", targetNamespace = "http://stubclient.fat.jaxws.openliberty.io/", className = "com.ibm.ws.test.stubclient.client.EchoResponse") + @RequestWrapper(localName = "echo", targetNamespace = "http://stubclient.fat.jaxws.openliberty.io/", className = "com.ibm.jaxws.properties.echo.client.Echo") + @ResponseWrapper(localName = "echoResponse", targetNamespace = "http://stubclient.fat.jaxws.openliberty.io/", className = "com.ibm.jaxws.properties.echo.client.EchoResponse") public String echo( @WebParam(name = "arg0", targetNamespace = "") String arg0); diff --git a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleEchoService.java b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleEchoService.java index 80e887b5852..a814e0365e4 100755 --- a/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleEchoService.java +++ b/dev/io.openliberty.jaxws.config_fat/test-applications/simpleTestService/src/io/openliberty/jaxws/fat/stubclient/client/SimpleEchoService.java @@ -11,56 +11,63 @@ import java.net.MalformedURLException; import java.net.URL; -import java.util.logging.Logger; - import javax.xml.namespace.QName; import javax.xml.ws.Service; import javax.xml.ws.WebEndpoint; import javax.xml.ws.WebServiceClient; +import javax.xml.ws.WebServiceException; import javax.xml.ws.WebServiceFeature; -@WebServiceClient(name = "SimpleEchoService", targetNamespace = "http://stubclient.fat.jaxws.openliberty.io/") -public class SimpleEchoService extends Service { - - private final static URL SIMPLEECHOSERVICE_WSDL_LOCATION; - private final static Logger logger = Logger.getLogger(io.openliberty.jaxws.fat.stubclient.client.SimpleEchoService.class.getName()); +@WebServiceClient(name = "SimpleEchoService", targetNamespace = "http://stubclient.fat.jaxws.openliberty.io/", wsdlLocation = "WEB-INF/wsdl/SimpleEcho.wsdl") +public class SimpleEchoService + extends Service +{ + private static final URL SIMPLEECHOSERVICE_WSDL_LOCATION; + private static final WebServiceException SIMPLEECHOSERVICE_EXCEPTION; + private static final QName SIMPLEECHOSERVICE_QNAME = new QName("http://stubclient.fat.jaxws.openliberty.io/", "SimpleEchoService"); static { - String host = System.getProperty("hostName"); - if (host == null) { - logger.info("Failed to obtain host from system property, hostName, falling back to localhost"); - host = "localhost"; - } URL url = null; + WebServiceException e = null; try { - URL baseUrl; - baseUrl = io.openliberty.jaxws.fat.stubclient.client.SimpleEchoService.class.getResource("."); - - url = new URL(baseUrl, new StringBuilder().append("http://" + host - + ":").append(Integer.getInteger("bvt.prop.HTTP_default")).append("/simpleTestService/SimpleEchoService?wsdl").toString()); - } catch (MalformedURLException e) { - logger.warning("Failed to create URL for the wsdl Location: " - + new StringBuilder().append("http://" + host - + ":").append(Integer.getInteger("bvt.prop.HTTP_default")).append("/simpleService/SimpleEchoService?wsdl").toString() - + ", retrying as a local file"); - logger.warning(e.getMessage()); + URL baseUrl = SimpleEchoService.class.getClassLoader().getResource("."); + url = new URL(baseUrl, "../wsdl/SimpleEcho.wsdl"); + } catch (MalformedURLException ex) { + e = new WebServiceException(ex); } SIMPLEECHOSERVICE_WSDL_LOCATION = url; + SIMPLEECHOSERVICE_EXCEPTION = e; + } + + public SimpleEchoService() { + super(__getWsdlLocation(), SIMPLEECHOSERVICE_QNAME); + } + + public SimpleEchoService(WebServiceFeature... features) { + super(__getWsdlLocation(), SIMPLEECHOSERVICE_QNAME, features); + } + + public SimpleEchoService(URL wsdlLocation) { + super(wsdlLocation, SIMPLEECHOSERVICE_QNAME); + } + + public SimpleEchoService(URL wsdlLocation, WebServiceFeature... features) { + super(wsdlLocation, SIMPLEECHOSERVICE_QNAME, features); } public SimpleEchoService(URL wsdlLocation, QName serviceName) { super(wsdlLocation, serviceName); } - public SimpleEchoService() { - super(SIMPLEECHOSERVICE_WSDL_LOCATION, new QName("http://stubclient.fat.jaxws.openliberty.io/", "SimpleEchoService")); + public SimpleEchoService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) { + super(wsdlLocation, serviceName, features); } /** - * + * * @return - * returns SimpleEcho + * returns SimpleEchoImpl */ @WebEndpoint(name = "SimpleEchoPort") public SimpleEcho getSimpleEchoPort() { @@ -68,17 +75,22 @@ public SimpleEcho getSimpleEchoPort() { } /** - * + * * @param features - * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the features parameter will have their - * default - * values. + * A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy. Supported features not in the features parameter will have their default values. * @return - * returns SimpleEcho + * returns SimpleEchoImpl */ @WebEndpoint(name = "SimpleEchoPort") public SimpleEcho getSimpleEchoPort(WebServiceFeature... features) { return super.getPort(new QName("http://stubclient.fat.jaxws.openliberty.io/", "SimpleEchoPort"), SimpleEcho.class, features); } + private static URL __getWsdlLocation() { + if (SIMPLEECHOSERVICE_EXCEPTION!= null) { + throw SIMPLEECHOSERVICE_EXCEPTION; + } + return SIMPLEECHOSERVICE_WSDL_LOCATION; + } + } From 70e38a77a608215b9f4b1297a804e553e47df3b9 Mon Sep 17 00:00:00 2001 From: Jon Hawkes Date: Fri, 26 Jul 2024 23:00:22 +0100 Subject: [PATCH 041/166] Another workarond for issue #22396 --- .../com/ibm/ws/recoverylog/spi/FileSharedServerLeaseLog.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dev/com.ibm.ws.recoverylog/src/com/ibm/ws/recoverylog/spi/FileSharedServerLeaseLog.java b/dev/com.ibm.ws.recoverylog/src/com/ibm/ws/recoverylog/spi/FileSharedServerLeaseLog.java index 15276362320..331e633fe49 100644 --- a/dev/com.ibm.ws.recoverylog/src/com/ibm/ws/recoverylog/spi/FileSharedServerLeaseLog.java +++ b/dev/com.ibm.ws.recoverylog/src/com/ibm/ws/recoverylog/spi/FileSharedServerLeaseLog.java @@ -271,7 +271,7 @@ public void updateServerLease(String recoveryIdentity, String recoveryGroup, boo * @see com.ibm.ws.recoverylog.spi.SharedServerLeaseLog#deleteServerLease(java.lang.String) */ @Override - @FFDCIgnore(NoSuchFileException.class) + @FFDCIgnore({ NoSuchFileException.class, Throwable.class }) public void deleteServerLease(final String recoveryIdentity, boolean isPeerServer) throws Exception { if (tc.isEntryEnabled()) Tr.entry(tc, "deleteServerLease", this, recoveryIdentity, isPeerServer); @@ -303,6 +303,9 @@ public void deleteServerLease(final String recoveryIdentity, boolean isPeerServe Tr.debug(tc, "Prepare to delete file {0}", leaseFile); Files.deleteIfExists(leaseFile); } + } catch (FileNotFoundException | NoSuchFileException e) { + if (tc.isDebugEnabled()) + Tr.debug(tc, "{0} is already deleted", _serverInstallLeaseLogDir); } catch (IOException e) { if (tc.isDebugEnabled()) Tr.debug(tc, "Exception locking lease control file: ", e); From df8f0957653ae69dc2ad7c55c6a4b5ea005daf50 Mon Sep 17 00:00:00 2001 From: Jon Hawkes Date: Sat, 27 Jul 2024 12:46:23 +0100 Subject: [PATCH 042/166] Make space for new projects --- dev/com.ibm.ws.wsat.recovery_fat.multi.7/build.gradle | 2 +- .../fat/src/suite/FATSuite.java | 4 ++-- .../fat/src/tests/RerouteRecoveryTest.java | 0 .../publish/servers/WSATRecovery3/bootstrap.properties | 0 .../publish/servers/WSATRecovery3/server.xml | 0 .../servers/WSATRecoveryClient1/bootstrap.properties | 3 +-- .../publish/servers/WSATRecoveryClient1/server.xml | 5 +++-- .../servers/WSATRecoveryServer1/bootstrap.properties | 3 +-- .../publish/servers/WSATRecoveryServer1/server.xml | 8 +++++--- .../.classpath | 0 .../.project | 2 +- .../.settings/bndtools.core.prefs | 0 .../.settings/org.eclipse.jdt.core.prefs | 0 .../bnd.bnd | 0 .../build.gradle | 0 .../fat/src/suite/FATSuite.java | 0 .../fat/src/tests/DBRerouteRecoveryTest.java | 0 .../publish/servers/WSATRecovery3/bootstrap.properties | 0 .../publish/servers/WSATRecovery3/server.xml | 0 .../servers/WSATRecoveryClient1/bootstrap.properties | 0 .../publish/servers/WSATRecoveryClient1/server.xml | 0 .../servers/WSATRecoveryServer1/bootstrap.properties | 0 .../publish/servers/WSATRecoveryServer1/server.xml | 0 .../wsat.recovery_fat.bnd | 0 .../.classpath | 0 .../.project | 2 +- .../.settings/bndtools.core.prefs | 0 .../.settings/org.eclipse.jdt.core.prefs | 0 .../bnd.bnd | 0 .../build.gradle | 2 +- .../fat/src/suite/FATSuite.java | 4 ++-- .../fat/src/tests/ReroutePeerRecoveryTest.java | 0 .../servers/WSATRecoveryClient1/bootstrap.properties | 3 ++- .../publish/servers/WSATRecoveryClient1/server.xml | 5 ++--- .../servers/WSATRecoveryClient2/bootstrap.properties | 0 .../publish/servers/WSATRecoveryClient2/server.xml | 0 .../servers/WSATRecoveryClient3/bootstrap.properties | 0 .../publish/servers/WSATRecoveryClient3/server.xml | 0 .../servers/WSATRecoveryServer1/bootstrap.properties | 3 ++- .../publish/servers/WSATRecoveryServer1/server.xml | 8 +++----- .../servers/WSATRecoveryServer2/bootstrap.properties | 0 .../publish/servers/WSATRecoveryServer2/server.xml | 0 .../servers/WSATRecoveryServer3/bootstrap.properties | 0 .../publish/servers/WSATRecoveryServer3/server.xml | 0 .../wsat.recovery_fat.bnd | 0 45 files changed, 27 insertions(+), 27 deletions(-) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.7}/fat/src/tests/RerouteRecoveryTest.java (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.7}/publish/servers/WSATRecovery3/bootstrap.properties (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.7}/publish/servers/WSATRecovery3/server.xml (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.8}/.classpath (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.8}/.project (90%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.8}/.settings/bndtools.core.prefs (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.8}/.settings/org.eclipse.jdt.core.prefs (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.8}/bnd.bnd (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.8}/build.gradle (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.8}/fat/src/suite/FATSuite.java (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.8}/fat/src/tests/DBRerouteRecoveryTest.java (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.8}/publish/servers/WSATRecovery3/bootstrap.properties (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.8}/publish/servers/WSATRecovery3/server.xml (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.8}/publish/servers/WSATRecoveryClient1/bootstrap.properties (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.8}/publish/servers/WSATRecoveryClient1/server.xml (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.8}/publish/servers/WSATRecoveryServer1/bootstrap.properties (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.8}/publish/servers/WSATRecoveryServer1/server.xml (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.8}/wsat.recovery_fat.bnd (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.9}/.classpath (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.9}/.project (90%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.9}/.settings/bndtools.core.prefs (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.9}/.settings/org.eclipse.jdt.core.prefs (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.9}/bnd.bnd (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.9}/build.gradle (95%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.9}/fat/src/suite/FATSuite.java (94%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.7 => com.ibm.ws.wsat.recovery_fat.multi.9}/fat/src/tests/ReroutePeerRecoveryTest.java (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryClient1/bootstrap.properties (76%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryClient1/server.xml (91%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.7 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryClient2/bootstrap.properties (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.7 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryClient2/server.xml (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.7 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryClient3/bootstrap.properties (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.7 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryClient3/server.xml (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryServer1/bootstrap.properties (76%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.5 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryServer1/server.xml (86%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.7 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryServer2/bootstrap.properties (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.7 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryServer2/server.xml (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.7 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryServer3/bootstrap.properties (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.7 => com.ibm.ws.wsat.recovery_fat.multi.9}/publish/servers/WSATRecoveryServer3/server.xml (100%) rename dev/{com.ibm.ws.wsat.recovery_fat.multi.6 => com.ibm.ws.wsat.recovery_fat.multi.9}/wsat.recovery_fat.bnd (100%) diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/build.gradle b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/build.gradle index 7c12223aee3..737ce5594b0 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/build.gradle +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/build.gradle @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 IBM Corporation and others. + * Copyright (c) 2020, 2023 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/fat/src/suite/FATSuite.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/fat/src/suite/FATSuite.java index 0406540e6d2..6c574c2e527 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/fat/src/suite/FATSuite.java +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/fat/src/suite/FATSuite.java @@ -18,11 +18,11 @@ import componenttest.rules.repeater.FeatureReplacementAction; import componenttest.rules.repeater.RepeatTests; -import tests.ReroutePeerRecoveryTest; +import tests.RerouteRecoveryTest; @RunWith(Suite.class) @SuiteClasses({ - ReroutePeerRecoveryTest.class, + RerouteRecoveryTest.class, }) public class FATSuite { @ClassRule diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/tests/RerouteRecoveryTest.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/fat/src/tests/RerouteRecoveryTest.java similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/tests/RerouteRecoveryTest.java rename to dev/com.ibm.ws.wsat.recovery_fat.multi.7/fat/src/tests/RerouteRecoveryTest.java diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecovery3/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecovery3/bootstrap.properties similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecovery3/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecovery3/bootstrap.properties diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecovery3/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecovery3/server.xml similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecovery3/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecovery3/server.xml diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient1/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient1/bootstrap.properties index 2338e8d9d2a..a45a129fae9 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient1/bootstrap.properties +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient1/bootstrap.properties @@ -1,4 +1,3 @@ bootstrap.include=../testports.properties -MISROUTE_PORT=9010 -LOCAL_RECOVERY_ID=WSATRecoveryClient1 +MISROUTE_PORT=${bvt.prop.HTTP_tertiary} com.ibm.ws.logging.trace.specification=Transaction=all:com.ibm.ws.jaxws.*=debug:org.apache.cxf.ext.logging.slf4j.Slf4jEventSender=debug:wsat=all \ No newline at end of file diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient1/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient1/server.xml index d7bcfa9218b..79f6e94124f 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient1/server.xml +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient1/server.xml @@ -22,10 +22,11 @@ diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer1/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer1/bootstrap.properties index 1dceff4f6ce..a45a129fae9 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer1/bootstrap.properties +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer1/bootstrap.properties @@ -1,4 +1,3 @@ bootstrap.include=../testports.properties -#MISROUTE_PORT=8050 -LOCAL_RECOVERY_ID=WSATRecoveryServer1 +MISROUTE_PORT=${bvt.prop.HTTP_tertiary} com.ibm.ws.logging.trace.specification=Transaction=all:com.ibm.ws.jaxws.*=debug:org.apache.cxf.ext.logging.slf4j.Slf4jEventSender=debug:wsat=all \ No newline at end of file diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer1/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer1/server.xml index 88e9d80cd47..ae90fe746d6 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer1/server.xml +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer1/server.xml @@ -22,11 +22,13 @@ diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.classpath b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/.classpath similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/.classpath rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/.classpath diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.project b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/.project similarity index 90% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/.project rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/.project index ca4d74f3871..025d65e6fff 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.project +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/.project @@ -1,6 +1,6 @@ - com.ibm.ws.wsat.recovery_fat.multi.5 + com.ibm.ws.wsat.recovery_fat.multi.8 diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/bndtools.core.prefs b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/.settings/bndtools.core.prefs similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/bndtools.core.prefs rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/.settings/bndtools.core.prefs diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/org.eclipse.jdt.core.prefs b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/org.eclipse.jdt.core.prefs rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/.settings/org.eclipse.jdt.core.prefs diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/bnd.bnd b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/bnd.bnd similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/bnd.bnd rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/bnd.bnd diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/build.gradle b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/build.gradle similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/build.gradle rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/build.gradle diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/suite/FATSuite.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/fat/src/suite/FATSuite.java similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/suite/FATSuite.java rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/fat/src/suite/FATSuite.java diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/tests/DBRerouteRecoveryTest.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/fat/src/tests/DBRerouteRecoveryTest.java similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/tests/DBRerouteRecoveryTest.java rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/fat/src/tests/DBRerouteRecoveryTest.java diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecovery3/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecovery3/bootstrap.properties similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecovery3/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecovery3/bootstrap.properties diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecovery3/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecovery3/server.xml similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecovery3/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecovery3/server.xml diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryClient1/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecoveryClient1/bootstrap.properties similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryClient1/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecoveryClient1/bootstrap.properties diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryClient1/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecoveryClient1/server.xml similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryClient1/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecoveryClient1/server.xml diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryServer1/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecoveryServer1/bootstrap.properties similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryServer1/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecoveryServer1/bootstrap.properties diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryServer1/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecoveryServer1/server.xml similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryServer1/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/publish/servers/WSATRecoveryServer1/server.xml diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/wsat.recovery_fat.bnd b/dev/com.ibm.ws.wsat.recovery_fat.multi.8/wsat.recovery_fat.bnd similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/wsat.recovery_fat.bnd rename to dev/com.ibm.ws.wsat.recovery_fat.multi.8/wsat.recovery_fat.bnd diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.classpath b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/.classpath similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/.classpath rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/.classpath diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.project b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/.project similarity index 90% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/.project rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/.project index 836c6606221..51fc892d8fd 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.project +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/.project @@ -1,6 +1,6 @@ - com.ibm.ws.wsat.recovery_fat.multi.6 + com.ibm.ws.wsat.recovery_fat.multi.9 diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/bndtools.core.prefs b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/.settings/bndtools.core.prefs similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/bndtools.core.prefs rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/.settings/bndtools.core.prefs diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/org.eclipse.jdt.core.prefs b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/.settings/org.eclipse.jdt.core.prefs similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/org.eclipse.jdt.core.prefs rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/.settings/org.eclipse.jdt.core.prefs diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/bnd.bnd b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/bnd.bnd similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/bnd.bnd rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/bnd.bnd diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/build.gradle b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/build.gradle similarity index 95% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/build.gradle rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/build.gradle index 737ce5594b0..7c12223aee3 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/build.gradle +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/build.gradle @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2023 IBM Corporation and others. + * Copyright (c) 2023 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/suite/FATSuite.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/fat/src/suite/FATSuite.java similarity index 94% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/suite/FATSuite.java rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/fat/src/suite/FATSuite.java index 6c574c2e527..0406540e6d2 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/suite/FATSuite.java +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/fat/src/suite/FATSuite.java @@ -18,11 +18,11 @@ import componenttest.rules.repeater.FeatureReplacementAction; import componenttest.rules.repeater.RepeatTests; -import tests.RerouteRecoveryTest; +import tests.ReroutePeerRecoveryTest; @RunWith(Suite.class) @SuiteClasses({ - RerouteRecoveryTest.class, + ReroutePeerRecoveryTest.class, }) public class FATSuite { @ClassRule diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/fat/src/tests/ReroutePeerRecoveryTest.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/fat/src/tests/ReroutePeerRecoveryTest.java similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.7/fat/src/tests/ReroutePeerRecoveryTest.java rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/fat/src/tests/ReroutePeerRecoveryTest.java diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryClient1/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient1/bootstrap.properties similarity index 76% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryClient1/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient1/bootstrap.properties index a45a129fae9..2338e8d9d2a 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryClient1/bootstrap.properties +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient1/bootstrap.properties @@ -1,3 +1,4 @@ bootstrap.include=../testports.properties -MISROUTE_PORT=${bvt.prop.HTTP_tertiary} +MISROUTE_PORT=9010 +LOCAL_RECOVERY_ID=WSATRecoveryClient1 com.ibm.ws.logging.trace.specification=Transaction=all:com.ibm.ws.jaxws.*=debug:org.apache.cxf.ext.logging.slf4j.Slf4jEventSender=debug:wsat=all \ No newline at end of file diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryClient1/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient1/server.xml similarity index 91% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryClient1/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient1/server.xml index 79f6e94124f..d7bcfa9218b 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryClient1/server.xml +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient1/server.xml @@ -22,11 +22,10 @@ diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient2/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient2/bootstrap.properties similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient2/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient2/bootstrap.properties diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient2/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient2/server.xml similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient2/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient2/server.xml diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient3/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient3/bootstrap.properties similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient3/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient3/bootstrap.properties diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient3/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient3/server.xml similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryClient3/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryClient3/server.xml diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryServer1/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer1/bootstrap.properties similarity index 76% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryServer1/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer1/bootstrap.properties index a45a129fae9..1dceff4f6ce 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/publish/servers/WSATRecoveryServer1/bootstrap.properties +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer1/bootstrap.properties @@ -1,3 +1,4 @@ bootstrap.include=../testports.properties -MISROUTE_PORT=${bvt.prop.HTTP_tertiary} +#MISROUTE_PORT=8050 +LOCAL_RECOVERY_ID=WSATRecoveryServer1 com.ibm.ws.logging.trace.specification=Transaction=all:com.ibm.ws.jaxws.*=debug:org.apache.cxf.ext.logging.slf4j.Slf4jEventSender=debug:wsat=all \ No newline at end of file diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryServer1/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer1/server.xml similarity index 86% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryServer1/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer1/server.xml index ae90fe746d6..88e9d80cd47 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/publish/servers/WSATRecoveryServer1/server.xml +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer1/server.xml @@ -22,13 +22,11 @@ diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer2/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer2/bootstrap.properties similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer2/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer2/bootstrap.properties diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer2/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer2/server.xml similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer2/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer2/server.xml diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer3/bootstrap.properties b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer3/bootstrap.properties similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer3/bootstrap.properties rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer3/bootstrap.properties diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer3/server.xml b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer3/server.xml similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.7/publish/servers/WSATRecoveryServer3/server.xml rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/publish/servers/WSATRecoveryServer3/server.xml diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/wsat.recovery_fat.bnd b/dev/com.ibm.ws.wsat.recovery_fat.multi.9/wsat.recovery_fat.bnd similarity index 100% rename from dev/com.ibm.ws.wsat.recovery_fat.multi.6/wsat.recovery_fat.bnd rename to dev/com.ibm.ws.wsat.recovery_fat.multi.9/wsat.recovery_fat.bnd From 6d637d6e570b88f2d4a9dbc92c5e4bdd885cf90c Mon Sep 17 00:00:00 2001 From: Jon Hawkes Date: Sat, 27 Jul 2024 14:45:28 +0100 Subject: [PATCH 043/166] Split buckets --- .../fat/src/tests/MultiRecoveryTest1.java | 26 +---- .../fat/src/tests/MultiRecoveryTest2.java | 73 +++--------- .../fat/src/tests/MultiRecoveryTest3.java | 110 ++++++++---------- .../fat/src/tests/MultiRecoveryTest4.java | 91 +++++++-------- .../.classpath | 11 ++ .../.gitignore | 1 + .../.project | 23 ++++ .../.settings/bndtools.core.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 11 ++ .../bnd.bnd | 49 ++++++++ .../build.gradle | 58 +++++++++ .../fat/src/suite/FATSuite.java | 34 ++++++ .../fat/src/tests/MultiRecoveryTest5.java | 74 ++++++++++++ .../wsat.recovery_fat.bnd | 18 +++ .../.classpath | 11 ++ .../.gitignore | 1 + .../.project | 23 ++++ .../.settings/bndtools.core.prefs | 2 + .../.settings/org.eclipse.jdt.core.prefs | 11 ++ .../bnd.bnd | 49 ++++++++ .../build.gradle | 58 +++++++++ .../fat/src/suite/FATSuite.java | 34 ++++++ .../fat/src/tests/MultiRecoveryTest6.java | 72 ++++++++++++ .../wsat.recovery_fat.bnd | 18 +++ 24 files changed, 663 insertions(+), 197 deletions(-) create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/.classpath create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/.gitignore create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/.project create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/bndtools.core.prefs create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/org.eclipse.jdt.core.prefs create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/bnd.bnd create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/build.gradle create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/suite/FATSuite.java create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/tests/MultiRecoveryTest5.java create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.5/wsat.recovery_fat.bnd create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/.classpath create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/.gitignore create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/.project create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/bndtools.core.prefs create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/org.eclipse.jdt.core.prefs create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/bnd.bnd create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/build.gradle create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/suite/FATSuite.java create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/tests/MultiRecoveryTest6.java create mode 100644 dev/com.ibm.ws.wsat.recovery_fat.multi.6/wsat.recovery_fat.bnd diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.1/fat/src/tests/MultiRecoveryTest1.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.1/fat/src/tests/MultiRecoveryTest1.java index b39a732aa2f..e091b4ad614 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.1/fat/src/tests/MultiRecoveryTest1.java +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.1/fat/src/tests/MultiRecoveryTest1.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2023 IBM Corporation and others. + * Copyright (c) 2020, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -19,7 +19,7 @@ import componenttest.annotation.ExpectedFFDC; import componenttest.custom.junit.runner.FATRunner; -@AllowedFFDC(value = { "com.ibm.tx.jta.ut.util.AlreadyDumpedException", "javax.transaction.SystemException", "javax.transaction.xa.XAException", "java.io.IOException", "java.io.EOFException", "org.apache.cxf.binding.soap.SoapFault", "javax.xml.stream.XMLStreamException" }) +@AllowedFFDC(value = { "com.ibm.tx.jta.ut.util.AlreadyDumpedException", "javax.transaction.SystemException", "javax.transaction.xa.XAException", "java.io.IOException", "java.io.EOFException", "org.apache.cxf.binding.soap.SoapFault", "javax.xml.stream.XMLStreamException", "com.ctc.wstx.exc.WstxIOException" }) @RunWith(FATRunner.class) public class MultiRecoveryTest1 extends MultiRecoveryTest { @@ -73,26 +73,4 @@ public void WSTXMPR003AFVT() throws Exception { public void WSTXMPR003BFVT() throws Exception { recoveryTest(server1, server2, "302","server2"); } - - @Test - public void WSTXMPR003CFVT() throws Exception { - recoveryTest(server1, server2, "303","both"); - } - - @Test - @AllowedFFDC(value = {"javax.xml.ws.WebServiceException" }) - public void WSTXMPR004AFVT() throws Exception { - recoveryTest(server1, server2, "401","server1"); - } - - @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR004BFVT() throws Exception { - recoveryTest(server1, server2, "402","server2"); - } - - @Test - public void WSTXMPR004CFVT() throws Exception { - recoveryTest(server1, server2, "403","both"); - } } diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.2/fat/src/tests/MultiRecoveryTest2.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.2/fat/src/tests/MultiRecoveryTest2.java index 533d4615d41..57f95d5a2a7 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.2/fat/src/tests/MultiRecoveryTest2.java +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.2/fat/src/tests/MultiRecoveryTest2.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2023 IBM Corporation and others. + * Copyright (c) 2020, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -19,7 +19,7 @@ import componenttest.annotation.ExpectedFFDC; import componenttest.custom.junit.runner.FATRunner; -@AllowedFFDC(value = { "com.ibm.tx.jta.ut.util.AlreadyDumpedException", "javax.transaction.SystemException", "javax.transaction.xa.XAException", "java.io.IOException", "java.io.EOFException", "org.apache.cxf.binding.soap.SoapFault", "javax.xml.stream.XMLStreamException" }) +@AllowedFFDC(value = { "com.ibm.tx.jta.ut.util.AlreadyDumpedException", "javax.transaction.SystemException", "javax.transaction.xa.XAException", "java.io.IOException", "java.io.EOFException", "org.apache.cxf.binding.soap.SoapFault", "javax.xml.stream.XMLStreamException", "com.ctc.wstx.exc.WstxIOException" }) @RunWith(FATRunner.class) public class MultiRecoveryTest2 extends MultiRecoveryTest { @@ -49,67 +49,26 @@ public void WSTXMPR005CFVT() throws Exception { public void WSTXMPR006AFVT() throws Exception { recoveryTest(server1, server2, "601","server1"); } - - @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR006BFVT() throws Exception { - recoveryTest(server1, server2, "602","server2"); - } - - @Test - public void WSTXMPR006CFVT() throws Exception { - recoveryTest(server1, server2, "603","both"); - } - - @Test - public void WSTXMPR007AFVT() throws Exception { - recoveryTest(server1, server2, "701","server1"); - } - - @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) - @AllowedFFDC(value = { "java.util.concurrent.RejectedExecutionException", "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) - // JDK8: Allow HeuristicHazardException - public void WSTXMPR007BFVT() throws Exception { - recoveryTest(server1, server2, "702","server2"); - } - + @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) - @AllowedFFDC(value = { "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) - // Need Jon Review: - // javax.transaction.xa.XAException - // Caused by: com.ibm.tx.jta.XAResourceNotAvailableException - // Need review on whether it is expected - // Report javax.transaction.SystemException - // JDK8: Allow HeuristicHazardException - public void WSTXMPR007CFVT() throws Exception { - recoveryTest(server1, server2, "703","both"); + public void WSTXMPR003CFVT() throws Exception { + recoveryTest(server1, server2, "303","both"); } - + @Test - public void WSTXMPR008AFVT() throws Exception { - recoveryTest(server1, server2, "801","server1"); + @AllowedFFDC(value = {"javax.xml.ws.WebServiceException" }) + public void WSTXMPR004AFVT() throws Exception { + recoveryTest(server1, server2, "401","server1"); } - + @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) - @AllowedFFDC(value = { "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) - // JDK8: Allow HeuristicHazardException - public void WSTXMPR008BFVT() throws Exception { - recoveryTest(server1, server2, "802","server2"); + @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) + public void WSTXMPR004BFVT() throws Exception { + recoveryTest(server1, server2, "402","server2"); } - + @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) - @AllowedFFDC(value = { "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) - // Need Jon Review: - // javax.transaction.xa.XAException - // Caused by: com.ibm.tx.jta.XAResourceNotAvailableException - // Need review on whether it is expected - // Report javax.transaction.SystemException - // JDK8: Allow HeuristicHazardException - public void WSTXMPR008CFVT() throws Exception { - recoveryTest(server1, server2, "803","both"); + public void WSTXMPR004CFVT() throws Exception { + recoveryTest(server1, server2, "403","both"); } } diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.3/fat/src/tests/MultiRecoveryTest3.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.3/fat/src/tests/MultiRecoveryTest3.java index 0e79b52172c..51870393c4d 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.3/fat/src/tests/MultiRecoveryTest3.java +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.3/fat/src/tests/MultiRecoveryTest3.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2023 IBM Corporation and others. + * Copyright (c) 2020, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -24,83 +24,65 @@ public class MultiRecoveryTest3 extends MultiRecoveryTest { @Test - @AllowedFFDC(value = {"javax.xml.ws.WebServiceException"}) - public void WSTXMPR009AFVT() throws Exception { - recoveryTest(server1, server2, "901","server1"); - } - - @Test - // XAException should be expected here but halt is no longer halting the JVM so extra protocol - // messages can get through after the dumpState. - public void WSTXMPR009BFVT() throws Exception { - recoveryTest(server1, server2, "902","server2"); - } - - @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) - //javax.transaction.xa.XAException - //Caused by: com.ibm.tx.jta.XAResourceNotAvailableException - //Need review on whether it is expected - public void WSTXMPR009CFVT() throws Exception { - recoveryTest(server1, server2, "903","both"); + @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) + public void WSTXMPR006BFVT() throws Exception { + recoveryTest(server1, server2, "602","server2"); } - + @Test - @AllowedFFDC(value = {"javax.xml.ws.WebServiceException"}) - public void WSTXMPR010AFVT() throws Exception { - recoveryTest(server1, server2, "1001","server1"); + public void WSTXMPR006CFVT() throws Exception { + recoveryTest(server1, server2, "603","both"); } - + @Test - @AllowedFFDC(value = {"javax.xml.ws.WebServiceException"}) - // XAException should be expected here but halt is no longer halting the JVM so extra protocol - // messages can get through after the dumpState. - public void WSTXMPR010BFVT() throws Exception { - recoveryTest(server1, server2, "1002","server2"); + public void WSTXMPR007AFVT() throws Exception { + recoveryTest(server1, server2, "701","server1"); } - + @Test @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) - // Can get HeuristicRollbackException if commit gets through to subordinate after resources were already dumped - @AllowedFFDC(value={"javax.transaction.HeuristicRollbackException"}) - public void WSTXMPR010CFVT() throws Exception { - recoveryTest(server1, server2, "1003","both"); - } - - @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR011AFVT() throws Exception { - recoveryTest(server1, server2, "1101","server1"); - } - - @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR011BFVT() throws Exception { - recoveryTest(server1, server2, "1102","server2"); + @AllowedFFDC(value = { "java.util.concurrent.RejectedExecutionException", "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) + // JDK8: Allow HeuristicHazardException + public void WSTXMPR007BFVT() throws Exception { + recoveryTest(server1, server2, "702","server2"); } - + @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR011CFVT() throws Exception { - recoveryTest(server1, server2, "1103","both"); + @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) + @AllowedFFDC(value = { "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) + // Need Jon Review: + // javax.transaction.xa.XAException + // Caused by: com.ibm.tx.jta.XAResourceNotAvailableException + // Need review on whether it is expected + // Report javax.transaction.SystemException + // JDK8: Allow HeuristicHazardException + public void WSTXMPR007CFVT() throws Exception { + recoveryTest(server1, server2, "703","both"); } - + @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - @AllowedFFDC(value = {"javax.xml.ws.WebServiceException", "com.ibm.ws.wsat.service.WSATException" }) - public void WSTXMPR012AFVT() throws Exception { - recoveryTest(server1, server2, "1201","server1"); + public void WSTXMPR008AFVT() throws Exception { + recoveryTest(server1, server2, "801","server1"); } - + @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR012BFVT() throws Exception { - recoveryTest(server1, server2, "1202","server2"); + @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) + @AllowedFFDC(value = { "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) + // JDK8: Allow HeuristicHazardException + public void WSTXMPR008BFVT() throws Exception { + recoveryTest(server1, server2, "802","server2"); } - + @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR012CFVT() throws Exception { - recoveryTest(server1, server2, "1203","both"); + @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) + @AllowedFFDC(value = { "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) + // Need Jon Review: + // javax.transaction.xa.XAException + // Caused by: com.ibm.tx.jta.XAResourceNotAvailableException + // Need review on whether it is expected + // Report javax.transaction.SystemException + // JDK8: Allow HeuristicHazardException + public void WSTXMPR008CFVT() throws Exception { + recoveryTest(server1, server2, "803","both"); } } diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.4/fat/src/tests/MultiRecoveryTest4.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.4/fat/src/tests/MultiRecoveryTest4.java index 847f0c1da74..819a026e601 100644 --- a/dev/com.ibm.ws.wsat.recovery_fat.multi.4/fat/src/tests/MultiRecoveryTest4.java +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.4/fat/src/tests/MultiRecoveryTest4.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2023 IBM Corporation and others. + * Copyright (c) 2020, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -20,76 +20,63 @@ import componenttest.custom.junit.runner.FATRunner; @SuppressWarnings("restriction") -@AllowedFFDC(value = { "com.ibm.tx.jta.ut.util.AlreadyDumpedException", "javax.transaction.SystemException", "javax.transaction.xa.XAException", "java.io.IOException", "java.io.EOFException", "org.apache.cxf.binding.soap.SoapFault", "javax.xml.stream.XMLStreamException" }) +@AllowedFFDC(value = { "com.ibm.tx.jta.ut.util.AlreadyDumpedException", "javax.transaction.SystemException", "javax.transaction.xa.XAException", "java.io.IOException", "java.io.EOFException", "org.apache.cxf.binding.soap.SoapFault", "javax.xml.stream.XMLStreamException", "com.ctc.wstx.exc.WstxIOException" }) @RunWith(FATRunner.class) public class MultiRecoveryTest4 extends MultiRecoveryTest { @Test - @AllowedFFDC(value = {"javax.xml.ws.WebServiceException", "com.ibm.ws.wsat.service.WSATException" }) - public void WSTXMPR013AFVT() throws Exception { - recoveryTest(server1, server2, "1301","server1"); + @AllowedFFDC(value = {"javax.xml.ws.WebServiceException"}) + public void WSTXMPR009AFVT() throws Exception { + recoveryTest(server1, server2, "901","server1"); } - - @Test - @AllowedFFDC(value = { "javax.xml.ws.WebServiceException", "com.ibm.ws.wsat.service.WSATException" }) - @ExpectedFFDC(value = {"javax.transaction.RollbackException"}) - public void WSTXMPR013BFVT() throws Exception { - recoveryTest(server1, server2, "1302","server2"); - } - - @Test - public void WSTXMPR013CFVT() throws Exception { - recoveryTest(server1, server2, "1303","both"); - } - - @Test - public void WSTXMPR014AFVT() throws Exception { - recoveryTest(server1, server2, "1401","server1"); - } - - @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException"}) - @AllowedFFDC(value = { "java.util.concurrent.RejectedExecutionException", "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) - // JDK8: Allow HeuristicHazardException - public void WSTXMPR014BFVT() throws Exception { - recoveryTest(server1, server2, "1402","server2"); - } - + @Test - public void WSTXMPR014CFVT() throws Exception { - recoveryTest(server1, server2, "1403","both"); + // XAException should be expected here but halt is no longer halting the JVM so extra protocol + // messages can get through after the dumpState. + public void WSTXMPR009BFVT() throws Exception { + recoveryTest(server1, server2, "902","server2"); } - + @Test - public void WSTXMPR015AFVT() throws Exception { - recoveryTest(server1, server2, "1501","server1"); + @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) + //javax.transaction.xa.XAException + //Caused by: com.ibm.tx.jta.XAResourceNotAvailableException + //Need review on whether it is expected + public void WSTXMPR009CFVT() throws Exception { + recoveryTest(server1, server2, "903","both"); } - + @Test - public void WSTXMPR015BFVT() throws Exception { - recoveryTest(server1, server2, "1502","server2"); + @AllowedFFDC(value = {"javax.xml.ws.WebServiceException"}) + public void WSTXMPR010AFVT() throws Exception { + recoveryTest(server1, server2, "1001","server1"); } - + @Test - public void WSTXMPR015CFVT() throws Exception { - recoveryTest(server1, server2, "1503","both"); + @AllowedFFDC(value = {"javax.xml.ws.WebServiceException"}) + // XAException should be expected here but halt is no longer halting the JVM so extra protocol + // messages can get through after the dumpState. + public void WSTXMPR010BFVT() throws Exception { + recoveryTest(server1, server2, "1002","server2"); } - + @Test - @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR016AFVT() throws Exception { - recoveryTest(server1, server2, "1601","server1"); + @ExpectedFFDC(value = {"javax.transaction.xa.XAException" }) + // Can get HeuristicRollbackException if commit gets through to subordinate after resources were already dumped + @AllowedFFDC(value={"javax.transaction.HeuristicRollbackException"}) + public void WSTXMPR010CFVT() throws Exception { + recoveryTest(server1, server2, "1003","both"); } - + @Test @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR016BFVT() throws Exception { - recoveryTest(server1, server2, "1602","server2"); + public void WSTXMPR011AFVT() throws Exception { + recoveryTest(server1, server2, "1101","server1"); } - + @Test @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) - public void WSTXMPR016CFVT() throws Exception { - recoveryTest(server1, server2, "1603","both"); + public void WSTXMPR011BFVT() throws Exception { + recoveryTest(server1, server2, "1102","server2"); } } diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.classpath b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.classpath new file mode 100644 index 00000000000..403a5198e40 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.gitignore b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.gitignore new file mode 100644 index 00000000000..e5c5af84f5f --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.gitignore @@ -0,0 +1 @@ +/publish diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.project b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.project new file mode 100644 index 00000000000..ca4d74f3871 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.project @@ -0,0 +1,23 @@ + + + com.ibm.ws.wsat.recovery_fat.multi.5 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + bndtools.core.bndbuilder + + + + + + org.eclipse.jdt.core.javanature + bndtools.core.bndnature + + diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/bndtools.core.prefs b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/bndtools.core.prefs new file mode 100644 index 00000000000..789fa99991a --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/bndtools.core.prefs @@ -0,0 +1,2 @@ +compileErrorAction=build +eclipse.preferences.version=1 diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/org.eclipse.jdt.core.prefs b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..3a21537071b --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/bnd.bnd b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/bnd.bnd new file mode 100644 index 00000000000..63a18626854 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/bnd.bnd @@ -0,0 +1,49 @@ +#******************************************************************************* +# Copyright (c) 2019, 2023 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# IBM Corporation - initial API and implementation +#******************************************************************************* +-include= ~../cnf/resources/bnd/bundle.props +bVersion=1.0 + +src: \ + fat/src + +fat.project: true + +tested.features: \ + cdi-3.0, cdi-4.0,\ + expressionlanguage-4.0, expressionlanguage-5.0,\ + jaxb-2.3,\ + jaxws-2.3,\ + pages-3.0, pages-3.1,\ + servlet-4.0, servlet-5.0, servlet-6.0,\ + xmlbinding-4.0,\ + xmlws-3.0, xmlws-4.0 + +-buildpath: \ + com.ibm.tx.jta;version=latest,\ + com.ibm.websphere.javaee.annotation.1.1;version=latest,\ + com.ibm.websphere.javaee.ejb.3.2;version=latest,\ + com.ibm.websphere.javaee.jaxb.2.2;version=latest,\ + com.ibm.websphere.javaee.jaxws.2.2;version=latest,\ + com.ibm.websphere.javaee.jws.1.0;version=latest,\ + com.ibm.websphere.javaee.servlet.4.0;version=latest,\ + com.ibm.websphere.javaee.transaction.1.2;version=latest,\ + com.ibm.websphere.org.osgi.core,\ + com.ibm.websphere.org.osgi.service.component,\ + com.ibm.ws.org.osgi.annotation.versioning;version=latest,\ + com.ibm.ws.transaction.fat.util,\ + com.ibm.ws.transaction.test.util;version=latest,\ + com.ibm.ws.tx.embeddable;version=latest,\ + com.ibm.ws.wsat.recovery_fat.lps,\ + com.ibm.ws.wsat.recovery_fat.multi.1 + +-sub: *.bnd diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/build.gradle b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/build.gradle new file mode 100644 index 00000000000..4a7d730ff9f --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/build.gradle @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2020, 2023 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +// Define G:A:V coordinates of each dependency +dependencies { + requiredLibs project(":com.ibm.ws.wsat.recovery_fat.lps"), + project(":com.ibm.ws.wsat.recovery_fat.multi.1"), + project(":com.ibm.ws.transaction.fat.util") +} + +task copyCommonFiles { + doLast { + /* + * Copy common publish files. + */ + copy { + from project(':com.ibm.ws.wsat.recovery_fat.lps').file('publish') + into new File('publish') + } + } +} + +jar { + dependsOn copyCommonFiles +} + +autoFVT.dependsOn copyCommonFiles + +clean.doLast { + if (file('publish').exists()){ + file('publish').deleteDir() + } + if (file('build').exists()){ + file('build').deleteDir() + } +} + +autoFVT.doLast { + copy { + from project(':com.ibm.ws.wsat.recovery_fat.lps').autoFvtDir + into autoFvtDir + include 'test-applications/**' + } +} + +autoFVT.dependsOn project(':com.ibm.ws.wsat.recovery_fat.lps').autoFVT + +addRequiredLibraries.dependsOn addJakartaTransformer diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/suite/FATSuite.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/suite/FATSuite.java new file mode 100644 index 00000000000..6cc8b120551 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/suite/FATSuite.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2020, 2023 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package suite; +import org.junit.ClassRule; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +import componenttest.rules.repeater.FeatureReplacementAction; +import componenttest.rules.repeater.RepeatTests; +import tests.MultiRecoveryTest5; + +@RunWith(Suite.class) +@SuiteClasses({ + MultiRecoveryTest5.class, +}) +public class FATSuite { + + @ClassRule + public static RepeatTests r = RepeatTests.withoutModificationInFullMode() + .andWith(FeatureReplacementAction.EE8_FEATURES().fullFATOnly()) + .andWith(FeatureReplacementAction.EE9_FEATURES().conditionalFullFATOnly(FeatureReplacementAction.GREATER_THAN_OR_EQUAL_JAVA_11)) + .andWith(FeatureReplacementAction.EE10_FEATURES()); +} diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/tests/MultiRecoveryTest5.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/tests/MultiRecoveryTest5.java new file mode 100644 index 00000000000..f40f3b5680e --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/fat/src/tests/MultiRecoveryTest5.java @@ -0,0 +1,74 @@ +/******************************************************************************* + * Copyright (c) 2020, 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package tests; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import componenttest.annotation.AllowedFFDC; +import componenttest.annotation.ExpectedFFDC; +import componenttest.custom.junit.runner.FATRunner; + +@SuppressWarnings("restriction") +@AllowedFFDC(value = { "com.ibm.tx.jta.ut.util.AlreadyDumpedException", "javax.transaction.SystemException", "javax.transaction.xa.XAException", "java.io.IOException", "java.io.EOFException", "org.apache.cxf.binding.soap.SoapFault", "javax.xml.stream.XMLStreamException", "com.ctc.wstx.exc.WstxIOException" }) +@RunWith(FATRunner.class) +public class MultiRecoveryTest5 extends MultiRecoveryTest { + + @Test + @AllowedFFDC(value = {"javax.xml.ws.WebServiceException", "com.ibm.ws.wsat.service.WSATException" }) + public void WSTXMPR013AFVT() throws Exception { + recoveryTest(server1, server2, "1301","server1"); + } + + @Test + @AllowedFFDC(value = { "javax.xml.ws.WebServiceException", "com.ibm.ws.wsat.service.WSATException" }) + @ExpectedFFDC(value = {"javax.transaction.RollbackException"}) + public void WSTXMPR013BFVT() throws Exception { + recoveryTest(server1, server2, "1302","server2"); + } + + @Test + public void WSTXMPR013CFVT() throws Exception { + recoveryTest(server1, server2, "1303","both"); + } + + @Test + public void WSTXMPR014AFVT() throws Exception { + recoveryTest(server1, server2, "1401","server1"); + } + + @Test + @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) + public void WSTXMPR011CFVT() throws Exception { + recoveryTest(server1, server2, "1103","both"); + } + + @Test + @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) + @AllowedFFDC(value = {"javax.xml.ws.WebServiceException", "com.ibm.ws.wsat.service.WSATException" }) + public void WSTXMPR012AFVT() throws Exception { + recoveryTest(server1, server2, "1201","server1"); + } + + @Test + @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) + public void WSTXMPR012BFVT() throws Exception { + recoveryTest(server1, server2, "1202","server2"); + } + + @Test + @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) + public void WSTXMPR012CFVT() throws Exception { + recoveryTest(server1, server2, "1203","both"); + } +} diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.5/wsat.recovery_fat.bnd b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/wsat.recovery_fat.bnd new file mode 100644 index 00000000000..857d32af204 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.5/wsat.recovery_fat.bnd @@ -0,0 +1,18 @@ +#******************************************************************************* +# Copyright (c) 2020,2021 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# IBM Corporation - initial API and implementation +#******************************************************************************* +-include= ~../cnf/resources/bnd/bundle.props +bVersion=1.0 + +#This file defines the main fat bundle + +Bundle-SymbolicName: ${basename;${basedir}} diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.classpath b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.classpath new file mode 100644 index 00000000000..403a5198e40 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.gitignore b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.gitignore new file mode 100644 index 00000000000..e5c5af84f5f --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.gitignore @@ -0,0 +1 @@ +/publish diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.project b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.project new file mode 100644 index 00000000000..836c6606221 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.project @@ -0,0 +1,23 @@ + + + com.ibm.ws.wsat.recovery_fat.multi.6 + + + + + + org.eclipse.jdt.core.javabuilder + + + + + bndtools.core.bndbuilder + + + + + + org.eclipse.jdt.core.javanature + bndtools.core.bndnature + + diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/bndtools.core.prefs b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/bndtools.core.prefs new file mode 100644 index 00000000000..789fa99991a --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/bndtools.core.prefs @@ -0,0 +1,2 @@ +compileErrorAction=build +eclipse.preferences.version=1 diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/org.eclipse.jdt.core.prefs b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 00000000000..3a21537071b --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/bnd.bnd b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/bnd.bnd new file mode 100644 index 00000000000..63a18626854 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/bnd.bnd @@ -0,0 +1,49 @@ +#******************************************************************************* +# Copyright (c) 2019, 2023 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# IBM Corporation - initial API and implementation +#******************************************************************************* +-include= ~../cnf/resources/bnd/bundle.props +bVersion=1.0 + +src: \ + fat/src + +fat.project: true + +tested.features: \ + cdi-3.0, cdi-4.0,\ + expressionlanguage-4.0, expressionlanguage-5.0,\ + jaxb-2.3,\ + jaxws-2.3,\ + pages-3.0, pages-3.1,\ + servlet-4.0, servlet-5.0, servlet-6.0,\ + xmlbinding-4.0,\ + xmlws-3.0, xmlws-4.0 + +-buildpath: \ + com.ibm.tx.jta;version=latest,\ + com.ibm.websphere.javaee.annotation.1.1;version=latest,\ + com.ibm.websphere.javaee.ejb.3.2;version=latest,\ + com.ibm.websphere.javaee.jaxb.2.2;version=latest,\ + com.ibm.websphere.javaee.jaxws.2.2;version=latest,\ + com.ibm.websphere.javaee.jws.1.0;version=latest,\ + com.ibm.websphere.javaee.servlet.4.0;version=latest,\ + com.ibm.websphere.javaee.transaction.1.2;version=latest,\ + com.ibm.websphere.org.osgi.core,\ + com.ibm.websphere.org.osgi.service.component,\ + com.ibm.ws.org.osgi.annotation.versioning;version=latest,\ + com.ibm.ws.transaction.fat.util,\ + com.ibm.ws.transaction.test.util;version=latest,\ + com.ibm.ws.tx.embeddable;version=latest,\ + com.ibm.ws.wsat.recovery_fat.lps,\ + com.ibm.ws.wsat.recovery_fat.multi.1 + +-sub: *.bnd diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/build.gradle b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/build.gradle new file mode 100644 index 00000000000..4a7d730ff9f --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/build.gradle @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2020, 2023 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +// Define G:A:V coordinates of each dependency +dependencies { + requiredLibs project(":com.ibm.ws.wsat.recovery_fat.lps"), + project(":com.ibm.ws.wsat.recovery_fat.multi.1"), + project(":com.ibm.ws.transaction.fat.util") +} + +task copyCommonFiles { + doLast { + /* + * Copy common publish files. + */ + copy { + from project(':com.ibm.ws.wsat.recovery_fat.lps').file('publish') + into new File('publish') + } + } +} + +jar { + dependsOn copyCommonFiles +} + +autoFVT.dependsOn copyCommonFiles + +clean.doLast { + if (file('publish').exists()){ + file('publish').deleteDir() + } + if (file('build').exists()){ + file('build').deleteDir() + } +} + +autoFVT.doLast { + copy { + from project(':com.ibm.ws.wsat.recovery_fat.lps').autoFvtDir + into autoFvtDir + include 'test-applications/**' + } +} + +autoFVT.dependsOn project(':com.ibm.ws.wsat.recovery_fat.lps').autoFVT + +addRequiredLibraries.dependsOn addJakartaTransformer diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/suite/FATSuite.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/suite/FATSuite.java new file mode 100644 index 00000000000..5464c8011a1 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/suite/FATSuite.java @@ -0,0 +1,34 @@ +/******************************************************************************* + * Copyright (c) 2020, 2023 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package suite; +import org.junit.ClassRule; +import org.junit.runner.RunWith; +import org.junit.runners.Suite; +import org.junit.runners.Suite.SuiteClasses; + +import componenttest.rules.repeater.FeatureReplacementAction; +import componenttest.rules.repeater.RepeatTests; +import tests.MultiRecoveryTest6; + +@RunWith(Suite.class) +@SuiteClasses({ + MultiRecoveryTest6.class, +}) +public class FATSuite { + + @ClassRule + public static RepeatTests r = RepeatTests.withoutModificationInFullMode() + .andWith(FeatureReplacementAction.EE8_FEATURES().fullFATOnly()) + .andWith(FeatureReplacementAction.EE9_FEATURES().conditionalFullFATOnly(FeatureReplacementAction.GREATER_THAN_OR_EQUAL_JAVA_11)) + .andWith(FeatureReplacementAction.EE10_FEATURES()); +} diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/tests/MultiRecoveryTest6.java b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/tests/MultiRecoveryTest6.java new file mode 100644 index 00000000000..340406773ca --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/fat/src/tests/MultiRecoveryTest6.java @@ -0,0 +1,72 @@ +/******************************************************************************* + * Copyright (c) 2020, 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package tests; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import componenttest.annotation.AllowedFFDC; +import componenttest.annotation.ExpectedFFDC; +import componenttest.custom.junit.runner.FATRunner; + +@SuppressWarnings("restriction") +@AllowedFFDC(value = { "com.ibm.tx.jta.ut.util.AlreadyDumpedException", "javax.transaction.SystemException", "javax.transaction.xa.XAException", "java.io.IOException", "java.io.EOFException", "org.apache.cxf.binding.soap.SoapFault", "javax.xml.stream.XMLStreamException", "com.ctc.wstx.exc.WstxIOException" }) +@RunWith(FATRunner.class) +public class MultiRecoveryTest6 extends MultiRecoveryTest { + + @Test + @ExpectedFFDC(value = {"javax.transaction.xa.XAException"}) + @AllowedFFDC(value = { "java.util.concurrent.RejectedExecutionException", "com.ibm.ws.Transaction.JTA.HeuristicHazardException" }) + // JDK8: Allow HeuristicHazardException + public void WSTXMPR014BFVT() throws Exception { + recoveryTest(server1, server2, "1402","server2"); + } + + @Test + public void WSTXMPR014CFVT() throws Exception { + recoveryTest(server1, server2, "1403","both"); + } + + @Test + public void WSTXMPR015AFVT() throws Exception { + recoveryTest(server1, server2, "1501","server1"); + } + + @Test + public void WSTXMPR015BFVT() throws Exception { + recoveryTest(server1, server2, "1502","server2"); + } + + @Test + public void WSTXMPR015CFVT() throws Exception { + recoveryTest(server1, server2, "1503","both"); + } + + @Test + @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) + public void WSTXMPR016AFVT() throws Exception { + recoveryTest(server1, server2, "1601","server1"); + } + + @Test + @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) + public void WSTXMPR016BFVT() throws Exception { + recoveryTest(server1, server2, "1602","server2"); + } + + @Test + @ExpectedFFDC(value = {"javax.transaction.xa.XAException", "javax.transaction.RollbackException"}) + public void WSTXMPR016CFVT() throws Exception { + recoveryTest(server1, server2, "1603","both"); + } +} diff --git a/dev/com.ibm.ws.wsat.recovery_fat.multi.6/wsat.recovery_fat.bnd b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/wsat.recovery_fat.bnd new file mode 100644 index 00000000000..857d32af204 --- /dev/null +++ b/dev/com.ibm.ws.wsat.recovery_fat.multi.6/wsat.recovery_fat.bnd @@ -0,0 +1,18 @@ +#******************************************************************************* +# Copyright (c) 2020,2021 IBM Corporation and others. +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Eclipse Public License 2.0 +# which accompanies this distribution, and is available at +# http://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# IBM Corporation - initial API and implementation +#******************************************************************************* +-include= ~../cnf/resources/bnd/bundle.props +bVersion=1.0 + +#This file defines the main fat bundle + +Bundle-SymbolicName: ${basename;${basedir}} From eae3368f7e86370762d9b486993b60ac26d0dcde Mon Sep 17 00:00:00 2001 From: David Chan Date: Sat, 27 Jul 2024 11:39:55 -0400 Subject: [PATCH 044/166] Increase slow threshold to resolve any slow test issues, we're not testing for slowness/hung in this FAT at the momeent --- .../publish/servers/LibertyMetricServer/server.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/publish/servers/LibertyMetricServer/server.xml b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/publish/servers/LibertyMetricServer/server.xml index 0d6e4f83072..a3c8038061b 100644 --- a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/publish/servers/LibertyMetricServer/server.xml +++ b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/publish/servers/LibertyMetricServer/server.xml @@ -7,6 +7,11 @@ requestTiming-1.0 + + + + + From f4448636c0fe7c143966669929bccacdac8f7464 Mon Sep 17 00:00:00 2001 From: Andrew Rouse Date: Sat, 27 Jul 2024 22:51:40 +0100 Subject: [PATCH 045/166] FT-Telemetry metrics change to reflect spec update --- .../integration/MetricRecorderImpl.java | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/dev/io.openliberty.microprofile.faulttolerance.telemetry/src/io/openliberty/microprofile/faulttolerance/telemetry/metrics/integration/MetricRecorderImpl.java b/dev/io.openliberty.microprofile.faulttolerance.telemetry/src/io/openliberty/microprofile/faulttolerance/telemetry/metrics/integration/MetricRecorderImpl.java index 10df35bb701..e450c464c77 100644 --- a/dev/io.openliberty.microprofile.faulttolerance.telemetry/src/io/openliberty/microprofile/faulttolerance/telemetry/metrics/integration/MetricRecorderImpl.java +++ b/dev/io.openliberty.microprofile.faulttolerance.telemetry/src/io/openliberty/microprofile/faulttolerance/telemetry/metrics/integration/MetricRecorderImpl.java @@ -12,6 +12,7 @@ *******************************************************************************/ package io.openliberty.microprofile.faulttolerance.telemetry.metrics.integration; +import java.util.List; import java.util.function.LongSupplier; import com.ibm.websphere.ras.Tr; @@ -29,12 +30,12 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; +import io.opentelemetry.api.metrics.DoubleHistogram; import io.opentelemetry.api.metrics.LongCounter; -import io.opentelemetry.api.metrics.LongHistogram; import io.opentelemetry.api.metrics.Meter; import io.opentelemetry.api.metrics.ObservableLongCounter; -import io.opentelemetry.api.metrics.ObservableLongGauge; import io.opentelemetry.api.metrics.ObservableLongMeasurement; +import io.opentelemetry.api.metrics.ObservableLongUpDownCounter; /** * Records Fault Tolerance metrics for the FT 4.1 spec @@ -62,6 +63,7 @@ public class MetricRecorderImpl implements MetricRecorder { private static final AttributeKey STATE = AttributeKey.stringKey("state"); private static final AttributeKey TIMED_OUT = AttributeKey.stringKey("timedOut"); private static final AttributeKey METHOD = AttributeKey.stringKey("method"); + private static final List HISTOGRAM_BUCKETS = List.of(0.005, 0.01, 0.025, 0.05, 0.075, 0.1, 0.25, 0.5, 0.75, 1.0, 2.5, 5.0, 7.5, 10.0); // Every metric uses this tag to identify the method it's reporting metrics for private final Attributes methodAttribute; @@ -76,7 +78,7 @@ public class MetricRecorderImpl implements MetricRecorder { //Fields for @Timeout Metrics private final LongCounter ftTimeoutCallsTotal; - private final LongHistogram ftTimeoutExecutionDuration; + private final DoubleHistogram ftTimeoutExecutionDuration; //Fields for @CircuitBreaker Metrics private final LongCounter ftCircuitbreakerCallsTotal; @@ -99,11 +101,11 @@ private enum CircuitBreakerState { //Fields for @Bulkhead Metrics private final LongCounter ftBulkheadCallsTotal; @SuppressWarnings("unused") //This object will be passed into open telemetry by the builder and used there. - private final ObservableLongGauge ftBulkheadExecutionsRunning; + private final ObservableLongUpDownCounter ftBulkheadExecutionsRunning; @SuppressWarnings("unused") //This object will be passed into open telemetry by the builder and used there. - private final ObservableLongGauge ftBulkheadExecutionsWaiting; - private final LongHistogram ftBulkheadRunningDuration; - private final LongHistogram ftBulkheadWaitingDuration; + private final ObservableLongUpDownCounter ftBulkheadExecutionsWaiting; + private final DoubleHistogram ftBulkheadRunningDuration; + private final DoubleHistogram ftBulkheadWaitingDuration; private LongSupplier queuePopulationSupplier = null; private LongSupplier concurrentExecutionCountSupplier = null; @@ -137,7 +139,7 @@ public MetricRecorderImpl(String classAndMethod, Meter meter, RetryPolicy retryP if (timeoutPolicy != null) { ftTimeoutCallsTotal = meter.counterBuilder("ft.timeout.calls.total").setDescription(Tr.formatMessage(tc, "ft.timeout.calls.total.description")).build(); ftTimeoutExecutionDuration = meter.histogramBuilder("ft.timeout.executionDuration").setDescription(Tr.formatMessage(tc, - "ft.timeout.executionDuration.description")).ofLongs().setUnit("nanoseconds").build(); + "ft.timeout.executionDuration.description")).setUnit("seconds").setExplicitBucketBoundariesAdvice(HISTOGRAM_BUCKETS).build(); } else { ftTimeoutCallsTotal = null; ftTimeoutExecutionDuration = null; @@ -158,16 +160,16 @@ public MetricRecorderImpl(String classAndMethod, Meter meter, RetryPolicy retryP if (bulkheadPolicy != null) { ftBulkheadCallsTotal = meter.counterBuilder("ft.bulkhead.calls.total").setDescription(Tr.formatMessage(tc, "ft.bulkhead.calls.total.description")).build(); - ftBulkheadExecutionsRunning = meter.gaugeBuilder("ft.bulkhead.executionsRunning").ofLongs().setDescription(Tr.formatMessage(tc, - "ft.bulkhead.executionsRunning.description")).buildWithCallback(this::getConcurrentExecutions); + ftBulkheadExecutionsRunning = meter.upDownCounterBuilder("ft.bulkhead.executionsRunning").setDescription(Tr.formatMessage(tc, + "ft.bulkhead.executionsRunning.description")).buildWithCallback(this::getConcurrentExecutions); ftBulkheadRunningDuration = meter.histogramBuilder("ft.bulkhead.runningDuration").setDescription(Tr.formatMessage(tc, - "ft.bulkhead.runningDuration.description")).ofLongs().setUnit("nanoseconds").build(); + "ft.bulkhead.runningDuration.description")).setUnit("seconds").setExplicitBucketBoundariesAdvice(HISTOGRAM_BUCKETS).build(); if (isAsync == AsyncType.ASYNC) { - ftBulkheadExecutionsWaiting = meter.gaugeBuilder("ft.bulkhead.executionsWaiting").ofLongs().setDescription(Tr.formatMessage(tc, - "ft.bulkhead.executionsWaiting.description")).buildWithCallback(this::getQueuePopulation); + ftBulkheadExecutionsWaiting = meter.upDownCounterBuilder("ft.bulkhead.executionsWaiting").setDescription(Tr.formatMessage(tc, + "ft.bulkhead.executionsWaiting.description")).buildWithCallback(this::getQueuePopulation); ftBulkheadWaitingDuration = meter.histogramBuilder("ft.bulkhead.waitingDuration").setDescription(Tr.formatMessage(tc, - "ft.bulkhead.waitingDuration.description")).ofLongs().setUnit("nanoseconds").build(); + "ft.bulkhead.waitingDuration.description")).setUnit("seconds").setExplicitBucketBoundariesAdvice(HISTOGRAM_BUCKETS).build(); } else { ftBulkheadExecutionsWaiting = null; ftBulkheadWaitingDuration = null; @@ -274,7 +276,8 @@ public void incrementRetriesCount() { @Override public void recordTimeoutExecutionTime(long executionNanos) { if (ftTimeoutExecutionDuration != null) { - ftTimeoutExecutionDuration.record(executionNanos, methodAttribute); + double seconds = executionNanos / 1_000_000_000d; + ftTimeoutExecutionDuration.record(seconds, methodAttribute); } } @@ -418,7 +421,8 @@ private void getCircuitBreakerAccumulatedTimes(ObservableLongMeasurement measure @Override public void reportQueueWaitTime(long queueWaitNanos) { if (ftBulkheadWaitingDuration != null) { - ftBulkheadWaitingDuration.record(queueWaitNanos, methodAttribute); + double seconds = queueWaitNanos / 1_000_000_000d; + ftBulkheadWaitingDuration.record(seconds, methodAttribute); } } @@ -486,7 +490,8 @@ public void setBulkheadQueuePopulationSupplier(LongSupplier queuePopulationSuppl @Override public void recordBulkheadExecutionTime(long executionTime) { if (ftBulkheadRunningDuration != null) { - ftBulkheadRunningDuration.record(executionTime, methodAttribute); + double seconds = executionTime / 1_000_000_000d; + ftBulkheadRunningDuration.record(seconds, methodAttribute); } } From 917d64901d4aeaf1ba76956b755f2e3e6c413dc2 Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Tue, 23 Jul 2024 16:46:14 +0100 Subject: [PATCH 046/166] create skeleton of fat test --- .../internal_fat/TelemetryAttributesTest.java | 62 +++++++++++++++++++ .../apps/telemetry/ConfigServlet.java | 7 ++- .../apps/telemetry/ResourceServlet.java | 46 ++++++++++++++ .../bootstrap.properties | 1 + .../servers/Telemetry10Attributes/server.xml | 16 +++++ 5 files changed, 129 insertions(+), 3 deletions(-) create mode 100644 dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryAttributesTest.java create mode 100644 dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ResourceServlet.java create mode 100644 dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/bootstrap.properties create mode 100644 dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/server.xml diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryAttributesTest.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryAttributesTest.java new file mode 100644 index 00000000000..d73b9845911 --- /dev/null +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryAttributesTest.java @@ -0,0 +1,62 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.microprofile.telemetry.internal_fat; + +import static com.ibm.websphere.simplicity.ShrinkHelper.DeployOptions.SERVER_ONLY; + +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +import com.ibm.websphere.simplicity.ShrinkHelper; + +import componenttest.annotation.Server; +import componenttest.annotation.TestServlet; +import componenttest.annotation.TestServlets; +import componenttest.custom.junit.runner.FATRunner; +import componenttest.rules.repeater.RepeatTests; +import componenttest.topology.impl.LibertyServer; +import componenttest.topology.utils.FATServletClient; +import io.openliberty.microprofile.telemetry.internal_fat.apps.telemetry.ResourceServlet; + +//@Mode(TestMode.FULL) +@RunWith(FATRunner.class) +public class TelemetryAttributesTest extends FATServletClient { + + public static final String SERVER_NAME = "Telemetry10Attributes"; + public static final String APP_NAME = "TelemetryResourcesApp"; + + @Server(SERVER_NAME) + @TestServlets({ + @TestServlet(servlet = ResourceServlet.class, contextRoot = APP_NAME), + }) + public static LibertyServer server; + + @ClassRule + public static RepeatTests r = FATSuite.allMPRepeats(SERVER_NAME); + + @BeforeClass + public static void setUp() throws Exception { + WebArchive app = ShrinkWrap.create(WebArchive.class, APP_NAME + ".war") + .addClasses(ResourceServlet.class); + + ShrinkHelper.exportAppToServer(server, app, SERVER_ONLY); + server.addEnvVar("OTEL_SDK_DISABLED", "false"); + server.startServer(); + } + + @AfterClass + public static void tearDown() throws Exception { + server.stopServer(); + } +} diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ConfigServlet.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ConfigServlet.java index 8808b6774fd..082e5dbe28a 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ConfigServlet.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ConfigServlet.java @@ -15,6 +15,10 @@ import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.servlet.annotation.WebServlet; + import org.junit.Test; import componenttest.annotation.SkipForRepeat; @@ -24,9 +28,6 @@ import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.servlet.annotation.WebServlet; @SuppressWarnings("serial") @WebServlet("/testConfig") diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ResourceServlet.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ResourceServlet.java new file mode 100644 index 00000000000..f7cfdff2f46 --- /dev/null +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ResourceServlet.java @@ -0,0 +1,46 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ + +package io.openliberty.microprofile.telemetry.internal_fat.apps.telemetry; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertThat; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.servlet.annotation.WebServlet; + +import org.junit.Test; + +import componenttest.app.FATServlet; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.Tracer; + +@SuppressWarnings("serial") +@WebServlet("/testResources") +@ApplicationScoped +public class ResourceServlet extends FATServlet { + + @Inject + Tracer tracer; + + @Inject + OpenTelemetry openTelemetry; + + @Test + public void testServiceNameConfig() { + Tracer tracer = openTelemetry.getTracer("config-test", "1.0.0"); + Span span = tracer.spanBuilder("testSpan").startSpan(); + span.end(); + assertThat(openTelemetry.toString(), containsString("service.name=\"overridddddddeDone\"")); + } + +} \ No newline at end of file diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/bootstrap.properties b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/bootstrap.properties new file mode 100644 index 00000000000..4f1ae5a2e10 --- /dev/null +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/bootstrap.properties @@ -0,0 +1 @@ +bootstrap.include=../testports.properties diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/server.xml b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/server.xml new file mode 100644 index 00000000000..4627d6a081e --- /dev/null +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/server.xml @@ -0,0 +1,16 @@ + + + + + + servlet-6.0 + mpTelemetry-1.0 + componentTest-2.0 + + + + + + + + From 954b57aa6dc4b099e8fae219209820af12047f98 Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Tue, 23 Jul 2024 19:07:41 +0100 Subject: [PATCH 047/166] add attributes to open telemetry --- .../check_this_in_if_it_changes/pom.xml | 5 +++++ dev/cnf/oss_dependencies.maven | 1 + .../bnd.bnd | 1 + .../bnd.bnd | 2 +- .../bnd.bnd | 1 + ...enTelemetryVersionedConfigurationImpl.java | 22 +++++++++++++++---- .../info/OpenTelemetryInfoFactoryImpl.java | 4 ++-- 7 files changed, 29 insertions(+), 7 deletions(-) diff --git a/dev/cnf/dependabot/check_this_in_if_it_changes/pom.xml b/dev/cnf/dependabot/check_this_in_if_it_changes/pom.xml index 0decf0b772a..bd551ed22b9 100644 --- a/dev/cnf/dependabot/check_this_in_if_it_changes/pom.xml +++ b/dev/cnf/dependabot/check_this_in_if_it_changes/pom.xml @@ -676,6 +676,11 @@ opentelemetry-instrumentation-api 2.1.0 + + io.opentelemetry.instrumentation + opentelemetry-resources + 2.1.0-alpha + io.opentelemetry.instrumentation opentelemetry-runtime-telemetry-java8 diff --git a/dev/cnf/oss_dependencies.maven b/dev/cnf/oss_dependencies.maven index 63c75279fcc..4de22f26baf 100644 --- a/dev/cnf/oss_dependencies.maven +++ b/dev/cnf/oss_dependencies.maven @@ -131,6 +131,7 @@ io.opentelemetry.instrumentation:opentelemetry-instrumentation-api-semconv:1.32. io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:1.19.0 io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:1.29.0 io.opentelemetry.instrumentation:opentelemetry-instrumentation-api:2.1.0 +io.opentelemetry.instrumentation:opentelemetry-resources:2.1.0-alpha io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java8:2.4.0-alpha io.opentelemetry.semconv:opentelemetry-semconv:1.23.1-alpha io.opentelemetry.semconv:opentelemetry-semconv:1.25.0-alpha diff --git a/dev/io.openliberty.io.opentelemetry.2.0/bnd.bnd b/dev/io.openliberty.io.opentelemetry.2.0/bnd.bnd index 4970e733e28..abd290e4bc3 100644 --- a/dev/io.openliberty.io.opentelemetry.2.0/bnd.bnd +++ b/dev/io.openliberty.io.opentelemetry.2.0/bnd.bnd @@ -119,6 +119,7 @@ Require-Capability: osgi.ee; filter:="(&(osgi.ee=JavaSE)(version=11))" io.opentelemetry:opentelemetry-sdk-metrics;version='${openTelemetryVersion}';strategy=exact,\ io.opentelemetry:opentelemetry-sdk-trace;version='${openTelemetryVersion}';strategy=exact,\ io.opentelemetry.semconv:opentelemetry-semconv;version='${alphaSemconvOpenTelemetryVersion}';strategy=exact,\ + io.opentelemetry.instrumentation:opentelemetry-resources;version='${alphaOpenTelemetryInstrumentationVersion}';strategy=exact,\ com.ibm.ws.classloading;version=latest,\ org.eclipse.osgi;version=latest,\ com.ibm.websphere.appserver.spi.logging;version=latest,\ diff --git a/dev/io.openliberty.microprofile.telemetry.1.1.internal/bnd.bnd b/dev/io.openliberty.microprofile.telemetry.1.1.internal/bnd.bnd index 5d485795ad2..ca89163fb30 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.1.internal/bnd.bnd +++ b/dev/io.openliberty.microprofile.telemetry.1.1.internal/bnd.bnd @@ -76,4 +76,4 @@ Import-Package: \ io.openliberty.io.opentelemetry.1.29;version=latest,\ com.ibm.ws.kernel.boot.common;version=latest -WS-TraceGroup: TELEMETRY \ No newline at end of file +WS-TraceGroup: TELEMETRY diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.internal/bnd.bnd b/dev/io.openliberty.microprofile.telemetry.2.0.internal/bnd.bnd index ac9cd3e798d..7956801513a 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.internal/bnd.bnd +++ b/dev/io.openliberty.microprofile.telemetry.2.0.internal/bnd.bnd @@ -87,6 +87,7 @@ DynamicImport-Package: \ io.opentelemetry.semconv:opentelemetry-semconv;version='1.25.0.alpha';strategy=exact,\ com.ibm.ws.kernel.boot.common;version=latest,\ io.openliberty.http.monitor,\ + io.opentelemetry.instrumentation:opentelemetry-resources;version=2.1.0.alpha,\ com.ibm.ws.connectionpool.monitor WS-TraceGroup: TELEMETRY diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java index d77ddcb5611..6b389ba718c 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java +++ b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java @@ -15,18 +15,23 @@ import java.util.Map; import java.util.function.BiFunction; +import org.osgi.service.component.annotations.Component; + import com.ibm.websphere.ras.Tr; import com.ibm.websphere.ras.TraceComponent; import com.ibm.ws.ffdc.annotation.FFDCIgnore; -import org.osgi.service.component.annotations.Component; - import io.openliberty.microprofile.telemetry.internal.common.AgentDetection; import io.openliberty.microprofile.telemetry.internal.common.constants.OpenTelemetryConstants; import io.openliberty.microprofile.telemetry.internal.common.info.OpenTelemetryInfoFactoryImpl; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.common.AttributeKey; +import io.opentelemetry.instrumentation.resources.ContainerResource; +import io.opentelemetry.instrumentation.resources.HostResource; +import io.opentelemetry.instrumentation.resources.OsResource; +import io.opentelemetry.instrumentation.resources.ProcessResource; +import io.opentelemetry.instrumentation.resources.ProcessRuntimeResource; import io.opentelemetry.instrumentation.runtimemetrics.java8.Classes; import io.opentelemetry.instrumentation.runtimemetrics.java8.Cpu; import io.opentelemetry.instrumentation.runtimemetrics.java8.GarbageCollector; @@ -90,7 +95,7 @@ public OpenTelemetry createServerOpenTelemetryInfo(HashMap telem //Builds tracer provider if user has enabled tracing aspects with config properties if (!checkDisabled(telemetryProperties)) { OpenTelemetry openTelemetry = AccessController.doPrivileged((PrivilegedAction) () -> { - return buildOpenTelemetry(telemetryProperties, OpenTelemetryVersionedConfigurationImpl::customizeResource, classLoader); + return buildOpenTelemetry(telemetryProperties, this::customizeResource, classLoader); }); if (openTelemetry != null) { @@ -122,7 +127,8 @@ public OpenTelemetry createServerOpenTelemetryInfo(HashMap telem } - private static Resource customizeResource(Resource resource, ConfigProperties c) { + private Resource customizeResource(Resource resource, ConfigProperties c) { + resource = mergeInOtelResources(resource); ResourceBuilder builder = resource.toBuilder(); builder.put(AttributeKey.stringKey("service.name"), OpenTelemetryConstants.OTEL_RUNTIME_INSTANCE_NAME); @@ -139,6 +145,14 @@ private static boolean checkDisabled(Map oTelConfigs) { return true; } + private Resource mergeInOtelResources(Resource resource) { + return resource.merge(ContainerResource.get()) + .merge(HostResource.get()) + .merge(OsResource.get()) + .merge(ProcessResource.get()) + .merge(ProcessRuntimeResource.get()); + } + @FFDCIgnore(ClassNotFoundException.class) private boolean runningOnJ9OrHotspot() { diff --git a/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java b/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java index ca67d5b2cc1..540b588fd26 100644 --- a/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java +++ b/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java @@ -172,7 +172,7 @@ public OpenTelemetryInfo createOpenTelemetryInfo() { if (!checkDisabled(telemetryProperties)) { OpenTelemetry openTelemetry = AccessController.doPrivileged((PrivilegedAction) () -> { return openTelemetryVersionedConfiguration.buildOpenTelemetry(telemetryProperties, - OpenTelemetryInfoFactoryImpl::customizeResource, Thread.currentThread().getContextClassLoader()); + this::customizeResource, Thread.currentThread().getContextClassLoader()); }); if (openTelemetry != null) { @@ -350,7 +350,7 @@ public void applicationStopped(ApplicationInfo appInfo) { } //Adds the service name to the resource attributes - private static Resource customizeResource(Resource resource, ConfigProperties c) { + private Resource customizeResource(Resource resource, ConfigProperties c) { ResourceBuilder builder = resource.toBuilder(); builder.put(AttributeKey.stringKey("service.name"), getServiceName(c)); return builder.build(); From 26d0b072d0cd129fe1dfdab3e68bb3859601db58 Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Wed, 24 Jul 2024 08:30:09 +0100 Subject: [PATCH 048/166] getServiceName on mp 2.0 --- .../TelemetryConfigEnvOnlyTest.java | 4 +--- .../internal_fat/TelemetryConfigEnvTest.java | 4 +--- .../internal_fat/TelemetryConfigNullTest.java | 4 +--- .../TelemetryConfigServerVarTest.java | 4 +--- .../TelemetryConfigSystemPropTest.java | 4 +--- .../apps/telemetry/ConfigServlet.java | 7 +----- ...enTelemetryVersionedConfigurationImpl.java | 12 ++++++++-- .../info/OpenTelemetryInfoFactoryImpl.java | 23 +++++++++++++------ 8 files changed, 32 insertions(+), 30 deletions(-) diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigEnvOnlyTest.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigEnvOnlyTest.java index 03108152813..7e60cfdef7a 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigEnvOnlyTest.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigEnvOnlyTest.java @@ -26,8 +26,6 @@ import componenttest.custom.junit.runner.FATRunner; import componenttest.custom.junit.runner.Mode; import componenttest.custom.junit.runner.Mode.TestMode; -import componenttest.rules.repeater.FeatureReplacementAction; -import componenttest.rules.repeater.MicroProfileActions; import componenttest.rules.repeater.RepeatTests; import componenttest.topology.impl.LibertyServer; import componenttest.topology.utils.FATServletClient; @@ -48,7 +46,7 @@ public class TelemetryConfigEnvOnlyTest extends FATServletClient { @ClassRule public static RepeatTests r = FATSuite.allMPRepeats(SERVER_NAME); - + @BeforeClass public static void setUp() throws Exception { WebArchive app = ShrinkWrap.create(WebArchive.class, APP_NAME + ".war") diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigEnvTest.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigEnvTest.java index c75042df993..4387e8f81fe 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigEnvTest.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigEnvTest.java @@ -26,8 +26,6 @@ import componenttest.custom.junit.runner.FATRunner; import componenttest.custom.junit.runner.Mode; import componenttest.custom.junit.runner.Mode.TestMode; -import componenttest.rules.repeater.FeatureReplacementAction; -import componenttest.rules.repeater.MicroProfileActions; import componenttest.rules.repeater.RepeatTests; import componenttest.topology.impl.LibertyServer; import componenttest.topology.utils.FATServletClient; @@ -48,7 +46,7 @@ public class TelemetryConfigEnvTest extends FATServletClient { @ClassRule public static RepeatTests r = FATSuite.allMPRepeats(SERVER_NAME); - + @BeforeClass public static void setUp() throws Exception { WebArchive app = ShrinkWrap.create(WebArchive.class, APP_NAME + ".war") diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigNullTest.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigNullTest.java index 2f64a273160..704468ae771 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigNullTest.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigNullTest.java @@ -26,8 +26,6 @@ import componenttest.custom.junit.runner.FATRunner; import componenttest.custom.junit.runner.Mode; import componenttest.custom.junit.runner.Mode.TestMode; -import componenttest.rules.repeater.FeatureReplacementAction; -import componenttest.rules.repeater.MicroProfileActions; import componenttest.rules.repeater.RepeatTests; import componenttest.topology.impl.LibertyServer; import componenttest.topology.utils.FATServletClient; @@ -48,7 +46,7 @@ public class TelemetryConfigNullTest extends FATServletClient { @ClassRule public static RepeatTests r = FATSuite.allMPRepeats(SERVER_NAME); - + @BeforeClass public static void setUp() throws Exception { WebArchive app = ShrinkWrap.create(WebArchive.class, APP_NAME + ".war") diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigServerVarTest.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigServerVarTest.java index 67505fc6208..35882edb124 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigServerVarTest.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigServerVarTest.java @@ -26,8 +26,6 @@ import componenttest.custom.junit.runner.FATRunner; import componenttest.custom.junit.runner.Mode; import componenttest.custom.junit.runner.Mode.TestMode; -import componenttest.rules.repeater.FeatureReplacementAction; -import componenttest.rules.repeater.MicroProfileActions; import componenttest.rules.repeater.RepeatTests; import componenttest.topology.impl.LibertyServer; import componenttest.topology.utils.FATServletClient; @@ -48,7 +46,7 @@ public class TelemetryConfigServerVarTest extends FATServletClient { @ClassRule public static RepeatTests r = FATSuite.allMPRepeats(SERVER_NAME); - + @BeforeClass public static void setUp() throws Exception { WebArchive app = ShrinkWrap.create(WebArchive.class, APP_NAME + ".war") diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigSystemPropTest.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigSystemPropTest.java index d1f249da7de..2cfc1c88a44 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigSystemPropTest.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryConfigSystemPropTest.java @@ -26,8 +26,6 @@ import componenttest.custom.junit.runner.FATRunner; import componenttest.custom.junit.runner.Mode; import componenttest.custom.junit.runner.Mode.TestMode; -import componenttest.rules.repeater.FeatureReplacementAction; -import componenttest.rules.repeater.MicroProfileActions; import componenttest.rules.repeater.RepeatTests; import componenttest.topology.impl.LibertyServer; import componenttest.topology.utils.FATServletClient; @@ -48,7 +46,7 @@ public class TelemetryConfigSystemPropTest extends FATServletClient { @ClassRule public static RepeatTests r = FATSuite.allMPRepeats(SERVER_NAME); - + @BeforeClass public static void setUp() throws Exception { WebArchive app = ShrinkWrap.create(WebArchive.class, APP_NAME + ".war") diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ConfigServlet.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ConfigServlet.java index 082e5dbe28a..2fad4733d62 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ConfigServlet.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ConfigServlet.java @@ -21,10 +21,7 @@ import org.junit.Test; -import componenttest.annotation.SkipForRepeat; import componenttest.app.FATServlet; -import componenttest.rules.repeater.MicroProfileActions; -import io.openliberty.microprofile.telemetry.internal_fat.shared.TelemetryActions; import io.opentelemetry.api.OpenTelemetry; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; @@ -52,8 +49,6 @@ public class ConfigServlet extends FATServlet { //Tests otel.service.name is overrideDone instead of overrideThis*Property @Test - @SkipForRepeat({ MicroProfileActions.MP70_EE11_ID, MicroProfileActions.MP70_EE10_ID, TelemetryActions.MP50_MPTEL20_ID, TelemetryActions.MP41_MPTEL20_ID, - TelemetryActions.MP14_MPTEL20_ID }) public void testServiceNameConfig() { Tracer tracer = openTelemetry.getTracer("config-test", "1.0.0"); Span span = tracer.spanBuilder("testSpan").startSpan(); @@ -70,4 +65,4 @@ public void testSDKDisabledConfig() { span.end(); } -} \ No newline at end of file +} diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java index 6b389ba718c..79847cbc67b 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java +++ b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java @@ -124,17 +124,25 @@ public OpenTelemetry createServerOpenTelemetryInfo(HashMap telem Tr.error(tc, Tr.formatMessage(tc, "CWMOT5002.telemetry.error", e)); return null; } - } + //TODO This and the next method should be refactored into the factory. private Resource customizeResource(Resource resource, ConfigProperties c) { resource = mergeInOtelResources(resource); ResourceBuilder builder = resource.toBuilder(); - builder.put(AttributeKey.stringKey("service.name"), OpenTelemetryConstants.OTEL_RUNTIME_INSTANCE_NAME); + builder.put(AttributeKey.stringKey("service.name"), getServiceName(c)); return builder.build(); } + private String getServiceName(ConfigProperties c) { + String serviceName = c.getString(OpenTelemetryConstants.SERVICE_NAME_PROPERTY); + if (serviceName == null) { + serviceName = "unkown_service"; + } + return serviceName; + } + private static boolean checkDisabled(Map oTelConfigs) { //In order to enable any of the tracing aspects, the configuration otel.sdk.disabled=false must be specified in any of the configuration sources available via MicroProfile Config. if (oTelConfigs.get(OpenTelemetryConstants.ENV_DISABLE_PROPERTY) != null) { diff --git a/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java b/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java index 540b588fd26..994d832408c 100644 --- a/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java +++ b/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java @@ -352,20 +352,29 @@ public void applicationStopped(ApplicationInfo appInfo) { //Adds the service name to the resource attributes private Resource customizeResource(Resource resource, ConfigProperties c) { ResourceBuilder builder = resource.toBuilder(); + + //Don't use ResourceAttributes.SERVICE_NAME due to semcov moving the class around builder.put(AttributeKey.stringKey("service.name"), getServiceName(c)); return builder.build(); } //Uses application name if the user has not given configured service.name resource attribute - private static String getServiceName(ConfigProperties c) { - String appName = c.getString(OpenTelemetryConstants.SERVICE_NAME_PROPERTY); - ComponentMetaData cmd = ComponentMetaDataAccessorImpl.getComponentMetaDataAccessor().getComponentMetaData(); - if (appName == null) { - if (cmd != null) { - appName = cmd.getModuleMetaData().getApplicationMetaData().getName(); + private String getServiceName(ConfigProperties c) { + String serviceName = c.getString(OpenTelemetryConstants.SERVICE_NAME_PROPERTY); + if (serviceName == null) { + + if (!isRuntimeEnabled()) { + ComponentMetaData cmd = ComponentMetaDataAccessorImpl.getComponentMetaDataAccessor().getComponentMetaData(); + if (cmd != null) { + serviceName = cmd.getModuleMetaData().getApplicationMetaData().getName(); + } + } + + if (serviceName == null) { + serviceName = "unkown_service"; } } - return appName; + return serviceName; } //Interfaces and private classes only relevent to this factory. From 7009db43b3edd02e93aebb12f21f6c3cfe1b8d42 Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Wed, 24 Jul 2024 11:17:10 +0100 Subject: [PATCH 049/166] Add service instance id attribute --- .../config/OpenTelemetryVersionedConfigurationImpl.java | 2 ++ .../internal/common/constants/OpenTelemetryConstants.java | 7 +++++++ .../internal/common/info/OpenTelemetryInfoFactoryImpl.java | 3 +-- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java index 79847cbc67b..22de6a0b2d0 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java +++ b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java @@ -13,6 +13,7 @@ import java.security.PrivilegedAction; import java.util.HashMap; import java.util.Map; +import java.util.UUID; import java.util.function.BiFunction; import org.osgi.service.component.annotations.Component; @@ -131,6 +132,7 @@ private Resource customizeResource(Resource resource, ConfigProperties c) { resource = mergeInOtelResources(resource); ResourceBuilder builder = resource.toBuilder(); builder.put(AttributeKey.stringKey("service.name"), getServiceName(c)); + builder.put(OpenTelemetryConstants.KEY_SERVICE_INSTANCE_ID, UUID.randomUUID().toString()); return builder.build(); } diff --git a/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/constants/OpenTelemetryConstants.java b/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/constants/OpenTelemetryConstants.java index 40da67e53a4..13ce14abdc2 100644 --- a/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/constants/OpenTelemetryConstants.java +++ b/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/constants/OpenTelemetryConstants.java @@ -12,6 +12,8 @@ *******************************************************************************/ package io.openliberty.microprofile.telemetry.internal.common.constants; +import io.opentelemetry.api.common.AttributeKey; + public class OpenTelemetryConstants { public static final String ENV_DISABLE_PROPERTY = "OTEL_SDK_DISABLED"; @@ -31,6 +33,11 @@ public class OpenTelemetryConstants { //HTTP Metric units public static final String OTEL_SECONDS_UNIT = "s"; + //Attribute Keys + //We're not pulling these from constants in semconv libraries because the import will be version specific + public static final AttributeKey KEY_SERVICE_NAME = AttributeKey.stringKey("service.name"); + public static final AttributeKey KEY_SERVICE_INSTANCE_ID = AttributeKey.stringKey("service.instance.id"); + //OpenLiberty namespace prefix public static final String NAME_SPACE_PREFIX = "io.openliberty."; diff --git a/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java b/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java index 994d832408c..f024ba782c4 100644 --- a/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java +++ b/dev/io.openliberty.microprofile.telemetry.internal.common/src/io/openliberty/microprofile/telemetry/internal/common/info/OpenTelemetryInfoFactoryImpl.java @@ -45,7 +45,6 @@ import io.openliberty.microprofile.telemetry.internal.interfaces.OpenTelemetryInfoFactory; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.OpenTelemetry; -import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.resources.ResourceBuilder; @@ -354,7 +353,7 @@ private Resource customizeResource(Resource resource, ConfigProperties c) { ResourceBuilder builder = resource.toBuilder(); //Don't use ResourceAttributes.SERVICE_NAME due to semcov moving the class around - builder.put(AttributeKey.stringKey("service.name"), getServiceName(c)); + builder.put(OpenTelemetryConstants.KEY_SERVICE_NAME, getServiceName(c)); return builder.build(); } From 5a1a97113ce84d2f9de2e360784602302436124a Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Wed, 24 Jul 2024 13:32:05 +0100 Subject: [PATCH 050/166] flesh out test --- .../telemetry/internal_fat/FATSuite.java | 19 ++++++--- .../internal_fat/TelemetryAttributesTest.java | 9 ++-- .../apps/telemetry/ResourceServlet.java | 42 ++++++++++++++++++- .../bootstrap.properties | 0 .../server.xml | 0 5 files changed, 60 insertions(+), 10 deletions(-) rename dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/{Telemetry10Attributes => Telemetry10ResourceAttributes}/bootstrap.properties (100%) rename dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/{Telemetry10Attributes => Telemetry10ResourceAttributes}/server.xml (100%) diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/FATSuite.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/FATSuite.java index 27cac47b78d..3f641c84fea 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/FATSuite.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/FATSuite.java @@ -46,29 +46,38 @@ TelemetryGlobalOpenTelemetryTest.class, TelemetryDisabledTest.class, TelemetryServletTest.class, - TelemetryWithSpanErrorTest.class + TelemetryWithSpanErrorTest.class, + TelemetryAttributesTest.class }) public class FATSuite { public static RepeatTests allMPRepeats(String serverName) { return TelemetryActions - .repeat(serverName, MicroProfileActions.MP70_EE11, MicroProfileActions.MP70_EE10, MicroProfileActions.MP61, TelemetryActions.MP14_MPTEL11, TelemetryActions.MP41_MPTEL11, TelemetryActions.MP50_MPTEL11, + .repeat(serverName, MicroProfileActions.MP70_EE11, MicroProfileActions.MP70_EE10, MicroProfileActions.MP61, TelemetryActions.MP14_MPTEL11, + TelemetryActions.MP41_MPTEL11, TelemetryActions.MP50_MPTEL11, TelemetryActions.MP50_MPTEL20, TelemetryActions.MP41_MPTEL20, TelemetryActions.MP14_MPTEL20); } - public static RepeatTests allMPRepeatsWithoutMPTel20(String serverName) { return TelemetryActions .repeat(serverName, MicroProfileActions.MP61, TelemetryActions.MP14_MPTEL11, TelemetryActions.MP41_MPTEL11, TelemetryActions.MP50_MPTEL11, MicroProfileActions.MP60); } + public static RepeatTests allMPRepeatsWithMPTel20OrLater(String serverName) { + return TelemetryActions + .repeat(serverName, MicroProfileActions.MP70_EE11, MicroProfileActions.MP70_EE10, + TelemetryActions.MP50_MPTEL20, TelemetryActions.MP41_MPTEL20, TelemetryActions.MP14_MPTEL20); + } + public static String getTelemetryVersionUnderTest() { if (RepeatTestFilter.isRepeatActionActive(MicroProfileActions.MP60_ID)) { return "1.0"; - } else if (RepeatTestFilter.isRepeatActionActive(MicroProfileActions.MP70_EE11_ID) || RepeatTestFilter.isRepeatActionActive(MicroProfileActions.MP70_EE10_ID) || RepeatTestFilter.isRepeatActionActive(TelemetryActions.MP50_MPTEL20_ID) || RepeatTestFilter.isRepeatActionActive(TelemetryActions.MP41_MPTEL20_ID) || RepeatTestFilter.isRepeatActionActive(TelemetryActions.MP14_MPTEL20_ID)){ + } else if (RepeatTestFilter.isRepeatActionActive(MicroProfileActions.MP70_EE11_ID) || RepeatTestFilter.isRepeatActionActive(MicroProfileActions.MP70_EE10_ID) + || RepeatTestFilter.isRepeatActionActive(TelemetryActions.MP50_MPTEL20_ID) || RepeatTestFilter.isRepeatActionActive(TelemetryActions.MP41_MPTEL20_ID) + || RepeatTestFilter.isRepeatActionActive(TelemetryActions.MP14_MPTEL20_ID)) { return "2.0"; - } else{ + } else { return "1.1"; } } diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryAttributesTest.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryAttributesTest.java index d73b9845911..c2f4018ef3b 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryAttributesTest.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryAttributesTest.java @@ -24,16 +24,18 @@ import componenttest.annotation.TestServlet; import componenttest.annotation.TestServlets; import componenttest.custom.junit.runner.FATRunner; +import componenttest.custom.junit.runner.Mode; +import componenttest.custom.junit.runner.Mode.TestMode; import componenttest.rules.repeater.RepeatTests; import componenttest.topology.impl.LibertyServer; import componenttest.topology.utils.FATServletClient; import io.openliberty.microprofile.telemetry.internal_fat.apps.telemetry.ResourceServlet; -//@Mode(TestMode.FULL) +@Mode(TestMode.FULL) @RunWith(FATRunner.class) public class TelemetryAttributesTest extends FATServletClient { - public static final String SERVER_NAME = "Telemetry10Attributes"; + public static final String SERVER_NAME = "Telemetry10ResourceAttributes"; public static final String APP_NAME = "TelemetryResourcesApp"; @Server(SERVER_NAME) @@ -42,8 +44,9 @@ public class TelemetryAttributesTest extends FATServletClient { }) public static LibertyServer server; + //This test tests resources that were added to Liberty in MPTel 2.0 @ClassRule - public static RepeatTests r = FATSuite.allMPRepeats(SERVER_NAME); + public static RepeatTests r = FATSuite.allMPRepeatsWithMPTel20OrLater(SERVER_NAME); @BeforeClass public static void setUp() throws Exception { diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ResourceServlet.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ResourceServlet.java index f7cfdff2f46..8ff4bfda6b5 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ResourceServlet.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ResourceServlet.java @@ -13,6 +13,9 @@ import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertThat; +import java.net.InetAddress; +import java.net.UnknownHostException; + import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import javax.servlet.annotation.WebServlet; @@ -36,11 +39,46 @@ public class ResourceServlet extends FATServlet { OpenTelemetry openTelemetry; @Test - public void testServiceNameConfig() { + public void testServiceNameConfig() throws UnknownHostException { Tracer tracer = openTelemetry.getTracer("config-test", "1.0.0"); Span span = tracer.spanBuilder("testSpan").startSpan(); span.end(); - assertThat(openTelemetry.toString(), containsString("service.name=\"overridddddddeDone\"")); + + String output = openTelemetry.toString().toLowerCase(); + + assertThat(output, containsString("host.arch=\"" + System.getProperty("os.arch") + "\"".toLowerCase())); + assertThat(output, containsString("host.name=\"" + InetAddress.getLocalHost().getHostName().toString() + "\"".toLowerCase())); + + //This may fail if we run on an OS that OpenTelemetry doesn't expect, but I do not believe we do + String osName = System.getProperty("os.name"); + osName = osName != null ? osName.toLowerCase() : ""; + String osVersion = System.getProperty("os.version"); + osVersion = osVersion != null ? osVersion.toLowerCase() : ""; + String osDescription = osVersion != null ? osName + ' ' + osVersion : osName; + + assertThat(output, containsString("os.type=\"" + osName + "\"")); + assertThat(output, containsString("os.description=\"" + osDescription + "\"")); + + //Keeping this simple since the reliable way to do this is java 9+ + assertThat(output, containsString("process.command_line")); + assertThat(output, containsString("ws-server.jar Telemetry10ResourceAttributes".toLowerCase())); + + //This will be too variable to predict a sensible + assertThat(output, containsString("process.executable.path")); + //The oTel libraries say their code works for "almost all JDKs. playing it safe with this one" + assertThat(output, containsString("process.pid")); + + //Locally this failed because it was reading outputs from two different JDKs. + //While I know its because my environment is in a state from testing various JDKs + //I'm cutting out the output to stop anyone else hitting similar issues. + assertThat(output, containsString("process.runtime.name")); + assertThat(output, containsString("process.runtime.version")); + assertThat(output, containsString("process.runtime.description")); + + assertThat(output, containsString("telemetry.sdk.language=\"java\"")); + assertThat(output, containsString("telemetry.sdk.name=\"opentelemetry\"")); + //Not testing telemetry.sdk.version for the obvious reason + } } \ No newline at end of file diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/bootstrap.properties b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10ResourceAttributes/bootstrap.properties similarity index 100% rename from dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/bootstrap.properties rename to dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10ResourceAttributes/bootstrap.properties diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/server.xml b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10ResourceAttributes/server.xml similarity index 100% rename from dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Attributes/server.xml rename to dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10ResourceAttributes/server.xml From 20403eba38df451b980961b6666082f3aca61912 Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Fri, 26 Jul 2024 11:56:57 +0100 Subject: [PATCH 051/166] update test to expect a service name from env on telemetry 2.0 --- .../http/monitor/fat/Constants.java | 2 +- .../http/monitor/fat/ContainerNoAppTest.java | 2 +- .../internal/tests/JaegerBaseTest.java | 2 +- .../monitor_fat/LibertyMetricsTest.java | 50 +++++++++---------- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/Constants.java b/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/Constants.java index 89a67cfb934..31c79a81ee9 100644 --- a/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/Constants.java +++ b/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/Constants.java @@ -53,5 +53,5 @@ public class Constants { //other static final String UNKOWN_SERVICE = "unknown_service:java"; - static final String RUNTIME_INSTANCE_SERVICE = "io.openliberty.microprofile.telemetry.runtime"; + static final String OTEL_SERVICE_NOT_SET = "unkown_service"; } diff --git a/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/ContainerNoAppTest.java b/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/ContainerNoAppTest.java index ab0c96001a8..cba1bab2cb2 100644 --- a/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/ContainerNoAppTest.java +++ b/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/ContainerNoAppTest.java @@ -78,7 +78,7 @@ public void c_noApp_splashPage() throws Exception { String res = requestHttpServlet(route, server, requestMethod); //Allow time for the collector to receive and expose metrics TimeUnit.SECONDS.sleep(4); - assertTrue(validateMpTelemetryHttp(Constants.RUNTIME_INSTANCE_SERVICE, getContainerCollectorMetrics(container), route, responseStatus, requestMethod)); + assertTrue(validateMpTelemetryHttp(Constants.OTEL_SERVICE_NOT_SET, getContainerCollectorMetrics(container), route, responseStatus, requestMethod)); } diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal.container_fat/fat/src/io/openliberty/microprofile/telemetry/internal/tests/JaegerBaseTest.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal.container_fat/fat/src/io/openliberty/microprofile/telemetry/internal/tests/JaegerBaseTest.java index 684558b865f..c9a599b8103 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal.container_fat/fat/src/io/openliberty/microprofile/telemetry/internal/tests/JaegerBaseTest.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal.container_fat/fat/src/io/openliberty/microprofile/telemetry/internal/tests/JaegerBaseTest.java @@ -113,7 +113,7 @@ public void testBasicTelemetry2() throws Exception { .withAttribute(HTTP_REQUEST_METHOD, "GET")); // This is mostly just to check that getSpansForServiceName works for TracingNotEnabledTest - List allSpans = client.getSpansForServiceName("io.openliberty.microprofile.telemetry.runtime"); + List allSpans = client.getSpansForServiceName("Test service"); assertThat(allSpans, hasItem(span)); } diff --git a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java index 83bb9ec9e45..d42d75cfef6 100644 --- a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java +++ b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java @@ -111,11 +111,11 @@ public void sessionsMetricTest() throws Exception { // -Dglobal.debug.java2.sec= TimeUnit.SECONDS.sleep(4); checkStrings(getContainerCollectorMetrics(container), - new String[] { "io_openliberty_session_created_total{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_session_live{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_session_active{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_session_invalidated_total{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_session_invalidated_by_timeout_total{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"io.openliberty.microprofile.telemetry.runtime\"}" }); + new String[] { "io_openliberty_session_created_total{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}", + "io_openliberty_session_live{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}", + "io_openliberty_session_active{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}", + "io_openliberty_session_invalidated_total{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}", + "io_openliberty_session_invalidated_by_timeout_total{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}" }); } @@ -137,29 +137,29 @@ public void connectionPoolTest() throws Exception { TimeUnit.SECONDS.sleep(4); checkStrings(getContainerCollectorMetrics(container), - new String[] { "io_openliberty_connection_pool_handle_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_free{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_destroyed_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_created_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", + new String[] { "io_openliberty_connection_pool_handle_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_free{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_destroyed_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_created_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_bucket{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\",le=\"+Inf\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_sum{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_queued_requests_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_used_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", + "io_openliberty_connection_pool_connection_use_time_seconds_bucket{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\",le=\"+Inf\"}", + "io_openliberty_connection_pool_connection_use_time_seconds_sum{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_use_time_seconds_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_queued_requests_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_used_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_handle_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_free{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_destroyed_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_created_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", + "io_openliberty_connection_pool_handle_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_free{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_destroyed_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_created_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_bucket{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\",le=\"+Inf\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_sum{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_queued_requests_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_connection_pool_connection_used_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"io.openliberty.microprofile.telemetry.runtime\"}" }); + "io_openliberty_connection_pool_connection_use_time_seconds_bucket{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\",le=\"+Inf\"}", + "io_openliberty_connection_pool_connection_use_time_seconds_sum{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_use_time_seconds_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_queued_requests_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_used_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}" }); } } From acfe4a9aa34184529a5fb0b29d80bfc4c1d2974d Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Fri, 26 Jul 2024 16:47:12 +0100 Subject: [PATCH 052/166] Test for unkown service name --- .../telemetry/internal_fat/FATSuite.java | 3 +- .../TelemetryRuntimeInstanceTest.java | 75 +++++++++++++++++++ .../telemetry/RuntimeInstanceServlet.java | 66 ++++++++++++++++ .../apps/telemetry/ServiceNameServlet.java | 9 ++- 4 files changed, 149 insertions(+), 4 deletions(-) create mode 100644 dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryRuntimeInstanceTest.java create mode 100644 dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/RuntimeInstanceServlet.java diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/FATSuite.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/FATSuite.java index 3f641c84fea..b26af61585f 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/FATSuite.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/FATSuite.java @@ -47,7 +47,8 @@ TelemetryDisabledTest.class, TelemetryServletTest.class, TelemetryWithSpanErrorTest.class, - TelemetryAttributesTest.class + TelemetryAttributesTest.class, + TelemetryRuntimeInstanceTest.class, }) public class FATSuite { diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryRuntimeInstanceTest.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryRuntimeInstanceTest.java new file mode 100644 index 00000000000..53401f825f0 --- /dev/null +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/TelemetryRuntimeInstanceTest.java @@ -0,0 +1,75 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package io.openliberty.microprofile.telemetry.internal_fat; + +import static com.ibm.websphere.simplicity.ShrinkHelper.DeployOptions.SERVER_ONLY; + +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.ClassRule; +import org.junit.runner.RunWith; + +import com.ibm.websphere.simplicity.ShrinkHelper; + +import componenttest.annotation.Server; +import componenttest.annotation.TestServlet; +import componenttest.annotation.TestServlets; +import componenttest.custom.junit.runner.FATRunner; +import componenttest.rules.repeater.RepeatTests; +import componenttest.topology.impl.LibertyServer; +import componenttest.topology.utils.FATServletClient; +import io.openliberty.microprofile.telemetry.internal_fat.apps.telemetry.RuntimeInstanceServlet; +import io.openliberty.microprofile.telemetry.internal_fat.common.TestSpans; +import io.openliberty.microprofile.telemetry.internal_fat.common.spanexporter.InMemorySpanExporter; +import io.openliberty.microprofile.telemetry.internal_fat.common.spanexporter.InMemorySpanExporterProvider; +import io.openliberty.microprofile.telemetry.internal_fat.shared.spans.AbstractSpanMatcher; +import io.opentelemetry.sdk.autoconfigure.spi.traces.ConfigurableSpanExporterProvider; + +@RunWith(FATRunner.class) +public class TelemetryRuntimeInstanceTest extends FATServletClient { + + public static final String SERVER_NAME = "Telemetry10ResourceAttributes"; + public static final String APP_NAME = "TelemetryResourcesApp"; + + @Server(SERVER_NAME) + @TestServlets({ + @TestServlet(servlet = RuntimeInstanceServlet.class, contextRoot = APP_NAME), + }) + public static LibertyServer server; + + @ClassRule + public static RepeatTests r = FATSuite.allMPRepeatsWithMPTel20OrLater(SERVER_NAME); + + @BeforeClass + public static void setUp() throws Exception { + WebArchive app = ShrinkWrap.create(WebArchive.class, APP_NAME + ".war") + .addAsResource(new StringAsset("otel.traces.exporter=in-memory\notel.bsp.schedule.delay=100"), + "META-INF/microprofile-config.properties") + .addClasses(InMemorySpanExporter.class, InMemorySpanExporterProvider.class, RuntimeInstanceServlet.class) + .addPackage(TestSpans.class.getPackage()) + .addPackage(AbstractSpanMatcher.class.getPackage()) + .addAsServiceProvider(ConfigurableSpanExporterProvider.class, InMemorySpanExporterProvider.class); + + ShrinkHelper.exportAppToServer(server, app, SERVER_ONLY); + server.addEnvVar("OTEL_SDK_DISABLED", "false"); + server.startServer(); + } + + @AfterClass + public static void tearDown() throws Exception { + server.stopServer(); + } +} \ No newline at end of file diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/RuntimeInstanceServlet.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/RuntimeInstanceServlet.java new file mode 100644 index 00000000000..dd52236fa95 --- /dev/null +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/RuntimeInstanceServlet.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ + +package io.openliberty.microprofile.telemetry.internal_fat.apps.telemetry; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertThat; + +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.servlet.annotation.WebServlet; + +import org.junit.Test; + +import componenttest.app.FATServlet; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Span; +import io.opentelemetry.api.trace.Tracer; + +@SuppressWarnings("serial") +@WebServlet("/testRuntime") +@ApplicationScoped +public class RuntimeInstanceServlet extends FATServlet { + + @Inject + Tracer tracer; + + @Inject + Span span; + + @Inject + OpenTelemetry openTelemetry; + + private static final String INVALID_SPAN_ID = "0000000000000000"; + + //Tests otel.service.name is undefined on the runtime instance if we do not set it an environment variable or system property + //See ConfigServlet for the tests that ensure it is correct when it is defined. + //See also ServiceNameServlet which shows what happens when it is undefind on Tel 2.0 but we + //are not using the runtime instance. + @Test + public void testServiceNameUnkownOnRuntimeInstance() { + Tracer tracer = openTelemetry.getTracer("config-test", "1.0.0"); + Span span = tracer.spanBuilder("testSpan").startSpan(); + span.end(); + assertThat(openTelemetry.toString(), containsString("service.name=\"unkown_service\"")); + } + + //Tests otel.sdk.disabled and spans work using the runtime mode + @Test + public void testSDKNotDisabledOnRuntimeInstanceServlet() { + Tracer tracer = openTelemetry.getTracer("config-test", "1.0.0"); + Span span = tracer.spanBuilder("testSpan").startSpan(); + assertThat(span.getSpanContext().getSpanId(), not(equalTo(INVALID_SPAN_ID))); + span.end(); + } + +} diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ServiceNameServlet.java b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ServiceNameServlet.java index 57cca2fbe73..baa3762ced3 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ServiceNameServlet.java +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/fat/src/io/openliberty/microprofile/telemetry/internal_fat/apps/telemetry/ServiceNameServlet.java @@ -13,6 +13,10 @@ import static io.openliberty.microprofile.telemetry.internal_fat.common.SpanDataMatcher.hasResourceAttribute; import static org.junit.Assert.assertThat; +import javax.enterprise.context.ApplicationScoped; +import javax.inject.Inject; +import javax.servlet.annotation.WebServlet; + import org.junit.Test; import componenttest.app.FATServlet; @@ -22,9 +26,6 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.sdk.trace.data.SpanData; -import javax.enterprise.context.ApplicationScoped; -import javax.inject.Inject; -import javax.servlet.annotation.WebServlet; @SuppressWarnings("serial") @WebServlet("/testServiceName") @@ -47,6 +48,8 @@ public class ServiceNameServlet extends FATServlet { public static final String APP_NAME = "TelemetryApp"; //Tests if otel.service.name is set to the application name by default + //On otel 2.0+ this will get the application name because otel is only set + //to sdk disabled false in the app @Test public void testServiceNameConfig() { Span span = tracer.spanBuilder("span").startSpan(); From 25a2ab8f3d412e16dea1156691e7f3f3ce651732 Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Sun, 28 Jul 2024 22:14:38 +0100 Subject: [PATCH 053/166] Expect unkown_service as the fallback name in mpTel 2.0 --- .../telemetry/internal/monitor_fat/LibertyMetricsTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java index d42d75cfef6..85a518559f5 100644 --- a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java +++ b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java @@ -79,8 +79,8 @@ public void threadPoolAndRequestTimingMetricsTest() throws Exception { TimeUnit.SECONDS.sleep(4); checkStrings(getContainerCollectorMetrics(container), new String[] { - "io_openliberty_threadpool_active_threads{io_openliberty_threadpool_name=\"Default Executor\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", - "io_openliberty_threadpool_size{io_openliberty_threadpool_name=\"Default Executor\",job=\"io.openliberty.microprofile.telemetry.runtime\"}", + "io_openliberty_threadpool_active_threads{io_openliberty_threadpool_name=\"Default Executor\",job=\"unkown_service\"}", + "io_openliberty_threadpool_size{io_openliberty_threadpool_name=\"Default Executor\",job=\"unkown_service\"}", "io_openliberty_request_timing_active", "io_openliberty_request_timing_slow", "io_openliberty_request_timing_hung", From 110ceeca45c1dae0013dbb495bcbda0061aeea79 Mon Sep 17 00:00:00 2001 From: Thomas Bitonti Date: Tue, 23 Jul 2024 15:11:30 -0400 Subject: [PATCH 054/166] Add platform variation tests. --- .../internal/FeatureResolverBaseline.java | 9 +- .../feature/internal/util/VerifyData.java | 172 +- .../feature/internal/util/VerifyXML.java | 2 +- .../tests/BaselineResolutionEnablement.java | 2 + .../tests/BaselineResolutionUnitTest.java | 40 +- .../com/ibm/ws/feature/tests/FATSuite.java | 3 +- .../tests/VersionlessPlatformTest.java | 170 +- .../tests/VersionlessPlatformTestData.java | 443 ++++ .../publish/verify/platform_expected.xml | 1872 +++++++++++++++++ .../publish/verify/platform_expected_WL.xml | 2 + 10 files changed, 2593 insertions(+), 122 deletions(-) create mode 100644 dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTestData.java create mode 100644 dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected.xml create mode 100644 dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected_WL.xml diff --git a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/FeatureResolverBaseline.java b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/FeatureResolverBaseline.java index 17bbe3d4005..380132987b2 100644 --- a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/FeatureResolverBaseline.java +++ b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/FeatureResolverBaseline.java @@ -673,17 +673,10 @@ public VerifyCase asCase(String name, String description, // For now, only handle the distinction between null and an empty set. boolean allowMultiple = (allowedMultiple != null); - VerifyCase verifyCase = new VerifyCase(); - - verifyCase.name = name; - verifyCase.description = description; + VerifyCase verifyCase = new VerifyCase(name, description, allowMultiple); verifyCase.durationNs = durationNs; - if ( allowMultiple ) { - verifyCase.input.setMultiple(); - } - for ( ProvisioningFeatureDefinition kernelDef : kernelFeatures ) { verifyCase.input.addKernel(kernelDef.getSymbolicName()); } diff --git a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyData.java b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyData.java index 372f76dba63..c5bffd64a38 100644 --- a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyData.java +++ b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyData.java @@ -25,8 +25,6 @@ public class VerifyData { - // - public VerifyData add(VerifyData other) { Map mappedCases = mapCases(); Map otherMappedCases = other.mapCases(); @@ -36,6 +34,34 @@ public VerifyData add(VerifyData other) { return new VerifyData(mappedCases.values()); } + public VerifyData splice(VerifyData output) { + Map inputCases = mapCases(); + Map outputCases = output.mapCases(); + + int maxCases = Integer.max(inputCases.size(), outputCases.size()); + Map mergedCases = new HashMap<>(maxCases); + + for (Map.Entry inputEntry : inputCases.entrySet()) { + String inputKey = inputEntry.getKey(); + VerifyCase inputCase = inputEntry.getValue(); + + VerifyCase outputCase = outputCases.get(inputKey); + + VerifyCase mergedCase; + + if (outputCase == null) { + System.out.println("Stubbing [ " + inputCase.name + " ]: No output case"); + mergedCase = inputCase; + } else { + mergedCase = inputCase.splice(outputCase); + } + + mergedCases.put(inputKey, mergedCase); + } + + return new VerifyData(mergedCases.values()); + } + // public VerifyData() { @@ -89,6 +115,12 @@ private static void append(StringBuilder builder, String text, char sep) { builder.append(text); } + public VerifyCase addCase(String name, String description, boolean isMultiple) { + VerifyCase verifyCase = new VerifyCase(name, description, isMultiple); + cases.add(verifyCase); + return verifyCase; + } + public VerifyCase addCase() { VerifyCase verifyCase = new VerifyCase(); cases.add(verifyCase); @@ -108,11 +140,20 @@ public static class VerifyCase implements LazySupplier { public String description; public long durationNs; - public final VerifyInput input = new VerifyInput(); - public final VerifyOutput output = new VerifyOutput(); + public final VerifyInput input; + public final VerifyOutput output; public VerifyCase() { - // EMPTY + this.input = new VerifyInput(); + this.output = new VerifyOutput(); + } + + public VerifyCase(String name, String description, boolean isMultiple) { + this.name = name; + this.description = description; + + this.input = new VerifyInput(isMultiple); + this.output = new VerifyOutput(); } public VerifyCase(VerifyCase inputCase, FeatureResolver.Result result, long durationNs) { @@ -121,12 +162,12 @@ public VerifyCase(VerifyCase inputCase, FeatureResolver.Result result, long dura this.durationNs = durationNs; - this.input.copy(inputCase.input); - this.output.copy(result); + this.input = inputCase.input.copy(); + this.output = new VerifyOutput(result); } - public void setDuration(long startNs) { - durationNs = getTimeNs() - startNs; + public void setDurationNs(long durationNs) { + this.durationNs = durationNs; } // Multiple Kernel:kname1 Roots:rname1:rname2 @@ -193,18 +234,55 @@ public VerifyCase supply() { public VerifyCase getSupplied() { return this; } + + // + + public VerifyCase splice(VerifyCase other) { + return new VerifyCase(this, other); + } + + public VerifyCase(VerifyCase thisCase, VerifyCase otherCase) { + this.name = thisCase.name; + this.description = thisCase.description; + + this.input = thisCase.input.copy(); + this.output = otherCase.output.copy(); + } } public static class VerifyInput { + public VerifyInput(boolean isMultiple) { + this(); + + this.isMultiple = isMultiple; + } + + public VerifyInput() { + this.isMultiple = false; + + this.kernel = new ArrayList<>(); + this.roots = new ArrayList<>(); + this.platforms = new ArrayList<>(); + this.envMap = new HashMap<>(); + } + public boolean isMultiple; - public final List kernel = new ArrayList<>(); - public final List roots = new ArrayList<>(); - public final List platforms = new ArrayList<>(); - public final Map envMap = new HashMap<>(); + public final List kernel; + public final List roots; + public final List platforms; + public final Map envMap; - public void setMultiple() { - isMultiple = true; + public void addKernel(Collection features) { + kernel.addAll(features); + } + + public void addRoots(Collection newRoots) { + this.roots.addAll(newRoots); + } + + public void putEnv(Map newEnv) { + envMap.putAll(newEnv); } public void addKernel(String feature) { @@ -215,10 +293,22 @@ public void addRoot(String name) { roots.add(name); } + public void addPlatForms(Collection newPlatforms) { + this.platforms.addAll(newPlatforms); + } + public void addPlatform(String name) { platforms.add(name); } + public void putEnv(String name, String value) { + envMap.put(name, value); + } + + public void putAllEnv(Map map) { + envMap.putAll(map); + } + public void putEnvironment(String name, String value) { envMap.put(name, value); } @@ -279,21 +369,19 @@ public String toString() { return sb.toString(); } - public void copy(VerifyInput source) { - if (source.isMultiple) { - setMultiple(); - } - for (String kernelName : source.kernel) { - addKernel(kernelName); - } - for (String rootName : source.roots) { - addRoot(rootName); - } - for (String platform : source.platforms) { - addPlatform(platform); - } + // + + public VerifyInput copy() { + return new VerifyInput(this); + } + + public VerifyInput(VerifyInput other) { + this(other.isMultiple); - putAllEnvironment(source.envMap); + this.addKernel(other.kernel); + this.addRoots(other.roots); + this.addPlatForms(other.platforms); + this.putAllEnvironment(other.envMap); } } @@ -323,6 +411,25 @@ public String getDescription() { } public static class VerifyOutput { + + public VerifyOutput() { + // EMPTY + } + + public VerifyOutput copy() { + return new VerifyOutput(this); + } + + public VerifyOutput(VerifyOutput other) { + for (ResultData valueType : ResultData.values()) { + if (valueType == ResultData.FEATURE_VERSIONLESS_RESOLVED) { + this.putAllVersionlessResolved(other.getVersionlessResolved()); + } else { + this.addAll(valueType, other.get(valueType)); + } + } + } + public EnumMap> resultData = new EnumMap<>(ResultData.class); public List get(ResultData dataType) { @@ -346,7 +453,7 @@ public void add(ResultData dataType, String value) { public void addAll(ResultData dataType, Collection newValues) { List values = resultData.get(dataType); if (values == null) { - values = new ArrayList<>(); + values = new ArrayList<>(newValues.size()); resultData.put(dataType, values); } values.addAll(newValues); @@ -489,6 +596,11 @@ protected void list(StringBuilder sb, String description, Map map) { // FEATURE_CONFLICT("Conflicted features"); // Map> getConflicts(); [ feature -> Collection ] + public VerifyOutput(FeatureResolver.Result result) { + this(); + this.copy(result); + } + public void copy(FeatureResolver.Result result) { addAll(ResultData.PLATFORM_RESOLVED, result.getResolvedPlatforms()); addAll(ResultData.PLATFORM_MISSING, result.getMissingPlatforms()); diff --git a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyXML.java b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyXML.java index f186451c3f1..b06d6b27d30 100644 --- a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyXML.java +++ b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyXML.java @@ -418,7 +418,7 @@ public void endElement(String uri, String localName, String qName) throws SAXExc } else if (oldLast.equals(INPUT_TAG)) { // ignore } else if (oldLast.contentEquals(MULTIPLE_TAG)) { - verifyCase.input.setMultiple(); + verifyCase.input.isMultiple = true; } else if (oldLast.equals(KERNEL_TAG)) { verifyCase.input.addKernel(elementText); } else if (oldLast.equals(ROOT_TAG)) { diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/BaselineResolutionEnablement.java b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/BaselineResolutionEnablement.java index fd82557779c..89c2d0e7054 100644 --- a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/BaselineResolutionEnablement.java +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/BaselineResolutionEnablement.java @@ -21,4 +21,6 @@ public interface BaselineResolutionEnablement { boolean enableMicroProfile = true; boolean enableServlet = true; + + boolean enablePlatforms = true; } diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/BaselineResolutionUnitTest.java b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/BaselineResolutionUnitTest.java index fae50df0b50..176acb3f803 100644 --- a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/BaselineResolutionUnitTest.java +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/BaselineResolutionUnitTest.java @@ -38,6 +38,7 @@ import com.ibm.ws.kernel.feature.internal.util.VerifyDelta; import com.ibm.ws.kernel.feature.internal.util.VerifyXML; import com.ibm.ws.kernel.feature.provisioning.ProvisioningFeatureDefinition; +import com.ibm.ws.kernel.feature.resolver.FeatureResolver; import com.ibm.ws.kernel.feature.resolver.FeatureResolver.Result; /** @@ -301,17 +302,12 @@ public static VerifyCase copyForVersionless(VerifyCase inputCase) { return null; } - VerifyCase newCase = new VerifyCase(); - - newCase.name = "versionless - " + shortName + " - from " + inputCase.name; - newCase.description = "versionless - platform " + platform + " - from " + inputCase.description; + String name = "versionless - " + shortName + " - from " + inputCase.name; + String description = "versionless - platform " + platform + " - from " + inputCase.description; + VerifyCase newCase = new VerifyCase(name, description, inputCase.input.isMultiple); newCase.durationNs = inputCase.durationNs; - if (inputCase.input.isMultiple) { - newCase.input.setMultiple(); - } - for (String kernelName : inputCase.input.kernel) { newCase.input.addKernel(kernelName); } @@ -378,10 +374,16 @@ public interface CaseSelector { } public static VerifyData readData(File verifyDataFile) throws Exception { - VerifyData verifyData = VerifyXML.read(verifyDataFile); - System.out.println("Read [ " + verifyData.getCases().size() + " ]" + - " test cases from [ " + verifyDataFile.getCanonicalPath() + " ]"); - return verifyData; + if (!verifyDataFile.exists()) { + System.out.println("Test data file does not exist [ " + verifyDataFile.getCanonicalPath() + " ]"); + return new VerifyData(); + + } else { + VerifyData verifyData = VerifyXML.read(verifyDataFile); + System.out.println("Read [ " + verifyData.getCases().size() + " ]" + + " test cases from [ " + verifyDataFile.getCanonicalPath() + " ]"); + return verifyData; + } } // @@ -480,6 +482,8 @@ public List detectPairErrors(List rootFeatures) { } public Result resolveFeatures(VerifyCase verifyCase, List rootErrors) throws Exception { + setEnvironment(verifyCase, resolver); + return resolver.resolve(RepositoryUtil.getRepository(), RepositoryUtil.ignoreFeatures("Kernel", verifyCase.input.kernel), verifyCase.input.roots, @@ -489,6 +493,18 @@ Collections. emptySet(), // pre-resolved feature names verifyCase.input.platforms); } + protected void setEnvironment(VerifyCase verifyCase, FeatureResolverImpl resolver) { + String preferredPlatforms; + Map envMap = verifyCase.input.envMap; + if (envMap == null) { + preferredPlatforms = null; + } else { + preferredPlatforms = envMap.get(FeatureResolver.PREFERRED_PLATFORM_VERSIONS_PROPERTY_NAME); + } + System.out.println("Setting preferred platforms [ " + preferredPlatforms + " ]"); + FeatureResolverImpl.setPreferredPlatforms(preferredPlatforms); + } + protected void testBanner(VerifyCase useTestCase) { System.out.println("Verifying case:"); System.out.println(" Name [ " + useTestCase.name + " ]"); diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/FATSuite.java b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/FATSuite.java index caa03120b84..a1b72619461 100644 --- a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/FATSuite.java +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/FATSuite.java @@ -31,7 +31,8 @@ VersionlessJavaEEToMicroProfileTest.class, VersionlessServletToMicroProfileTest.class, VersionlessCachingTest.class, - VersionlessMessagesTest.class + VersionlessMessagesTest.class, + VersionlessPlatformTest.class }) public class FATSuite { diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTest.java b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTest.java index 343389392f1..77eb9599398 100644 --- a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTest.java +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTest.java @@ -1,98 +1,128 @@ /******************************************************************************* - * Copyright (c) 2019 IBM Corporation and others. + * Copyright (c) 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.ws.feature.tests; +import java.io.File; +import java.util.Collection; +import java.util.List; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import com.ibm.ws.feature.tests.util.RepositoryUtil; +import com.ibm.ws.kernel.feature.internal.util.VerifyData; import com.ibm.ws.kernel.feature.internal.util.VerifyData.VerifyCase; /** - * Test cases for variations on setting the platform. - * - * Test plan: - * - *

-* Base configurations:
-* 1: f servlet, f jsp
-* 2: f mpMetrics, f mpHealth
-* 3: f servlet, f jsp, f mpMetrics, f mpHealth
-* Case 0: No platforms anywhere
-*   Base 1, 2, 3
-* Case 1: With platforms
-*   Base 1, 2, 3
-*   1: p javaee-7.0
-*   2: p microProfile-3.2
-*   3: p javaee-7.0, p microProfile-3.2
-* Case 2: With environment variables
-*   Base 1, 2, 3
-*   1: e javaee-7.0
-*   2: e microProfile-3.2
-*   3: e javaee-7.0, e microProfile-3.2
-* Case 3: With versioned features
-*   1: v servlet-5.0 [Base 1, 3 only]
-*   2: v mpMetrics-2.2 [Base 2, 3 only]
-*   3: v servlet-5.0, v mpMetrics-2.2 Base 1, 2, 3
-* Case 1-2: Mixing platforms and environment variables
-*   Base 1, 2, 3
-*   1: p javaee-7.0, e javaee-7.0
-*   2: p microProfile-3.2, e microProfile-3.2
-*   3: p javaee-7.0, e javaee-7.0, p microProfile-3.2, e microProfile-3.2
-* Case 1-3: Mixing platforms and versioned features
-*   Base 1, 2, 3
-*   1: p javaee-7.0, v servlet-5.0
-*   2: p microProfile-3.2, v mpMetrics-2.2
-*   3: p javaee-7.0, v servlet-5.0, p microProfile-3.2, v mpMetrics-2.2
-* Case 2-3: Mixing environment variables and versioned features
-*   Base 1, 2, 3
-*   1: e javaee-7.0, v servlet-5.0
-*   2: e microProfile-3.2, v mpMetrics-2.2
-*   3: e javaee-7.0, v servlet-5.0, e microProfile-3.2, v mpMetrics-2.2
-* Case 1-2': Overriding environment variable with platform
-*   1: e javaee-7.0, p javaee-8.0 [Base 1]
-*   2: e microProfile-3.2, p microProfile-4.0 [Base 2]
-*   3: e javaee-7.0, p javaee-8.0, e microProfile-3.2, p microProfile-4.0 [Base 3]
- * 
+ * Baseline public singleton resolution. */ -public class VersionlessPlatformTest { - - /* - * 1: f servlet, f jsp - * 2: f mpMetrics, f mpHealth - * 3: f servlet, f jsp, f mpMetrics, f mpHealth - */ - public void features_case1(VerifyCase testCase) { - testCase.input.addRoot("servlet"); - testCase.input.addRoot("jsp"); +@RunWith(Parameterized.class) +public class VersionlessPlatformTest extends BaselineResolutionUnitTest { + /** Control parameter: Used to disable this unit test. */ + public static final boolean IS_ENABLED = BaselineResolutionEnablement.enablePlatforms; + + // 'data()' is invoked before the '@BeforeClass' method. + // @BeforeClass + public static void setupClass() throws Exception { + doSetupClass(); + setupExpected(); // Must be after 'doSetupClass' + } + + @AfterClass + public static void tearDownClass() throws Exception { + doTearDownClass(VersionlessPlatformTest.class); + } + + public static final String DATA_FILE_PATH_OL = "publish/verify/platform_expected.xml"; + public static final String DATA_FILE_PATH_WL = "publish/verify/platform_expected_WL.xml"; + + public static File getDataFile_OL() { + return new File(DATA_FILE_PATH_OL); + } + + public static File getDataFile_WL() { + return new File(DATA_FILE_PATH_WL); + } + + public static VerifyData recordedData; + + public static VerifyData getRecordedData() { + return recordedData; + } + + public static void setupExpected() throws Exception { + VerifyData verifyData = readData(getDataFile_OL()); + int olCount = verifyData.getCases().size(); + System.out.println("OL data [ " + DATA_FILE_PATH_OL + " ]: [ " + olCount + " ]"); + + // WAS liberty adds and modifies the Open liberty cases. + if (RepositoryUtil.isWASLiberty()) { + VerifyData verifyData_WL = readData(getDataFile_WL()); + int wlCount = verifyData_WL.getCases().size(); + System.out.println("WL data [ " + DATA_FILE_PATH_WL + " ]: [ " + wlCount + " ]"); + + verifyData = verifyData.add(verifyData_WL); + int finalCount = verifyData.getCases().size(); + System.out.println("Merged data [ " + (finalCount - olCount) + " ]"); + } + + recordedData = verifyData; } - public void features_case2(VerifyCase testCase) { - testCase.input.addRoot("mpMetrics"); - testCase.input.addRoot("mpHealth"); + public static VerifyData getBareInput() throws Exception { + return new VerifyData(VersionlessPlatformTestData.getCases().values()); + } + + @Parameterized.Parameters + public static Collection data() throws Exception { + setupClass(); + + if (!IS_ENABLED) { + return nullCases("platform resolution"); + } else { + return asCases(getBareInput().splice(getRecordedData())); + } } - public void features_case3(VerifyCase testCase) { - features_case1(testCase); - features_case2(testCase); + public VersionlessPlatformTest(String name, VerifyCase testCase) throws Exception { + super(name, testCase); } - public void platforms_case0(VerifyCase testCase) { - // None! + @Before + public void setupTest() throws Exception { + doSetupResolver(); } - public void platforms_case1(VerifyCase testCase) { - // None! + @After + public void tearDownTest() throws Exception { + doClearResolver(); } - public void platforms_case2(VerifyCase testCase) { - // None! + @Override + public List detectFeatureErrors(List rootFeatures) { + return null; } - public void platforms_case3(VerifyCase testCase) { - // None! + @Test + public void versionless_platformTest() throws Exception { + if (!IS_ENABLED) { + nullResult(); + return; + } + doTestResolve(); } } diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTestData.java b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTestData.java new file mode 100644 index 00000000000..631ce593266 --- /dev/null +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTestData.java @@ -0,0 +1,443 @@ +/******************************************************************************* + * Copyright (c) 2019 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package com.ibm.ws.feature.tests; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Consumer; + +import com.ibm.ws.kernel.feature.internal.util.VerifyData.VerifyCase; +import com.ibm.ws.kernel.feature.resolver.FeatureResolver; + +/** + * Test cases for variations on setting the platform. + * + * Test plan: + * + *
+* Base configurations:
+* 1: f servlet, f jsp
+* 2: f mpMetrics, f mpHealth
+* 3: f servlet, f jsp, f mpMetrics, f mpHealth
+*
+* Case 0: No platforms anywhere
+*
+* Case 1: With platforms
+*   1: p javaee-7.0
+*   2: p microProfile-3.2
+*   3: p javaee-7.0, p microProfile-3.2
+*
+* Case 2: With environment variables
+*   1: e javaee-7.0
+*   2: e microProfile-3.2
+*   3: e javaee-7.0, e microProfile-3.2
+*
+* Case 3: With versioned features
+*   1: v servlet-5.0
+*   2: v mpMetrics-2.2
+*   3: v servlet-5.0, v mpMetrics-2.2
+*
+* Case 1-2: Mixing platforms and environment variables
+*   1: p javaee-7.0, e javaee-7.0
+*   2: p microProfile-3.2, e microProfile-3.2
+*   3: p javaee-7.0, e javaee-7.0, p microProfile-3.2, e microProfile-3.2
+*
+* Case 1-3: Mixing platforms and versioned features
+*   1: p javaee-7.0, v servlet-5.0
+*   2: p microProfile-3.2, v mpMetrics-2.2
+*   3: p javaee-7.0, v servlet-5.0, p microProfile-3.2, v mpMetrics-2.2
+*
+* Case 2-3: Mixing environment variables and versioned features
+*   1: e javaee-7.0, v servlet-5.0
+*   2: e microProfile-3.2, v mpMetrics-2.2
+*   3: e javaee-7.0, v servlet-5.0, e microProfile-3.2, v mpMetrics-2.2
+*
+* Case 1-2': Overriding environment variable with platform
+*   1: e javaee-7.0, p javaee-8.0 [Base 1]
+*   2: e microProfile-3.2, p microProfile-4.0 [Base 2]
+*   3: e javaee-7.0, p javaee-8.0, e microProfile-3.2, p microProfile-4.0 [Base 3]
+ * 
+ */ +@SuppressWarnings("unchecked") +public class VersionlessPlatformTestData { + + public static class PlatformCase { + public final String name; + + public final List> inits; + + public PlatformCase(String name, Consumer... inits) { + this.name = name; + + List> useInits = new ArrayList>(inits.length); + for (Consumer init : inits) { + useInits.add(init); + } + this.inits = useInits; + } + + public void init(VerifyCase verifyCase) { + for (Consumer init : inits) { + init.accept(verifyCase); + } + } + + public VerifyCase init() { + VerifyCase verifyCase = new VerifyCase(name, "Platform case [ " + name + " ]", false); + init(verifyCase); + return verifyCase; + } + } + + public static Map platformCases; + + public static void mapCase(Map map, String name, Consumer... inits) { + map.put(name, new PlatformCase(name, inits)); + } + + public static Map getCases() { + Map useCases = new HashMap<>(platformCases.size()); + for (PlatformCase useCase : platformCases.values()) { + useCases.put(useCase.name, useCase.init()); + } + return useCases; + } + + // @formatter:off + static { + Map useCases = new HashMap<>(); + + // null cases + + mapCase(useCases, "features_none_platforms_none", + VersionlessPlatformTestData::features_none, + VersionlessPlatformTestData::platforms_none); + mapCase(useCases, "features_ee_platforms_none", + VersionlessPlatformTestData::features_ee, + VersionlessPlatformTestData::platforms_none); + mapCase(useCases, "features_mp_platforms_none", + VersionlessPlatformTestData::features_mp, + VersionlessPlatformTestData::platforms_none); + mapCase(useCases, "features_mixed_platforms_none", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_none); + + // simple cases + + mapCase(useCases, "features_ee_platforms_p_ee", + VersionlessPlatformTestData::features_ee, + VersionlessPlatformTestData::platforms_p_ee); + mapCase(useCases, "features_mp_platforms_p_mp", + VersionlessPlatformTestData::features_mp, + VersionlessPlatformTestData::platforms_p_mp); + mapCase(useCases, "features_mixed_platforms_p_mixed", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_p_mixed); + + mapCase(useCases, "features_ee_platforms_e_ee", + VersionlessPlatformTestData::features_ee, + VersionlessPlatformTestData::platforms_e_ee); + mapCase(useCases, "features_mp_platforms_e_mp", + VersionlessPlatformTestData::features_mp, + VersionlessPlatformTestData::platforms_e_mp); + mapCase(useCases, "features_mixed_platforms_e_mixed", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_e_mixed); + + mapCase(useCases, "features_ee_platforms_v_servlet", + VersionlessPlatformTestData::features_ee, + VersionlessPlatformTestData::platforms_v_servlet); + mapCase(useCases, "features_mp_platforms_v_mpMetrics", + VersionlessPlatformTestData::features_mp, + VersionlessPlatformTestData::platforms_v_mpMetrics); + mapCase(useCases, "features_mixed_platforms_v_mixed", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_v_mixed); + + // mixed cases ... + + mapCase(useCases, "features_ee_platforms_ep_ee", + VersionlessPlatformTestData::features_ee, + VersionlessPlatformTestData::platforms_ep_ee); + mapCase(useCases, "features_mp_platforms_ep_mp", + VersionlessPlatformTestData::features_mp, + VersionlessPlatformTestData::platforms_ep_mp); + mapCase(useCases, "features_mixed_platforms_ep_mixed", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_ep_mixed); + + mapCase(useCases, "features_ee_platforms_ev_ee", + VersionlessPlatformTestData::features_ee, + VersionlessPlatformTestData::platforms_ev_ee); + mapCase(useCases, "features_mp_platforms_ev_mp", + VersionlessPlatformTestData::features_mp, + VersionlessPlatformTestData::platforms_ev_mp); + mapCase(useCases, "features_mixed_platforms_ev_mixed", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_ev_mixed); + + mapCase(useCases, "features_ee_platforms_pv_ee", + VersionlessPlatformTestData::features_ee, + VersionlessPlatformTestData::platforms_pv_ee); + mapCase(useCases, "features_mp_platforms_pv_mpMetrics", + VersionlessPlatformTestData::features_mp, + VersionlessPlatformTestData::platforms_pv_mp); + mapCase(useCases, "features_mixed_platforms_pv_mixed", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_pv_mixed); + + // override cases ... + + /* + * Case 1-2': Overriding environment variable with platform + * 1: e javaee-7.0, p javaee-8.0 [Base 1] + * 2: e microProfile-3.2, p microProfile-4.0 [Base 2] + * 3: e javaee-7.0, p javaee-8.0, e microProfile-3.2, p microProfile-4.0 [Base 3] + */ + + mapCase(useCases, "features_ee_platforms_ep_override", + VersionlessPlatformTestData::features_ee, + VersionlessPlatformTestData::platforms_ep_ee_override); + + mapCase(useCases, "features_mp_platforms_ep_override", + VersionlessPlatformTestData::features_mp, + VersionlessPlatformTestData::platforms_ep_mp_override); + + mapCase(useCases, "features_mixed_platforms_ep_override", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_ep_mixed_override); + + platformCases = useCases; + } + // @formatter:on + + /* + * 1: f servlet, f jsp + * 2: f mpMetrics, f mpHealth + * 3: f servlet, f jsp, f mpMetrics, f mpHealth + */ + + public static final String SERVLET = "servlet"; + public static final String SERVLET_50 = "servlet-5.0"; + + public static final String JSP = "jsp"; + + public static final String MPMETRICS = "mpMetrics"; + public static final String MPMETRICS_22 = "mpMetrics-2.2"; + + public static final String MPHEALTH = "mpHealth"; + + public static void features_none(VerifyCase testCase) { + // Empty! + } + + public static void features_ee(VerifyCase testCase) { + testCase.input.addRoot(SERVLET); + testCase.input.addRoot(JSP); + } + + public static void features_mp(VerifyCase testCase) { + testCase.input.addRoot(MPMETRICS); + testCase.input.addRoot(MPHEALTH); + } + + public static void features_mixed(VerifyCase testCase) { + features_ee(testCase); + features_mp(testCase); + } + + /* + * Case 0: No platforms anywhere + * Case 1: With platforms + * 1: p javaee-7.0 + * 2: p microProfile-3.2 + * 3: p javaee-7.0, p microProfile-3.2 + * Case 2: With environment variables + * 1: e javaee-7.0 + * 2: e microProfile-3.2 + * 3: e javaee-7.0, e microProfile-3.2 + * Case 3: With versioned features + * 1: v servlet-5.0 + * 2: v mpMetrics-2.2 + * 3: v servlet-5.0, v mpMetrics-2.2 + */ + + public static final String JAVAEE_70 = "javaee-7.0"; + public static final String JAVAEE_80 = "javaee-8.0"; + + public static final String MICROPROFILE_32 = "microProfile-3.2"; + public static final String MICROPROFILE_40 = "microProfile-4.0"; + + public static void platforms_none(VerifyCase testCase) { + // None! + } + + public static void platforms_p_ee(VerifyCase testCase) { + testCase.input.addPlatform(JAVAEE_70); + } + + public static void platforms_p_mp(VerifyCase testCase) { + testCase.input.addPlatform(MICROPROFILE_32); + } + + public static void platforms_p_mixed(VerifyCase testCase) { + platforms_p_ee(testCase); + platforms_p_mp(testCase); + } + + public static final String PLATFORM_ENV_VAR = FeatureResolver.PREFERRED_PLATFORM_VERSIONS_PROPERTY_NAME; + + public static final String delimit(char delimiter, String... values) { + if (values.length == 0) { + return ""; + } + + int len = values.length - 1; + for (String value : values) { + len += value.length(); + } + + StringBuilder builder = new StringBuilder(len); + for (int vNo = 0; vNo < values.length; vNo++) { + if (vNo > 0) { + builder.append(delimiter); + } + builder.append(values[vNo]); + } + return builder.toString(); + } + + public static void platforms_e_ee(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, JAVAEE_70); + } + + public static void platforms_e_mp(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, MICROPROFILE_32); + } + + public static void platforms_e_mixed(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, delimit(',', JAVAEE_70, MICROPROFILE_32)); + } + + /* + * Case 3: With versioned features + * 1: v servlet-5.0 + * 2: v mpMetrics-2.2 + * 3: v servlet-5.0, v mpMetrics-2.2 + */ + + public static void platforms_v_servlet(VerifyCase testCase) { + testCase.input.addRoot(SERVLET_50); + } + + public static void platforms_v_mpMetrics(VerifyCase testCase) { + testCase.input.addRoot(MPMETRICS_22); + } + + public static void platforms_v_mixed(VerifyCase testCase) { + platforms_v_servlet(testCase); + platforms_v_mpMetrics(testCase); + } + + /* + * Case 1-2: Mixing platforms and environment variables + * 1: p javaee-7.0, e javaee-7.0 + * 2: p microProfile-3.2, e microProfile-3.2 + * 3: p javaee-7.0, e javaee-7.0, p microProfile-3.2, e microProfile-3.2 + */ + + public static void platforms_ep_ee(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, JAVAEE_70); + testCase.input.addPlatform(JAVAEE_70); + } + + public static void platforms_ep_mp(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, MICROPROFILE_32); + testCase.input.addPlatform(MICROPROFILE_32); + } + + public static void platforms_ep_mixed(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, delimit(',', JAVAEE_70, MICROPROFILE_32)); + testCase.input.addPlatform(JAVAEE_70); + testCase.input.addPlatform(MICROPROFILE_32); + } + + /* + * Case 1-3: Mixing platforms and versioned features + * 1: p javaee-7.0, v servlet-5.0 + * 2: p microProfile-3.2, v mpMetrics-2.2 + * 3: p javaee-7.0, v servlet-5.0, p microProfile-3.2, v mpMetrics-2.2 + */ + + public static void platforms_pv_ee(VerifyCase testCase) { + testCase.input.addPlatform(JAVAEE_70); + testCase.input.addRoot(SERVLET_50); + } + + public static void platforms_pv_mp(VerifyCase testCase) { + testCase.input.addPlatform(MICROPROFILE_32); + testCase.input.addRoot(MPMETRICS_22); + } + + public static void platforms_pv_mixed(VerifyCase testCase) { + platforms_pv_ee(testCase); + platforms_pv_mp(testCase); + } + + // + + /* + * Case 2-3: Mixing environment variables and versioned features + * 1: e javaee-7.0, v servlet-5.0 + * 2: e microProfile-3.2, v mpMetrics-2.2 + * 3: e javaee-7.0, v servlet-5.0, e microProfile-3.2, v mpMetrics-2.2 + */ + + public static void platforms_ev_ee(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, JAVAEE_70); + testCase.input.addRoot(SERVLET_50); + } + + public static void platforms_ev_mp(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, MICROPROFILE_32); + testCase.input.addRoot(MPMETRICS_22); + } + + public static void platforms_ev_mixed(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, delimit(',', JAVAEE_70, MICROPROFILE_32)); + testCase.input.addRoot(SERVLET_50); + testCase.input.addRoot(MPMETRICS_22); + } + + /* + * Case 1-2': Overriding environment variable with platform + * 1: e javaee-7.0, p javaee-8.0 [Base 1] + * 2: e microProfile-3.2, p microProfile-4.0 [Base 2] + * 3: e javaee-7.0, p javaee-8.0, e microProfile-3.2, p microProfile-4.0 [Base 3] + */ + + public static void platforms_ep_ee_override(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, JAVAEE_70); + testCase.input.addPlatform(JAVAEE_80); + } + + public static void platforms_ep_mp_override(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, MICROPROFILE_32); + testCase.input.addPlatform(MICROPROFILE_40); + } + + public static void platforms_ep_mixed_override(VerifyCase testCase) { + testCase.input.putEnv(PLATFORM_ENV_VAR, delimit(',', JAVAEE_70, MICROPROFILE_32)); + testCase.input.addPlatform(JAVAEE_80); + testCase.input.addPlatform(MICROPROFILE_40); + } +} diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected.xml b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected.xml new file mode 100644 index 00000000000..38689a2a1b9 --- /dev/null +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected.xml @@ -0,0 +1,1872 @@ + + + features_ee_platforms_p_ee + Platform case [ features_ee_platforms_p_ee ] + + servlet + jsp + javaee-7.0 + + + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + features_mp_platforms_ev_mp + Platform case [ features_mp_platforms_ev_mp ] + + mpMetrics + mpHealth + mpMetrics-2.2 + PREFERRED_PLATFORM_VERSIONS=microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mixed_platforms_v_mixed + Platform case [ features_mixed_platforms_v_mixed ] + + servlet + jsp + mpMetrics + mpHealth + servlet-5.0 + mpMetrics-2.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=null + jsp=pages-3.0 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + io.openliberty.jakarta.annotation-2.0 + com.ibm.websphere.appserver.anno-2.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + com.ibm.websphere.appserver.httptransport-1.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + io.openliberty.jakarta.expressionLanguage-4.0 + io.openliberty.jakarta.pages-3.0 + expressionLanguage-4.0 + pages-3.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-5.0 + servlet + io.openliberty.internal.versionless.jsp-3.0 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + io.openliberty.servlet.api + com.ibm.websphere.appserver.injection + com.ibm.websphere.appserver.servlet + io.openliberty.servlet.internal + com.ibm.websphere.appserver.eeCompatible + + + + + features_mixed_platforms_ep_mixed + Platform case [ features_mixed_platforms_ep_mixed ] + + servlet + jsp + mpMetrics + mpHealth + javaee-7.0 + microProfile-3.2 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0,microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mixed_platforms_none + Platform case [ features_mixed_platforms_none ] + + servlet + jsp + mpMetrics + mpHealth + + + mpMetrics=null + mpHealth=null + servlet=null + jsp=null + mpMetrics + mpHealth + servlet + jsp + servlet + jsp + mpMetrics + mpHealth + + + + + features_ee_platforms_none + Platform case [ features_ee_platforms_none ] + + servlet + jsp + + + servlet=null + jsp=null + servlet + jsp + servlet + jsp + + + + + features_mixed_platforms_pv_mixed + Platform case [ features_mixed_platforms_pv_mixed ] + + servlet + jsp + mpMetrics + mpHealth + servlet-5.0 + mpMetrics-2.2 + javaee-7.0 + microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=null + jsp=jsp-2.3 + json-1.0 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + com.ibm.websphere.appserver.httptransport-1.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + com.ibm.websphere.appserver.servlet + + + + + features_ee_platforms_pv_ee + Platform case [ features_ee_platforms_pv_ee ] + + servlet + jsp + servlet-5.0 + javaee-7.0 + + + javaee-7.0 + servlet=null + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + com.ibm.websphere.appserver.servlet + + + + + features_ee_platforms_ev_ee + Platform case [ features_ee_platforms_ev_ee ] + + servlet + jsp + servlet-5.0 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0 + + + javaee-7.0 + servlet=null + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + com.ibm.websphere.appserver.servlet + + + + + features_mp_platforms_ep_mp + Platform case [ features_mp_platforms_ep_mp ] + + mpMetrics + mpHealth + microProfile-3.2 + PREFERRED_PLATFORM_VERSIONS=microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mp_platforms_p_mp + Platform case [ features_mp_platforms_p_mp ] + + mpMetrics + mpHealth + microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mp_platforms_pv_mpMetrics + Platform case [ features_mp_platforms_pv_mpMetrics ] + + mpMetrics + mpHealth + mpMetrics-2.2 + microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_ee_platforms_ep_override + Platform case [ features_ee_platforms_ep_override ] + + servlet + jsp + javaee-8.0 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0 + + + javaee-8.0 + servlet=servlet-4.0 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-8.0 + io.openliberty.servlet.api-4.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.javax.annotation-1.3 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.injection-1.0 + servlet-4.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-4.0 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-4.0 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + features_mixed_platforms_e_mixed + Platform case [ features_mixed_platforms_e_mixed ] + + servlet + jsp + mpMetrics + mpHealth + PREFERRED_PLATFORM_VERSIONS=javaee-7.0,microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mp_platforms_ep_override + Platform case [ features_mp_platforms_ep_override ] + + mpMetrics + mpHealth + microProfile-4.0 + PREFERRED_PLATFORM_VERSIONS=microProfile-3.2 + + + microProfile-4.0 + mpMetrics=mpMetrics-3.0 + mpHealth=mpHealth-3.0 + com.ibm.websphere.appserver.eeCompatible-8.0 + io.openliberty.mpCompatible-4.0 + io.openliberty.internal.mpVersion-4.0 + json-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.javax.annotation-1.3 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-2.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-2.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + mpConfig-2.0 + io.openliberty.servlet.api-4.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.injection-1.0 + servlet-4.0 + io.openliberty.servlet.internal-4.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.jsonpImpl-1.1.1 + com.ibm.websphere.appserver.jsonpInternal-1.1 + jsonp-1.1 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.2 + com.ibm.websphere.appserver.javax.persistence-2.2 + cdi-2.0 + jndi-1.0 + mpHealth-3.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-3.0 + monitor-1.0 + mpMetrics-3.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.transactionContext-1.0 + io.openliberty.mpMetrics-3.0-monitor-1.0 + com.ibm.websphere.appserver.cdi2.0-transaction1.2 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.sessionMonitor-1.0 + com.ibm.websphere.appserver.cdi2.0-servlet4.0 + com.ibm.websphere.appserver.distributedMapPMI-1.0 + com.ibm.websphere.appserver.webcontainerMonitor-1.0 + com.ibm.websphere.appserver.cdi2.0-jndi1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-3.0 + mpMetrics + io.openliberty.internal.versionless.mpHealth-3.0 + mpHealth + + + + + features_mp_platforms_e_mp + Platform case [ features_mp_platforms_e_mp ] + + mpMetrics + mpHealth + PREFERRED_PLATFORM_VERSIONS=microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mixed_platforms_ev_mixed + Platform case [ features_mixed_platforms_ev_mixed ] + + servlet + jsp + mpMetrics + mpHealth + servlet-5.0 + mpMetrics-2.2 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0,microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=null + jsp=jsp-2.3 + json-1.0 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + com.ibm.websphere.appserver.httptransport-1.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + com.ibm.websphere.appserver.servlet + + + + + features_ee_platforms_v_servlet + Platform case [ features_ee_platforms_v_servlet ] + + servlet + jsp + servlet-5.0 + + + jakartaee-9.1 + servlet=servlet-5.0 + jsp=pages-3.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.eeCompatible-9.0 + io.openliberty.jakarta.annotation-2.0 + com.ibm.websphere.appserver.anno-2.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + io.openliberty.jakartaeePlatform-9.0 + io.openliberty.servlet.api-5.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.injection-2.0 + io.openliberty.servlet-servletSpi2.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + servlet-5.0 + io.openliberty.servlet.internal-5.0 + io.openliberty.jakarta.expressionLanguage-4.0 + io.openliberty.jakarta.pages-3.0 + expressionLanguage-4.0 + pages-3.0 + io.openliberty.internal.versionless.servlet-5.0 + servlet + io.openliberty.internal.versionless.jsp-3.0 + jsp + + + + + features_mixed_platforms_ep_override + Platform case [ features_mixed_platforms_ep_override ] + + servlet + jsp + mpMetrics + mpHealth + javaee-8.0 + microProfile-4.0 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0,microProfile-3.2 + + + javaee-8.0 + microProfile-4.0 + mpMetrics=mpMetrics-3.0 + mpHealth=mpHealth-3.0 + servlet=servlet-4.0 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-8.0 + io.openliberty.mpCompatible-4.0 + io.openliberty.internal.mpVersion-4.0 + io.openliberty.servlet.api-4.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.javax.annotation-1.3 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.injection-1.0 + servlet-4.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-4.0 + el-3.0 + jsp-2.3 + json-1.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-2.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-2.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + mpConfig-2.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.jsonpImpl-1.1.1 + com.ibm.websphere.appserver.jsonpInternal-1.1 + jsonp-1.1 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-3.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.2 + com.ibm.websphere.appserver.javax.persistence-2.2 + cdi-2.0 + jndi-1.0 + mpHealth-3.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-3.0 + monitor-1.0 + mpMetrics-3.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.transactionContext-1.0 + io.openliberty.mpMetrics-3.0-monitor-1.0 + com.ibm.websphere.appserver.cdi2.0-transaction1.2 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.sessionMonitor-1.0 + com.ibm.websphere.appserver.cdi2.0-servlet4.0 + com.ibm.websphere.appserver.distributedMapPMI-1.0 + com.ibm.websphere.appserver.webcontainerMonitor-1.0 + com.ibm.websphere.appserver.cdi2.0-jndi1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-4.0 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-3.0 + mpMetrics + io.openliberty.internal.versionless.mpHealth-3.0 + mpHealth + + + + + features_ee_platforms_ep_ee + Platform case [ features_ee_platforms_ep_ee ] + + servlet + jsp + javaee-7.0 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0 + + + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + features_mp_platforms_none + Platform case [ features_mp_platforms_none ] + + mpMetrics + mpHealth + + + mpMetrics=null + mpHealth=null + mpMetrics + mpHealth + mpMetrics + mpHealth + + + + + features_mixed_platforms_p_mixed + Platform case [ features_mixed_platforms_p_mixed ] + + servlet + jsp + mpMetrics + mpHealth + javaee-7.0 + microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mp_platforms_v_mpMetrics + Platform case [ features_mp_platforms_v_mpMetrics ] + + mpMetrics + mpHealth + mpMetrics-2.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_ee_platforms_e_ee + Platform case [ features_ee_platforms_e_ee ] + + servlet + jsp + PREFERRED_PLATFORM_VERSIONS=javaee-7.0 + + + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected_WL.xml b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected_WL.xml new file mode 100644 index 00000000000..f2775e29784 --- /dev/null +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected_WL.xml @@ -0,0 +1,2 @@ + + From 53d43dff024f07574128d8caa2b1d9bb7a7451b8 Mon Sep 17 00:00:00 2001 From: Thomas Bitonti Date: Wed, 24 Jul 2024 10:56:24 -0400 Subject: [PATCH 055/166] Remove use of Integer.max. --- .../com/ibm/ws/kernel/feature/internal/util/VerifyData.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyData.java b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyData.java index c5bffd64a38..e846e3c405a 100644 --- a/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyData.java +++ b/dev/com.ibm.ws.kernel.feature.core/src/com/ibm/ws/kernel/feature/internal/util/VerifyData.java @@ -38,7 +38,9 @@ public VerifyData splice(VerifyData output) { Map inputCases = mapCases(); Map outputCases = output.mapCases(); - int maxCases = Integer.max(inputCases.size(), outputCases.size()); + int inputSize = inputCases.size(); + int outputSize = outputCases.size(); + int maxCases = ((inputSize > outputSize) ? inputSize : outputSize); Map mergedCases = new HashMap<>(maxCases); for (Map.Entry inputEntry : inputCases.entrySet()) { From ede1a055f82f1e47e0b43d59b6fe507d2282b738 Mon Sep 17 00:00:00 2001 From: rsherget Date: Thu, 25 Jul 2024 13:01:10 -0400 Subject: [PATCH 056/166] add more platform tests --- .../tests/VersionlessPlatformTestData.java | 82 +- .../publish/verify/platform_expected.xml | 774 ++++++++++++++++-- 2 files changed, 760 insertions(+), 96 deletions(-) diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTestData.java b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTestData.java index 631ce593266..cdc3d9e8e7b 100644 --- a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTestData.java +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessPlatformTestData.java @@ -216,6 +216,33 @@ public static Map getCases() { VersionlessPlatformTestData::features_mixed, VersionlessPlatformTestData::platforms_ep_mixed_override); + + // conflicting cases ... + + mapCase(useCases, "platforms_p_conflicting_high_ee", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_p_conflicting_high_ee); + + mapCase(useCases, "platforms_p_conflicting_high_mp", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_p_conflicting_high_mp); + + mapCase(useCases, "platforms_p_missing_ee", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_p_missing_ee); + + mapCase(useCases, "platforms_p_missing_mp", + VersionlessPlatformTestData::features_mixed, + VersionlessPlatformTestData::platforms_p_missing_mp); + + mapCase(useCases, "platforms_p_conflicting_servlet_ee", + VersionlessPlatformTestData::features_ee, + VersionlessPlatformTestData::platforms_p_conflicting_servlet_ee); + + mapCase(useCases, "platforms_p_conflicting_mpMetrics_mp", + VersionlessPlatformTestData::features_mp, + VersionlessPlatformTestData::platforms_p_conflicting_mpMetrics_mp); + platformCases = useCases; } // @formatter:on @@ -227,12 +254,14 @@ public static Map getCases() { */ public static final String SERVLET = "servlet"; - public static final String SERVLET_50 = "servlet-5.0"; + public static final String SERVLET_31 = "servlet-3.1"; //ee7 + public static final String SERVLET_60 = "servlet-6.0"; //ee10 public static final String JSP = "jsp"; public static final String MPMETRICS = "mpMetrics"; - public static final String MPMETRICS_22 = "mpMetrics-2.2"; + public static final String MPMETRICS_22 = "mpMetrics-2.2"; //mp3.2 + public static final String MPMETRICS_50 = "mpMetrics-5.0"; //mp6.0 public static final String MPHEALTH = "mpHealth"; @@ -273,9 +302,11 @@ public static void features_mixed(VerifyCase testCase) { public static final String JAVAEE_70 = "javaee-7.0"; public static final String JAVAEE_80 = "javaee-8.0"; + public static final String JAKARTAEE_10 = "jakartaee-10.0"; public static final String MICROPROFILE_32 = "microProfile-3.2"; public static final String MICROPROFILE_40 = "microProfile-4.0"; + public static final String MICROPROFILE_60 = "microProfile-6.0"; public static void platforms_none(VerifyCase testCase) { // None! @@ -336,7 +367,7 @@ public static void platforms_e_mixed(VerifyCase testCase) { */ public static void platforms_v_servlet(VerifyCase testCase) { - testCase.input.addRoot(SERVLET_50); + testCase.input.addRoot(SERVLET_31); } public static void platforms_v_mpMetrics(VerifyCase testCase) { @@ -380,7 +411,7 @@ public static void platforms_ep_mixed(VerifyCase testCase) { public static void platforms_pv_ee(VerifyCase testCase) { testCase.input.addPlatform(JAVAEE_70); - testCase.input.addRoot(SERVLET_50); + testCase.input.addRoot(SERVLET_31); } public static void platforms_pv_mp(VerifyCase testCase) { @@ -404,7 +435,7 @@ public static void platforms_pv_mixed(VerifyCase testCase) { public static void platforms_ev_ee(VerifyCase testCase) { testCase.input.putEnv(PLATFORM_ENV_VAR, JAVAEE_70); - testCase.input.addRoot(SERVLET_50); + testCase.input.addRoot(SERVLET_31); } public static void platforms_ev_mp(VerifyCase testCase) { @@ -414,7 +445,7 @@ public static void platforms_ev_mp(VerifyCase testCase) { public static void platforms_ev_mixed(VerifyCase testCase) { testCase.input.putEnv(PLATFORM_ENV_VAR, delimit(',', JAVAEE_70, MICROPROFILE_32)); - testCase.input.addRoot(SERVLET_50); + testCase.input.addRoot(SERVLET_31); testCase.input.addRoot(MPMETRICS_22); } @@ -440,4 +471,43 @@ public static void platforms_ep_mixed_override(VerifyCase testCase) { testCase.input.addPlatform(JAVAEE_80); testCase.input.addPlatform(MICROPROFILE_40); } + + /* + * Conflicting test cases, expecting resolution to encounter conflicts/errors + * 1: ee10 x mp3.2 + * 2: ee7 x mp6.0 + * 3: missing ee x mp3.2 + * 4: ee7 x missing mp + * 5: servlet6 x ee7 + * 6: mpMetrics2.2 x mp6.0 + * 7: tbd + */ + + public static void platforms_p_conflicting_high_ee(VerifyCase testCase){ + testCase.input.addPlatform(JAKARTAEE_10); + testCase.input.addPlatform(MICROPROFILE_32); + } + + public static void platforms_p_conflicting_high_mp(VerifyCase testCase){ + testCase.input.addPlatform(JAVAEE_70); + testCase.input.addPlatform(MICROPROFILE_60); + } + + public static void platforms_p_missing_ee(VerifyCase testCase){ + testCase.input.addPlatform(MICROPROFILE_32); + } + + public static void platforms_p_missing_mp(VerifyCase testCase){ + testCase.input.addPlatform(JAVAEE_70); + } + + public static void platforms_p_conflicting_servlet_ee(VerifyCase testCase){ + testCase.input.addPlatform(JAVAEE_70); + testCase.input.addRoot(SERVLET_60); + } + + public static void platforms_p_conflicting_mpMetrics_mp(VerifyCase testCase){ + testCase.input.addPlatform(MICROPROFILE_60); + testCase.input.addRoot(MPMETRICS_22); + } } diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected.xml b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected.xml index 38689a2a1b9..e9a72d2724d 100644 --- a/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected.xml +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected.xml @@ -155,25 +155,40 @@ jsp mpMetrics mpHealth - servlet-5.0 + servlet-3.1 mpMetrics-2.2 + javaee-7.0 microProfile-3.2 mpMetrics=mpMetrics-2.2 mpHealth=mpHealth-2.1 - servlet=null - jsp=pages-3.0 - json-1.0 - io.openliberty.webBundle.internal.ee-6.0 - io.openliberty.webBundle.internal-1.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 com.ibm.websphere.appserver.artifact-1.0 com.ibm.websphere.appserver.javaeedd-1.0 - io.openliberty.jakarta.annotation-2.0 - com.ibm.websphere.appserver.anno-2.0 + com.ibm.websphere.appserver.anno-1.0 com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 com.ibm.websphere.appserver.dynamicBundle-1.0 com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + json-1.0 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 com.ibm.websphere.appserver.internal.slf4j-1.7 jndi-1.0 io.openliberty.distributedMapInternal-1.0 @@ -181,7 +196,6 @@ com.ibm.websphere.appserver.basicRegistry-1.0 com.ibm.websphere.appserver.securityInfrastructure-1.0 com.ibm.websphere.appserver.builtinAuthorization-1.0 - com.ibm.websphere.appserver.channelfw-1.0 com.ibm.websphere.appserver.certificateCreator-1.0 ssl-1.0 com.ibm.websphere.appserver.ltpa-1.0 @@ -197,16 +211,12 @@ io.openliberty.webBundleSecurity.internal-1.0 com.ibm.websphere.appserver.adminSecurity-1.0 io.openliberty.restHandler1.0.internal.ee-6.0 - com.ibm.websphere.appserver.httptransport-1.0 io.openliberty.restHandler.internal-1.0 com.ibm.wsspi.appserver.webBundle-1.0 com.ibm.wsspi.appserver.webBundleSecurity-1.0 io.openliberty.securityAPI.jakarta-1.0 com.ibm.websphere.appserver.restHandler-1.0 - com.ibm.websphere.appserver.appLifecycle-1.0 - com.ibm.websphere.appserver.appmanager-1.0 io.openliberty.mpCompatible-0.0 - com.ibm.websphere.appserver.javax.annotation-1.2 com.ibm.websphere.appserver.javax.el-3.0 com.ibm.websphere.appserver.javax.interceptor-1.2 com.ibm.websphere.appserver.javax.cdi-1.2 @@ -218,8 +228,6 @@ com.ibm.websphere.appserver.jta-1.2 com.ibm.websphere.appserver.javax.connector.internal-1.7 com.ibm.websphere.appserver.transaction-1.2 - com.ibm.websphere.appserver.javaeePlatform-6.0 - com.ibm.websphere.appserver.javaeePlatform-7.0 com.ibm.websphere.appserver.javax.persistence.base-2.1 com.ibm.websphere.appserver.javax.persistence-2.1 com.ibm.websphere.appserver.javax.jsf-2.2 @@ -227,36 +235,30 @@ cdi-1.2 mpMetrics-2.2 io.openliberty.internal.mpVersion-3.2 - io.openliberty.jakarta.expressionLanguage-4.0 - io.openliberty.jakarta.pages-3.0 - expressionLanguage-4.0 - pages-3.0 + el-3.0 + jsp-2.3 com.ibm.websphere.appserver.contextService-1.0 com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 com.ibm.websphere.appserver.jsonpImpl-1.0.0 jsonp-1.0 mpHealth-2.1 - com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 com.ibm.websphere.appserver.classloaderContext-1.0 com.ibm.websphere.appserver.cdi1.2-jndi1.0 com.ibm.websphere.appserver.cdi1.2-transaction1.2 com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 com.ibm.websphere.appserver.securityContext-1.0 - io.openliberty.internal.versionless.servlet-5.0 + io.openliberty.internal.versionless.servlet-3.1 servlet - io.openliberty.internal.versionless.jsp-3.0 + io.openliberty.internal.versionless.jsp-2.3 jsp io.openliberty.internal.versionless.mpMetrics-2.2 mpMetrics io.openliberty.internal.versionless.mpHealth-2.1 mpHealth - io.openliberty.servlet.api - com.ibm.websphere.appserver.injection - com.ibm.websphere.appserver.servlet - io.openliberty.servlet.internal - com.ibm.websphere.appserver.eeCompatible @@ -426,7 +428,7 @@ jsp mpMetrics mpHealth - servlet-5.0 + servlet-3.1 mpMetrics-2.2 javaee-7.0 microProfile-3.2 @@ -436,21 +438,32 @@ microProfile-3.2 mpMetrics=mpMetrics-2.2 mpHealth=mpHealth-2.1 - servlet=null + servlet=servlet-3.1 jsp=jsp-2.3 - json-1.0 - io.openliberty.servlet.internal-3.1 - io.openliberty.webBundle.internal.ee-6.0 - io.openliberty.webBundle.internal-1.0 com.ibm.websphere.appserver.eeCompatible-7.0 io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 com.ibm.websphere.appserver.artifact-1.0 com.ibm.websphere.appserver.javaeedd-1.0 - com.ibm.websphere.appserver.javax.annotation-1.2 com.ibm.websphere.appserver.anno-1.0 com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 com.ibm.websphere.appserver.dynamicBundle-1.0 com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + json-1.0 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 com.ibm.websphere.appserver.internal.slf4j-1.7 jndi-1.0 io.openliberty.distributedMapInternal-1.0 @@ -458,7 +471,6 @@ com.ibm.websphere.appserver.basicRegistry-1.0 com.ibm.websphere.appserver.securityInfrastructure-1.0 com.ibm.websphere.appserver.builtinAuthorization-1.0 - com.ibm.websphere.appserver.channelfw-1.0 com.ibm.websphere.appserver.certificateCreator-1.0 ssl-1.0 com.ibm.websphere.appserver.ltpa-1.0 @@ -474,14 +486,11 @@ io.openliberty.webBundleSecurity.internal-1.0 com.ibm.websphere.appserver.adminSecurity-1.0 io.openliberty.restHandler1.0.internal.ee-6.0 - com.ibm.websphere.appserver.httptransport-1.0 io.openliberty.restHandler.internal-1.0 com.ibm.wsspi.appserver.webBundle-1.0 com.ibm.wsspi.appserver.webBundleSecurity-1.0 io.openliberty.securityAPI.jakarta-1.0 com.ibm.websphere.appserver.restHandler-1.0 - com.ibm.websphere.appserver.appLifecycle-1.0 - com.ibm.websphere.appserver.appmanager-1.0 io.openliberty.mpCompatible-0.0 com.ibm.websphere.appserver.javax.el-3.0 com.ibm.websphere.appserver.javax.interceptor-1.2 @@ -492,11 +501,8 @@ com.ibm.websphere.appserver.javax.jsp-2.3 com.ibm.websphere.appserver.javax.ejb-3.2 com.ibm.websphere.appserver.jta-1.2 - com.ibm.websphere.appserver.injection-1.0 com.ibm.websphere.appserver.javax.connector.internal-1.7 com.ibm.websphere.appserver.transaction-1.2 - com.ibm.websphere.appserver.javaeePlatform-6.0 - com.ibm.websphere.appserver.javaeePlatform-7.0 com.ibm.websphere.appserver.javax.persistence.base-2.1 com.ibm.websphere.appserver.javax.persistence-2.1 com.ibm.websphere.appserver.javax.jsf-2.2 @@ -511,9 +517,10 @@ com.ibm.websphere.appserver.jsonpImpl-1.0.0 jsonp-1.0 mpHealth-2.1 - com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 com.ibm.websphere.appserver.classloaderContext-1.0 com.ibm.websphere.appserver.cdi1.2-jndi1.0 com.ibm.websphere.appserver.cdi1.2-transaction1.2 @@ -527,7 +534,6 @@ mpMetrics io.openliberty.internal.versionless.mpHealth-2.1 mpHealth - com.ibm.websphere.appserver.servlet @@ -537,15 +543,33 @@ servlet jsp - servlet-5.0 + servlet-3.1 javaee-7.0 javaee-7.0 - servlet=null + servlet=servlet-3.1 jsp=jsp-2.3 com.ibm.websphere.appserver.eeCompatible-7.0 io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 com.ibm.websphere.appserver.javax.el-3.0 com.ibm.websphere.appserver.javax.jsp-2.3 io.openliberty.servlet.internal-3.1 @@ -555,7 +579,6 @@ servlet io.openliberty.internal.versionless.jsp-2.3 jsp - com.ibm.websphere.appserver.servlet @@ -565,15 +588,33 @@ servlet jsp - servlet-5.0 + servlet-3.1 PREFERRED_PLATFORM_VERSIONS=javaee-7.0 javaee-7.0 - servlet=null + servlet=servlet-3.1 jsp=jsp-2.3 com.ibm.websphere.appserver.eeCompatible-7.0 io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 com.ibm.websphere.appserver.javax.el-3.0 com.ibm.websphere.appserver.javax.jsp-2.3 io.openliberty.servlet.internal-3.1 @@ -583,7 +624,6 @@ servlet io.openliberty.internal.versionless.jsp-2.3 jsp - com.ibm.websphere.appserver.servlet @@ -1276,7 +1316,7 @@ jsp mpMetrics mpHealth - servlet-5.0 + servlet-3.1 mpMetrics-2.2 PREFERRED_PLATFORM_VERSIONS=javaee-7.0,microProfile-3.2 @@ -1285,21 +1325,32 @@ microProfile-3.2 mpMetrics=mpMetrics-2.2 mpHealth=mpHealth-2.1 - servlet=null + servlet=servlet-3.1 jsp=jsp-2.3 - json-1.0 - io.openliberty.servlet.internal-3.1 - io.openliberty.webBundle.internal.ee-6.0 - io.openliberty.webBundle.internal-1.0 com.ibm.websphere.appserver.eeCompatible-7.0 io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 com.ibm.websphere.appserver.artifact-1.0 com.ibm.websphere.appserver.javaeedd-1.0 - com.ibm.websphere.appserver.javax.annotation-1.2 com.ibm.websphere.appserver.anno-1.0 com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 com.ibm.websphere.appserver.dynamicBundle-1.0 com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + json-1.0 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 com.ibm.websphere.appserver.internal.slf4j-1.7 jndi-1.0 io.openliberty.distributedMapInternal-1.0 @@ -1307,7 +1358,6 @@ com.ibm.websphere.appserver.basicRegistry-1.0 com.ibm.websphere.appserver.securityInfrastructure-1.0 com.ibm.websphere.appserver.builtinAuthorization-1.0 - com.ibm.websphere.appserver.channelfw-1.0 com.ibm.websphere.appserver.certificateCreator-1.0 ssl-1.0 com.ibm.websphere.appserver.ltpa-1.0 @@ -1323,14 +1373,11 @@ io.openliberty.webBundleSecurity.internal-1.0 com.ibm.websphere.appserver.adminSecurity-1.0 io.openliberty.restHandler1.0.internal.ee-6.0 - com.ibm.websphere.appserver.httptransport-1.0 io.openliberty.restHandler.internal-1.0 com.ibm.wsspi.appserver.webBundle-1.0 com.ibm.wsspi.appserver.webBundleSecurity-1.0 io.openliberty.securityAPI.jakarta-1.0 com.ibm.websphere.appserver.restHandler-1.0 - com.ibm.websphere.appserver.appLifecycle-1.0 - com.ibm.websphere.appserver.appmanager-1.0 io.openliberty.mpCompatible-0.0 com.ibm.websphere.appserver.javax.el-3.0 com.ibm.websphere.appserver.javax.interceptor-1.2 @@ -1341,11 +1388,8 @@ com.ibm.websphere.appserver.javax.jsp-2.3 com.ibm.websphere.appserver.javax.ejb-3.2 com.ibm.websphere.appserver.jta-1.2 - com.ibm.websphere.appserver.injection-1.0 com.ibm.websphere.appserver.javax.connector.internal-1.7 com.ibm.websphere.appserver.transaction-1.2 - com.ibm.websphere.appserver.javaeePlatform-6.0 - com.ibm.websphere.appserver.javaeePlatform-7.0 com.ibm.websphere.appserver.javax.persistence.base-2.1 com.ibm.websphere.appserver.javax.persistence-2.1 com.ibm.websphere.appserver.javax.jsf-2.2 @@ -1360,9 +1404,10 @@ com.ibm.websphere.appserver.jsonpImpl-1.0.0 jsonp-1.0 mpHealth-2.1 - com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 com.ibm.websphere.appserver.classloaderContext-1.0 com.ibm.websphere.appserver.cdi1.2-jndi1.0 com.ibm.websphere.appserver.cdi1.2-transaction1.2 @@ -1376,7 +1421,6 @@ mpMetrics io.openliberty.internal.versionless.mpHealth-2.1 mpHealth - com.ibm.websphere.appserver.servlet @@ -1386,42 +1430,40 @@ servlet jsp - servlet-5.0 + servlet-3.1 - jakartaee-9.1 - servlet=servlet-5.0 - jsp=pages-3.0 - com.ibm.websphere.appserver.appLifecycle-1.0 + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 com.ibm.websphere.appserver.artifact-1.0 com.ibm.websphere.appserver.javaeedd-1.0 - com.ibm.websphere.appserver.eeCompatible-9.0 - io.openliberty.jakarta.annotation-2.0 - com.ibm.websphere.appserver.anno-2.0 + com.ibm.websphere.appserver.anno-1.0 com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 com.ibm.websphere.appserver.dynamicBundle-1.0 com.ibm.websphere.appserver.classloading-1.0 com.ibm.websphere.appserver.appmanager-1.0 com.ibm.websphere.appserver.javaeePlatform-6.0 com.ibm.websphere.appserver.javaeePlatform-7.0 - com.ibm.websphere.appserver.javaeePlatform-8.0 - io.openliberty.jakartaeePlatform-9.0 - io.openliberty.servlet.api-5.0 - com.ibm.websphere.appserver.javaeeddSchema-1.0 - com.ibm.websphere.appserver.injection-2.0 - io.openliberty.servlet-servletSpi2.0 - com.ibm.websphere.appserver.channelfw-1.0 - com.ibm.websphere.appserver.httptransport-1.0 - com.ibm.websphere.appserver.requestProbes-1.0 - servlet-5.0 - io.openliberty.servlet.internal-5.0 - io.openliberty.jakarta.expressionLanguage-4.0 - io.openliberty.jakarta.pages-3.0 - expressionLanguage-4.0 - pages-3.0 - io.openliberty.internal.versionless.servlet-5.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-3.1 servlet - io.openliberty.internal.versionless.jsp-3.0 + io.openliberty.internal.versionless.jsp-2.3 jsp @@ -1869,4 +1911,556 @@ + + platforms_p_missing_ee + Platform case [ platforms_p_missing_ee ] + + servlet + jsp + mpMetrics + mpHealth + microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=null + jsp=null + servlet + jsp + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + servlet + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + platforms_p_conflicting_high_ee + Platform case [ platforms_p_conflicting_high_ee ] + + servlet + jsp + mpMetrics + mpHealth + jakartaee-10.0 + microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=null + jsp=pages-3.1 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + io.openliberty.jakarta.annotation-2.1 + com.ibm.websphere.appserver.anno-2.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + com.ibm.websphere.appserver.httptransport-1.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + io.openliberty.jakarta.expressionLanguage-5.0 + io.openliberty.jakarta.pages-3.1 + expressionLanguage-5.0 + pages-3.1 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-6.0 + servlet + io.openliberty.internal.versionless.jsp-3.1 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + io.openliberty.servlet.api + com.ibm.websphere.appserver.injection + com.ibm.websphere.appserver.servlet + io.openliberty.servlet.internal + com.ibm.websphere.appserver.eeCompatible + + + + + platforms_p_conflicting_mpMetrics_mp + Platform case [ platforms_p_conflicting_mpMetrics_mp ] + + mpMetrics + mpHealth + mpMetrics-2.2 + microProfile-6.0 + + + microProfile-6.0 + mpMetrics=mpMetrics-5.0 + mpHealth=mpHealth-4.0 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + io.openliberty.jakarta.annotation-2.1 + com.ibm.websphere.appserver.anno-2.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + com.ibm.websphere.appserver.httptransport-1.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-6.0 + io.openliberty.org.eclipse.microprofile.config.3.0.ee-9.0 + io.openliberty.org.eclipse.microprofile.config-3.0 + mpConfig-3.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + io.openliberty.jakartaeePlatform-9.0 + io.openliberty.jakartaeePlatform-10.0 + com.ibm.websphere.appserver.contextService-1.0 + io.openliberty.jakarta.enterpriseBeans-4.0 + io.openliberty.jsonpImpl-2.1.1 + io.openliberty.jsonpInternal-2.1 + io.openliberty.jakarta.persistence.base-3.1 + io.openliberty.jakarta.persistence-3.1 + io.openliberty.jakarta.activation-2.1 + io.openliberty.jakarta.xmlBinding-4.0 + io.openliberty.jakarta.xmlWS-4.0 + io.openliberty.jakarta.expressionLanguage-5.0 + io.openliberty.jakarta.pages-3.1 + cdi-4.0 + io.openliberty.org.eclipse.microprofile.metrics-5.0 + monitor-1.0 + mpMetrics-5.0 + io.openliberty.microprofile.cdi.api-3.0 + io.openliberty.org.eclipse.microprofile.health-4.0 + jsonp-2.1 + mpHealth-4.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.mpMetrics-2.2-monitor-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.sessionMonitor-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + io.openliberty.cdi3.0-jndi1.0 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.distributedMapPMI-1.0 + com.ibm.websphere.appserver.webcontainerMonitor-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-5.0 + mpMetrics + io.openliberty.internal.versionless.mpHealth-4.0 + mpHealth + io.openliberty.servlet.api + com.ibm.websphere.appserver.injection + io.openliberty.jakarta.cdi + io.openliberty.mpCompatible + io.openliberty.servlet.internal + com.ibm.websphere.appserver.eeCompatible + com.ibm.websphere.appserver.transaction + + + + + platforms_p_missing_mp + Platform case [ platforms_p_missing_mp ] + + servlet + jsp + mpMetrics + mpHealth + javaee-7.0 + + + javaee-7.0 + mpMetrics=null + mpHealth=null + servlet=servlet-3.1 + jsp=jsp-2.3 + mpMetrics + mpHealth + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + mpMetrics + mpHealth + + + + + platforms_p_conflicting_high_mp + Platform case [ platforms_p_conflicting_high_mp ] + + servlet + jsp + mpMetrics + mpHealth + javaee-7.0 + microProfile-6.0 + + + microProfile-6.0 + mpMetrics=mpMetrics-5.0 + mpHealth=mpHealth-4.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + io.openliberty.mpCompatible-6.0 + io.openliberty.internal.mpVersion-6.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + el-3.0 + jsp-2.3 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + io.openliberty.jakarta.annotation-2.1 + io.openliberty.jakarta.expressionLanguage-5.0 + io.openliberty.jakarta.interceptor-2.1 + io.openliberty.jakarta.cdi-4.0 + io.openliberty.org.eclipse.microprofile.config.3.0.ee-10.0 + io.openliberty.org.eclipse.microprofile.config-3.0 + mpConfig-3.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + io.openliberty.jakartaeePlatform-9.0 + io.openliberty.jakartaeePlatform-10.0 + com.ibm.websphere.appserver.contextService-1.0 + io.openliberty.jakarta.enterpriseBeans-4.0 + io.openliberty.jsonpImpl-2.1.1 + io.openliberty.jsonpInternal-2.1 + io.openliberty.jakarta.persistence.base-3.1 + io.openliberty.jakarta.persistence-3.1 + io.openliberty.jakarta.activation-2.1 + io.openliberty.jakarta.xmlBinding-4.0 + io.openliberty.jakarta.xmlWS-4.0 + io.openliberty.jakarta.pages-3.1 + io.openliberty.jta-2.0 + io.openliberty.jakarta.connectors-2.0 + com.ibm.websphere.appserver.transaction-2.0 + cdi-4.0 + io.openliberty.org.eclipse.microprofile.metrics-5.0 + monitor-1.0 + mpMetrics-5.0 + io.openliberty.microprofile.cdi.api-4.0 + io.openliberty.org.eclipse.microprofile.health-4.0 + jsonp-2.1 + mpHealth-4.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.jakarta-transactionContext-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.sessionMonitor-1.0 + io.openliberty.cdi3.0-jndi1.0 + com.ibm.websphere.appserver.distributedMapPMI-1.0 + com.ibm.websphere.appserver.webcontainerMonitor-1.0 + io.openliberty.cdi3.0-transaction2.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-5.0 + mpMetrics + io.openliberty.internal.versionless.mpHealth-4.0 + mpHealth + io.openliberty.servlet.api + com.ibm.websphere.appserver.injection + com.ibm.websphere.appserver.eeCompatible + io.openliberty.servlet.internal + + + + + platforms_p_conflicting_servlet_ee + Platform case [ platforms_p_conflicting_servlet_ee ] + + servlet + jsp + servlet-6.0 + javaee-7.0 + + + javaee-7.0 + servlet=null + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + com.ibm.websphere.appserver.servlet + + + From 8fad38d71f8d0f87f6207552ca03e0ab620d97c4 Mon Sep 17 00:00:00 2001 From: Zach Hein <31706984+Zech-Hein@users.noreply.github.com> Date: Mon, 29 Jul 2024 09:59:19 -0500 Subject: [PATCH 057/166] add spnego fat common lib (#29207) Fix bouncycastle jar signed entry issue --- dev/com.ibm.ws.security.oidc.client_fat.spnego/build.gradle | 5 +++-- dev/com.ibm.ws.security.oidc.server_fat.spnego/build.gradle | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/dev/com.ibm.ws.security.oidc.client_fat.spnego/build.gradle b/dev/com.ibm.ws.security.oidc.client_fat.spnego/build.gradle index 0cff8f6f692..b884e77b263 100644 --- a/dev/com.ibm.ws.security.oidc.client_fat.spnego/build.gradle +++ b/dev/com.ibm.ws.security.oidc.client_fat.spnego/build.gradle @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021, 2023 IBM Corporation and others. + * Copyright (c) 2021, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -26,7 +26,8 @@ dependencies { 'org.apache.httpcomponents:httpclient:4.1.2', 'org.apache.httpcomponents:httpcore:4.1.2', project(':io.openliberty.org.apache.commons.logging'), // 1.2 (was 1.1.1) - project(':com.ibm.ws.org.apache.commons.lang3') // 3.8 (was ????) + project(':com.ibm.ws.org.apache.commons.lang3'), // 3.8 (was ????) + project(':com.ibm.ws.security.spnego.fat.common') } /****************************************************************** diff --git a/dev/com.ibm.ws.security.oidc.server_fat.spnego/build.gradle b/dev/com.ibm.ws.security.oidc.server_fat.spnego/build.gradle index 84e328c0d1e..3ef7dfadd45 100644 --- a/dev/com.ibm.ws.security.oidc.server_fat.spnego/build.gradle +++ b/dev/com.ibm.ws.security.oidc.server_fat.spnego/build.gradle @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021 IBM Corporation and others. + * Copyright (c) 2021, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -27,6 +27,7 @@ dependencies { project(':com.ibm.ws.security.jaas.common'), project(':com.ibm.ws.security.oauth.oidc_fat.common'), project(':io.openliberty.org.apache.xercesImpl'), + project(':com.ibm.ws.security.spnego.fat.common'), 'jtidy:jtidy:4aug2000r7-dev', 'net.sourceforge.htmlunit:htmlunit-core-js:2.44.0', 'net.sourceforge.htmlunit:neko-htmlunit:2.44.0', From 62ff0784998f4f7647b45c5238ff85a3be90a8d9 Mon Sep 17 00:00:00 2001 From: jjiwooLim Date: Mon, 29 Jul 2024 11:01:09 -0400 Subject: [PATCH 058/166] FeatureUtility enable no proxy (#28782) * FeatureUtility enable no proxy --- .../featureUtility/FeatureUtility.java | 14 ++- .../props/FeatureUtilityProperties.java | 8 +- .../fat/FeatureUtilityToolTest.java | 11 ++- .../fat/InstallFeatureTest.java | 94 +++++++++++++++++-- .../install/internal/ArtifactDownloader.java | 21 ++--- .../internal/ArtifactDownloaderUtils.java | 41 +------- .../ws/install/internal/InstallKernelMap.java | 67 ++++++++++++- .../internal/VerifySignatureUtility.java | 15 +-- 8 files changed, 194 insertions(+), 77 deletions(-) diff --git a/dev/com.ibm.ws.install.featureUtility/src/com/ibm/ws/install/featureUtility/FeatureUtility.java b/dev/com.ibm.ws.install.featureUtility/src/com/ibm/ws/install/featureUtility/FeatureUtility.java index 501107e04f3..ea0ca4f6400 100644 --- a/dev/com.ibm.ws.install.featureUtility/src/com/ibm/ws/install/featureUtility/FeatureUtility.java +++ b/dev/com.ibm.ws.install.featureUtility/src/com/ibm/ws/install/featureUtility/FeatureUtility.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2023 IBM Corporation and others. + * Copyright (c) 2019, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -319,6 +319,11 @@ private void overrideEnvMapWithProperties() throws InstallException{ } + // override no_proxy settings + if (System.getProperty("featureUtility.beta") != null && System.getProperty("featureUtility.beta").equals("true") && FeatureUtilityProperties.getNoProxySetting() != null) { + overrideMap.put("http.nonProxyHosts", FeatureUtilityProperties.getNoProxySetting()); + } + // override the local feature repo if(FeatureUtilityProperties.getFeatureLocalRepo() != null){ overrideMap.put("FEATURE_LOCAL_REPO", FeatureUtilityProperties.getFeatureLocalRepo()); @@ -353,6 +358,13 @@ private void overrideEnvMapWithProperties() throws InstallException{ } map.put(InstallConstants.OVERRIDE_ENVIRONMENT_VARIABLES, overrideMap); + + if (map.get(InstallConstants.ACTION_ERROR_MESSAGE) != null) { + // error with installation + fine("action.exception.stacktrace: " + map.get(InstallConstants.ACTION_EXCEPTION_STACKTRACE)); + String exceptionMessage = (String) map.get(InstallConstants.ACTION_ERROR_MESSAGE); + throw new InstallException(exceptionMessage); + } } /** diff --git a/dev/com.ibm.ws.install.featureUtility/src/com/ibm/ws/install/featureUtility/props/FeatureUtilityProperties.java b/dev/com.ibm.ws.install.featureUtility/src/com/ibm/ws/install/featureUtility/props/FeatureUtilityProperties.java index 8b8470a1f6f..8d7c303d441 100644 --- a/dev/com.ibm.ws.install.featureUtility/src/com/ibm/ws/install/featureUtility/props/FeatureUtilityProperties.java +++ b/dev/com.ibm.ws.install.featureUtility/src/com/ibm/ws/install/featureUtility/props/FeatureUtilityProperties.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2023 IBM Corporation and others. + * Copyright (c) 2020, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -39,7 +39,7 @@ public class FeatureUtilityProperties { private final static String FILEPATH_EXT = "/etc/featureUtility.properties"; private final static String FeatureVerifyQualifier = "feature.verify"; private final static Set DEFINED_OPTIONS = new HashSet<>(Arrays.asList("proxyHost", "proxyPort", - "proxyUser", "proxyPassword", "featureLocalRepo", FeatureVerifyQualifier)); + "proxyUser", "proxyPassword", "http.nonProxyHosts", "featureLocalRepo", FeatureVerifyQualifier)); private static Map definedVariables = new HashMap<>(); private static List repositoryList = new ArrayList<>(); private static List bomIdList = new ArrayList<>(); @@ -99,6 +99,10 @@ public static String getProxyPassword(){ return definedVariables.get("proxyPassword"); // char array instead? } + public static String getNoProxySetting() { + return definedVariables.get("http.nonProxyHosts"); + } + public static String getFeatureLocalRepo(){ return definedVariables.get("featureLocalRepo"); } diff --git a/dev/com.ibm.ws.install.featureUtility_fat/fat/src/com/ibm/ws/install/featureUtility/fat/FeatureUtilityToolTest.java b/dev/com.ibm.ws.install.featureUtility_fat/fat/src/com/ibm/ws/install/featureUtility/fat/FeatureUtilityToolTest.java index ad29850bbc9..e93fc781021 100644 --- a/dev/com.ibm.ws.install.featureUtility_fat/fat/src/com/ibm/ws/install/featureUtility/fat/FeatureUtilityToolTest.java +++ b/dev/com.ibm.ws.install.featureUtility_fat/fat/src/com/ibm/ws/install/featureUtility/fat/FeatureUtilityToolTest.java @@ -374,15 +374,16 @@ protected ProgramOutput runFeatureUtility(String testcase, String[] params) thro protected ProgramOutput runFeatureUtility(String testcase, String[] params, boolean debug) throws Exception { Properties envProps = new Properties(); - //add beta property here - envProps.put("JVM_ARGS", "-Dcom.ibm.ws.beta.edition=true"); + //add beta property here + envProps.put("JVM_ARGS", "-Dcom.ibm.ws.beta.edition=true"); return runFeatureUtility(testcase, params, envProps); } protected ProgramOutput runFeatureUtility(String testcase, String[] params, Properties envProps) throws Exception { - //add beta property here - envProps.put("JVM_ARGS", "-Dcom.ibm.ws.beta.edition=true"); - // always run feature utility with minified root + // add beta property here + envProps.put("JVM_ARGS", "-DfeatureUtility.beta=true"); + envProps.put("JVM_ARGS", "-Dcom.ibm.ws.beta.edition=true"); + // always run feature utility with minified root return runCommand(minifiedRoot, testcase, "featureUtility", params, envProps); } diff --git a/dev/com.ibm.ws.install.featureUtility_fat/fat/src/com/ibm/ws/install/featureUtility/fat/InstallFeatureTest.java b/dev/com.ibm.ws.install.featureUtility_fat/fat/src/com/ibm/ws/install/featureUtility/fat/InstallFeatureTest.java index 33d7345b78e..97c2e706b8b 100644 --- a/dev/com.ibm.ws.install.featureUtility_fat/fat/src/com/ibm/ws/install/featureUtility/fat/InstallFeatureTest.java +++ b/dev/com.ibm.ws.install.featureUtility_fat/fat/src/com/ibm/ws/install/featureUtility/fat/InstallFeatureTest.java @@ -45,6 +45,7 @@ public class InstallFeatureTest extends FeatureUtilityToolTest { private static String userFeatureSigPath = "/com/ibm/ws/userFeature/testesa1/19.0.0.8/testesa1-19.0.0.8.esa.asc"; static Network network = Network.newNetwork(); + // @ClassRule /* * Increased startup timeout because nexus container might take more than 60 @@ -751,8 +752,6 @@ public void testFeatureVerifyALLEnv() throws Exception { public void testVerifyhttpKeyServer() throws Exception { final String METHOD_NAME = "testVerifyhttpKeyServer"; Log.entering(c, METHOD_NAME); - Properties envProps = new Properties(); - envProps.put("FEATURE_VERIFY", "all"); String containerUrl = "http://" + container.getHost() + ":" + container.getMappedPort(8080) + "/validKey.asc"; @@ -1012,7 +1011,7 @@ public void testProxyAuth() throws Exception { try { checkCommandOutput(po, 0, null, filesList); - } catch(Exception e) { + } catch (AssertionError e) { checkProxyLog(METHOD_NAME, proxyContainer); throw e; } @@ -1044,13 +1043,13 @@ public void testProxyAndRepoAuth() throws Exception { writeToProps(minifiedRoot + "/etc/featureUtility.properties", "mavenCentralMirror.user", "admin"); writeToProps(minifiedRoot + "/etc/featureUtility.properties", "mavenCentralMirror.password", "golf"); - String[] param1s = { "installFeature", "json-1.0", "--verbose" }; + String[] param1s = { "installFeature", "json-1.0", "--verbose", "--noCache" }; String[] filesList = { "/lib/features/com.ibm.websphere.appserver.json-1.0.mf" }; ProgramOutput po = runFeatureUtility(METHOD_NAME, param1s); try { checkCommandOutput(po, 0, null, filesList); - } catch (Exception e) { + } catch (AssertionError e) { checkProxyLog(METHOD_NAME, proxyContainer); throw e; } @@ -1084,13 +1083,13 @@ public void testProxyAndRepoAuthEncoded() throws Exception { writeToProps(minifiedRoot + "/etc/featureUtility.properties", "mavenCentralMirror.password", "{xor}ODAzOQ=="); - String[] param1s = { "installFeature", "json-1.0", "--verbose" }; + String[] param1s = { "installFeature", "json-1.0", "--verbose", "--noCache" }; String[] filesList = { "/lib/features/com.ibm.websphere.appserver.json-1.0.mf" }; ProgramOutput po = runFeatureUtility(METHOD_NAME, param1s); try { checkCommandOutput(po, 0, null, filesList); - } catch (Exception e) { + } catch (AssertionError e) { checkProxyLog(METHOD_NAME, proxyContainer); throw e; } @@ -1099,4 +1098,85 @@ public void testProxyAndRepoAuthEncoded() throws Exception { } + /* + * Test no proxy using environment variable Try downloading public key from + * external key server. It should fail because keyserver can only be connected + * through proxy. (testcontainer network) + */ + @Test + public void testnoProxyEnv() throws Exception { + final String METHOD_NAME = "testnoProxyEnv"; + Log.entering(c, METHOD_NAME); + + String proxyHost = "http://" + proxyContainer.getHost(); + String proxyPort = proxyContainer.getMappedPort(3128).toString(); + String containerUrl = "http://keyserver:8080/validKey.asc"; + + Properties envProps = new Properties(); + envProps.put("no_proxy", "keyserver"); + + + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "proxyHost", proxyHost); + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "proxyPort", proxyPort); + + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "feature.verify", "all"); + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "myKey.keyid", "0x71f8e6239b6834aa"); + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "myKey.keyurl", containerUrl); + + String[] filesList = { "usr/extension/lib/features/testesa1.mf", "usr/extension/bin/testesa1.bat" }; + + String[] param1s = { "installFeature", "testesa1", + "--featuresBOM=com.ibm.ws.userFeature:features-bom:19.0.0.8", "--verbose" }; + + ProgramOutput po = runFeatureUtility(METHOD_NAME, param1s, envProps); + + try { + checkCommandOutput(po, InstallException.SIGNATURE_VERIFICATION_FAILED, "CWWKF1506E", null); + } catch (AssertionError e) { + checkProxyLog(METHOD_NAME, proxyContainer); + throw e; + } + + Log.exiting(c, METHOD_NAME); + + } + + /* + * Test no proxy using properties + */ + @Test + public void testnoProxyProps() throws Exception { + final String METHOD_NAME = "testnoProxyProps"; + Log.entering(c, METHOD_NAME); + + String proxyHost = "http://" + proxyContainer.getHost(); + String proxyPort = proxyContainer.getMappedPort(3128).toString(); + String containerUrl = "http://keyserver:8080/validKey.asc"; + + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "proxyHost", proxyHost); + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "proxyPort", proxyPort); + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "http.nonProxyHosts", "keyserver"); + + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "feature.verify", "all"); + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "myKey.keyid", "0x71f8e6239b6834aa"); + writeToProps(minifiedRoot + "/etc/featureUtility.properties", "myKey.keyurl", containerUrl); + + String[] filesList = { "usr/extension/lib/features/testesa1.mf", "usr/extension/bin/testesa1.bat" }; + + String[] param1s = { "installFeature", "testesa1", + "--featuresBOM=com.ibm.ws.userFeature:features-bom:19.0.0.8", "--verbose" }; + ProgramOutput po = runFeatureUtility(METHOD_NAME, param1s); + + try { + checkCommandOutput(po, InstallException.SIGNATURE_VERIFICATION_FAILED, "CWWKF1506E", null); + } catch (AssertionError e) { + checkProxyLog(METHOD_NAME, proxyContainer); + throw e; + } + + Log.exiting(c, METHOD_NAME); + + } + + } diff --git a/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/ArtifactDownloader.java b/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/ArtifactDownloader.java index 619784f810d..9e63e80c499 100644 --- a/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/ArtifactDownloader.java +++ b/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/ArtifactDownloader.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2023 IBM Corporation and others. + * Copyright (c) 2020, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -20,9 +20,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.net.Authenticator; -import java.net.InetSocketAddress; import java.net.PasswordAuthentication; -import java.net.Proxy; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; @@ -327,7 +325,6 @@ private boolean isIncorrectChecksum(String localFile, String urlLocation, String */ protected boolean testConnection(MavenRepository repository) { try { - ArtifactDownloaderUtils.checkValidProxy(envMap); ArtifactDownloaderUtils.verifyPassword(repository.getPassword()); int responseCode = ArtifactDownloaderUtils.exists(repository.getRepositoryUrl(), envMap, repository); logger.fine("Response code - " + repository.getRepositoryUrl() + ":" + responseCode); @@ -340,19 +337,19 @@ protected boolean testConnection(MavenRepository repository) { } private void downloadInternal(URI address, File destination, MavenRepository repository) throws IOException, InstallException { - Proxy proxy; + URL url = address.toURL(); + if (System.getProperty("featureUtility.beta") != null && System.getProperty("featureUtility.beta").equals("true")) { + logger.fine("non Proxy Hosts: " + System.getProperty("http.nonProxyHosts")); + } + logger.fine("downloadInternal url host: " + url.getHost()); String proxyEncodedAuth = ""; - if (envMap.get("https.proxyHost") != null) { - proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress((String) envMap.get("https.proxyHost"), Integer.parseInt((String) envMap.get("https.proxyPort")))); + if (url.getProtocol().equals("https") && envMap.get("https.proxyHost") != null) { proxyEncodedAuth = ArtifactDownloaderUtils.getBasicAuthentication((String) envMap.get("https.proxyUser"), (String) envMap.get("https.proxyPassword")); } else if (envMap.get("http.proxyHost") != null) { - proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress((String) envMap.get("http.proxyHost"), Integer.parseInt((String) envMap.get("http.proxyPort")))); proxyEncodedAuth = ArtifactDownloaderUtils.getBasicAuthentication((String) envMap.get("http.proxyUser"), (String) envMap.get("http.proxyPassword")); - } else { - proxy = Proxy.NO_PROXY; } - URL url = address.toURL(); - URLConnection conn = url.openConnection(proxy); + + URLConnection conn = url.openConnection(); final String userAgentValue = calculateUserAgent(); String repoEncodedAuth = ArtifactDownloaderUtils.getBasicAuthentication(repository.getUserId(), repository.getPassword()); diff --git a/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/ArtifactDownloaderUtils.java b/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/ArtifactDownloaderUtils.java index dfaa0e1c65a..5440c08c7eb 100644 --- a/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/ArtifactDownloaderUtils.java +++ b/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/ArtifactDownloaderUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2020, 2023 IBM Corporation and others. + * Copyright (c) 2020, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -22,8 +22,6 @@ import java.io.UnsupportedEncodingException; import java.net.ConnectException; import java.net.HttpURLConnection; -import java.net.InetSocketAddress; -import java.net.Proxy; import java.net.SocketTimeoutException; import java.net.URL; import java.security.MessageDigest; @@ -114,20 +112,14 @@ public static boolean fileIsMissing(String url, Map envMap, Mave public static int exists(String URLName, Map envMap, MavenRepository repository) throws IOException { try { URL url = new URL(URLName); - - Proxy proxy; String proxyEncodedAuth = ""; - if (envMap.get("https.proxyHost") != null) { - proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress((String) envMap.get("https.proxyHost"), Integer.parseInt((String) envMap.get("https.proxyPort")))); + if (url.getProtocol().equals("https") && envMap.get("https.proxyHost") != null) { proxyEncodedAuth = ArtifactDownloaderUtils.getBasicAuthentication((String) envMap.get("https.proxyUser"), (String) envMap.get("https.proxyPassword")); } else if (envMap.get("http.proxyHost") != null) { - proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress((String) envMap.get("http.proxyHost"), Integer.parseInt((String) envMap.get("http.proxyPort")))); proxyEncodedAuth = ArtifactDownloaderUtils.getBasicAuthentication((String) envMap.get("http.proxyUser"), (String) envMap.get("http.proxyPassword")); - } else { - proxy = Proxy.NO_PROXY; } - HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); String repoEncodedAuth = ArtifactDownloaderUtils.getBasicAuthentication(repository.getUserId(), repository.getPassword()); if (!repoEncodedAuth.isEmpty()) { conn.setRequestProperty("Authorization", repoEncodedAuth); @@ -139,6 +131,7 @@ public static int exists(String URLName, Map envMap, MavenReposi conn.setConnectTimeout(10000); conn.setInstanceFollowRedirects(true); conn.connect(); + return conn.getResponseCode(); } catch (ConnectException e) { @@ -321,32 +314,6 @@ private static String base64Encode(String userInfo) { } } - public static void checkValidProxy(Map envMap) throws InstallException { - //set up basic auth HTTP tunnel - System.setProperty("jdk.http.auth.tunneling.disabledSchemes", ""); - - String protocol = null; - if (envMap.get("https.proxyUser") != null) { - protocol = "https"; - } else if (envMap.get("http.proxyUser") != null) { - protocol = "http"; - } - - String proxyPort = (String) envMap.get(protocol + ".proxyPort"); - if (protocol != null) { - int proxyPortnum = Integer.parseInt(proxyPort); - if (((String) envMap.get(protocol + ".proxyHost")).isEmpty()) { - throw ExceptionUtils.createByKey("ERROR_TOOL_PROXY_HOST_MISSING"); - } else if (proxyPortnum < 0 || proxyPortnum > 65535) { - throw ExceptionUtils.createByKey("ERROR_TOOL_INVALID_PROXY_PORT", proxyPort); - } else if (((String) envMap.get(protocol + ".proxyPassword")).isEmpty() || - envMap.get(protocol + ".proxyPassword") == null) { - throw ExceptionUtils.createByKey("ERROR_TOOL_PROXY_PWD_MISSING"); - } - verifyPassword((String) envMap.get(protocol) + ".proxyPassword"); - } - } - /** * @param pwd - repository password * @return a formated password string diff --git a/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/InstallKernelMap.java b/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/InstallKernelMap.java index 4a6849dba5e..7b466e8b77f 100755 --- a/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/InstallKernelMap.java +++ b/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/InstallKernelMap.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018, 2023 IBM Corporation and others. + * Copyright (c) 2018, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -551,6 +551,8 @@ public Object put(Object key, Object value) { } else if (InstallConstants.OVERRIDE_ENVIRONMENT_VARIABLES.equals(key)) { if (value instanceof Map) { overrideEnvMap((Map) value); + //set proxy system properties + setProxy(); } else { throw new IllegalArgumentException(); } @@ -1121,6 +1123,63 @@ public void overrideEnvMap(Map overrideMap) { envMap.putAll(overrideMap); logger.fine("printing envmap after"); logger.fine(envMap.toString()); + + } + + /** + * set proxy jvm system properties + * http.nonProxyHosts:a list of hosts that should be reached directly, bypassing the proxy. This is a list of patterns separated by '|'. The patterns may start or end with a + * '*' for wildcards. Any host matching one of these patterns will be reached through a direct connection instead of through a proxy. + */ + protected void setProxy() { + //set up basic auth HTTP tunnel + System.setProperty("jdk.http.auth.tunneling.disabledSchemes", ""); + + try { + if (envMap.get("https.proxyHost") != null) { + checkValidProxy("https"); + System.setProperty("https.proxyHost", (String) envMap.get("https.proxyHost")); + System.setProperty("https.proxyPort", (String) envMap.get("https.proxyPort")); + } + if (envMap.get("http.proxyHost") != null) { + checkValidProxy("http"); + System.setProperty("http.proxyHost", (String) envMap.get("http.proxyHost")); + System.setProperty("http.proxyPort", (String) envMap.get("http.proxyPort")); + if (envMap.get("https.proxyHost") == null) { + System.setProperty("https.proxyHost", (String) envMap.get("http.proxyHost")); + System.setProperty("https.proxyPort", (String) envMap.get("http.proxyPort")); + } + } + if (System.getProperty("featureUtility.beta") != null && System.getProperty("featureUtility.beta").equals("true") && envMap.get("http.nonProxyHosts") != null) { + String noProxyHosts = (String) envMap.get("http.nonProxyHosts"); + //if users provide list of hosts using ",", replace to "|" + noProxyHosts = noProxyHosts.replace(",", "|"); + System.setProperty("http.nonProxyHosts", noProxyHosts); + } + } catch (InstallException e) { + data.put(InstallConstants.ACTION_ERROR_MESSAGE, e.getMessage()); + data.put(InstallConstants.ACTION_EXCEPTION_STACKTRACE, ExceptionUtils.stacktraceToString(e)); + } + + } + + /** + * @param protocol + * @throws InstallException + */ + protected void checkValidProxy(String protocol) throws InstallException { + String proxyPort = (String) envMap.get(protocol + ".proxyPort"); + if (protocol != null) { + int proxyPortnum = Integer.parseInt(proxyPort); + if (((String) envMap.get(protocol + ".proxyHost")).isEmpty()) { + throw ExceptionUtils.createByKey("ERROR_TOOL_PROXY_HOST_MISSING"); + } else if (proxyPortnum < 0 || proxyPortnum > 65535) { + throw ExceptionUtils.createByKey("ERROR_TOOL_INVALID_PROXY_PORT", proxyPort); + } else if (envMap.get(protocol + "proxyUser") != null && (envMap.get(protocol + ".proxyPassword") == null + || ((String) envMap.get(protocol + ".proxyPassword")).isEmpty())) { + throw ExceptionUtils.createByKey("ERROR_TOOL_PROXY_PWD_MISSING"); + } + } } private static Collection keepFirstInstance(Collection dupStrCollection) { @@ -1912,6 +1971,9 @@ private Map getEnvMap() { envMapRet.put(key, httpsProxyVariables.get(key)); } } + if (System.getProperty("featureUtility.beta") != null && System.getProperty("featureUtility.beta").equals("true")) { + envMapRet.put("http.nonProxyHosts", System.getenv("no_proxy")); + } envMapRet.put("FEATURE_REPO_URL", System.getenv("FEATURE_REPO_URL")); envMapRet.put("FEATURE_REPO_USER", System.getenv("FEATURE_REPO_USER")); @@ -1926,7 +1988,8 @@ private Map getEnvMap() { envMapRet.put("FEATURE_VERIFY", System.getenv("FEATURE_VERIFY")); - //search through the properties file to look for overrides if they exist TODO + //search through the properties file to look for overrides if they exist + //TODO remove? - Do we use featureUtility.env ? Map propsFileMap = getFeatureUtilEnvProps(); if (!propsFileMap.isEmpty()) { fine("The properties found in featureUtility.env will override latent environment variables of the same name"); diff --git a/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/VerifySignatureUtility.java b/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/VerifySignatureUtility.java index be06a7d90e9..a17c1600bfd 100644 --- a/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/VerifySignatureUtility.java +++ b/dev/com.ibm.ws.install/src/com/ibm/ws/install/internal/VerifySignatureUtility.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 IBM Corporation and others. + * Copyright (c) 2023, 2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -19,9 +19,7 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; -import java.net.InetSocketAddress; import java.net.MalformedURLException; -import java.net.Proxy; import java.net.URL; import java.net.URLConnection; import java.time.Instant; @@ -146,20 +144,15 @@ public List downloadPublicKeys(Collection> keys, Verif URLConnection conn; try { logger.fine("Downloading key... " + key.getValue()); - ArtifactDownloaderUtils.checkValidProxy(envMap); URL keyUrl = new URL(key.getValue()); - Proxy proxy; String proxyEncodedAuth = ""; - if (envMap.get("https.proxyHost") != null) { - proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress((String) envMap.get("https.proxyHost"), Integer.parseInt((String) envMap.get("https.proxyPort")))); + if (keyUrl.getProtocol().equals("https") && envMap.get("https.proxyHost") != null) { proxyEncodedAuth = ArtifactDownloaderUtils.getBasicAuthentication((String) envMap.get("https.proxyUser"), (String) envMap.get("https.proxyPassword")); } else if (envMap.get("http.proxyHost") != null) { - proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress((String) envMap.get("http.proxyHost"), Integer.parseInt((String) envMap.get("http.proxyPort")))); proxyEncodedAuth = ArtifactDownloaderUtils.getBasicAuthentication((String) envMap.get("http.proxyUser"), (String) envMap.get("http.proxyPassword")); - } else { - proxy = Proxy.NO_PROXY; } - conn = keyUrl.openConnection(proxy); + + conn = keyUrl.openConnection(); conn.setConnectTimeout(10000); if (!proxyEncodedAuth.isEmpty()) { From 882d30ef9d665c20a918e38defaf77291541f6a8 Mon Sep 17 00:00:00 2001 From: Jon Hawkes Date: Mon, 29 Jul 2024 16:30:41 +0100 Subject: [PATCH 059/166] Accommodate slow running test machines by doubling asyncResponseTimeout --- .../publish/servers/WSATSSL_Client/server.xml | 2 +- .../publish/servers/WSATSSL_Server1/server.xml | 2 +- .../publish/servers/WSATSSL_Server2/server.xml | 2 +- .../publish/servers/WSATSSL_Server3/server.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dev/com.ibm.ws.wsat_fat.ssl.misroute/publish/servers/WSATSSL_Client/server.xml b/dev/com.ibm.ws.wsat_fat.ssl.misroute/publish/servers/WSATSSL_Client/server.xml index 028915e08d2..4e7bdc72a4c 100644 --- a/dev/com.ibm.ws.wsat_fat.ssl.misroute/publish/servers/WSATSSL_Client/server.xml +++ b/dev/com.ibm.ws.wsat_fat.ssl.misroute/publish/servers/WSATSSL_Client/server.xml @@ -30,7 +30,7 @@ - + - + - + - + Date: Mon, 29 Jul 2024 13:14:52 -0400 Subject: [PATCH 060/166] add WL platform results --- .../publish/verify/platform_expected_WL.xml | 2524 +++++++++++++++++ 1 file changed, 2524 insertions(+) diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected_WL.xml b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected_WL.xml index f2775e29784..8324d7465c5 100644 --- a/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected_WL.xml +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/platform_expected_WL.xml @@ -1,2 +1,2526 @@ + + features_ee_platforms_p_ee + Platform case [ features_ee_platforms_p_ee ] + + servlet + jsp + javaee-7.0 + + + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.waswelcomepage-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + features_mp_platforms_ev_mp + Platform case [ features_mp_platforms_ev_mp ] + + mpMetrics + mpHealth + mpMetrics-2.2 + PREFERRED_PLATFORM_VERSIONS=microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mixed_platforms_v_mixed + Platform case [ features_mixed_platforms_v_mixed ] + + servlet + jsp + mpMetrics + mpHealth + servlet-3.1 + mpMetrics-2.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + json-1.0 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mixed_platforms_ep_mixed + Platform case [ features_mixed_platforms_ep_mixed ] + + servlet + jsp + mpMetrics + mpHealth + javaee-7.0 + microProfile-3.2 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0,microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mixed_platforms_none + Platform case [ features_mixed_platforms_none ] + + servlet + jsp + mpMetrics + mpHealth + + + mpMetrics=null + mpHealth=null + servlet=null + jsp=null + mpMetrics + mpHealth + servlet + jsp + servlet + jsp + mpMetrics + mpHealth + + + + + features_ee_platforms_none + Platform case [ features_ee_platforms_none ] + + servlet + jsp + + + servlet=null + jsp=null + servlet + jsp + servlet + jsp + + + + + features_mixed_platforms_pv_mixed + Platform case [ features_mixed_platforms_pv_mixed ] + + servlet + jsp + mpMetrics + mpHealth + servlet-3.1 + mpMetrics-2.2 + javaee-7.0 + microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + json-1.0 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_ee_platforms_pv_ee + Platform case [ features_ee_platforms_pv_ee ] + + servlet + jsp + servlet-3.1 + javaee-7.0 + + + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.waswelcomepage-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + features_ee_platforms_ev_ee + Platform case [ features_ee_platforms_ev_ee ] + + servlet + jsp + servlet-3.1 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0 + + + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.waswelcomepage-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + features_mp_platforms_ep_mp + Platform case [ features_mp_platforms_ep_mp ] + + mpMetrics + mpHealth + microProfile-3.2 + PREFERRED_PLATFORM_VERSIONS=microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mp_platforms_p_mp + Platform case [ features_mp_platforms_p_mp ] + + mpMetrics + mpHealth + microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mp_platforms_pv_mpMetrics + Platform case [ features_mp_platforms_pv_mpMetrics ] + + mpMetrics + mpHealth + mpMetrics-2.2 + microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_ee_platforms_ep_override + Platform case [ features_ee_platforms_ep_override ] + + servlet + jsp + javaee-8.0 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0 + + + javaee-8.0 + servlet=servlet-4.0 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-8.0 + io.openliberty.servlet.api-4.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.javax.annotation-1.3 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.injection-1.0 + servlet-4.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-4.0 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.waswelcomepage-1.0 + io.openliberty.internal.versionless.servlet-4.0 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + features_mixed_platforms_e_mixed + Platform case [ features_mixed_platforms_e_mixed ] + + servlet + jsp + mpMetrics + mpHealth + PREFERRED_PLATFORM_VERSIONS=javaee-7.0,microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mp_platforms_ep_override + Platform case [ features_mp_platforms_ep_override ] + + mpMetrics + mpHealth + microProfile-4.0 + PREFERRED_PLATFORM_VERSIONS=microProfile-3.2 + + + microProfile-4.0 + mpMetrics=mpMetrics-3.0 + mpHealth=mpHealth-3.0 + com.ibm.websphere.appserver.eeCompatible-8.0 + io.openliberty.mpCompatible-4.0 + io.openliberty.internal.mpVersion-4.0 + json-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.javax.annotation-1.3 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-2.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-2.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + mpConfig-2.0 + io.openliberty.servlet.api-4.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.injection-1.0 + servlet-4.0 + io.openliberty.servlet.internal-4.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.jsonpImpl-1.1.1 + com.ibm.websphere.appserver.jsonpInternal-1.1 + jsonp-1.1 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.2 + com.ibm.websphere.appserver.javax.persistence-2.2 + cdi-2.0 + jndi-1.0 + mpHealth-3.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-3.0 + monitor-1.0 + mpMetrics-3.0 + com.ibm.websphere.appserver.transactionContext-1.0 + io.openliberty.mpMetrics-3.0-monitor-1.0 + com.ibm.websphere.appserver.cdi2.0-transaction1.2 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.distributedMapPMI-1.0 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.sessionMonitor-1.0 + com.ibm.websphere.appserver.cdi2.0-servlet4.0 + com.ibm.websphere.appserver.webcontainerMonitor-1.0 + com.ibm.websphere.appserver.cdi2.0-jndi1.0 + io.openliberty.internal.versionless.mpMetrics-3.0 + mpMetrics + io.openliberty.internal.versionless.mpHealth-3.0 + mpHealth + + + + + features_mp_platforms_e_mp + Platform case [ features_mp_platforms_e_mp ] + + mpMetrics + mpHealth + PREFERRED_PLATFORM_VERSIONS=microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mixed_platforms_ev_mixed + Platform case [ features_mixed_platforms_ev_mixed ] + + servlet + jsp + mpMetrics + mpHealth + servlet-3.1 + mpMetrics-2.2 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0,microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + json-1.0 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_ee_platforms_v_servlet + Platform case [ features_ee_platforms_v_servlet ] + + servlet + jsp + servlet-3.1 + + + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.waswelcomepage-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + features_mixed_platforms_ep_override + Platform case [ features_mixed_platforms_ep_override ] + + servlet + jsp + mpMetrics + mpHealth + javaee-8.0 + microProfile-4.0 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0,microProfile-3.2 + + + javaee-8.0 + microProfile-4.0 + mpMetrics=mpMetrics-3.0 + mpHealth=mpHealth-3.0 + servlet=servlet-4.0 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-8.0 + io.openliberty.mpCompatible-4.0 + io.openliberty.internal.mpVersion-4.0 + io.openliberty.servlet.api-4.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.javax.annotation-1.3 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.injection-1.0 + servlet-4.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-4.0 + el-3.0 + jsp-2.3 + json-1.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-2.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-2.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + mpConfig-2.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.jsonpImpl-1.1.1 + com.ibm.websphere.appserver.jsonpInternal-1.1 + jsonp-1.1 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-3.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.2 + com.ibm.websphere.appserver.javax.persistence-2.2 + cdi-2.0 + jndi-1.0 + mpHealth-3.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-3.0 + monitor-1.0 + mpMetrics-3.0 + com.ibm.websphere.appserver.transactionContext-1.0 + io.openliberty.mpMetrics-3.0-monitor-1.0 + com.ibm.websphere.appserver.cdi2.0-transaction1.2 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.distributedMapPMI-1.0 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.sessionMonitor-1.0 + com.ibm.websphere.appserver.cdi2.0-servlet4.0 + com.ibm.websphere.appserver.webcontainerMonitor-1.0 + com.ibm.websphere.appserver.cdi2.0-jndi1.0 + io.openliberty.internal.versionless.servlet-4.0 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-3.0 + mpMetrics + io.openliberty.internal.versionless.mpHealth-3.0 + mpHealth + + + + + features_ee_platforms_ep_ee + Platform case [ features_ee_platforms_ep_ee ] + + servlet + jsp + javaee-7.0 + PREFERRED_PLATFORM_VERSIONS=javaee-7.0 + + + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.waswelcomepage-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + features_mp_platforms_none + Platform case [ features_mp_platforms_none ] + + mpMetrics + mpHealth + + + mpMetrics=null + mpHealth=null + mpMetrics + mpHealth + mpMetrics + mpHealth + + + + + features_mixed_platforms_p_mixed + Platform case [ features_mixed_platforms_p_mixed ] + + servlet + jsp + mpMetrics + mpHealth + javaee-7.0 + microProfile-3.2 + + + javaee-7.0 + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_mp_platforms_v_mpMetrics + Platform case [ features_mp_platforms_v_mpMetrics ] + + mpMetrics + mpHealth + mpMetrics-2.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + io.openliberty.mpCompatible-0.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-3.2 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + features_ee_platforms_e_ee + Platform case [ features_ee_platforms_e_ee ] + + servlet + jsp + PREFERRED_PLATFORM_VERSIONS=javaee-7.0 + + + javaee-7.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.waswelcomepage-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + + + + + platforms_p_missing_ee + Platform case [ platforms_p_missing_ee ] + + servlet + jsp + mpMetrics + mpHealth + microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=null + jsp=null + servlet + jsp + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + io.openliberty.servlet.internal-3.1 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + servlet + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + + + + + platforms_p_conflicting_high_ee + Platform case [ platforms_p_conflicting_high_ee ] + + servlet + jsp + mpMetrics + mpHealth + jakartaee-10.0 + microProfile-3.2 + + + microProfile-3.2 + mpMetrics=mpMetrics-2.2 + mpHealth=mpHealth-2.1 + servlet=null + jsp=pages-3.1 + io.openliberty.mpCompatible-0.0 + io.openliberty.internal.mpVersion-3.2 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.contextService-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.health-2.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + io.openliberty.jakarta.annotation-2.1 + com.ibm.websphere.appserver.anno-2.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.jta-1.2 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.javax.connector.internal-1.7 + com.ibm.websphere.appserver.transaction-1.2 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + com.ibm.websphere.appserver.jsonpImpl-1.0.0 + jsonp-1.0 + mpHealth-2.1 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + com.ibm.websphere.appserver.httptransport-1.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + mpMetrics-2.2 + io.openliberty.jakarta.expressionLanguage-5.0 + io.openliberty.jakarta.pages-3.1 + expressionLanguage-5.0 + pages-3.1 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.transactionContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + com.ibm.websphere.appserver.cdi1.2-transaction1.2 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-6.0 + servlet + io.openliberty.internal.versionless.jsp-3.1 + jsp + io.openliberty.internal.versionless.mpMetrics-2.2 + mpMetrics + io.openliberty.internal.versionless.mpHealth-2.1 + mpHealth + io.openliberty.servlet.api + com.ibm.websphere.appserver.injection + com.ibm.websphere.appserver.servlet + io.openliberty.servlet.internal + com.ibm.websphere.appserver.eeCompatible + + + + + platforms_p_conflicting_mpMetrics_mp + Platform case [ platforms_p_conflicting_mpMetrics_mp ] + + mpMetrics + mpHealth + mpMetrics-2.2 + microProfile-6.0 + + + microProfile-6.0 + mpMetrics=mpMetrics-5.0 + mpHealth=mpHealth-4.0 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + io.openliberty.jakarta.annotation-2.1 + com.ibm.websphere.appserver.anno-2.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + com.ibm.websphere.appserver.httptransport-1.0 + io.openliberty.restHandler.internal-1.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.2 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.wsspi.appserver.webBundle-1.0 + com.ibm.wsspi.appserver.webBundleSecurity-1.0 + io.openliberty.securityAPI.jakarta-1.0 + com.ibm.websphere.appserver.restHandler-1.0 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.interceptor-1.2 + com.ibm.websphere.appserver.javax.cdi-1.2 + com.ibm.websphere.appserver.org.eclipse.microprofile.config-1.3 + mpConfig-1.3 + com.ibm.websphere.appserver.org.eclipse.microprofile.metrics-2.2 + com.ibm.websphere.appserver.javax.jsp-2.3 + com.ibm.websphere.appserver.javax.ejb-3.2 + com.ibm.websphere.appserver.javax.persistence.base-2.1 + com.ibm.websphere.appserver.javax.persistence-2.1 + com.ibm.websphere.appserver.javax.jsf-2.2 + com.ibm.websphere.appserver.javax.validation-1.1 + cdi-1.2 + mpMetrics-2.2 + io.openliberty.internal.mpVersion-6.0 + io.openliberty.org.eclipse.microprofile.config.3.0.ee-9.0 + io.openliberty.org.eclipse.microprofile.config-3.0 + mpConfig-3.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + io.openliberty.jakartaeePlatform-9.0 + io.openliberty.jakartaeePlatform-10.0 + com.ibm.websphere.appserver.contextService-1.0 + io.openliberty.jakarta.enterpriseBeans-4.0 + io.openliberty.jsonpImpl-2.1.1 + io.openliberty.jsonpInternal-2.1 + io.openliberty.jakarta.persistence.base-3.1 + io.openliberty.jakarta.persistence-3.1 + io.openliberty.jakarta.activation-2.1 + io.openliberty.jakarta.xmlBinding-4.0 + io.openliberty.jakarta.xmlWS-4.0 + io.openliberty.jakarta.expressionLanguage-5.0 + io.openliberty.jakarta.pages-3.1 + cdi-4.0 + io.openliberty.org.eclipse.microprofile.metrics-5.0 + monitor-1.0 + mpMetrics-5.0 + io.openliberty.microprofile.cdi.api-3.0 + io.openliberty.org.eclipse.microprofile.health-4.0 + jsonp-2.1 + mpHealth-4.0 + com.ibm.websphere.appserver.mpMetrics2.2-cdi1.2 + com.ibm.websphere.appserver.cdi1.2-servlet3.1 + com.ibm.websphere.appserver.mpMetrics-2.2-monitor-1.0 + com.ibm.websphere.appserver.autoRestHandlerApiDiscovery-1.0 + com.ibm.websphere.appserver.cdi1.2-jndi1.0 + io.openliberty.cdi3.0-jndi1.0 + com.ibm.websphere.appserver.mpConfig1.2-cdi1.2 + com.ibm.websphere.appserver.distributedMapPMI-1.0 + com.ibm.websphere.appserver.autoRestHandlerCollectivePlugins-1.0 + com.ibm.websphere.appserver.securityContext-1.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.sessionMonitor-1.0 + com.ibm.websphere.appserver.webcontainerMonitor-1.0 + io.openliberty.internal.versionless.mpMetrics-5.0 + mpMetrics + io.openliberty.internal.versionless.mpHealth-4.0 + mpHealth + io.openliberty.servlet.api + com.ibm.websphere.appserver.injection + io.openliberty.jakarta.cdi + io.openliberty.mpCompatible + io.openliberty.servlet.internal + com.ibm.websphere.appserver.eeCompatible + com.ibm.websphere.appserver.transaction + + + + + platforms_p_missing_mp + Platform case [ platforms_p_missing_mp ] + + servlet + jsp + mpMetrics + mpHealth + javaee-7.0 + + + javaee-7.0 + mpMetrics=null + mpHealth=null + servlet=servlet-3.1 + jsp=jsp-2.3 + mpMetrics + mpHealth + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.injection-1.0 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + com.ibm.websphere.appserver.waswelcomepage-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + mpMetrics + mpHealth + + + + + platforms_p_conflicting_high_mp + Platform case [ platforms_p_conflicting_high_mp ] + + servlet + jsp + mpMetrics + mpHealth + javaee-7.0 + microProfile-6.0 + + + microProfile-6.0 + mpMetrics=mpMetrics-5.0 + mpHealth=mpHealth-4.0 + servlet=servlet-3.1 + jsp=jsp-2.3 + io.openliberty.mpCompatible-6.0 + io.openliberty.internal.mpVersion-6.0 + com.ibm.websphere.appserver.javaeeddSchema-1.0 + com.ibm.websphere.appserver.servlet-servletSpi1.0 + com.ibm.websphere.appserver.channelfw-1.0 + com.ibm.websphere.appserver.httptransport-1.0 + com.ibm.websphere.appserver.requestProbes-1.0 + com.ibm.websphere.appserver.javax.annotation-1.1 + com.ibm.websphere.appserver.appLifecycle-1.0 + com.ibm.websphere.appserver.artifact-1.0 + com.ibm.websphere.appserver.javaeedd-1.0 + com.ibm.websphere.appserver.anno-1.0 + com.ibm.websphere.appserver.containerServices-1.0 + com.ibm.websphere.appserver.dynamicBundle-1.0 + com.ibm.websphere.appserver.classloading-1.0 + com.ibm.websphere.appserver.appmanager-1.0 + com.ibm.websphere.appserver.javaeePlatform-6.0 + com.ibm.websphere.appserver.javaeePlatform-7.0 + servlet-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + el-3.0 + jsp-2.3 + json-1.0 + io.openliberty.webBundle.internal.ee-6.0 + io.openliberty.webBundle.internal-1.0 + com.ibm.websphere.appserver.internal.slf4j-1.7 + jndi-1.0 + io.openliberty.distributedMapInternal-1.0 + distributedMap-1.0 + com.ibm.websphere.appserver.basicRegistry-1.0 + com.ibm.websphere.appserver.securityInfrastructure-1.0 + com.ibm.websphere.appserver.builtinAuthorization-1.0 + com.ibm.websphere.appserver.certificateCreator-1.0 + ssl-1.0 + com.ibm.websphere.appserver.ltpa-1.0 + io.openliberty.jcache.internal1.1.ee-6.0 + io.openliberty.jcache.internal-1.1 + com.ibm.websphere.appserver.builtinAuthentication-1.0 + io.openliberty.securityAPI.javaee-1.0 + io.openliberty.security.internal.ee-6.0 + com.ibm.websphere.appserver.security-1.0 + io.openliberty.authFilter1.0.internal.ee-6.0 + com.ibm.websphere.appserver.authFilter-1.0 + io.openliberty.webBundleSecurity1.0.internal.ee-6.0 + io.openliberty.webBundleSecurity.internal-1.0 + com.ibm.websphere.appserver.adminSecurity-1.0 + io.openliberty.restHandler1.0.internal.ee-6.0 + io.openliberty.restHandler.internal-1.0 + io.openliberty.jakarta.annotation-2.1 + io.openliberty.jakarta.expressionLanguage-5.0 + io.openliberty.jakarta.interceptor-2.1 + io.openliberty.jakarta.cdi-4.0 + io.openliberty.org.eclipse.microprofile.config.3.0.ee-10.0 + io.openliberty.org.eclipse.microprofile.config-3.0 + mpConfig-3.0 + com.ibm.websphere.appserver.javaeePlatform-8.0 + io.openliberty.jakartaeePlatform-9.0 + io.openliberty.jakartaeePlatform-10.0 + com.ibm.websphere.appserver.contextService-1.0 + io.openliberty.jakarta.enterpriseBeans-4.0 + io.openliberty.jsonpImpl-2.1.1 + io.openliberty.jsonpInternal-2.1 + io.openliberty.jakarta.persistence.base-3.1 + io.openliberty.jakarta.persistence-3.1 + io.openliberty.jakarta.activation-2.1 + io.openliberty.jakarta.xmlBinding-4.0 + io.openliberty.jakarta.xmlWS-4.0 + io.openliberty.jakarta.pages-3.1 + io.openliberty.jta-2.0 + io.openliberty.jakarta.connectors-2.0 + com.ibm.websphere.appserver.transaction-2.0 + cdi-4.0 + io.openliberty.org.eclipse.microprofile.metrics-5.0 + monitor-1.0 + mpMetrics-5.0 + io.openliberty.microprofile.cdi.api-4.0 + io.openliberty.org.eclipse.microprofile.health-4.0 + jsonp-2.1 + mpHealth-4.0 + com.ibm.websphere.appserver.javaeePlatform7.0-jndi1.0 + com.ibm.websphere.appserver.jakarta-transactionContext-1.0 + com.ibm.websphere.appserver.classloaderContext-1.0 + com.ibm.websphere.appserver.waswelcomepage-1.0 + com.ibm.websphere.appserver.sessionMonitor-1.0 + io.openliberty.cdi3.0-jndi1.0 + com.ibm.websphere.appserver.distributedMapPMI-1.0 + com.ibm.websphere.appserver.webcontainerMonitor-1.0 + io.openliberty.cdi3.0-transaction2.0 + com.ibm.websphere.appserver.securityContext-1.0 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + io.openliberty.internal.versionless.mpMetrics-5.0 + mpMetrics + io.openliberty.internal.versionless.mpHealth-4.0 + mpHealth + io.openliberty.servlet.api + com.ibm.websphere.appserver.injection + com.ibm.websphere.appserver.eeCompatible + io.openliberty.servlet.internal + + + + + platforms_p_conflicting_servlet_ee + Platform case [ platforms_p_conflicting_servlet_ee ] + + servlet + jsp + servlet-6.0 + javaee-7.0 + + + javaee-7.0 + servlet=null + jsp=jsp-2.3 + com.ibm.websphere.appserver.eeCompatible-7.0 + io.openliberty.servlet.api-3.1 + com.ibm.websphere.appserver.javax.el-3.0 + com.ibm.websphere.appserver.javax.jsp-2.3 + io.openliberty.servlet.internal-3.1 + el-3.0 + jsp-2.3 + io.openliberty.internal.versionless.servlet-3.1 + servlet + io.openliberty.internal.versionless.jsp-2.3 + jsp + com.ibm.websphere.appserver.servlet + + + From 12fe9a3bef509ab0a2d9f24159d3100aaa375efb Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Mon, 29 Jul 2024 18:41:44 +0100 Subject: [PATCH 061/166] Also emit UUID on apps --- .../config/OpenTelemetryVersionedConfigurationImpl.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java index 22de6a0b2d0..0c272356276 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java +++ b/dev/io.openliberty.microprofile.telemetry.2.0.internal/src/io/openliberty/microprofile/telemetry20/internal/config/OpenTelemetryVersionedConfigurationImpl.java @@ -62,9 +62,16 @@ public OpenTelemetry buildOpenTelemetry(Map openTelemetryPropert openTelemetryProperties.putAll(getTelemetryPropertyDefaults()); + //TODO refactor this + BiFunction updatedMethod = resourceCustomiser.andThen(resource -> { + ResourceBuilder builder = resource.toBuilder(); + builder.put(OpenTelemetryConstants.KEY_SERVICE_INSTANCE_ID, UUID.randomUUID().toString()); + return builder.build(); + }); + OpenTelemetrySdk openTelemetry = AutoConfiguredOpenTelemetrySdk.builder() .addPropertiesCustomizer(x -> openTelemetryProperties) //Overrides OpenTelemetry's property order - .addResourceCustomizer(resourceCustomiser) //Defaults service name to application name + .addResourceCustomizer(updatedMethod) //Defaults service name to application name .setServiceClassLoader(classLoader) .disableShutdownHook() .build() From 3019ae68ec858e97633b58ca035518653847daeb Mon Sep 17 00:00:00 2001 From: David Chan Date: Mon, 29 Jul 2024 14:18:18 -0400 Subject: [PATCH 062/166] Support instance attribute for bridged OpenLiberty (+http) metrics in Otel --- .../http/monitor/fat/BaseTestClass.java | 12 ++-- .../internal/monitor_fat/BaseTestClass.java | 36 ++++++++-- .../monitor_fat/LibertyMetricsTest.java | 68 +++++++++---------- 3 files changed, 72 insertions(+), 44 deletions(-) diff --git a/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/BaseTestClass.java b/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/BaseTestClass.java index 8512db44b70..ab4c28a2bc5 100644 --- a/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/BaseTestClass.java +++ b/dev/io.openliberty.http.monitor_fat/fat/src/io/openliberty/http/monitor/fat/BaseTestClass.java @@ -268,14 +268,16 @@ protected boolean validateMpTelemetryHttp(String appName, String vendorMetricsOu + requestMethod + "\",http_response_status_code=\"" + responseStatus + "\",http_route=\"" + route - + "\",job=\"" + appName + + "\",instance=\"[a-zA-Z0-9-]*\"" + + ",job=\"" + appName + "\",network_protocol_name=\"HTTP\",network_protocol_version=\"1\\.[01]\",server_address=\"localhost\",server_port=\"[0-9]+\",url_scheme=\"http\"\\} "; sumMatchString = "http_server_request_duration_seconds_sum\\{http_request_method=\"" + requestMethod + "\",http_response_status_code=\"" + responseStatus + "\",http_route=\"" + route - + "\",job=\"" + appName + + "\",instance=\"[a-zA-Z0-9-]*\"" + + ",job=\"" + appName + "\",network_protocol_name=\"HTTP\",network_protocol_version=\"1\\.[01]\",server_address=\"localhost\",server_port=\"[0-9]+\",url_scheme=\"http\"\\} "; } else { countMatchString = "http_server_request_duration_seconds_count\\{error_type=\"" + errorType @@ -283,7 +285,8 @@ protected boolean validateMpTelemetryHttp(String appName, String vendorMetricsOu + requestMethod + "\",http_response_status_code=\"" + responseStatus + "\",http_route=\"" + route - + "\",job=\"" + appName + + "\",instance=\"[a-zA-Z0-9-]*\"" + + ",job=\"" + appName + "\",network_protocol_name=\"HTTP\",network_protocol_version=\"1\\.[01]\",server_address=\"localhost\",server_port=\"[0-9]+\",url_scheme=\"http\"\\} "; sumMatchString = "http_server_request_duration_seconds_sum\\{error_type=\"" + errorType @@ -291,7 +294,8 @@ protected boolean validateMpTelemetryHttp(String appName, String vendorMetricsOu + requestMethod + "\",http_response_status_code=\"" + responseStatus + "\",http_route=\"" + route - + "\",job=\"" + appName + + "\",instance=\"[a-zA-Z0-9-]*\"" + + ",job=\"" + appName + "\",network_protocol_name=\"HTTP\",network_protocol_version=\"1\\.[01]\",server_address=\"localhost\",server_port=\"[0-9]+\",url_scheme=\"http\"\\} "; } diff --git a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/BaseTestClass.java b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/BaseTestClass.java index 0f416be00f7..7dd09581c4b 100644 --- a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/BaseTestClass.java +++ b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/BaseTestClass.java @@ -14,6 +14,8 @@ import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; +import java.util.Scanner; + import org.junit.Assert; import org.testcontainers.containers.GenericContainer; import org.testcontainers.utility.DockerImageName; @@ -84,12 +86,34 @@ protected String getContainerCollectorMetrics(GenericContainer container) thr protected void checkStrings(String metricsText, String[] expectedString) { - for (String m : expectedString) { - if (!metricsText.contains(m)) { - Log.info(c, "checkStrings", "Failed:\n" + metricsText); - Assert.fail("Did not contain string: " + m); - } - } + for (String m : expectedString) { + if (!metricsText.contains(m)) { + Log.info(c, "checkStrings", "Failed:\n" + metricsText); + Assert.fail("Did not contain string: " + m); + } + } + + } + + + protected void matchStrings(String metricsText, String[] expectedString) { + + for (String m : expectedString) { + try (Scanner sc = new Scanner(metricsText)) { + boolean isFound = false; + while (sc.hasNextLine()) { + String line = sc.nextLine(); + if (line.matches(m)) { + isFound=true; + break; + } + }//while + if (!isFound) { + Log.info(c, "checkStrings", "Failed:\n" + metricsText); + Assert.fail("Did not contain string: " + m); + } + }//try + }//for } diff --git a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java index 85a518559f5..72de6cc7fd6 100644 --- a/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java +++ b/dev/io.openliberty.microprofile.telemetry.internal.monitor_fat/fat/src/io/openliberty/microprofile/telemetry/internal/monitor_fat/LibertyMetricsTest.java @@ -78,13 +78,13 @@ public void threadPoolAndRequestTimingMetricsTest() throws Exception { // Allow time for the collector to receive and expose metrics TimeUnit.SECONDS.sleep(4); - checkStrings(getContainerCollectorMetrics(container), new String[] { - "io_openliberty_threadpool_active_threads{io_openliberty_threadpool_name=\"Default Executor\",job=\"unkown_service\"}", - "io_openliberty_threadpool_size{io_openliberty_threadpool_name=\"Default Executor\",job=\"unkown_service\"}", - "io_openliberty_request_timing_active", - "io_openliberty_request_timing_slow", - "io_openliberty_request_timing_hung", - "io_openliberty_request_timing_count"}); + matchStrings(getContainerCollectorMetrics(container), new String[] { + "io_openliberty_threadpool_active_threads\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_threadpool_name=\"Default Executor\",job=\"unkown_service\"\\}.*", + "io_openliberty_threadpool_size\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_threadpool_name=\"Default Executor\",job=\"unkown_service\"\\}.*", + "io_openliberty_request_timing_active.*", + "io_openliberty_request_timing_slow.*", + "io_openliberty_request_timing_hung.*", + "io_openliberty_request_timing_count.*"}); } @@ -110,12 +110,12 @@ public void sessionsMetricTest() throws Exception { // -Dglobal.debug.java2.sec= // Allow time for the collector to receive and expose metrics TimeUnit.SECONDS.sleep(4); - checkStrings(getContainerCollectorMetrics(container), - new String[] { "io_openliberty_session_created_total{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}", - "io_openliberty_session_live{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}", - "io_openliberty_session_active{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}", - "io_openliberty_session_invalidated_total{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}", - "io_openliberty_session_invalidated_by_timeout_total{io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"}" }); + matchStrings(getContainerCollectorMetrics(container), + new String[] { "io_openliberty_session_created_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"\\}.*", + "io_openliberty_session_live\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"\\}.*", + "io_openliberty_session_active\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"\\}.*", + "io_openliberty_session_invalidated_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"\\}.*", + "io_openliberty_session_invalidated_by_timeout_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_application_name=\"default_host/testSessionApp\",job=\"unkown_service\"\\}.*" }); } @@ -136,30 +136,30 @@ public void connectionPoolTest() throws Exception { // Allow time for the collector to receive and expose metrics TimeUnit.SECONDS.sleep(4); - checkStrings(getContainerCollectorMetrics(container), - new String[] { "io_openliberty_connection_pool_handle_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_free{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_destroyed_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_created_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", + matchStrings(getContainerCollectorMetrics(container), + new String[] { "io_openliberty_connection_pool_handle_count\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_free\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_destroyed_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_created_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_count\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"\\}.*", - "io_openliberty_connection_pool_connection_use_time_seconds_bucket{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\",le=\"+Inf\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_sum{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_queued_requests_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_used_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_connection_use_time_seconds_bucket\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\",le=\"\\+Inf\"\\}.*", + "io_openliberty_connection_pool_connection_use_time_seconds_sum\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_use_time_seconds_count\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_queued_requests_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_used_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS1\",job=\"unkown_service\"\\}.*", - "io_openliberty_connection_pool_handle_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_free{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_destroyed_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_created_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", + "io_openliberty_connection_pool_handle_count\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_free\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_destroyed_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_created_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_count\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"\\}.*", - "io_openliberty_connection_pool_connection_use_time_seconds_bucket{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\",le=\"+Inf\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_sum{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_use_time_seconds_count{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_queued_requests_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}", - "io_openliberty_connection_pool_connection_used_total{io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"}" }); + "io_openliberty_connection_pool_connection_use_time_seconds_bucket\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\",le=\"\\+Inf\"\\}.*", + "io_openliberty_connection_pool_connection_use_time_seconds_sum\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_use_time_seconds_count\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_queued_requests_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"\\}.*", + "io_openliberty_connection_pool_connection_used_total\\{instance=\"[a-zA-Z0-9-]*\",io_openliberty_datasource_jndi_name=\"jdbc/exampleDS2\",job=\"unkown_service\"\\}.*" }); } } From c2f7eed119db5ba9a02187515cf608ace0aac6e2 Mon Sep 17 00:00:00 2001 From: Andrew Rouse Date: Tue, 30 Jul 2024 11:24:04 +0100 Subject: [PATCH 063/166] Disable tests until new FT TCK is available We're making implementation changes to match changes in the spec, but that means our implementation won't pass the old version of the TCK. --- .../publish/tckRunner/tck/tck-suite-lite.xml | 9 ++------- .../publish/tckRunner/tck/tck-suite.xml | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/dev/io.openliberty.microprofile.faulttolerance.4.1.internal_fat_tck/publish/tckRunner/tck/tck-suite-lite.xml b/dev/io.openliberty.microprofile.faulttolerance.4.1.internal_fat_tck/publish/tckRunner/tck/tck-suite-lite.xml index 8e1b9a68b85..0d8c809e843 100644 --- a/dev/io.openliberty.microprofile.faulttolerance.4.1.internal_fat_tck/publish/tckRunner/tck/tck-suite-lite.xml +++ b/dev/io.openliberty.microprofile.faulttolerance.4.1.internal_fat_tck/publish/tckRunner/tck/tck-suite-lite.xml @@ -130,13 +130,8 @@ - - - - - - - + + diff --git a/dev/io.openliberty.microprofile.faulttolerance.4.1.internal_fat_tck/publish/tckRunner/tck/tck-suite.xml b/dev/io.openliberty.microprofile.faulttolerance.4.1.internal_fat_tck/publish/tckRunner/tck/tck-suite.xml index a6bbef3515d..7e3a0df1837 100644 --- a/dev/io.openliberty.microprofile.faulttolerance.4.1.internal_fat_tck/publish/tckRunner/tck/tck-suite.xml +++ b/dev/io.openliberty.microprofile.faulttolerance.4.1.internal_fat_tck/publish/tckRunner/tck/tck-suite.xml @@ -14,5 +14,23 @@ + + + + + + + + + + + + + + + + + + From 80a9175e868e581f9125ee9a0bc21c12be9aa094 Mon Sep 17 00:00:00 2001 From: "ebcprh05475215-n.fyre.ibm.com" Date: Tue, 30 Jul 2024 07:29:08 -0700 Subject: [PATCH 064/166] Update product and bundle version for release 24.0.0.9 --- dev/cnf/resources/bnd/liberty-release.props | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev/cnf/resources/bnd/liberty-release.props b/dev/cnf/resources/bnd/liberty-release.props index 1375f552050..42bb0e91397 100644 --- a/dev/cnf/resources/bnd/liberty-release.props +++ b/dev/cnf/resources/bnd/liberty-release.props @@ -14,12 +14,12 @@ releaseTypeGA=true libertyBaseVersion=24.0.0 -libertyFixpackVersion=8 +libertyFixpackVersion=9 libertyServiceVersion=${libertyBaseVersion}.${libertyFixpackVersion} -libertyBetaVersion=2024.8.0.0 +libertyBetaVersion=2024.9.0.0 libertyRelease=${if;${releaseTypeGA};${libertyServiceVersion};${libertyBetaVersion}} -libertyBundleMicroVersion=92 +libertyBundleMicroVersion=93 copyrightBuildYear=2024 buildID=${libertyRelease}-${def;buildLabel} productEdition=BASE_ILAN From b7acade3284ae3d5d6637bf745689c8c54577956 Mon Sep 17 00:00:00 2001 From: Nathan Rauh Date: Tue, 30 Jul 2024 09:35:07 -0500 Subject: [PATCH 065/166] Issue #27306 concurrency policy with virtual=true --- .../OSGI-INF/l10n/metatype.properties | 4 + .../resources/OSGI-INF/metatype/metatype.xml | 4 +- .../internal/ManagedExecutorServiceImpl.java | 144 +++++++++++++----- .../internal/PolicyAndExecutor.java | 67 ++++++++ .../ws/concurrent/internal/ScheduledTask.java | 4 +- .../internal/TaskLifeCycleCallback.java | 8 +- .../ws/threading/PolicyExecutorProvider.java | 9 +- .../internal/PolicyExecutorImpl.java | 41 +++++ 8 files changed, 231 insertions(+), 50 deletions(-) create mode 100644 dev/com.ibm.ws.concurrent/src/com/ibm/ws/concurrent/internal/PolicyAndExecutor.java diff --git a/dev/com.ibm.ws.concurrency.policy/resources/OSGI-INF/l10n/metatype.properties b/dev/com.ibm.ws.concurrency.policy/resources/OSGI-INF/l10n/metatype.properties index dafb1433aea..41eb3c59755 100644 --- a/dev/com.ibm.ws.concurrency.policy/resources/OSGI-INF/l10n/metatype.properties +++ b/dev/com.ibm.ws.concurrency.policy/resources/OSGI-INF/l10n/metatype.properties @@ -45,3 +45,7 @@ runIfQueueFull.desc=Applies when using the or methods. Indica startTimeout=Start timeout startTimeout.desc=Specifies the maximum amount of time that may elapse between the task submission and the task start. By default, tasks do not time out. If both a maximum wait for enqueue and a start timeout are enabled, configure the start timeout to be larger than the maximum wait for enqueue. When the start timeout is updated while in use, the new start timeout value applies to tasks submitted after the update occurs. + +virtual=Use virtual threads +virtual.desc=Requests the use of virtual threads for tasks that do not run inline. \ +Java 21 or higher is a prerequisite of configuring this value to true. diff --git a/dev/com.ibm.ws.concurrency.policy/resources/OSGI-INF/metatype/metatype.xml b/dev/com.ibm.ws.concurrency.policy/resources/OSGI-INF/metatype/metatype.xml index b7053c8b5ea..512e3d39e58 100644 --- a/dev/com.ibm.ws.concurrency.policy/resources/OSGI-INF/metatype/metatype.xml +++ b/dev/com.ibm.ws.concurrency.policy/resources/OSGI-INF/metatype/metatype.xml @@ -1,6 +1,6 @@ @@ -66,6 +72,10 @@ + + + diff --git a/dev/com.ibm.ws.concurrent_fat_jakarta/test-applications/ConcurrencyTestWeb/src/test/jakarta/concurrency/web/ConcurrencyTestServlet.java b/dev/com.ibm.ws.concurrent_fat_jakarta/test-applications/ConcurrencyTestWeb/src/test/jakarta/concurrency/web/ConcurrencyTestServlet.java index 5c5280b7297..ff24d4b545a 100644 --- a/dev/com.ibm.ws.concurrent_fat_jakarta/test-applications/ConcurrencyTestWeb/src/test/jakarta/concurrency/web/ConcurrencyTestServlet.java +++ b/dev/com.ibm.ws.concurrent_fat_jakarta/test-applications/ConcurrencyTestWeb/src/test/jakarta/concurrency/web/ConcurrencyTestServlet.java @@ -4,7 +4,7 @@ * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-2.0/ - * + * * SPDX-License-Identifier: EPL-2.0 * * Contributors: @@ -217,6 +217,12 @@ public class ConcurrencyTestServlet extends FATServlet { @Resource(lookup = "java:app/concurrent/lowPriorityThreads") ManagedThreadFactory lowPriorityThreads; + @Resource(name = "java:comp/env/concurrent/virtualExec1Ref", lookup = "concurrent/virtualExec1") + ManagedExecutorService virtualExecutor1; + + @Resource(name = "java:module/env/concurrent/virtualExec2Ref", lookup = "concurrent/virtualExec2") + ManagedScheduledExecutorService virtualExecutor2; + //Do not use for any other tests @EJB MTFDBean testEJBAnnoManagedThreadFactoryInitializationBean; @@ -3108,6 +3114,130 @@ public void testThirdPartyContextForPropagationFailsToSerialize() throws Excepti } } + /** + * Use server-defined ManagedExecutorService and ManagedScheduledExecutorService + * resources that are configured to share a concurrency policy that specifies + * to run on virtual threads. In Java 21+, it should run on virtual threads. + * Prior to Java 21, this must result in an error because virtual threads are + * not available. + */ + @Test + public void testVirtualThreadedExecutors() throws Exception { + String version = System.getProperty("java.version"); + System.out.println("java.version is \"" + version + "\""); + boolean supportsVirtualThreads = Integer.parseInt(version.substring(0, version.indexOf('.'))) >= 21; + + if (supportsVirtualThreads) { + CountDownLatch twoStarted = new CountDownLatch(2); + CountDownLatch blocker = new CountDownLatch(1); + + try { + Future future1 = virtualExecutor1.submit(() -> { + twoStarted.countDown(); + InitialContext.doLookup("java:comp/env/concurrent/virtualExec1Ref"); + assertEquals(true, blocker.await(TIMEOUT_NS, TimeUnit.NANOSECONDS)); + return Thread.currentThread().toString(); + }); + + Future future2 = virtualExecutor2.submit(() -> { + twoStarted.countDown(); + InitialContext.doLookup("java:module/env/concurrent/virtualExec2Ref"); + assertEquals(true, blocker.await(TIMEOUT_NS, TimeUnit.NANOSECONDS)); + return Thread.currentThread().toString(); + }); + + // max=2 allows 2 to run at once + assertEquals(true, twoStarted.await(TIMEOUT_NS, TimeUnit.NANOSECONDS)); + + // maxQueueSize=3 allows 3 more to queue + Future future3 = virtualExecutor1.submit(() -> { + return Thread.currentThread().toString(); + }); + + Future future4 = virtualExecutor2.submit(() -> { + return Thread.currentThread().toString(); + }); + + Future future5 = virtualExecutor1.submit(() -> { + return Thread.currentThread().toString(); + }); + + try { + Future future6 = virtualExecutor2.submit(() -> { + return Thread.currentThread().getName(); + }); + fail("6th task should not be allowed. " + future6); + } catch (RejectedExecutionException x) { + // expected, no more queue positions are available + } + + try { + future3.get(100, TimeUnit.MILLISECONDS); + fail("3rd task should not run yet with max=2."); + } catch (TimeoutException x) { + // expected, concurrency is limited to max of 2 + } + + try { + future4.get(4, TimeUnit.MILLISECONDS); + fail("4th task should not run yet with max=2."); + } catch (TimeoutException x) { + // expected, concurrency is limited to max of 2 + } + + try { + future5.get(5, TimeUnit.MILLISECONDS); + fail("5th task should not run yet with max=2."); + } catch (TimeoutException x) { + // expected, concurrency is limited to max of 2 + } + + blocker.countDown(); + + String thread1name = future1.get(TIMEOUT_NS, TimeUnit.NANOSECONDS); + assertEquals(thread1name, true, thread1name.startsWith("VirtualThread[")); + + String thread2name = future2.get(TIMEOUT_NS, TimeUnit.NANOSECONDS); + assertEquals(thread2name, true, thread2name.startsWith("VirtualThread[")); + + String thread3name = future3.get(TIMEOUT_NS, TimeUnit.NANOSECONDS); + assertEquals(thread3name, true, thread3name.startsWith("VirtualThread[")); + + String thread4name = future4.get(TIMEOUT_NS, TimeUnit.NANOSECONDS); + assertEquals(thread4name, true, thread4name.startsWith("VirtualThread[")); + + String thread5name = future5.get(TIMEOUT_NS, TimeUnit.NANOSECONDS); + assertEquals(thread5name, true, thread5name.startsWith("VirtualThread[")); + } finally { + blocker.countDown(); + } + } else { + try { + Future future = virtualExecutor1.submit(() -> { + return Thread.currentThread().toString(); + }); + fail("ManagedExecutorService must reject virtual=true prior to Java 21. Instead: " + future); + } catch (IllegalArgumentException x) { + if (x.getMessage().indexOf("virtual") >= 0) + ; // expected that virtual=true is not allowed prior to Java 21 + else + throw x; + } + + try { + Future future = virtualExecutor2.submit(() -> { + return Thread.currentThread().toString(); + }); + fail("ManagedScheduledExecutorService must reject virtual=true prior to Java 21. Instead: " + future); + } catch (IllegalArgumentException x) { + if (x.getMessage().indexOf("virtual") >= 0) + ; // expected that virtual=true is not allowed prior to Java 21 + else + throw x; + } + } + } + /** * Use a ContextService that is defined by a context-service in a web module deployment descriptor. */ diff --git a/dev/com.ibm.ws.concurrent_fat_jakarta_11/publish/servers/com.ibm.ws.concurrent.fat.jakarta.ee11/server.xml b/dev/com.ibm.ws.concurrent_fat_jakarta_11/publish/servers/com.ibm.ws.concurrent.fat.jakarta.ee11/server.xml index 75b9e9239fc..fbef3b4cc04 100644 --- a/dev/com.ibm.ws.concurrent_fat_jakarta_11/publish/servers/com.ibm.ws.concurrent.fat.jakarta.ee11/server.xml +++ b/dev/com.ibm.ws.concurrent_fat_jakarta_11/publish/servers/com.ibm.ws.concurrent.fat.jakarta.ee11/server.xml @@ -13,6 +13,7 @@ + componenttest-2.0 concurrent-3.1 jndi-1.0 From 911a3a050328d1dadfc8e0cd296be4f830518592 Mon Sep 17 00:00:00 2001 From: Benjamin Confino Date: Tue, 30 Jul 2024 16:03:56 +0100 Subject: [PATCH 067/166] Add permission for org.apache.cxf.transport.http.HTTPConduit getting a system property --- .../publish/servers/Telemetry10JaxWithLogging/server.xml | 2 ++ .../publish/servers/Telemetry10MisConfig/server.xml | 4 +++- .../publish/servers/Telemetry10MultiApp/server.xml | 4 +++- .../publish/servers/Telemetry10Servlet/server.xml | 1 + .../publish/servers/Telemetry10Spi/server.xml | 3 ++- 5 files changed, 11 insertions(+), 3 deletions(-) diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10JaxWithLogging/server.xml b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10JaxWithLogging/server.xml index 7ce039db948..c5fd1ebb46d 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10JaxWithLogging/server.xml +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10JaxWithLogging/server.xml @@ -16,4 +16,6 @@ + + diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10MisConfig/server.xml b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10MisConfig/server.xml index 14672f1ad12..a13cf27be4a 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10MisConfig/server.xml +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10MisConfig/server.xml @@ -36,4 +36,6 @@ - \ No newline at end of file + + + diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10MultiApp/server.xml b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10MultiApp/server.xml index c00be73d950..000f68cfc33 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10MultiApp/server.xml +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10MultiApp/server.xml @@ -22,4 +22,6 @@ - \ No newline at end of file + + + diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Servlet/server.xml b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Servlet/server.xml index 754c0710508..2de493e8923 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Servlet/server.xml +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Servlet/server.xml @@ -21,4 +21,5 @@ + diff --git a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Spi/server.xml b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Spi/server.xml index cf4773cace7..1379e47f14c 100644 --- a/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Spi/server.xml +++ b/dev/io.openliberty.microprofile.telemetry.1.0.internal_fat/publish/servers/Telemetry10Spi/server.xml @@ -28,4 +28,5 @@ - \ No newline at end of file + + From d33891675ee827ae2b5ca28f25a55cdba4a4dce0 Mon Sep 17 00:00:00 2001 From: rsherget Date: Tue, 30 Jul 2024 12:38:04 -0400 Subject: [PATCH 068/166] remove ee10 from cache test and remove custom features from data --- .../feature/tests/VersionlessCachingTest.java | 54 +++++++------- .../publish/verify/repository_WL.xml | 72 ------------------- 2 files changed, 27 insertions(+), 99 deletions(-) diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessCachingTest.java b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessCachingTest.java index afe4bbd3905..12e89dcc713 100644 --- a/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessCachingTest.java +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/fat/src/com/ibm/ws/feature/tests/VersionlessCachingTest.java @@ -203,8 +203,8 @@ public void removedFeatureIsNoticedAfterStart() throws Exception { * - start server * * test: - * - change plaform to jakartaee-10.0 - * - check for feature servlet-6.0 + * - change plaform to jakartaee-9.1 + * - check for feature servlet-5.0 */ @Test public void changeInPlatformIsNoticedWhileServerRunning() throws Exception { @@ -213,13 +213,13 @@ public void changeInPlatformIsNoticedWhileServerRunning() throws Exception { startServer(CLEAN_START, SET_LOG_MARK); // UPDATE CONFIG - server running - displayHeading('*', "Update config by adding changing platform to \"jakartaee-10.0\""); - List platforms = Arrays.asList("jakartaee-10.0"); + displayHeading('*', "Update config by adding changing platform to \"jakartaee-9.1\""); + List platforms = Arrays.asList("jakartaee-9.1"); List features = Arrays.asList("jsp"); createServerXml(server.getServerRoot(), platforms, features); // WAIT FOR RESULT - String expectedFeature = "servlet-6.0"; + String expectedFeature = "servlet-5.0"; String lineInLog = waitForStringInLog(RESOLUTION_MSG); assertNotNull("Resolution message, " + RESOLUTION_MSG + " not found.", lineInLog); assertTrue("Resolution message should contain " + expectedFeature + ".", lineInLog.contains(expectedFeature)); @@ -239,9 +239,9 @@ public void changeInPlatformIsNoticedWhileServerRunning() throws Exception { * - start & stop server * * test: - * - change plaform to jakartaee-10.0 + * - change plaform to jakartaee-9.1 * - start server (dirty) - * - check for feature servlet-6.0 + * - check for feature servlet-5.0 */ @Test public void changeInPlatformIsNoticedAfterServerStart() throws Exception { @@ -252,15 +252,15 @@ public void changeInPlatformIsNoticedAfterServerStart() throws Exception { stopServer(allowedMessages); // UPDATE CONFIG - server stopped - displayHeading('*', "Update config by changing platform to \"jakartaee-10.0\""); - List platforms = Arrays.asList("jakartaee-10.0"); + displayHeading('*', "Update config by changing platform to \"jakartaee-9.1\""); + List platforms = Arrays.asList("jakartaee-9.1"); List features = Arrays.asList("jsp"); createServerXml(server.getServerRoot(), platforms, features); startServer(DIRTY_START, DONT_SET_LOG_MARK); // WAIT FOR RESULT - String expectedFeature = "servlet-6.0"; + String expectedFeature = "servlet-5.0"; String lineInLog = waitForStringInLog(RESOLUTION_MSG); assertNotNull("Resolution message, " + RESOLUTION_MSG + " not found.", lineInLog); assertTrue("Resolution message should contain " + expectedFeature + ".", lineInLog.contains(expectedFeature)); @@ -281,9 +281,9 @@ public void changeInPlatformIsNoticedAfterServerStart() throws Exception { * - start and stop server. * * part 1: - * - change env var to jakartaee-11.0 in server.env + * - change env var to jakartaee-9.1 in server.env * - start server (must be dirty start) - * - check that servlet 6.0 is installed + * - check that servlet 5.0 is installed * - stop server * * part 2: @@ -311,13 +311,13 @@ public void changeInPreferredPlatformVariableIsNoticedAfterServerStart() throws stopServer(allowedMessages); // PART 1: UPDATE CONFIG - while server stopped. Add environment variable - displayHeading('*', "Part 1: Update config by changing PREFERRED_PLATFORM_VERSIONS to \"jakartaee-10.0\""); - createServerEnv(server.getInstallRoot() + "/usr/servers/" + SERVER_NAME, "jakartaee-10.0"); + displayHeading('*', "Part 1: Update config by changing PREFERRED_PLATFORM_VERSIONS to \"jakartaee-9.1\""); + createServerEnv(server.getInstallRoot() + "/usr/servers/" + SERVER_NAME, "jakartaee-9.1"); startServerUsingServerScript(null); // WAIT FOR RESULT - String expectedFeature = "servlet-6.0"; + String expectedFeature = "servlet-5.0"; String lineInLog = waitForStringInLog(RESOLUTION_MSG); assertNotNull("Resolution message, " + RESOLUTION_MSG + " not found.", lineInLog); assertTrue("Resolution message should contain " + expectedFeature + ".", lineInLog.contains(expectedFeature)); @@ -353,10 +353,10 @@ public void changeInPreferredPlatformVariableIsNoticedAfterServerStart() throws * setup: * - platform in server.xml AND environment variable set to a different platform * (note server.xml overrides the environment variable. - * - platform in server.xml set to jakartaee-10 + * - platform in server.xml set to jakartaee-9.1 * - env var set to javaee-8.0 * - feature set to jsp - * - start server - assert servlet-6.0 installed + * - start server - assert servlet-5.0 installed * - stop server * * test: @@ -378,11 +378,11 @@ public void removePlatformIsNoticedAfterServerStart() throws Exception { } // SETUP - createServer("jakartaee-10.0", "jsp", "javaee-8.0"); + createServer("jakartaee-9.1", "jsp", "javaee-8.0"); displayFile(new File(server.getInstallRoot() + "/usr/servers/" + SERVER_NAME, "server.xml")); startServerUsingServerScript(null); assertTrue("the server should have been started", server.isStarted()); - String expectedFeature = "servlet-6.0"; + String expectedFeature = "servlet-5.0"; String lineInLog = waitForStringInLog(RESOLUTION_MSG); assertNotNull("Resolution message, " + RESOLUTION_MSG + " not found.", lineInLog); assertTrue("Resolution message should contain " + expectedFeature + ".", lineInLog.contains(expectedFeature)); @@ -419,9 +419,9 @@ public void removePlatformIsNoticedAfterServerStart() throws Exception { * - start server - assert servlet-4.0 installed * - stop server * test: - * - add platform (jakartaee-10.0) to server.xml + * - add platform (jakartaee-9.1) to server.xml * - start server (must be dirty start) - * - check that servlet 6.0 is installed since we'll be using jakartaee-10.0 from the server.xml + * - check that servlet 5.0 is installed since we'll be using jakartaee-9.1 from the server.xml */ @Test public void addPlatformIsNoticedAfterServerStart() throws Exception { @@ -449,13 +449,13 @@ public void addPlatformIsNoticedAfterServerStart() throws Exception { // UPDATE CONFIG - while server stopped. Remove platform from server.xml displayHeading('*', "Update config by removing platform from server.xml"); createServerXml(server.getInstallRoot() + "/usr/servers/" + SERVER_NAME, - Arrays.asList("jakartaee-10.0"), // platform + Arrays.asList("jakartaee-9.1"), // platform Arrays.asList("jsp")); // feature startServerUsingServerScript(null); // WAIT FOR RESULT - expectedFeature = "servlet-6.0"; // because platform is now in server.xml + expectedFeature = "servlet-5.0"; // because platform is now in server.xml lineInLog = waitForStringInLog(RESOLUTION_MSG); assertNotNull("Resolution message, " + RESOLUTION_MSG + " not found.", lineInLog); assertTrue("Resolution message should contain " + expectedFeature + ".", lineInLog.contains(expectedFeature)); @@ -476,9 +476,9 @@ public void addPlatformIsNoticedAfterServerStart() throws Exception { * - start server - assert servlet-4.0 installed * - stop server * test: - * - update preferred platform versions in server.env to (jakartaee-10.0, javaee-8.0) to server.xml + * - update preferred platform versions in server.env to (jakartaee-9.1, javaee-8.0) to server.xml * - start server (must be dirty start) - * - check that servlet 6.0 is installed since we'll be using jakartaee-10.0from the env var + * - check that servlet 5.0 is installed since we'll be using jakartaee-9.1 from the env var */ @Test public void preferredPatformValueChangeIsNoticedAfterServerStart() throws Exception { @@ -505,12 +505,12 @@ public void preferredPatformValueChangeIsNoticedAfterServerStart() throws Except // UPDATE CONFIG - while server stopped. Remove platform from server.xml displayHeading('*', "Update config by changing variable PREFERRED_PLATFORM_VERSIONS"); - createServerEnv(server.getInstallRoot() + "/usr/servers/" + SERVER_NAME, "jakartaee-10.0,javaee-8.0"); + createServerEnv(server.getInstallRoot() + "/usr/servers/" + SERVER_NAME, "jakartaee-9.1,javaee-8.0"); startServerUsingServerScript(null); // WAIT FOR RESULT - expectedFeature = "servlet-6.0"; // because platform is now in server.xml + expectedFeature = "servlet-5.0"; // because platform is now in server.xml lineInLog = waitForStringInLog(RESOLUTION_MSG); assertNotNull("Resolution message, " + RESOLUTION_MSG + " not found.", lineInLog); assertTrue("Resolution message should contain " + expectedFeature + ".", lineInLog.contains(expectedFeature)); diff --git a/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/repository_WL.xml b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/repository_WL.xml index 3c046dd4d46..68373382a28 100644 --- a/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/repository_WL.xml +++ b/dev/com.ibm.ws.kernel.feature.resolver_fat/publish/verify/repository_WL.xml @@ -62142,78 +62142,6 @@ 6.1 - - customRegistrySample-1.0.mf - customRegistrySample-1.0 - customRegistrySample-1.0 - 1.0.0 - 2 - - PUBLIC - NEVER - - com.ibm.websphere.security - 12 - SEQUENTIAL - type=osgi.bundle - [1.0.0,2.0.0) - - - com.ibm.ws.security.registry.custom.sample - 12 - SEQUENTIAL - type=osgi.bundle - [1.0.0,2.0.0) - - - - customTaiSample-1.0.mf - customTaiSample-1.0 - customTaiSample-1.0 - 1.0.0 - 2 - - PUBLIC - NEVER - - com.ibm.websphere.security - 12 - SEQUENTIAL - type=osgi.bundle - [1.0.0,2.0.0) - - - com.ibm.ws.security.authentication.tai.feature.sample - 12 - SEQUENTIAL - type=osgi.bundle - [1.0.0,1.0.100) - - - - customTaiSample2-1.0.mf - customTaiSample2-1.0 - customTaiSample2-1.0 - 1.0.0 - 2 - - PUBLIC - NEVER - - com.ibm.websphere.security - 12 - SEQUENTIAL - type=osgi.bundle - [1.0.0,2.0.0) - - - com.ibm.ws.security.authentication.tai.feature.sample2 - 12 - SEQUENTIAL - type=osgi.bundle - [1.0.0,1.0.100) - - io.openliberty.acmeCA2.0.internal.ee-7.0.mf io.openliberty.acmeCA2.0.internal.ee-7.0 From 6582744debb5eecd49a86131c413cff87e608446 Mon Sep 17 00:00:00 2001 From: "Harry L. Hoots, III" Date: Tue, 30 Jul 2024 13:43:06 -0400 Subject: [PATCH 069/166] Delete SingleJson.json file after automated build --- dev/com.ibm.websphere.appserver.features/build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dev/com.ibm.websphere.appserver.features/build.gradle b/dev/com.ibm.websphere.appserver.features/build.gradle index b6453e09241..7b4ce91692f 100644 --- a/dev/com.ibm.websphere.appserver.features/build.gradle +++ b/dev/com.ibm.websphere.appserver.features/build.gradle @@ -362,10 +362,16 @@ publishing { } } +task cleanSingleJsonRepo { + doLast { + delete project.file('build/temp/SingleJson.json') + } +} if (isAutomatedBuild) { def singleOpenLibertyJsonRepo = project.file('build/temp/SingleJson.json') task generateSingleJsonRepo { dependsOn publishFeatureResources + dependsOn cleanSingleJsonRepo inputs.dir new File(project.buildDir, 'repo') outputs.file singleOpenLibertyJsonRepo doLast { From 7ab9be5783c94d8f796211e2a0dfae4d6b21ea45 Mon Sep 17 00:00:00 2001 From: Nathan Rauh Date: Tue, 30 Jul 2024 14:22:08 -0500 Subject: [PATCH 070/166] Issue #27306 ManagedThreadFactory with virtual=true --- .../OSGI-INF/l10n/metatype.properties | 6 +- .../resources/OSGI-INF/metatype/metatype.xml | 2 +- .../internal/ManagedThreadFactoryService.java | 32 +++++++-- .../server.xml | 4 ++ .../web/ConcurrencyTestServlet.java | 65 +++++++++++++++++-- 5 files changed, 97 insertions(+), 12 deletions(-) diff --git a/dev/com.ibm.ws.concurrent/resources/OSGI-INF/l10n/metatype.properties b/dev/com.ibm.ws.concurrent/resources/OSGI-INF/l10n/metatype.properties index 33f3d92dff1..b3be43c504b 100644 --- a/dev/com.ibm.ws.concurrent/resources/OSGI-INF/l10n/metatype.properties +++ b/dev/com.ibm.ws.concurrent/resources/OSGI-INF/l10n/metatype.properties @@ -69,4 +69,8 @@ onError=Action to take on error onError.desc=Determines the action to take in response to configuration errors. For example, if securityContext is configured for this contextService, but the security feature is not enabled, then onError determines whether to fail, raise a warning, or ignore the parts of the configuration which are incorrect. onError.FAIL=Fail when incorrect configuration is encountered. onError.IGNORE=Ignore incorrect configuration. -onError.WARN=Issue a warning for incorrect configuration. \ No newline at end of file +onError.WARN=Issue a warning for incorrect configuration. + +virtual=Use virtual threads +virtual.desc=Determines whether the ManagedThreadFactory creates virtual threads. \ +Java 21 or higher is a prerequisite of configuring this value to true. diff --git a/dev/com.ibm.ws.concurrent/resources/OSGI-INF/metatype/metatype.xml b/dev/com.ibm.ws.concurrent/resources/OSGI-INF/metatype/metatype.xml index d5da4ff32a1..b4b5022caa0 100644 --- a/dev/com.ibm.ws.concurrent/resources/OSGI-INF/metatype/metatype.xml +++ b/dev/com.ibm.ws.concurrent/resources/OSGI-INF/metatype/metatype.xml @@ -95,7 +95,7 @@ - + diff --git a/dev/com.ibm.ws.concurrent/src/com/ibm/ws/concurrent/internal/ManagedThreadFactoryService.java b/dev/com.ibm.ws.concurrent/src/com/ibm/ws/concurrent/internal/ManagedThreadFactoryService.java index 22353120db9..c7a1205736f 100644 --- a/dev/com.ibm.ws.concurrent/src/com/ibm/ws/concurrent/internal/ManagedThreadFactoryService.java +++ b/dev/com.ibm.ws.concurrent/src/com/ibm/ws/concurrent/internal/ManagedThreadFactoryService.java @@ -157,7 +157,10 @@ public class ManagedThreadFactoryService implements ResourceFactory, Application protected VirtualThreadOps virtualThreadOps; /** - * Factory that creates virtual threads. Null if not configured to create virtual threads. + * Factory that creates virtual threads if greater than Java 21 + * or raises an error if configured to create virtual threads + * on less than Java 21. + * Null if not configured to create virtual threads. */ private ThreadFactory virtualThreadFactory; @@ -203,14 +206,17 @@ protected void activate(ComponentContext componentContext) { threadGroup = AccessController.doPrivileged(new CreateThreadGroupAction(name + " Thread Group", maxPriority), threadGroupTracker.serverAccessControlContext); - //Ignore virtual configuration unless Java 21+ - boolean virtual = JavaInfo.majorVersion() >= 21 ? Boolean.TRUE.equals(properties.get(VIRTUAL)) : false; + boolean virtual = Boolean.TRUE.equals(properties.get(VIRTUAL)); // TODO check the SPI to override virtual=true for CICS - virtualThreadFactory = virtual // - ? virtualThreadOps.createFactoryOfVirtualThreads(properties.get(CONFIG_ID) + ":", 1L, false, null) // - : null; + if (virtual) + if (JavaInfo.majorVersion() >= 21) + virtualThreadFactory = virtualThreadOps.createFactoryOfVirtualThreads(properties.get(CONFIG_ID) + ":", 1L, false, null); + else + virtualThreadFactory = new VirtualThreadsUnsupported(); + else + virtualThreadFactory = null; if (trace && tc.isEntryEnabled()) Tr.exit(this, tc, "activate"); @@ -544,4 +550,18 @@ boolean sameMetaDataIdentity() { return identifier != null && metadataIdentifierService != null && identifier.equals(metadataIdentifierService.getMetaDataIdentifier(cData)); } } + + /** + * Raises an error if the application requests a virtual threads. + */ + @Trivial + private class VirtualThreadsUnsupported implements ThreadFactory { + + @Override + public Thread newThread(Runnable r) { + throw new UnsupportedOperationException("The " + name + " ManagedThreadFactory is configured with" + + " virtual=true, but virtual threads are not available prior" + + " to Java 21."); // TODO NLS + } + } } diff --git a/dev/com.ibm.ws.concurrent_fat_jakarta/publish/servers/com.ibm.ws.concurrent.fat.jakarta/server.xml b/dev/com.ibm.ws.concurrent_fat_jakarta/publish/servers/com.ibm.ws.concurrent.fat.jakarta/server.xml index ffc85c2d3a3..f1fd7101fb6 100644 --- a/dev/com.ibm.ws.concurrent_fat_jakarta/publish/servers/com.ibm.ws.concurrent.fat.jakarta/server.xml +++ b/dev/com.ibm.ws.concurrent_fat_jakarta/publish/servers/com.ibm.ws.concurrent.fat.jakarta/server.xml @@ -76,6 +76,10 @@ concurrencyPolicyRef="max2virtual"> + + + diff --git a/dev/com.ibm.ws.concurrent_fat_jakarta/test-applications/ConcurrencyTestWeb/src/test/jakarta/concurrency/web/ConcurrencyTestServlet.java b/dev/com.ibm.ws.concurrent_fat_jakarta/test-applications/ConcurrencyTestWeb/src/test/jakarta/concurrency/web/ConcurrencyTestServlet.java index ff24d4b545a..435ab7f1f4f 100644 --- a/dev/com.ibm.ws.concurrent_fat_jakarta/test-applications/ConcurrencyTestWeb/src/test/jakarta/concurrency/web/ConcurrencyTestServlet.java +++ b/dev/com.ibm.ws.concurrent_fat_jakarta/test-applications/ConcurrencyTestWeb/src/test/jakarta/concurrency/web/ConcurrencyTestServlet.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021,2022 IBM Corporation and others. + * Copyright (c) 2021,2024 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -217,12 +217,18 @@ public class ConcurrencyTestServlet extends FATServlet { @Resource(lookup = "java:app/concurrent/lowPriorityThreads") ManagedThreadFactory lowPriorityThreads; - @Resource(name = "java:comp/env/concurrent/virtualExec1Ref", lookup = "concurrent/virtualExec1") + @Resource(name = "java:comp/env/concurrent/virtualExec1Ref", + lookup = "concurrent/virtualExec1") ManagedExecutorService virtualExecutor1; - @Resource(name = "java:module/env/concurrent/virtualExec2Ref", lookup = "concurrent/virtualExec2") + @Resource(name = "java:module/env/concurrent/virtualExec2Ref", + lookup = "concurrent/virtualExec2") ManagedScheduledExecutorService virtualExecutor2; + @Resource(name = "java:comp/env/concurrent/virtualThreadFactoryRef", + lookup = "concurrent/virtualThreadFactory") + ManagedThreadFactory virtualThreadFactory; + //Do not use for any other tests @EJB MTFDBean testEJBAnnoManagedThreadFactoryInitializationBean; @@ -3125,7 +3131,9 @@ public void testThirdPartyContextForPropagationFailsToSerialize() throws Excepti public void testVirtualThreadedExecutors() throws Exception { String version = System.getProperty("java.version"); System.out.println("java.version is \"" + version + "\""); - boolean supportsVirtualThreads = Integer.parseInt(version.substring(0, version.indexOf('.'))) >= 21; + int dot = version.indexOf('.'); + String major = dot < 0 ? version : version.substring(0, dot); + boolean supportsVirtualThreads = Integer.parseInt(major) >= 21; if (supportsVirtualThreads) { CountDownLatch twoStarted = new CountDownLatch(2); @@ -3238,6 +3246,55 @@ public void testVirtualThreadedExecutors() throws Exception { } } + /** + * Use a server-defined ManagedThreadFactory resource that is configured to + * create virtual threads. In Java 21+, it should create virtual threads. + * Prior to Java 21, this must result in an error because virtual threads are + * not available. + */ + @Test + public void testVirtualThreadFactory() throws Exception { + String version = System.getProperty("java.version"); + System.out.println("java.version is \"" + version + "\""); + int dot = version.indexOf('.'); + String major = dot < 0 ? version : version.substring(0, dot); + boolean supportsVirtualThreads = Integer.parseInt(major) >= 21; + + if (supportsVirtualThreads) { + CompletableFuture thread1result = new CompletableFuture<>(); + Thread thread1 = virtualThreadFactory.newThread(() -> { + try { + InitialContext.doLookup("java:comp/env/concurrent/virtualExec1Ref"); + thread1result.complete(Thread.currentThread().toString()); + } catch (Throwable x) { + thread1result.completeExceptionally(x); + } + }); + + thread1.start(); + + String s1; + s1 = thread1.toString(); + assertEquals(s1, true, s1.startsWith("VirtualThread[")); + + s1 = thread1result.get(TIMEOUT_NS, TimeUnit.NANOSECONDS); + assertEquals(s1, true, s1.startsWith("VirtualThread[")); + } else { + Thread thread1; + try { + thread1 = virtualThreadFactory.newThread(() -> { + System.out.println("Running on thread " + Thread.currentThread()); + }); + fail("ManagedThreadFactory must reject virtual=true prior to Java 21. Instead: " + thread1); + } catch (UnsupportedOperationException x) { + if (x.getMessage().indexOf("virtual") >= 0) + ; // expected that virtual=true is not allowed prior to Java 21 + else + throw x; + } + } + } + /** * Use a ContextService that is defined by a context-service in a web module deployment descriptor. */ From 18a645bb77ecb7799aaa31cd56f2e25c94902444 Mon Sep 17 00:00:00 2001 From: Nathan Rauh Date: Tue, 30 Jul 2024 14:52:39 -0500 Subject: [PATCH 071/166] Issue #27306 remove workaround from schedasync test bucket --- .../server.xml | 8 ----- .../schedasync/web/SchedAsyncTestServlet.java | 36 +++++++++---------- 2 files changed, 16 insertions(+), 28 deletions(-) diff --git a/dev/com.ibm.ws.concurrent_fat_schedasync/publish/servers/com.ibm.ws.concurrent.fat.schedasync/server.xml b/dev/com.ibm.ws.concurrent_fat_schedasync/publish/servers/com.ibm.ws.concurrent.fat.schedasync/server.xml index faee303a085..1cec7c01964 100644 --- a/dev/com.ibm.ws.concurrent_fat_schedasync/publish/servers/com.ibm.ws.concurrent.fat.schedasync/server.xml +++ b/dev/com.ibm.ws.concurrent_fat_schedasync/publish/servers/com.ibm.ws.concurrent.fat.schedasync/server.xml @@ -24,12 +24,4 @@ - - - - - - - - \ No newline at end of file diff --git a/dev/com.ibm.ws.concurrent_fat_schedasync/test-applications/SchedAsyncWeb/src/test/concurrency/schedasync/web/SchedAsyncTestServlet.java b/dev/com.ibm.ws.concurrent_fat_schedasync/test-applications/SchedAsyncWeb/src/test/concurrency/schedasync/web/SchedAsyncTestServlet.java index fdb9e3429cc..72e969e9dc9 100644 --- a/dev/com.ibm.ws.concurrent_fat_schedasync/test-applications/SchedAsyncWeb/src/test/concurrency/schedasync/web/SchedAsyncTestServlet.java +++ b/dev/com.ibm.ws.concurrent_fat_schedasync/test-applications/SchedAsyncWeb/src/test/concurrency/schedasync/web/SchedAsyncTestServlet.java @@ -27,9 +27,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -import jakarta.annotation.Resource; import jakarta.enterprise.concurrent.ContextServiceDefinition; -import jakarta.enterprise.concurrent.ManagedExecutorService; +import jakarta.enterprise.concurrent.ManagedExecutorDefinition; import jakarta.inject.Inject; import jakarta.servlet.ServletConfig; import jakarta.servlet.ServletException; @@ -42,10 +41,10 @@ @ContextServiceDefinition(name = "java:app/concurrent/app-context", propagated = APPLICATION, unchanged = ALL_REMAINING) -//@ManagedExecutorDefinition(name = "java:module/concurrent/max-2-executor", -// context = "java:app/concurrent/app-context", -// maxAsync = 2, -// virtual = true) +@ManagedExecutorDefinition(name = "java:module/concurrent/max-2-executor", + context = "java:app/concurrent/app-context", + maxAsync = 2, + virtual = true) @SuppressWarnings("serial") @WebServlet("/*") public class SchedAsyncTestServlet extends FATServlet { @@ -54,10 +53,6 @@ public class SchedAsyncTestServlet extends FATServlet { */ private static final long TIMEOUT_NS = TimeUnit.MINUTES.toNanos(2); - // TODO remove this once virtual=true is honored on @ManagedExecutorDefinition - @Resource(name = "java:module/concurrent/max-2-executor", lookup = "concurrent/temp-max-2-executor") - ManagedExecutorService temp; - private static LinkedBlockingQueue afterSixSeconds3Times = new LinkedBlockingQueue<>(); private static final AtomicInteger afterSixSeconds3TimesCount = new AtomicInteger(); @@ -253,27 +248,28 @@ public void testVirtualThreads() throws Exception { Set uniqueThreads = new HashSet<>(); Thread th; - // TODO update thread name assertions to check for the JNDI name once we are actually using the ManagedExecutorDefinition - // Example name: managedExecutorService[java:module/concurrent/max-2-executor]/concurrencyPolicy:4 + String prefix = "application[SchedAsyncWeb]/module[SchedAsyncWeb.war]/" + + "managedExecutorService[java:module/concurrent/max-2-executor]/" + + "concurrencyPolicy:"; assertNotNull(th = everyFourSecondsVirtualThreads.poll(TIMEOUT_NS, TimeUnit.NANOSECONDS)); - assertEquals(true, th.isVirtual()); - assertEquals(true, th.getName().startsWith("managedExecutorService[")); + assertEquals(th.toString(), true, th.isVirtual()); + assertEquals(th.getName(), true, th.getName().startsWith(prefix)); uniqueThreads.add(th); assertNotNull(th = everyFourSecondsVirtualThreads.poll(TIMEOUT_NS, TimeUnit.NANOSECONDS)); - assertEquals(true, th.isVirtual()); - assertEquals(true, th.getName().startsWith("managedExecutorService[")); + assertEquals(th.toString(), true, th.isVirtual()); + assertEquals(th.getName(), true, th.getName().startsWith(prefix)); uniqueThreads.add(th); assertNotNull(th = everyFourSecondsVirtualThreads.poll(TIMEOUT_NS, TimeUnit.NANOSECONDS)); - assertEquals(true, th.isVirtual()); - assertEquals(true, th.getName().startsWith("managedExecutorService[")); + assertEquals(th.toString(), true, th.isVirtual()); + assertEquals(th.getName(), true, th.getName().startsWith(prefix)); uniqueThreads.add(th); assertNotNull(th = everyFourSecondsVirtualThreads.poll(TIMEOUT_NS, TimeUnit.NANOSECONDS)); - assertEquals(true, th.isVirtual()); - assertEquals(true, th.getName().startsWith("managedExecutorService[")); + assertEquals(th.toString(), true, th.isVirtual()); + assertEquals(th.getName(), true, th.getName().startsWith(prefix)); uniqueThreads.add(th); assertEquals(null, everyFourSecondsVirtualThreads.poll()); From b27d73f33fc6a2757857f8d00469f43e03d63e1b Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Tue, 30 Jul 2024 15:27:08 -0500 Subject: [PATCH 072/166] Check messages log when console log exists but is empty The console log may be empty if the service has disabled all console logging. In this case a check against the messages log should be done. --- .../src/componenttest/topology/impl/LibertyServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev/fattest.simplicity/src/componenttest/topology/impl/LibertyServer.java b/dev/fattest.simplicity/src/componenttest/topology/impl/LibertyServer.java index abf2ba8c302..c8b41429e96 100644 --- a/dev/fattest.simplicity/src/componenttest/topology/impl/LibertyServer.java +++ b/dev/fattest.simplicity/src/componenttest/topology/impl/LibertyServer.java @@ -2188,7 +2188,7 @@ private boolean failedRestore() throws Exception { // that makes the file the restore message is in not predictable. RemoteFile logToCheck = getConsoleLogFile(); // App validation needs the info messages in messages.log - if (!logToCheck.exists()) { + if (!logToCheck.exists() || new File(logToCheck.getAbsolutePath()).length() == 0) { // try the messages log Log.info(c, method, "WARNING: console.log does not exist-- trying app verification step with messages.log"); logToCheck = machine.getFile(messageAbsPath); From c5c4a3cfa18ef49c965231d78634fcc685f8fde1 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Tue, 30 Jul 2024 15:29:06 -0500 Subject: [PATCH 073/166] Delay activation of OpenTelemetryLogHandler until restore Enabling the log handler on the checkpoint side causes the OTEL stack to get activated too early. This causes issues with reading the env configuration before restore and the OTEL stack also needs all of the JVM security services to startup up correctly (e.g. the SSLContext) which are not fully available until restore. This change adds the SatisfyingConditionTarget to the checkoint process running condition. This condition is not available until the restore side which prevents this component from getting activated until restore. --- .../telemetry20/logging/internal/OpenTelemetryLogHandler.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal/src/io/openliberty/microprofile/telemetry20/logging/internal/OpenTelemetryLogHandler.java b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal/src/io/openliberty/microprofile/telemetry20/logging/internal/OpenTelemetryLogHandler.java index 6acbd3afca3..5b39c0a875d 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal/src/io/openliberty/microprofile/telemetry20/logging/internal/OpenTelemetryLogHandler.java +++ b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal/src/io/openliberty/microprofile/telemetry20/logging/internal/OpenTelemetryLogHandler.java @@ -23,6 +23,8 @@ import org.osgi.service.component.annotations.ConfigurationPolicy; import org.osgi.service.component.annotations.Deactivate; import org.osgi.service.component.annotations.Modified; +import org.osgi.service.component.propertytypes.SatisfyingConditionTarget; +import org.osgi.service.condition.Condition; import com.ibm.websphere.ras.Tr; import com.ibm.websphere.ras.TraceComponent; @@ -35,12 +37,14 @@ import com.ibm.wsspi.collector.manager.Handler; import com.ibm.wsspi.collector.manager.SynchronousHandler; +import io.openliberty.checkpoint.spi.CheckpointPhase; import io.openliberty.microprofile.telemetry.internal.common.constants.OpenTelemetryConstants; import io.openliberty.microprofile.telemetry.internal.common.info.OpenTelemetryInfo; import io.openliberty.microprofile.telemetry.internal.interfaces.OpenTelemetryAccessor; import io.opentelemetry.api.logs.LogRecordBuilder; @Component(name = OpenTelemetryLogHandler.COMPONENT_NAME, service = { Handler.class }, configurationPolicy = ConfigurationPolicy.OPTIONAL, property = { "service.vendor=IBM" }) +@SatisfyingConditionTarget("(" + Condition.CONDITION_ID + "=" + CheckpointPhase.CONDITION_PROCESS_RUNNING_ID + ")") public class OpenTelemetryLogHandler implements SynchronousHandler { private static final TraceComponent tc = Tr.register(OpenTelemetryLogHandler.class, "TELEMETRY", "io.openliberty.microprofile.telemetry.internal.common.resources.MPTelemetry"); From 5ee22efa4b2c31fedbf76e23e9409ee0b04c95d5 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Tue, 30 Jul 2024 15:34:26 -0500 Subject: [PATCH 074/166] Add telemetry messages test for checkpoint --- .../bnd.bnd | 2 +- .../logging/internal_fat/FATSuite.java | 1 + .../TelemetryMessagesCheckpointTest.java | 79 +++++++++++++++++++ .../internal_fat/TelemetryMessagesTest.java | 7 +- 4 files changed, 82 insertions(+), 7 deletions(-) create mode 100644 dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/TelemetryMessagesCheckpointTest.java diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/bnd.bnd b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/bnd.bnd index 870440fff88..0c93f033ca1 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/bnd.bnd +++ b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/bnd.bnd @@ -25,7 +25,7 @@ src: \ fat.project: true -tested.features=mpTelemetry-2.0,pages-3.1 +tested.features=mpTelemetry-2.0,pages-3.1,checkpoint -buildpath: \ com.ibm.ws.componenttest.2.0,\ diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/FATSuite.java b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/FATSuite.java index 4a0603708a6..caf7cc9ce3f 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/FATSuite.java +++ b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/FATSuite.java @@ -16,6 +16,7 @@ @RunWith(Suite.class) @SuiteClasses({ TelemetryMessagesTest.class, + TelemetryMessagesCheckpointTest.class, TelemetryFFDCTest.class, TelemetryTraceTest.class }) diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/TelemetryMessagesCheckpointTest.java b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/TelemetryMessagesCheckpointTest.java new file mode 100644 index 00000000000..d27af3b401d --- /dev/null +++ b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/TelemetryMessagesCheckpointTest.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2024 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + *******************************************************************************/ +package io.openliberty.microprofile.telemetry.logging.internal_fat; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +import componenttest.annotation.CheckpointTest; +import componenttest.custom.junit.runner.FATRunner; +import componenttest.topology.impl.LibertyServer; +import componenttest.topology.impl.LibertyServerFactory; +import componenttest.topology.utils.FATServletClient; +import io.openliberty.checkpoint.spi.CheckpointPhase; + +@RunWith(FATRunner.class) +@CheckpointTest +public class TelemetryMessagesCheckpointTest extends FATServletClient { + + public static final String APP_NAME = "TelemetryServletTestApp"; + public static final String SERVER_NAME = "TelemetryMessageNoApp"; + + public static LibertyServer server = LibertyServerFactory.getLibertyServer(SERVER_NAME); + + private static final String MESSAGE_LOG = "logs/messages.log"; + private static final String CONSOLE_LOG = "logs/console.log"; + + @BeforeClass + public static void initialSetup() throws Exception { + server.setCheckpoint(CheckpointPhase.AFTER_APP_START); + server.startServer(); + } + + /** + * Ensures Liberty messages are correctly bridged and all attributes are present. + */ + @Test + public void testTelemetryMessages() throws Exception { + String line = server.waitForStringInLog("CWWKF0011I", server.getConsoleLogFile()); + List linesMessagesLog = server.findStringsInFileInLibertyServerRoot("^(?!.*scopeInfo).*\\[.*$", MESSAGE_LOG); + List linesConsoleLog = server.findStringsInFileInLibertyServerRoot(".*scopeInfo.*", CONSOLE_LOG); + + // for checkpoint we expect to NOT see the message: + // CWWKC0451I: A server checkpoint "beforeAppStart" was requested. + assertNull("Should not container early message from checkpoint", linesConsoleLog.stream().filter((l) -> l.contains("CWWKC0451I")).findFirst().orElse(null)); + + assertEquals("Messages.log and Telemetry console logs don't match.", linesMessagesLog.size(), linesConsoleLog.size()); + + assertNotNull("CWWKF0011I log could not be found.", line); + assertTrue("MPTelemetry did not log the correct message", line.contains("The TelemetryMessageNoApp server is ready to run a smarter planet.")); + assertTrue("MPTelemetry did not log server messageID field", line.contains("io.openliberty.message_id=\"CWWKF0011I\"")); + assertTrue("MPTelemetry did not log server module field", line.contains("io.openliberty.module=\"com.ibm.ws.kernel.feature.internal.FeatureManager\"")); + assertTrue("MPTelemetry did not log server sequence field", line.contains("io.openliberty.sequence=\"")); + assertTrue("MPTelemetry did not log server type field", line.contains("io.openliberty.type=\"liberty_message\"")); + assertTrue("MPTelemetry did not log server threadID field", line.contains("thread.id")); + assertTrue("MPTelemetry did not log server thread name field", line.contains("thread.name")); + } + + @AfterClass + public static void tearDown() throws Exception { + server.stopServer(); + } + +} \ No newline at end of file diff --git a/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/TelemetryMessagesTest.java b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/TelemetryMessagesTest.java index 63636662112..73886da2032 100644 --- a/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/TelemetryMessagesTest.java +++ b/dev/io.openliberty.microprofile.telemetry.2.0.logging.internal_fat/fat/src/io/openliberty/microprofile/telemetry/logging/internal_fat/TelemetryMessagesTest.java @@ -20,7 +20,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import componenttest.annotation.Server; import componenttest.custom.junit.runner.FATRunner; import componenttest.topology.impl.LibertyServer; import componenttest.topology.impl.LibertyServerFactory; @@ -29,20 +28,16 @@ @RunWith(FATRunner.class) public class TelemetryMessagesTest extends FATServletClient { - private static Class c = TelemetryMessagesTest.class; - public static final String APP_NAME = "TelemetryServletTestApp"; public static final String SERVER_NAME = "TelemetryMessageNoApp"; - @Server(SERVER_NAME) - public static LibertyServer server; + public static LibertyServer server = LibertyServerFactory.getLibertyServer(SERVER_NAME);; private static final String MESSAGE_LOG = "logs/messages.log"; private static final String CONSOLE_LOG = "logs/console.log"; @BeforeClass public static void initialSetup() throws Exception { - server = LibertyServerFactory.getLibertyServer(SERVER_NAME); server.startServer(); } From df88207580d4e6f19e66242689745c807e582855 Mon Sep 17 00:00:00 2001 From: Volodymyr Siedlecki Date: Thu, 9 May 2024 13:06:27 -0400 Subject: [PATCH 075/166] Remove beta guards from CHIPS (Partitioned Cookies) --- dev/com.ibm.ws.session/bnd.bnd | 4 +-- .../resources/OSGI-INF/metatype/metatype.xml | 2 +- .../ibm/ws/session/SessionManagerConfig.java | 5 +-- .../com/ibm/ws/session/SessionProperties.java | 1 - .../resources/OSGI-INF/metatype/metatype.xml | 3 +- .../channel/internal/HttpChannelConfig.java | 12 +++---- .../channel/internal/cookies/CookieUtils.java | 32 ++++++----------- .../channel/internal/values/CookieData.java | 1 - .../com/ibm/wsspi/genericbnf/KeyMatcher.java | 7 ---- dev/com.ibm.ws.webcontainer.cors/bnd.bnd | 4 +-- .../resources/OSGI-INF/metatype/metatype.xml | 2 +- .../internal/WebAppSecurityConfigImpl.java | 8 ++--- .../bnd.bnd | 3 +- .../servers/servlet40_partitioned/jvm.options | 1 - .../impl/SessionAffinityManagerImpl.java | 34 ++++++++----------- .../WebContainerRequestState.java | 24 ++++--------- 16 files changed, 46 insertions(+), 97 deletions(-) delete mode 100644 dev/com.ibm.ws.webcontainer.servlet.4.0_fat.2/publish/servers/servlet40_partitioned/jvm.options diff --git a/dev/com.ibm.ws.session/bnd.bnd b/dev/com.ibm.ws.session/bnd.bnd index 09d5abb0671..84eb95e5c3c 100644 --- a/dev/com.ibm.ws.session/bnd.bnd +++ b/dev/com.ibm.ws.session/bnd.bnd @@ -76,6 +76,4 @@ instrument.disabled: true com.ibm.ws.serialization;version=latest,\ com.ibm.websphere.javaee.servlet.3.1;version=latest, \ com.ibm.ws.org.osgi.annotation.versioning;version=latest, \ - com.ibm.ws.kernel.boot.common;version=latest, \ - com.ibm.ws.kernel.boot.core;version=latest,\ - com.ibm.ws.kernel.security.thread;version=latest + com.ibm.ws.kernel.boot.common;version=latest diff --git a/dev/com.ibm.ws.session/resources/OSGI-INF/metatype/metatype.xml b/dev/com.ibm.ws.session/resources/OSGI-INF/metatype/metatype.xml index e56ae1b9aaa..1c4ebc85153 100644 --- a/dev/com.ibm.ws.session/resources/OSGI-INF/metatype/metatype.xml +++ b/dev/com.ibm.ws.session/resources/OSGI-INF/metatype/metatype.xml @@ -126,7 +126,7 @@ name="%cookie.partitioned" description="%cookie.partitioned.desc" ibmui:group="cookies" - required="false" type="String" default="Defer" ibm:beta="true"> + required="false" type="String" default="Defer">