You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2022/02/21 03:08:31 UTC

[tomee] 03/09: TOMEE-3844 Improve logging for JAX-RS application deployment

This is an automated email from the ASF dual-hosted git repository.

dblevins pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomee.git

commit d44266970479c3c30035545b2ca2f7f19553ac5f
Author: David Blevins <db...@tomitribe.com>
AuthorDate: Sun Feb 20 16:18:50 2022 -0500

    TOMEE-3844 Improve logging for JAX-RS application deployment
---
 .../jaxrs/applogging/ApplicationLoggingTest.java   | 10 +------
 .../openejb/server/cxf/rs/CxfRsHttpListener.java   | 34 +++++++++++++++++-----
 2 files changed, 28 insertions(+), 16 deletions(-)

diff --git a/itests/jaxrs/src/test/java/org/apache/tomee/itests/jaxrs/applogging/ApplicationLoggingTest.java b/itests/jaxrs/src/test/java/org/apache/tomee/itests/jaxrs/applogging/ApplicationLoggingTest.java
index 4d02e89..c4b16ba 100644
--- a/itests/jaxrs/src/test/java/org/apache/tomee/itests/jaxrs/applogging/ApplicationLoggingTest.java
+++ b/itests/jaxrs/src/test/java/org/apache/tomee/itests/jaxrs/applogging/ApplicationLoggingTest.java
@@ -79,13 +79,6 @@ public class ApplicationLoggingTest {
                 "Resource{clazz=org.apache.tomee.itests.jaxrs.applogging.TriangleResource, discovered=false, singleton=false}", normalize(join));
     }
 
-    /**
-     * This test shows two bugs:
-     * - singletons show up as discovered when they were explicitly configured
-     *
-     * @throws Exception
-     */
-    @Ignore
     @Test
     public void getSingletons() throws Exception {
 
@@ -98,13 +91,12 @@ public class ApplicationLoggingTest {
                         .add(AnnotatedWriter.class)
                         .asJar())
                 .watch("org.apache.openejb.server.cxf.rs.CxfRsHttpListener.logApplication ", "\n", output::add)
-//                .debug(5005)
                 .build();
 
         Collections.sort(output);
 
         final String join = Join.join("\n", output);
-        assertEquals("Application{path='http://localhost:0/test/red', class=org.apache.tomee.itests.jaxrs.applogging.GetSingletons, resources=2, providers=2, invalids=0}\n" +
+        assertEquals("Application{path='http://localhost:0/test/red', class=org.apache.tomee.itests.jaxrs.applogging.GetSingletons, resources=2, providers=1, invalids=0}\n" +
                 "Provider{clazz=org.apache.tomee.itests.jaxrs.applogging.AnnotatedWriter, discovered=false, singleton=true}\n" +
                 "Resource{clazz=org.apache.tomee.itests.jaxrs.applogging.SquareResource, discovered=false, singleton=true}\n" +
                 "Resource{clazz=org.apache.tomee.itests.jaxrs.applogging.TriangleResource, discovered=false, singleton=true}", normalize(join));
diff --git a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
index dd9580c..04016ff 100644
--- a/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
+++ b/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
@@ -848,17 +848,37 @@ public class CxfRsHttpListener implements RsHttpListener {
             declaredSingletons.addAll(application.getSingletons());
         }
 
+        for (final Object declaredSingleton : new ArrayList<>(declaredSingletons)) {
+            if (declaredSingleton instanceof Class) {
+                continue;
+            }
+            declaredSingletons.add(declaredSingleton.getClass());
+        }
+
+        final Set<Class<?>> seen = new HashSet<>();
         for (final Object additionalProvider : additionalProviders) {
-            if (additionalProvider instanceof Class) {
 
-                final boolean discovered = !declaredSingletons.contains(additionalProvider);
+            final Class<?> providerClass = (additionalProvider instanceof Class) ? (Class<?>) additionalProvider : additionalProvider.getClass();
+
+            // If we have already seen this provider class, skip it
+            // For some reason we add a duplicate version, one of the instance and one of the class
+            if (!seen.add(providerClass)) continue;
+
+            if (declaredSingletons.contains(providerClass)) {
+
+                applicationData.addProvider(false, providerClass, additionalProvider);
+
+            } else if (declaredClasses.contains(providerClass)) {
+
+                applicationData.addProvider(false, providerClass, null);
+
+            } else if (additionalProvider instanceof Class) {
 
-                applicationData.addProvider(discovered, (Class<?>) additionalProvider, null);
+                applicationData.addProvider(true, providerClass, null);
 
             } else {
-                final boolean discovered = !declaredSingletons.contains(additionalProvider);
 
-                applicationData.addProvider(discovered, additionalProvider.getClass(), null);
+                applicationData.addProvider(true, providerClass, additionalProvider);
 
             }
         }
@@ -881,7 +901,7 @@ public class CxfRsHttpListener implements RsHttpListener {
 
             } else {
 
-                final boolean discovered = !declaredClasses.contains(clazz);
+                final boolean discovered = !(declaredClasses.contains(clazz) || declaredSingletons.contains(clazz));
 
                 applicationData.addResource(discovered, clazz, null);
 
@@ -894,7 +914,7 @@ public class CxfRsHttpListener implements RsHttpListener {
 
             final Class<?> clazz = realClass(singleton.getClass());
 
-            final boolean configured = declaredClasses.contains(clazz) || declaredClasses.contains(singleton.getClass());
+            final boolean configured = declaredSingletons.contains(clazz) || declaredSingletons.contains(singleton.getClass());
 
             applicationData.addResource(!configured, clazz, singleton);
         }