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