diff --git a/Jenkinsfile b/Jenkinsfile index 08c3104036c..9c4da335763 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,7 +12,7 @@ pipeline { steps { container('jetty-build') { timeout( time: 120, unit: 'MINUTES' ) { - mavenBuild( "jdk8", "clean install -T3 -Premote-session-tests -Pgcloud", "maven3", + mavenBuild( "jdk8", "clean install -T3", "maven3", [[parserName: 'Maven'], [parserName: 'Java']]) // Collect up the jacoco execution results (only on main build) jacoco inclusionPattern: '**/org/eclipse/jetty/**/*.class', @@ -42,7 +42,7 @@ pipeline { steps { container( 'jetty-build' ) { timeout( time: 120, unit: 'MINUTES' ) { - mavenBuild( "jdk11", "clean install -T3 -Djacoco.skip=true -Premote-session-tests -Pgcloud", "maven3", + mavenBuild( "jdk11", "clean install -T3 -Djacoco.skip=true", "maven3", [[parserName: 'Maven'], [parserName: 'Java']]) } } @@ -54,7 +54,7 @@ pipeline { steps { container( 'jetty-build' ) { timeout( time: 120, unit: 'MINUTES' ) { - mavenBuild( "jdk15", "clean install -T3 -Djacoco.skip=true -Premote-session-tests -Pgcloud", "maven3", + mavenBuild( "jdk15", "clean install -T3 -Djacoco.skip=true", "maven3", [[parserName: 'Maven'], [parserName: 'Java']]) } } diff --git a/jetty-documentation/src/main/asciidoc/administration/jmx/using-jmx.adoc b/jetty-documentation/src/main/asciidoc/administration/jmx/using-jmx.adoc index 1d11aa72288..77cebaf1d62 100644 --- a/jetty-documentation/src/main/asciidoc/administration/jmx/using-jmx.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/jmx/using-jmx.adoc @@ -213,7 +213,6 @@ The `JMXServiceURL` above specifies that the RMI server binds to the wildcard ad ===== JMX Remote Access Authorization The standard `JMXConnectorServer` provides several options to authorize access. -For a complete guide to controlling authentication and authorization in JMX, see https://blogs.oracle.com/lmalventosa/entry/jmx_authentication_authorization[Authentication and Authorization in JMX RMI connectors]. To authorize access to the `JMXConnectorServer` you can use this configuration, where the `jmx.password` and `jmx.access` files have the format specified in the blog entry above: diff --git a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc index 50fa5ba3683..03b51c7554b 100644 --- a/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/startup/start-jar.adoc @@ -206,7 +206,7 @@ $ java -jar start.jar --module=websocket --write-module-graph=modules.dot $ dot -Tpng -o modules.png modules.dot ---- + -See http://graphviz.org/[graphviz.org] for details on http://graphviz.org/content/command-line-invocation[how to post-process this dotty file] into the output best suited for your needs. +See http://graphviz.org/[graphviz.org] for details on how to post-process this dotty file into the output best suited for your needs. --create-files:: Create any missing files that are required by initialized modules. diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc index 93f49d151d3..4b704d32cef 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-ssl.adoc @@ -713,7 +713,7 @@ This is _not_ a recommended usage. ==== Conscrypt SSL Jetty includes support for Google's https://github.com/google/conscrypt/[Conscrypt SSL], which is built on their fork of https://www.openssl.org/[OpenSSL], https://boringssl.googlesource.com/boringssl/[BoringSSL]. -Implementing Conscrypt for the link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-conscrypt-server/src/test/java/org/eclipse/jetty/alpn/conscrypt/server/ConscryptHTTP2Server.java[server] or link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-conscrypt-client/src/test/java/org/eclipse/jetty/alpn/java/client/ConscryptHTTP2Client.java[client] is very straightforward process - simply instantiate an instance of Conscrypt's `OpenSSLProvider` and set `Conscrypt` as a provider for Jetty's `SslContextFactory`: +Implementing Conscrypt for the link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-conscrypt-server/src/test/java/org/eclipse/jetty/alpn/conscrypt/server/ConscryptHTTP2ServerTest.java[server] or link:{GITBROWSEURL}/jetty-alpn/jetty-alpn-conscrypt-client/src/test/java/org/eclipse/jetty/alpn/java/client/ConscryptHTTP2ClientTest.java[client] is very straightforward process - simply instantiate an instance of Conscrypt's `OpenSSLProvider` and set `Conscrypt` as a provider for Jetty's `SslContextFactory`: [source, java] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc b/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc index 9ba569557d0..9690e3dcc07 100644 --- a/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc +++ b/jetty-documentation/src/main/asciidoc/development/embedding/embedding-jetty.adoc @@ -239,7 +239,7 @@ The link:{GITBROWSEURL}/examples/embedded/src/main/java/org/eclipse/jetty/embedd * link:{GITBROWSEURL}/jetty-server/src/main/config/etc/jetty-stats.xml[jetty-stats.xml] * link:{GITBROWSEURL}/jetty-server/src/main/config/etc/jetty-requestlog.xml[jetty-requestlog.xml] * link:{GITBROWSEURL}/jetty-server/src/main/config/etc/jetty-lowresources.xml[jetty-lowresources.xml] -* link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/config/etc/test-realm.xml[test-realm.xml] +* link:{GITBROWSEURL}/tests/test-webapps/test-jetty-webapp/src/main/config/demo-base/etc/test-realm.xml[test-realm.xml] [source, java] ---- diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc index ed38b3c3d02..4724950509c 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc @@ -1153,6 +1153,6 @@ In addition, as the feature group includes websocket, you will need to download |======================================================================= |Jar |Bundle Symbolic Name |Location |javax.websocket-api |javax.websocket-api -|https://repo1.maven.org/maven2/javax/websocket/websocket-api[Maven +|https://repo1.maven.org/maven2/javax/websocket/[Maven central] |======================================================================= diff --git a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-javaee.adoc b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-javaee.adoc index a8463cd7f21..5e56abcd616 100644 --- a/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-javaee.adoc +++ b/jetty-documentation/src/main/asciidoc/quick-start/introduction/jetty-javaee.adoc @@ -19,7 +19,7 @@ [[jetty-javaee]] === Jetty and Java EE Web Profile -Jetty implements aspects of the Java EE specification, primarily the Servlet Specification. +Jetty implements aspects of the Java EE specification, primarily the Servlet Specification. Recent releases of the Java EE platform have introduced a Web Profile, recognizing that many developers need only a subset of the many technologies under the Java EE umbrella. While Jetty itself does not ship all of the Web Profile technologies, Jetty architecture is such that you can plug in third party implementations to produce a container customized to your exact needs. @@ -67,7 +67,7 @@ Validator] |http://jcp.org/en/jsr/detail?id=353[JSR 353] |Java API for JSON Processing 1.0 (JSON-P) |No |Yes, eg JSON-P https://java.net/projects/jsonp/[reference implementation] -|link:jcp.org/en/jsr/detail?id=318[JSR 318] |Interceptors 1.2 |No |Yes as part of a CDI implementation +|http://jcp.org/en/jsr/detail?id=318[JSR 318] |Interceptors 1.2 |No |Yes as part of a CDI implementation |======================================================================= [[jetty-javaee-6]] @@ -102,7 +102,7 @@ Here is the matrix of JSRs for Java EE 6 Web Profile, and how they relate to Jet |http://jcp.org/en/jsr/detail?id=250[JSR 250] |Common Annotations for the Java Platform |Yes |Partially (for non-core Servlet Spec annotations) -|http://jcp.org/en/jsr/detail?id=907[JSR 907] |Java Transaction API (JTA) |Yes |Implementations are pluggable, such as http://www.atomikos.com/[Atomikos], http://jotm.ow2.org/xwiki/bin/view/Main/WebHome[JOTM], http://jencks.codehaus.org/Transaction+Manager[Jencks (Geronimo Transaction Manager)] +|http://jcp.org/en/jsr/detail?id=907[JSR 907] |Java Transaction API (JTA) |Yes |Implementations are pluggable, such as http://www.atomikos.com/[Atomikos], http://jotm.ow2.org/[JOTM], http://jencks.codehaus.org/Transaction+Manager[Jencks (Geronimo Transaction Manager)] |http://jcp.org/en/jsr/detail?id=303[JSR 303] |Bean Validation 1.0 |No |Yes as part of another technology (JSF), or a stand-alone implementation such as http://www.hibernate.org/subprojects/validator/docs.html[Hiberate Validator] diff --git a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc index 1cabc31f3d2..b3f1918740a 100644 --- a/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/jetty-xml/webdefault-xml.adoc @@ -37,7 +37,7 @@ You can specify a custom configuration file to use for specific webapps, or for ==== To ensure your `webdefault.xml` files are validated, you will need to set the `validateXml` attribute to true as described link:#jetty-xml-dtd[here.] ==== -The `webdefault.xml` link:{GITBROWSURL}/jetty-webapp/src/main/config/etc/webdefault.xml[included with the Jetty Distribution] contains several configuration options, such as init params and servlet mappings, and is separated into sections for easy navigation. +The `webdefault.xml` link:{GITBROWSEURLSURL}/jetty-webapp/src/main/config/etc/webdefault.xml[included with the Jetty Distribution] contains several configuration options, such as init params and servlet mappings, and is separated into sections for easy navigation. Some of the more common options include, but are not limited to: dirAllowed:: diff --git a/jetty-documentation/src/main/asciidoc/reference/platforms/fedora.adoc b/jetty-documentation/src/main/asciidoc/reference/platforms/fedora.adoc index 9574f8310f0..7a746447c9b 100644 --- a/jetty-documentation/src/main/asciidoc/reference/platforms/fedora.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/platforms/fedora.adoc @@ -23,4 +23,4 @@ As of Fedora 19, Jetty 9 is the version of Jetty available. This distribution of Jetty is not created or maintained by the Jetty project though we have had a fair amount of communication with the folks behind it and we are very pleased with how this Linux distribution has stayed current. Releases are kept largely in sync with our releases as there is a wonderful automatic notification mechanism in place for Fedora that detects our releases and immediately opens an issue for them to update. -* https://admin.fedoraproject.org/pkgdb/acls/name/jetty[Jetty on Fedora] +* https://src.fedoraproject.org/rpms/jetty[Jetty on Fedora] diff --git a/jetty-infinispan/infinispan-remote-query/pom.xml b/jetty-infinispan/infinispan-remote-query/pom.xml index c8d44081e9f..195d2245367 100644 --- a/jetty-infinispan/infinispan-remote-query/pom.xml +++ b/jetty-infinispan/infinispan-remote-query/pom.xml @@ -90,7 +90,9 @@ org.apache.maven.plugins maven-surefire-plugin - true + + ${infinispan.docker.image.version} + @@ -137,29 +139,4 @@ test - - - remote-session-tests - - - hotrod.enabled - true - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - ${infinispan.docker.image.version} - - - - - - - diff --git a/jetty-osgi/test-jetty-osgi/pom.xml b/jetty-osgi/test-jetty-osgi/pom.xml index 67c927eeaad..a2dfd4f76fd 100644 --- a/jetty-osgi/test-jetty-osgi/pom.xml +++ b/jetty-osgi/test-jetty-osgi/pom.xml @@ -15,7 +15,7 @@ target/distribution 4.13.1 2.6.1 - 1.0 + 1.2 diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/FileSessionDataStore.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/FileSessionDataStore.java index bcb8eef69cc..68284a51891 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/FileSessionDataStore.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/FileSessionDataStore.java @@ -35,6 +35,7 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; +import java.util.stream.Stream; import org.eclipse.jetty.util.ClassLoadingObjectInputStream; import org.eclipse.jetty.util.MultiException; @@ -153,7 +154,7 @@ public class FileSessionDataStore extends AbstractSessionDataStore public Set doGetExpired(final Set candidates) { final long now = System.currentTimeMillis(); - HashSet expired = new HashSet(); + HashSet expired = new HashSet<>(); //iterate over the files and work out which have expired for (String filename : _sessionFileMap.values()) @@ -206,23 +207,12 @@ public class FileSessionDataStore extends AbstractSessionDataStore long now = System.currentTimeMillis(); if (LOG.isDebugEnabled()) LOG.debug("Sweeping {} for old session files", _storeDir); - try + try (Stream stream = Files.walk(_storeDir.toPath(), 1, FileVisitOption.FOLLOW_LINKS)) { - Files.walk(_storeDir.toPath(), 1, FileVisitOption.FOLLOW_LINKS) + stream .filter(p -> !Files.isDirectory(p)).filter(p -> !isOurContextSessionFilename(p.getFileName().toString())) .filter(p -> isSessionFilename(p.getFileName().toString())) - .forEach(p -> - { - - try - { - sweepFile(now, p); - } - catch (Exception e) - { - LOG.warn(e); - } - }); + .forEach(p -> sweepFile(now, p)); } catch (Exception e) { @@ -237,29 +227,35 @@ public class FileSessionDataStore extends AbstractSessionDataStore * * @param now the time now in msec * @param p the file to check - * @throws Exception indicating error in sweep */ public void sweepFile(long now, Path p) - throws Exception { - if (p == null) - return; - - try + if (p != null) { - long expiry = getExpiryFromFilename(p.getFileName().toString()); - //files with 0 expiry never expire - if (expiry > 0 && ((now - expiry) >= (5 * TimeUnit.SECONDS.toMillis(_gracePeriodSec)))) + try { - Files.deleteIfExists(p); - if (LOG.isDebugEnabled()) - LOG.debug("Sweep deleted {}", p.getFileName()); + long expiry = getExpiryFromFilename(p.getFileName().toString()); + //files with 0 expiry never expire + if (expiry > 0 && ((now - expiry) >= (5 * TimeUnit.SECONDS.toMillis(_gracePeriodSec)))) + { + try + { + if (!Files.deleteIfExists(p)) + LOG.warn("Could not delete {}", p.getFileName()); + else if (LOG.isDebugEnabled()) + LOG.debug("Deleted {}", p.getFileName()); + } + catch (IOException e) + { + LOG.warn("Could not delete {}", p.getFileName(), e); + } + } + } + catch (NumberFormatException e) + { + LOG.warn("Not valid session filename {}", p.getFileName()); + LOG.warn(e); } - } - catch (NumberFormatException e) - { - LOG.warn("Not valid session filename {}", p.getFileName()); - LOG.warn(e); } } @@ -311,7 +307,7 @@ public class FileSessionDataStore extends AbstractSessionDataStore @Override public void doStore(String id, SessionData data, long lastSaveTime) throws Exception { - File file = null; + File file; if (_storeDir != null) { delete(id); @@ -328,8 +324,9 @@ public class FileSessionDataStore extends AbstractSessionDataStore } catch (Exception e) { - if (file != null) - file.delete(); // No point keeping the file if we didn't save the whole session + // No point keeping the file if we didn't save the whole session + if (!file.delete()) + e.addSuppressed(new IOException("Could not delete " + file)); throw new UnwriteableSessionDataException(id, _context, e); } } @@ -353,7 +350,10 @@ public class FileSessionDataStore extends AbstractSessionDataStore throw new IllegalStateException("No file store specified"); if (!_storeDir.exists()) - _storeDir.mkdirs(); + { + if (!_storeDir.mkdirs()) + throw new IllegalStateException("Could not create " + _storeDir); + } else { if (!(_storeDir.isDirectory() && _storeDir.canWrite() && _storeDir.canRead())) @@ -365,70 +365,67 @@ public class FileSessionDataStore extends AbstractSessionDataStore MultiException me = new MultiException(); long now = System.currentTimeMillis(); - Files.walk(_storeDir.toPath(), 1, FileVisitOption.FOLLOW_LINKS) - .filter(p -> !Files.isDirectory(p)).filter(p -> isSessionFilename(p.getFileName().toString())) - .forEach(p -> - { - //first get rid of all ancient files, regardless of which - //context they are for - try + // Build session file map by walking directory + try (Stream stream = Files.walk(_storeDir.toPath(), 1, FileVisitOption.FOLLOW_LINKS)) + { + stream + .filter(p -> !Files.isDirectory(p)) + .filter(p -> isSessionFilename(p.getFileName().toString())) + .forEach(p -> { + // first get rid of all ancient files sweepFile(now, p); - } - catch (Exception x) - { - me.add(x); - } - String filename = p.getFileName().toString(); - String context = getContextFromFilename(filename); - //now process it if it wasn't deleted, and it is for our context - if (Files.exists(p) && _contextString.equals(context)) - { - //the session is for our context, populate the map with it - String sessionIdWithContext = getIdWithContextFromFilename(filename); - if (sessionIdWithContext != null) + String filename = p.getFileName().toString(); + String context = getContextFromFilename(filename); + //now process it if it wasn't deleted, and it is for our context + if (Files.exists(p) && _contextString.equals(context)) { - //handle multiple session files existing for the same session: remove all - //but the file with the most recent expiry time - String existing = _sessionFileMap.putIfAbsent(sessionIdWithContext, filename); - if (existing != null) + //the session is for our context, populate the map with it + String sessionIdWithContext = getIdWithContextFromFilename(filename); + if (sessionIdWithContext != null) { - //if there was a prior filename, work out which has the most - //recent modify time - try + //handle multiple session files existing for the same session: remove all + //but the file with the most recent expiry time + String existing = _sessionFileMap.putIfAbsent(sessionIdWithContext, filename); + if (existing != null) { - long existingExpiry = getExpiryFromFilename(existing); - long thisExpiry = getExpiryFromFilename(filename); + //if there was a prior filename, work out which has the most + //recent modify time + try + { + long existingExpiry = getExpiryFromFilename(existing); + long thisExpiry = getExpiryFromFilename(filename); - if (thisExpiry > existingExpiry) - { - //replace with more recent file - Path existingPath = _storeDir.toPath().resolve(existing); - //update the file we're keeping - _sessionFileMap.put(sessionIdWithContext, filename); - //delete the old file - Files.delete(existingPath); - if (LOG.isDebugEnabled()) - LOG.debug("Replaced {} with {}", existing, filename); + if (thisExpiry > existingExpiry) + { + //replace with more recent file + Path existingPath = _storeDir.toPath().resolve(existing); + //update the file we're keeping + _sessionFileMap.put(sessionIdWithContext, filename); + //delete the old file + Files.delete(existingPath); + if (LOG.isDebugEnabled()) + LOG.debug("Replaced {} with {}", existing, filename); + } + else + { + //we found an older file, delete it + Files.delete(p); + if (LOG.isDebugEnabled()) + LOG.debug("Deleted expired session file {}", filename); + } } - else + catch (IOException e) { - //we found an older file, delete it - Files.delete(p); - if (LOG.isDebugEnabled()) - LOG.debug("Deleted expired session file {}", filename); + me.add(e); } } - catch (IOException e) - { - me.add(e); - } } } - } - }); - me.ifExceptionThrow(); + }); + me.ifExceptionThrow(); + } } } @@ -511,11 +508,11 @@ public class FileSessionDataStore extends AbstractSessionDataStore protected long getExpiryFromFilename(String filename) { - if (StringUtil.isBlank(filename) || filename.indexOf("_") < 0) + if (StringUtil.isBlank(filename) || !filename.contains("_")) throw new IllegalStateException("Invalid or missing filename"); String s = filename.substring(0, filename.indexOf('_')); - return (s == null ? 0 : Long.parseLong(s)); + return Long.parseLong(s); } protected String getContextFromFilename(String filename) @@ -592,11 +589,11 @@ public class FileSessionDataStore extends AbstractSessionDataStore protected SessionData load(InputStream is, String expectedId) throws Exception { - String id = null; //the actual id from inside the file + String id; //the actual id from inside the file try { - SessionData data = null; + SessionData data; DataInputStream di = new DataInputStream(is); id = di.readUTF(); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/CustomResourcesMonitorTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/CustomResourcesMonitorTest.java index c3926e6761e..7ff1f00add5 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/CustomResourcesMonitorTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/CustomResourcesMonitorTest.java @@ -146,9 +146,8 @@ public class CustomResourcesMonitorTest @Override public boolean isLowOnResources() { - try + try (Stream paths = Files.list(_pathToMonitor)) { - Stream paths = Files.list(_pathToMonitor); List content = paths.collect(Collectors.toList()); if (!content.isEmpty()) { diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java index 20486ca84b7..f18c5aa6d80 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java @@ -36,6 +36,7 @@ import java.util.List; import java.util.Locale; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Stream; import javax.servlet.DispatcherType; import javax.servlet.MultipartConfigElement; import javax.servlet.ServletException; @@ -1837,9 +1838,9 @@ public class RequestTest private static long getFileCount(Path path) { - try + try (Stream s = Files.list(path)) { - return Files.list(path).count(); + return s.count(); } catch (IOException e) { diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/RolloverFileOutputStreamTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/RolloverFileOutputStreamTest.java index 75c494fa37a..ab311d2a947 100644 --- a/jetty-util/src/test/java/org/eclipse/jetty/util/RolloverFileOutputStreamTest.java +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/RolloverFileOutputStreamTest.java @@ -31,7 +31,7 @@ import java.time.temporal.TemporalAccessor; import java.util.Arrays; import java.util.TimeZone; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; +import java.util.stream.Stream; import org.eclipse.jetty.toolchain.test.FS; import org.eclipse.jetty.toolchain.test.jupiter.WorkDir; @@ -379,6 +379,9 @@ public class RolloverFileOutputStreamTest private String[] ls(Path path) throws IOException { - return Files.list(path).map(p -> p.getFileName().toString()).collect(Collectors.toList()).toArray(new String[0]); + try (Stream s = Files.list(path)) + { + return s.map(p -> p.getFileName().toString()).toArray(String[]::new); + } } } diff --git a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/JarResourceTest.java b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/JarResourceTest.java index db944868ea5..cc4a7ed917f 100644 --- a/jetty-util/src/test/java/org/eclipse/jetty/util/resource/JarResourceTest.java +++ b/jetty-util/src/test/java/org/eclipse/jetty/util/resource/JarResourceTest.java @@ -30,6 +30,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.zip.ZipFile; import org.eclipse.jetty.toolchain.test.FS; @@ -264,7 +265,10 @@ public class JarResourceTest private List listFiles(Path dir) throws IOException { - return Files.list(dir).collect(Collectors.toList()); + try (Stream s = Files.list(dir)) + { + return s.collect(Collectors.toList()); + } } private List listFiles(Path dir, DirectoryStream.Filter filter) throws IOException diff --git a/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/HugeResourceTest.java b/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/HugeResourceTest.java index d530cd8a4f6..ea455c17f80 100644 --- a/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/HugeResourceTest.java +++ b/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/HugeResourceTest.java @@ -65,6 +65,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; @@ -73,6 +74,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; +@Tag("large-disk-resource") public class HugeResourceTest { private static final long KB = 1024; diff --git a/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java b/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java index 93f16756412..123955c2027 100644 --- a/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java +++ b/jetty-webapp/src/test/java/org/eclipse/jetty/webapp/WebAppContextTest.java @@ -365,10 +365,14 @@ public class WebAppContextTest WebAppClassLoader webAppClassLoader = (WebAppClassLoader)contextClassLoader; Path extLibsDir = MavenTestingUtils.getTestResourcePathDir("ext"); extLibsDir = extLibsDir.toAbsolutePath(); - List expectedPaths = Files.list(extLibsDir) - .filter(Files::isRegularFile) - .filter((path) -> path.toString().endsWith(".jar")) - .collect(Collectors.toList()); + List expectedPaths; + try (Stream s = Files.list(extLibsDir)) + { + expectedPaths = s + .filter(Files::isRegularFile) + .filter((path) -> path.toString().endsWith(".jar")) + .collect(Collectors.toList()); + } List actualPaths = new ArrayList<>(); for (URL url : webAppClassLoader.getURLs()) { diff --git a/pom.xml b/pom.xml index ebedf859099..2d76f8a697b 100644 --- a/pom.xml +++ b/pom.xml @@ -595,7 +595,7 @@ org.apache.maven.plugins maven-jxr-plugin - 2.5 + 3.0.0 org.apache.maven.plugins @@ -605,7 +605,7 @@ org.apache.maven.plugins maven-pmd-plugin - 3.13.0 + 3.14.0 org.apache.maven.plugins @@ -1448,7 +1448,7 @@ maven-surefire-plugin ${maven.surefire.version} - external + external, large-disk-resource diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestHelper.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestHelper.java index a46322b5968..15f9d753830 100644 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestHelper.java +++ b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestHelper.java @@ -27,10 +27,10 @@ import java.io.ObjectOutputStream; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; -import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.eclipse.jetty.toolchain.test.FS; import org.eclipse.jetty.toolchain.test.jupiter.WorkDir; @@ -49,23 +49,28 @@ public class FileTestHelper public static File getFile(WorkDir workDir, String sessionId) throws IOException { - Optional sessionPath = Files.list(workDir.getPath()) - .filter((path) -> path.getFileName().toString().contains(sessionId)) - .findFirst(); - if (sessionPath.isPresent()) - return sessionPath.get().toFile(); - return null; + try (Stream s = Files.list(workDir.getPath())) + { + return s + .filter((path) -> path.getFileName().toString().contains(sessionId)) + .findFirst() + .map(Path::toFile) + .orElse(null); + } } public static void assertSessionExists(WorkDir workDir, String sessionId, boolean exists) throws IOException { - Optional sessionPath = Files.list(workDir.getPath()) - .filter((path) -> path.getFileName().toString().contains(sessionId)) - .findFirst(); - if (exists) - assertTrue(sessionPath.isPresent()); - else - assertFalse(sessionPath.isPresent()); + try (Stream s = Files.list(workDir.getPath())) + { + Optional sessionPath = s + .filter((path) -> path.getFileName().toString().contains(sessionId)) + .findFirst(); + if (exists) + assertTrue(sessionPath.isPresent()); + else + assertFalse(sessionPath.isPresent()); + } } public static void assertFileExists(WorkDir workDir, String filename, boolean exists) @@ -170,14 +175,11 @@ public class FileTestHelper public static void deleteFile(WorkDir workDir, String sessionId) throws IOException { // Collect - List matches = Files.list(workDir.getPath()) - .filter((path) -> path.getFileName().toString().contains(sessionId)) - .collect(Collectors.toList()); - - // Delete outside of lambda - for (Path path : matches) + try (Stream s = Files.list(workDir.getPath())) { - FS.deleteFile(path); + s.filter((path) -> path.getFileName().toString().contains(sessionId)) + .collect(Collectors.toList()) // Delete outside of list stream + .forEach(FS::deleteFile); } } diff --git a/tests/test-sessions/test-gcloud-sessions/pom.xml b/tests/test-sessions/test-gcloud-sessions/pom.xml index 1cd62d86369..baa2fcbdef4 100644 --- a/tests/test-sessions/test-gcloud-sessions/pom.xml +++ b/tests/test-sessions/test-gcloud-sessions/pom.xml @@ -21,13 +21,6 @@ true - - org.apache.maven.plugins - maven-surefire-plugin - - true - - @@ -83,26 +76,4 @@ test - - - gcloud - - - gcloud.enabled - true - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - - - - - diff --git a/tests/test-sessions/test-infinispan-sessions/pom.xml b/tests/test-sessions/test-infinispan-sessions/pom.xml index 7f2c0d97619..4967098d555 100644 --- a/tests/test-sessions/test-infinispan-sessions/pom.xml +++ b/tests/test-sessions/test-infinispan-sessions/pom.xml @@ -30,8 +30,12 @@ maven-surefire-plugin - org/eclipse/jetty/server/session/*.java + **/*.java + + ${infinispan.docker.image.version} + ${infinispan.docker.image.name} + @@ -151,33 +155,4 @@ test - - - - remote-session-tests - - - hotrod.enabled - true - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*.java - - - ${infinispan.docker.image.version} - ${infinispan.docker.image.name} - - - - - - - diff --git a/tests/test-sessions/test-memcached-sessions/pom.xml b/tests/test-sessions/test-memcached-sessions/pom.xml index 784e8672e92..9c571cb82dd 100644 --- a/tests/test-sessions/test-memcached-sessions/pom.xml +++ b/tests/test-sessions/test-memcached-sessions/pom.xml @@ -22,13 +22,6 @@ true - - org.apache.maven.plugins - maven-surefire-plugin - - true - - @@ -78,27 +71,4 @@ test - - - remote-session-tests - - - memcached.enabled - true - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - - - - - - diff --git a/tests/test-sessions/test-mongodb-sessions/pom.xml b/tests/test-sessions/test-mongodb-sessions/pom.xml index 7fc62c95fd8..76006a9ec3c 100644 --- a/tests/test-sessions/test-mongodb-sessions/pom.xml +++ b/tests/test-sessions/test-mongodb-sessions/pom.xml @@ -28,7 +28,9 @@ org.apache.maven.plugins maven-surefire-plugin - true + + ${mongo.docker.version} + @@ -112,29 +114,4 @@ test - - - remote-session-tests - - - mongo.enabled - true - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${mongo.docker.version} - - false - - - - - - diff --git a/tests/test-webapps/test-owb-cdi-webapp/pom.xml b/tests/test-webapps/test-owb-cdi-webapp/pom.xml index 8730eecf214..b181bee9ec4 100644 --- a/tests/test-webapps/test-owb-cdi-webapp/pom.xml +++ b/tests/test-webapps/test-owb-cdi-webapp/pom.xml @@ -50,7 +50,7 @@ org.apache.geronimo.specs geronimo-atinject_1.0_spec - 1.1 + 1.2 org.apache.geronimo.specs