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

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


The following commit(s) were added to refs/heads/master by this push:
     new f6c95f55bb Quiet-by-default test logging, SLF4J binding hygiene, 
thread-teardown + bnd fixes, perf re-baseline
f6c95f55bb is described below

commit f6c95f55bb35ce85ab097ecf9b39262256322d6f
Author: James Bognar <[email protected]>
AuthorDate: Mon Jul 13 16:21:06 2026 -0400

    Quiet-by-default test logging, SLF4J binding hygiene, thread-teardown + bnd 
fixes, perf re-baseline
    
    - TODO-227: fix juneau-config bnd _fixupmessages to suppress spurious OSGi 
warnings
    - TODO-230: clean thread teardown in FileStore and Microservice (no leaked 
watchers/executors)
    - TODO-228/229: inject quiet-by-default test logging via root-pom Surefire 
config; consolidate to a single SLF4J binding at the reactor root
    - TODO-232: refresh perf-baseline after the above changes
    
    Co-authored-by: Cursor <[email protected]>
---
 juneau-core/juneau-commons/pom.xml                 |  1 -
 .../src/test/resources/logging.properties          | 17 ------------
 juneau-core/juneau-config/pom.xml                  | 12 ++++++++
 .../org/apache/juneau/config/store/FileStore.java  |  2 ++
 juneau-core/juneau-marshall/pom.xml                |  1 -
 .../src/test/resources/logging.properties          | 17 ------------
 juneau-integration-tests/pom.xml                   | 16 ++++++++++-
 .../src/test/resources/logging.properties          | 17 ------------
 .../apache/juneau/microservice/Microservice.java   |  4 +++
 perf-baseline.txt                                  | 26 ++++++++++++------
 pom.xml                                            | 29 ++++++++++++++++++++
 .../src => src}/test/resources/logback-test.xml    | 17 ++++++++++++
 src/test/resources/logging.properties              | 32 ++++++++++++++++++++++
 13 files changed, 129 insertions(+), 62 deletions(-)

diff --git a/juneau-core/juneau-commons/pom.xml 
b/juneau-core/juneau-commons/pom.xml
index fa31debcc5..854ff6d8fe 100644
--- a/juneau-core/juneau-commons/pom.xml
+++ b/juneau-core/juneau-commons/pom.xml
@@ -114,7 +114,6 @@
                                        </includes>
                                        <systemPropertyVariables>
                                                
<java.locale.providers>JRE,COMPAT,SPI,CLDR</java.locale.providers>
-                                               
<java.util.logging.config.file>${project.basedir}/src/test/resources/logging.properties</java.util.logging.config.file>
                                        </systemPropertyVariables>
                                </configuration>
                        </plugin>
diff --git a/juneau-core/juneau-commons/src/test/resources/logging.properties 
b/juneau-core/juneau-commons/src/test/resources/logging.properties
deleted file mode 100644
index 62bf7c49da..0000000000
--- a/juneau-core/juneau-commons/src/test/resources/logging.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.
-# See the NOTICE file distributed with this work for additional information 
regarding copyright ownership.
-# The ASF licenses this file to you under the Apache License, Version 2.0 (the 
"License");
-# you may not use this file except in compliance with the License. You may 
obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software 
distributed under the License is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express or implied.
-# See the License for the specific language governing permissions and 
limitations under the License.
-
-# Silence all JUL console output during tests; real Juneau logging routes 
through SLF4J -> Logback.
-handlers=java.util.logging.ConsoleHandler
-.level=INFO
-
-java.util.logging.ConsoleHandler.level=OFF
-java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
diff --git a/juneau-core/juneau-config/pom.xml 
b/juneau-core/juneau-config/pom.xml
index e68ccf243a..c95bf29bec 100644
--- a/juneau-core/juneau-config/pom.xml
+++ b/juneau-core/juneau-config/pom.xml
@@ -74,6 +74,18 @@
                                <extensions>true</extensions>
                                <configuration>
                                        
