Jetty v10.0.0 Release Notes

Release Date: 2020-12-07 // over 3 years ago
  • Eclipse Jetty 10.x Highlights

    • Jetty 10.x has a minimum Java requirement of Java 11.
    • Jetty 10.x modules are proper JPMS modules with module-info.class.
    • πŸ‘ Jetty 10.x supports the following technology specs (from the Jakarta EE 8 effort):
      • javax.servlet - 4.0.1
      • javax.servlet.jsp - 2.2
      • javax.servlet.jsp.jstl - 1.2
      • javax.el - 3.0.0
      • javax.websocket - 1.1
    • πŸ‘ Jetty 10.x will be the last major version of Jetty to support the javax.servlet namespace.
      ⚑️ Use Jetty 11.x for the updated jakarta.servlet namespace.

    Important Changes

    • 🌲 Classic jetty logging facade has been replaced with slf4j-api usage
    • There is no longer a jetty-distribution, use jetty-home with a proper ${jetty.base} instead.
      πŸ“š See: Operations Guide: Architecture
      • New demo jetty-start module exists to replace the old demo-base functionality.
    • βœ‚ Remove jetty-all uber artifact
    • πŸ”§ Managing Configuration within a WebAppContext has a new API.
      (They are now self ordering and do not require knowledge of Jetty internals to use successfully)
    • πŸ”¨ Complete WebSocket refactoring, those using the Jetty APIs or embedded-jetty will need to update their code.
      • Support for WebSocket over HTTP/2 (client and server)
    • Jetty HttpClient has been improved.
      • Supports dynamic protocol upgrade (http/2 and http/1.1).
    • πŸ”¨ Session management has been refactored as well.

    πŸ”„ Changelog

    πŸš€ Special thanks to the following Eclipse Jetty community members for participating in this release: @dejpec, @attiand, @sullis, @grgrzybek, @schnittstabil, @dennyac

    • #5744 - Review and rework o.e.j.util.Scanner
    • #5732 - Fix ArithmeticException "/ by zero" in Pool.acquire()
    • βœ… #5729 - Do not create and use jars with "tests" classifier.
    • #5724 - GCThreadLeakPreventer won't work with Java 9.
    • 🚚 #5710 - remove unnecessary transition to READY in ContentProducer.isReady
    • 🚚 #5705 - Move websocket-util classes into websocket-core
    • #5698 - Bump commons-codec from 1.13 to 1.15
    • #5695 - Bump api-ldap-schema-data from 2.0.0 to 2.0.1
    • #5694 - Bump commons-lang3 from 3.9 to 3.11
    • #5692 - HttpInput may skip setting fill interest
    • #5683 - Allow start.jar to list enabled modules
    • #5674 - Drop /jetty-spring/ module
    • ⬆️ #5648 - Use Filter name to identify the WebSocketUpgradeFilter.
    • #5641 - Clean up LoginServices and LoginModules
    • #5622 - Bump javax.servlet.jsp.jstl from 1.2.2 to 1.2.5
    • πŸ”Œ #5615 - Bump maven-project-info-reports-plugin from 3.0.0 to 3.1.1
    • #5597 - Cleanups to WebSocket CloseStatus
    • #5594 - Bump tycho-version from 2.0.0 to 2.1.0
    • #5592 - Bump hazelcast.version from 4.0.1 to 4.1
    • #5566 - Tries cleanup
    • #5563 - using jetty-websocket-httpclient.xml within webapp Jetty 10
    • #5547 - Bump org.eclipse.osgi from 3.6.0.v20100517 to 3.7.1
    • πŸš€ #5543 - Bump spring-beans from 5.2.9.RELEASE to 5.3.0
    • #5527 - ResourceCollection NPE
    • #5526 - Access to cookie config with accessor method (@dejpec)
    • #5517 - Fix and simplify graceful shutdown of StatisticsHandler
    • πŸš€ #5503 - Bump spring-beans from 5.1.1.RELEASE to 5.2.9.RELEASE
    • #5469 - Bump jaxws-rt from 2.3.0.2 to 2.3.3
    • #5468 - Bump openpojo from 0.8.1 to 0.8.13
    • πŸ”Œ #5467 - Bump maven-jxr-plugin from 2.5 to 3.0.0
    • #5466 - Bump jakarta.annotation-api from 1.3.4 to 1.3.5
    • #5465 - Bump github-api from 1.114 to 1.116
    • πŸ›  #5459 - Fix archive assemblies (tar.gz and zip) to have fixed file/dir modes.
    • #5450 - Cleanup Request.isSecure() logic
    • #5432 - Bump ant.version from 1.10.8 to 1.10.9
    • #5422 - Bump asciidoctorj-diagram from 2.0.2 to 2.0.5
    • ⬆️ #5413 - simplify the usage of WebSocketUpgradeFilter in jetty 10
    • πŸ”§ #5406 - throw ISE if the WebSocketSCI configure() is called on a started ServletContextHandler
    • ⬆️ #5405 - add test to reproduce issue with WebSocketUpgradeFilter not started
    • 🌐 #5400 - Add more origin info to quickstart-web.xml elements
    • πŸ‘ #5398 - Better handling for wrong SNI.
    • #5396 - Fix injection for quickstart
    • #5391 - Bump javax.servlet-api from 3.1.0 to 4.0.1
    • #5390 - Bump maven-artifact-transfer from 0.11.0 to 0.12.0
    • #5367 - Reorg of /demos/ with focus on demo-spec downstream dependencies.
    • #5350 - Bump jsp-api from 2.1 to 2.2
    • #5349 - Bump asm.version from 8.0.1 to 9.0
    • πŸ”Œ #5347 - Bump maven-jar-plugin from 3.1.2 to 3.2.0
    • #5333 - Bump derby from 10.14.2.0 to 10.15.2.0
    • #5328 - NPE in PushBuilder
    • #5311 - Quickstart duplicate servlets,filters,listeners from context
    • ⚠ #5309 - Jetty Home warning
    • #5307 - HTTP2 HostHeader
    • 🚚 #5303 - Remove unused SessionHandler methods.
    • #5302 - Bump mariadb-java-client from 2.6.0 to 2.6.2
    • #5295 - rework CompressionPool to use the jetty-util pool
    • #5288 - fix get sessionId from fileName
    • ⬆️ #5266 - fix upgrade bug in HttpReceiverOverHTTP
    • πŸ›  #5265 - JDK-8244090 MethodHandles bug fixed in JDK16
    • πŸ”Œ #5262 - Bump exec-maven-plugin from 1.6.0 to 3.0.0
    • πŸ”Œ #5260 - Bump flatten-maven-plugin from 1.0.1 to 1.2.5
    • #5258 - Adding start.jar --add-module
    • #5257 - List/Show modules
    • ⚑️ #5248 - update gzip handler
    • #5243 - Add gracePeriod to file session store.
    • #5239 - Bump tycho-version from 1.4.0 to 2.0.0
    • #5238 - Bump jmh.version from 1.25.1 to 1.25.2
    • #5237 - Bump org.eclipse.osgi from 3.15.100 to 3.15.300
    • #5236 - Bump org.eclipse.osgi.services from 3.7.100 to 3.8.0
    • πŸš€ #5235 - Jetty WebSocket API minor cleanups before Jetty-10 full release
    • ⬆️ #5213 - fix NPE during websocket upgrade
    • #5211 - Bump jmh.version from 1.21 to 1.25.1
    • #5196 - Simplify GzipHandler user-agent handling
    • #5192 - Bump apacheds.version from 2.0.0-M24 to 2.0.0.AM26
    • #5191 - Bump jaxb-api from 2.3.0 to 2.3.1
    • #5190 - Bump jnr-unixsocket from 0.24 to 0.34
    • #5188 - Bump derbytools from 10.14.2.0 to 10.15.2.0
    • ⚑️ #5182 - Update to spifly 1.3.0
    • ⚑️ #5179 - Update to asm8.0.1
    • 🌲 #5167 - Regularlize logging
    • #5157 - Bump ant from 1.8.4 to 1.10.8
    • ⚑️ #5154 - Fix WebSocketServerExamplesTest to work after maven surefire update
    • #5119 - Use either absolute or relative multipart file location
    • #5115 - lazily initialize the WebSocketFilter if only using JettyWebSocketServlet
    • πŸ”¨ #5101 - Refactor of Jetty WebSocket Upgrade Request/Response
    • #5098 - Static UrlEncoded
    • #5097 - Uniform Find Expired Sessions
    • πŸ”€ #5084 - Convert synchronized usages to AutoLock.
    • #5077 - enable Dependabot v2 (@sullis)
    • βͺ #5075 - restore old ServletPathMapping even for include dispatch types
    • #5054 - allow anonymous WebSocketListener / Endpoint classes to be used
    • #5046 - fix NPE related to use of Attributes.Wrapper getAttributeNameSet() Jetty 10
    • ⬆️ #5031 - add WebSocketClient UpgradeRequest timeout to jetty 10
    • #5026 - wrong welcome file handling with dispatcher.include() a… (@grgrzybek)
    • 🌲 #4997 - Implementing old logging TAG_PAD as Message Alignment.
    • #4994 - Implemented TAG_PAD
    • #4978 - only include jetty-slf4j-impl jar once in jetty-home
    • πŸ— #4952 - fix websocket JPMS warnings and build issues
    • #4931 - WebSocket container graceful stop
    • πŸ‘ #4917 - Give better errors for non public javax.websocket endpoints
    • #4912 - close websocket suspendState if close frame is received
    • πŸ‘ #4902 - support javax websocket decoder lists in jetty-10
    • πŸ”¨ #4898 - Refactor HttpServletMapping to avoid tracking servletPath separately
    • #4881 - Separate out websocket client and server components from websocket-core
    • #4858 - add setReuseAddress() to ClientConnector
    • #4851 - fix issues with HttpServletMapping
    • #4845 - Review HttpClient Request header APIs.
    • #4839 - Enabling JMX on jetty-slf4j-impl
    • #4829 - Implement spec requirements for Request.newPushBuilder
    • #4815 - Allow a ConnectionFactory (eg SslConnectionFactory) to automatically add a Customizer
    • #4810 - fix WebSocket LinkageError and invalid PathParam type handling
    • βœ… #4804 - Test for asyncIsStarted for setReadListener
    • #4796 - HttpInput.setReadListener should check async state
    • ⬆️ #4780 - upgrade spifly to 1.2.4 and replace jdk13 build with jdk14
    • πŸ“‡ #4777 - Immutable HttpFields and MetaData
    • βœ… #4775 - cleanup and add tests for the unused ws message handlers
    • #4767 - Review GzipHandler inside ServletContextHandler.
    • #4763 - Request.authenticate must return true if already authenticated
    • #4761 - Response.setLocale should override previous
    • πŸ‘» #4759 - Improve keystore exception message when keystore is not valid (@schnittstabil)
    • #4757 - Use HandlerList instead of HandlerCollection
    • #4753 - Call HttpSessionListener.sessionCreated in order listeners were added.
    • βœ… #4750 - fix some test failures for jetty-10 with websocket tck
    • πŸ”€ #4730 - no merge query string
    • 🚚 #4723 - remove websocket-servlet
    • #4721 - Async dispatch with query.
    • #4720 - Keep previous charencoding if not set in content type
    • #4708 - wrong value for ServletContext.setSessionTimeout
    • ⬆️ #4702 - avoid NPE during websocket HTTP/2 upgrade
    • πŸ‘ #4701 - ServletContext.createXXX methods should throw UnsupportedOperationException
    • πŸ‘ #4698 - ServletContext sessionModes methods should throw UnsupportedOperationException
    • #4694 - use static methods with javadoc to get MethodHandle lookups
    • #4692 - Use MethodHandles.lookup() consistently in WebSocket code.
    • πŸ–¨ #4689 - support alt PrintStream in StdErrAppender properly
    • #4684 - Fix jetty-slf4j-impl for osgi
    • πŸ”¨ #4672 - Refactor CrossOriginFilter with small perf improvements (@dennyac)
    • ⬆️ #4670 - Support HTTP/1 upgrade to HTTP/2 in HttpClient.
    • πŸ›  #4669 - websocket JPMS fixes to not export websocket-core
    • ⬆️ #4666 - upgrade openwebbeans-web to 2.0.15
    • #4661 - generalise XmlConfiguration elements
    • πŸ”§ #4649 - Hazelcast remote.xml configuration file do not configure hazelcast remote addresses (@attiand)
    • #4627 - request getPathInfo() could be null in InetAccessHandler
    • #4618 - Review HttpClient's ContentProvider.
    • #4615 - rework InetAccessHandler to use path mappings
    • #4602 - Continue after ServiceLoader ServiceConfigurationError
    • #4593 - websocket aggregating text and binary MessageSinks
    • #4590 - Implement forward/include/async params for HttpServletMapping
    • #4588 - rework of websocket message reader and writers
    • πŸ“‡ #4587 - Servlet 4 metadata-complete=true should skip introspection of annotations
    • 🚚 #4583 - remove unnecessary javadoc on Override methods
    • πŸ‘ #4570 - StdErrLog cleanup and final Arg Throwable support
    • 🚚 #4563 - remove deprecated jetty-runner
    • 🐎 #4561 - Improve performance of small websocket messages [jetty-10.0.x]
    • 🚚 #4558 - Remove Resource.writeTo(OutputStream, long, long)
    • πŸ”¨ #4556 - HttpInput refactoring
    • #4554 - Graceful close of HTTP/2 Connection.
    • πŸ‘ #4552 - Fix MethodHandles lookup to support JPMS runtime mode
    • #4549 - clean up websocket removing duplicated and unused classes
    • πŸ”§ #4543 - Client configuration for direct/heap ByteBuffers.
    • 🚚 #4539 - remove all SharedBlockingCallback usage from websocket
    • #4536 - separate modules for jetty and javax websockets
    • #4535 - do not throw IOException on Javax websocket close
    • #4527 - Make the WebSocketServerContainer initialize methods private
    • #4523 - allow changing of close response from jetty and javax websocket onClose events
    • #4522 - fix JPMS issues with javax websockets
    • βœ… #4514 - tck tests are done after ServletContext has already been initialized so we need to test this first to get some tck test passing...
    • #4510 - spec addJspFile javadoc expect IllegalArgumentException if name is null or empty string
    • #4509 - Ensure get/setInitParam with null arg throws NPE
    • πŸ”€ #4498 - synchronize multiparts for cleanup from different thread
    • ⚑️ #4497 - Update paxexam for osgi tests
    • #4494 - Bundle-RequiredExecutionEnvironment: JavaSE-11 for Jett…
    • 🚚 #4490 - remove blank line
    • #4489 - Switch SslContextFactory.keystoreType from JKS to PKCS12.
    • #4488 - Bump Apache Jasper JSP from 9.0.19 to 9.0.29
    • πŸ”¨ #4482 - Refactored Graceful shutdown
    • #4477 - Modernize jetty-util-ajax.
    • #4472 - Prevent jetty 10 WebSocket close deadlocks
    • #4470 - Provide a parameterless CustomRequestLog.
    • 🚚 #4469 - Move multipart classes to jetty-server.
    • βœ… #4467 - Add tests for default-context-path
    • #4463 - Implement ServletContext.addJspFile
    • #4458 - Implement get/setSessionTimeout for ServletContext
    • 0️⃣ #4455 - Implement context default request/response encodings.
    • πŸ“‡ #4452 - fix issues with javax metadata and decoders
    • #4451 - websocket-core exposes internal classes
    • #4441 - WebSocket rename for jetty-10
    • #4436 - Fix JPMS transitivity.
    • #4435 - Fix WebSocket ClassLoader issues.
    • 0️⃣ #4420 - use annotations for Javax WebSockets as default EndpointConfig
    • πŸ”§ #4390 - Pass system properties into xml configurations
    • ⚑️ #4384 - Update jsp documenation; remove old config from webdefault.xml
    • ⬆️ #4379 - Allow WebSocket extension selection to be done from UpgradeListener
    • 🚚 #4371 - remove MultiParts interface and simplify MultiPart cleanup
    • πŸ›° #4359 - sending WebSocket frames modifies the payload ByteBuffer
    • βœ… #4355 - test client negotiation of internal extensions
    • #4343 - fix creation of HttpClient in jetty-openid.xml for jetty10
    • #4324 - stop WebSocketSessions only after onClose
    • #4295 - config for jetty specific settings with javax WebSockets
    • #4260 - CompressExtension autoFragment with respect to maxFrameSize
    • #4232 - fragment outgoing frames before the ExtensionStack
    • 🚚 #4229 - remove default keystore passwords not from test-keystore.mod
    • #4224 - Fix reported Servlet major/minor versions
    • πŸ“œ #4219 - make WS Parser autoFragment data frames to maxFrameSize
    • βœ… #4215 - fix flaky ClientConnectTest and change WS connectTimeout
    • #4151 - Module org.eclipse.jetty.alpn.client not found, require…
    • βœ… #4147 - autobahn tests for jetty, javax websocket APIs
    • πŸ”§ #4097 - Configuration cleanup
    • #4095 - throw ISE for WebSocket suspend after close
    • ⬆️ #4090 - revert ClientUpgradeRequest error handling logic
    • #4078 - Fix restart of quickstarted webapp
    • #4068 - Review Locker.
    • #4035 - Fix Secure javax.websocket Client examples
    • πŸ”€ #4021 - Removing @deprecated methods / classes from jetty-9.4.x merge
    • #4017 - Consider adding demand API to HTTP/2.
    • #4008 - Fix quickstart
    • #3966 - Use addEventListener(EventListener listener) instead of bespoke listener methods
    • πŸ”§ #3959 - Server configuration for direct/heap ByteBuffers.
    • #3920 - Draft 1 for week 1.
    • #3873 - Javax Websocket Packaging
    • #3853 - only notify onError for local errors
    • #3848 - copy dependency for jetty-javax-websocket-api
    • πŸ’… #3847 - Checkstyle cleanup
    • #3844 - Deflater / Inflater Object Pool (Jetty-10)
    • #3819 - ensure abnormal close frame will hard close ws connection
    • #3816 - do not copy RSV bits to auto-fragmented frames
    • πŸ”¨ #3802 - WebSocket core - autobahn and MessageHandler refactor
    • 🚚 #3797 - Remove deprecated in Jetty 10.0.x
    • #3792 - store autobahn results as they are not stored automatically by junitPublisher
    • #3790 - XmlConfiguration Set Property
    • #3783 - jetty-10.0.x WebSocket core cleanup
    • #3779 - review of exposed classes in jetty-websocket-server
    • βœ… #3770 - use the default port of 0 for WebSocket tests
    • #3740 - Bootstrap websocket on HTTP/2
    • #3732 - rename maxIdleTime usage to idleTimeout for WebSockets
    • #3720 - clean up modules
    • #3703 - Cleanup webappconfiguration
    • πŸ›  #3702 - Some fixes for running cometd6 on jetty-10
    • #3686 - error CloseFrames skip frames in the FrameFlusher queue
    • πŸ”¨ #3660 - jetty-10 WebSocket configuration refactor
    • #3644 - Use jetty specific websocket API jar.
    • #3539 - Implement HTTP CONNECT for HTTP/2.
    • βœ… #3521 - flaky tests in jetty-websocket-tests ClientCloseTest
    • #3504 - implement Session.suspend() for jetty-10 jetty-websocket-api
    • #3478 - WebSocket Extension Negotiation
    • ⬆️ #3470 - websocket upgrade request valdiation
    • ⬆️ #3460 - jetty websocket upgrades without using websocket-servlet classes
    • πŸ—„ #3455 - Removing deprecated Extension classes in jetty-websocket-api
    • ⬆️ #3448 - upgrade jetty-websockets with WebSocketUpgradeFilter
    • βͺ #3439 - restore jetty websocket tests
    • πŸ”¨ #3435 - refactored HttpCompliance
    • ⚑️ #3432 - WebSocketChannel bug fixes, cleanup and javadoc updates for FrameHandler
    • #3430 - jetty.webapps.uri should be the parent of the webapp
    • πŸ—„ #3416 - Removing Deprecated Resource.getURL()
    • ⬆️ #3414 - add support for WebSocket UpgradeListeners in WebSocketClient
    • #3413 - WebSocket CoreSession Customizer
    • βœ… #3407 - websocket core test cleanup
    • βœ… #3403 - parameterized WebSocketCloseTest over TLS
    • #3401 - permessage-deflate continuation frame with RSV1 set
    • πŸ—„ #3398 - Removing deprecated methods and classes
    • #3390 - implement WebSocketConnection stats
    • #3384 - use add-exports instead of add-opens in javax WS-Server pom
    • #3383 - Add tracking of WebSocket Sessions to various WebSocket Container APIs
    • πŸ”§ #3381 - Adding configured Connection.Listeners to WebSocket Connections
    • βœ… #3366 - javax-websocket-server tests
    • #3365 - WebSocket Proxy
    • ⚑️ #3360 - Update PushCacheFilter to use Servlet 4.0 APIs.
    • #3357 - WebSocket HttpClientProvider
    • #3352 - Restructure jetty-unixsocket module.
    • #3342 - Review Jetty 10 module-info.java.
    • #3338 - Jetty 10 standalone cannot start on the module-path.
    • #3336 - Generalize EndPoint.onClose(Throwable) for WebSocket cases
    • πŸ›  #3335 - FrameFlusher and WebSocket close fixes
    • #3331 - sendError does not set reason.
    • #3313 - Dynamic selection of the transport to use based on ALPN on the client side.
    • ⬆️ #3310 - WebSocket UpgradeRequests and CompletableFutures
    • 🚚 #3309 - Remove deprecated session methods
    • ⚑️ #3299 - Update to apache jsp 9.0.14
    • βœ… #3294 - fix websocket new groupId in osgi tests
    • βœ… #3292 - Add autobahn profile to automatically run autobahn test suite in Jenkins
    • #3291 - async websocket onOpen, onError and onClose
    • #3289 - Correcting Jetty WebSocket API artifactIds
    • πŸ”¨ #3286 - WebSocketMapping Refactor
    • #3267 - ClientConnector abstraction.
    • #3262 - Improve WebSocket close handling
    • βœ… #3259 - javax-websocket-tests exception stacktraces
    • 🚚 #3255 - Remove FastCGI multiplexing.
    • βœ… #3237 - custom request log test failure
    • #3224 - Autobahn WebSocketServer failures in jetty 10
    • πŸ”¨ #3222 - Refactor WebSocket mapping
    • βœ… #3215 - Ensure MetaInfConfigurationTest is not disabled
    • #3211 - Lazy creation of WebSocketCoreClient
    • ⬆️ #3209 - upgrade logback and log4j-slf4j (new artifact log4j-slf4j18-impl) to support slf4j api 1.8
    • #3199 - NPE in WebSocketContainerInitializer for jetty10
    • #3198 - rename websocket directories, modules and artifacts
    • #3177 - fix argLine inheritance
    • βœ… #3172 - Adding both WebSocket tests to /test-integration/ to verify behavior that is causing problems from within OSGi.
    • πŸ”¨ #3169 - websocket module refactor
    • #3168 - Use Jetty specific Servlet API jar.
    • 0️⃣ #3160 - CustomRequestLog as default in jetty-10
    • βœ… #3120 - Adding module-info.java to non-tests Jetty modules
    • 0️⃣ #3063 - Preserve default-context-path for quickstart
    • #3055 - Break out WebSocket core features into new websocket-core components
    • 🚚 #3035 - Move jmh test 3014
    • πŸ”¨ #3029 - Http/Cookie/MultiPartFormData Compliance Refactor
    • #3017 - Moving HttpCompliance to HttpConfiguration
    • 🚚 #3016 - Move old MultiPart to jetty-http
    • 0️⃣ #3015 - Defaulting to non-LEGACY compliance modes
    • πŸ”§ #2987 - Configuration replacement algorithm
    • #2984 - JmxConfiguration JPMS ready
    • πŸ— #2973 - Build minimum requirement is now JDK 11
    • #2905 - fix groovy variable scope
    • 🚚 #2384 - remove checkGzExists from GzipHandler entirely
    • πŸ‘ #2105 - cleanup MultiException to better use suppressed
    • #2104 - open connectors before starting