<supportIncrementalBuild>true</supportIncrementalBuild>
+                                       <instructions>
+                                               <!--
+                                                       The config.internal 
package (ConfigMap/ConfigMapEntry/ProfileMerge) is an intentional
+                                                       bundle-private 
collaboration model that is reachable through the ConfigStore/ConfigFormat
+                                                       SPI signatures (e.g. 
ConfigFormat.fromInternal(ConfigMap), ConfigStore.getMap(...)).  These
+                                                       types are deliberately 
kept OUT of the exported API surface - the bundle is not designed for
+                                                       cross-bundle SPI 
extension - so bnd's "private references" advisory is benign and expected.
+                                                       Acknowledge it here so 
it does not surface as a build warning, without exporting the internal
+                                                       package or changing the 
public API.
+                                               -->
+                                               <_fixupmessages>"*private 
references*config.internal*";is:=ignore</_fixupmessages>
+                                       </instructions>
                                </configuration>
                                <executions>
                                <execution>
diff --git 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
index 516d34c334..1c77b7a3c9 100644
--- 
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
+++ 
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/FileStore.java
@@ -333,6 +333,8 @@ public class FileStore extends ConfigStore {
                                }
                        } catch (@SuppressWarnings("unused") 
InterruptedException e) {
                                Thread.currentThread().interrupt();
+                       } catch (@SuppressWarnings("unused") 
ClosedWatchServiceException e) {
+                               // Expected on shutdown: interrupt() closes the 
WatchService while take() is blocked in this loop.
                        } catch (Exception e) {
                                throw toRex(e); // HTT - unexpected exception 
from watchService.take()
                        }
diff --git a/juneau-core/juneau-marshall/pom.xml 
b/juneau-core/juneau-marshall/pom.xml
index 98cbda2f7f..2457e40d80 100644
--- a/juneau-core/juneau-marshall/pom.xml
+++ b/juneau-core/juneau-marshall/pom.xml
@@ -77,7 +77,6 @@
                                        </includes>
                                        <systemPropertyVariables>
                                                
<java.locale.providers>JRE,COMPAT,SPI,CLDR</java.locale.providers>
-                                               
<java.util.logging.config.file>${project.basedir}/src/test/resources/logging.properties</java.util.logging.config.file>
                                        </systemPropertyVariables>
                                </configuration>
                        </plugin>
diff --git a/juneau-core/juneau-marshall/src/test/resources/logging.properties 
b/juneau-core/juneau-marshall/src/test/resources/logging.properties
deleted file mode 100644
index 62bf7c49da..0000000000
--- a/juneau-core/juneau-marshall/src/test/resources/logging.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.
-# See the NOTICE file distributed with this work for additional information 
regarding copyright ownership.
-# The ASF licenses this file to you under the Apache License, Version 2.0 (the 
"License");
-# you may not use this file except in compliance with the License. You may 
obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software 
distributed under the License is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express or implied.
-# See the License for the specific language governing permissions and 
limitations under the License.
-
-# Silence all JUL console output during tests; real Juneau logging routes 
through SLF4J -> Logback.
-handlers=java.util.logging.ConsoleHandler
-.level=INFO
-
-java.util.logging.ConsoleHandler.level=OFF
-java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
diff --git a/juneau-integration-tests/pom.xml b/juneau-integration-tests/pom.xml
index edc82b0479..46cc3dcb8c 100644
--- a/juneau-integration-tests/pom.xml
+++ b/juneau-integration-tests/pom.xml
@@ -400,6 +400,15 @@
                        <groupId>org.apache.juneau</groupId>
                        <artifactId>juneau-microservice-jetty</artifactId>
                        <version>${project.version}</version>
+                       <!-- SLF4J binding hygiene: Logback is the 
quiet-by-default test binding here, so exclude
+                            Jetty's own slf4j provider to keep exactly one 
binding on the test classpath (Jetty
+                            logging then routes through Logback).  Prevents 
the "multiple SLF4J providers" warning. -->
+                       <exclusions>
+                               <exclusion>
+                                       <groupId>org.eclipse.jetty</groupId>
+                                       
<artifactId>jetty-slf4j-impl</artifactId>
+                               </exclusion>
+                       </exclusions>
                </dependency>
                <dependency>
                        <groupId>org.apache.juneau</groupId>
@@ -407,6 +416,12 @@
                        <version>${project.version}</version>
                        <type>test-jar</type>
                        <scope>test</scope>
+                       <exclusions>
+                               <exclusion>
+                                       <groupId>org.eclipse.jetty</groupId>
+                                       
<artifactId>jetty-slf4j-impl</artifactId>
+                               </exclusion>
+                       </exclusions>
                </dependency>
                <dependency>
                        <groupId>org.apache.juneau</groupId>
@@ -660,7 +675,6 @@
                                        </includes>
                                        <systemPropertyVariables>
                                                
<java.locale.providers>JRE,COMPAT,SPI,CLDR</java.locale.providers>
-                                               
<java.util.logging.config.file>${project.basedir}/src/test/resources/logging.properties</java.util.logging.config.file>
                                        </systemPropertyVariables>
                                </configuration>
                                <executions>
diff --git a/juneau-integration-tests/src/test/resources/logging.properties 
b/juneau-integration-tests/src/test/resources/logging.properties
deleted file mode 100644
index 62bf7c49da..0000000000
--- a/juneau-integration-tests/src/test/resources/logging.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.
-# See the NOTICE file distributed with this work for additional information 
regarding copyright ownership.
-# The ASF licenses this file to you under the Apache License, Version 2.0 (the 
"License");
-# you may not use this file except in compliance with the License. You may 
obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software 
distributed under the License is
-# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express or implied.
-# See the License for the specific language governing permissions and 
limitations under the License.
-
-# Silence all JUL console output during tests; real Juneau logging routes 
through SLF4J -> Logback.
-handlers=java.util.logging.ConsoleHandler
-.level=INFO
-
-java.util.logging.ConsoleHandler.level=OFF
-java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
diff --git 
a/juneau-microservice/juneau-microservice/src/main/java/org/apache/juneau/microservice/Microservice.java
 
b/juneau-microservice/juneau-microservice/src/main/java/org/apache/juneau/microservice/Microservice.java
index df0d69e9f9..7789423a1e 100755
--- 
a/juneau-microservice/juneau-microservice/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ 
b/juneau-microservice/juneau-microservice/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -847,6 +847,10 @@ public class Microservice implements ConfigEventListener {
 
                                        while (true) {
                                                out.append("> ").flush();
+                                               // Guard against empty/closed 
stdin: hasNextLine() returns false at end-of-stream, so
+                                               // the loop ends gracefully 
instead of nextLine() throwing NoSuchElementException.
+                                               if (! in.hasNextLine())
+                                                       break;
                                                var line = in.nextLine();
                                                var args2 = new Args(line);
                                                if (! args2.isEmpty())
diff --git a/perf-baseline.txt b/perf-baseline.txt
index 92c7d09a0a..f85a898f3d 100644
--- a/perf-baseline.txt
+++ b/perf-baseline.txt
@@ -38,17 +38,27 @@
 # ignored by the per-module perf-guard parser.
 # ============================================================================
 
-suite = 225                              # updated baseline.
-juneau-integration-tests/core = 90                   # updated baseline.
-juneau-integration-tests/container.springboot = 5    # updated baseline.
-juneau-integration-tests/container.jetty = 2         # updated baseline; fast 
shutdown restored by EphemeralJettyServerConfig.stopTimeout(ZERO).
+# 2026-07-13 re-baseline (set by FINISHED-232): fresh warm-machine full-suite 
run via
+# `python3 scripts/test.py --full`, SERIAL / single-threaded execution model 
(no
+# reactor -T, no Surefire forkCount/parallel — parallelism stays OFF per 
FINISHED-231's
+# Phase-0 isolation-audit gate). Post-TODO-160-migration reality: 135,130 
tests, suite wall-clock 281s.
+# Per-module values are test.py timing-log wall-clock seconds (incl. per-fork 
JVM startup).
+suite = 281                              # set by FINISHED-232 (2026-07-13 
re-baseline); measured 281.2s warm/serial.
+juneau-integration-tests/core = 88                   # set by FINISHED-232; 
measured 88.3s (time-dominant bucket).
+juneau-integration-tests/container.springboot = 5    # set by FINISHED-232; 
measured 4.9s.
+juneau-integration-tests/container.jetty = 8         # set by FINISHED-232; 
measured 7.5s under full-load; jetty container time is 
startup/shutdown-variable.
+juneau-core/juneau-marshall/core = 17.5              # set by FINISHED-232; 
76,973 tests (count-dominant, fast in-memory).
+juneau-core/juneau-marshall-rdf/core = 9.2           # set by FINISHED-232; 
21,921 tests.
+juneau-microservice/juneau-microservice/core = 12.3  # set by FINISHED-232; 
205 tests but embedded-server startup heavy; time-variable.
+juneau-core/juneau-commons/core = 1.9                # set by FINISHED-232; 
5,311 tests.
+juneau-core/juneau-config/core = 2.7                 # set by FINISHED-232; 
458 tests.
 juneau-bean/juneau-bean-atom/core = 0.4
 juneau-bean/juneau-bean-common/core = 1.0
-juneau-bean/juneau-bean-html5/core = 3.5
+juneau-bean/juneau-bean-html5/core = 3.4             # set by FINISHED-232; 
12,427 tests.
 juneau-bean/juneau-bean-mcp/core = 0.4
-juneau-bean/juneau-bean-openapi-v3/core = 0.9
-juneau-bean/juneau-bean-swagger-v2/core = 0.8
-juneau-bean/juneau-bean-jsonschema/core = 0.7
+juneau-bean/juneau-bean-openapi-v3/core = 1.0        # set by FINISHED-232; 
measured 1.05s.
+juneau-bean/juneau-bean-swagger-v2/core = 0.9        # set by FINISHED-232; 
measured 0.87s.
+juneau-bean/juneau-bean-jsonschema/core = 0.6        # set by FINISHED-232; 
measured 0.63s.
 
 # ─── [observability] 
──────────────────────────────────────────────────────────
 #
diff --git a/pom.xml b/pom.xml
index 5cd9393fea..6faecbf369 100644
--- a/pom.xml
+++ b/pom.xml
@@ -283,6 +283,35 @@
                                        <version>6.0.2</version>
                                </plugin>
 
+                               <!--
+                                       Quiet-by-default test logging, applied 
reactor-wide to every module's Surefire run.
+                                       Both properties point at a single 
shared config file at the reactor root, so there is
+                                       exactly one source of truth (no 
per-module copies to drift apart):
+                                         - Logback 
(logback.configurationFile): root level=WARN - genuine WARN/ERROR still print,
+                                           only INFO startup chatter is 
removed.
+                                         - JUL 
(java.util.logging.config.file): ConsoleHandler=WARNING (never OFF), so real
+                                           WARNING/SEVERE still surface.
+                                       Modules that define their own surefire 
<systemPropertyVariables> (e.g. java.locale.providers)
+                                       merge with these; module-level keys win 
on conflict.  See src/test/resources/.
+                               -->
+                               <plugin>
+                                       
<groupId>org.apache.maven.plugins</groupId>
+                                       
<artifactId>maven-surefire-plugin</artifactId>
+                                       <configuration>
+                                               <systemPropertyVariables>
+                                                       
<logback.configurationFile>${maven.multiModuleProjectDirectory}/src/test/resources/logback-test.xml</logback.configurationFile>
+                                                       
<java.util.logging.config.file>${maven.multiModuleProjectDirectory}/src/test/resources/logging.properties</java.util.logging.config.file>
+                                                       <!-- Embedded Jetty 
logs through its own jetty-slf4j-impl StdErrLog (not logback/JUL),
+                                                            so raise its root 
threshold to WARN to silence server startup/stop INFO chatter. -->
+                                                       
<org.eclipse.jetty.LEVEL>WARN</org.eclipse.jetty.LEVEL>
+                                                       <!-- Spring Boot 
reinitializes its own logging on context start, overriding the logback
+                                                            config file; set 
its root level to WARN so embedded Tomcat/Spring startup INFO is
+                                                            suppressed while 
real WARN/ERROR still prints. -->
+                                                       
<logging.level.root>WARN</logging.level.root>
+                                               </systemPropertyVariables>
+                                       </configuration>
+                               </plugin>
+
                                <plugin>
                                        <groupId>org.jacoco</groupId>
                                        
<artifactId>jacoco-maven-plugin</artifactId>
diff --git a/juneau-integration-tests/src/test/resources/logback-test.xml 
b/src/test/resources/logback-test.xml
similarity index 70%
rename from juneau-integration-tests/src/test/resources/logback-test.xml
rename to src/test/resources/logback-test.xml
index 3a7add9604..0aa40fb917 100644
--- a/juneau-integration-tests/src/test/resources/logback-test.xml
+++ b/src/test/resources/logback-test.xml
@@ -11,6 +11,23 @@
  * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express or implied.
  * See the License for the specific language governing permissions and 
limitations under the License.
 -->
+<!--
+       Shared quiet-by-default Logback config for the whole reactor's tests.
+
+       Referenced by every module's Surefire execution via the root pom's
+       maven-surefire-plugin <systemPropertyVariables>:
+
+               
<logback.configurationFile>${maven.multiModuleProjectDirectory}/src/test/resources/logback-test.xml</logback.configurationFile>
+
+       Using the logback.configurationFile system property (rather than a 
per-module
+       classpath logback-test.xml) gives one authoritative source with no 
drift.
+
+       Policy: root level=WARN so genuine warnings/errors STILL print - only 
INFO
+       startup chatter is removed.  Named loggers below are silenced only 
because
+       expected negative-path tests intentionally trigger those libraries; the 
list
+       is a harmless superset (a logger that never fires in a given module is 
a no-op).
+       Never set the root to OFF.
+-->
 <configuration>
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
diff --git a/src/test/resources/logging.properties 
b/src/test/resources/logging.properties
new file mode 100644
index 0000000000..d4883e22f6
--- /dev/null
+++ b/src/test/resources/logging.properties
@@ -0,0 +1,32 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.
+# See the NOTICE file distributed with this work for additional information 
regarding copyright ownership.
+# The ASF licenses this file to you under the Apache License, Version 2.0 (the 
"License");
+# you may not use this file except in compliance with the License. You may 
obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software 
distributed under the License is
+# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express or implied.
+# See the License for the specific language governing permissions and 
limitations under the License.
+
+# Shared quiet-by-default java.util.logging (JUL) config for the whole 
reactor's tests.
+#
+# Referenced by every module's Surefire execution via the root pom's
+# maven-surefire-plugin <systemPropertyVariables>:
+#
+#     
<java.util.logging.config.file>${maven.multiModuleProjectDirectory}/src/test/resources/logging.properties</java.util.logging.config.file>
+#
+# Policy: raise the console threshold to WARNING (NOT OFF) so genuine 
WARNING/SEVERE
+# still surface; only INFO/FINE chatter is suppressed.  Modules whose Juneau 
code logs
+# via JUL directly (e.g. the auth modules' 
JwksCache/BasicSwaggerProviderSession/CallLogger)
+# keep their real warnings visible under this threshold.
+handlers=java.util.logging.ConsoleHandler
+.level=INFO
+
+java.util.logging.ConsoleHandler.level=WARNING
+java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
+
+# Expected negative-path test: the JWKS "simulated network failure" test 
intentionally logs a
+# WARNING from JwksCache.  Silence that one logger by name (raise to SEVERE) 
rather than lifting
+# the global threshold, so all other genuine WARNINGs still print.
+org.apache.juneau.rest.server.auth.jwt.JwksCache.level=SEVERE

Reply via email to