Skip to content

Support newer Jetty versions #204

Description

@wborn

Jetty 9.4, 10 and 11 are EOL, so it would be useful for jUPnP to support a currently maintained Jetty version.

There is a range of Jetty options nowadays. Jetty 12 supports multiple EE environments and can therefore be used with both the legacy javax.servlet namespace and the newer jakarta.servlet namespace.

Jetty version Servlet namespace(s) Java version Pax Web version Karaf version
12.1.x javax.servlet or jakarta.servlet 17+ 10.1.x (javax), 11.1.x (jakarta) 4.5.x WIP
12.0.x javax.servlet or jakarta.servlet 17+ 10.0.x (javax), 11.0.x (jakarta) -
11.0.x jakarta.servlet 11+ - -
10.0.x javax.servlet 11+ 9.0.x -
9.4.x javax.servlet 8+ 8.0.x 4.4.x

The current jUPnP implementation still targets Java 11 and uses Jetty 9.4 with Servlet API 3.1.

The OSGi ecosystem has progressed since this issue was opened:

  • Pax Web 10 has been released and provides Jetty 12 support while retaining the javax.servlet namespace.
  • Pax Web 11 provides the corresponding Jetty 12 implementation using the jakarta.servlet namespace.
  • The Pax Web Jakarta EE 10 work item has been completed.
  • The latest released Apache Karaf 4.4.x line still uses Pax Web 8, Jetty 9.4 and javax.servlet. Karaf 4.4.11 uses Pax Web 8.0.35 and Jetty 9.4.58.
  • Karaf 4.5 is currently under development as 4.5.0-SNAPSHOT. It is moving directly to Pax Web 11.1.x, Jetty 12.1 and Jakarta Servlet API 6.1.

The current Karaf migration path therefore looks approximately like this:

Karaf 4.4.x
  Java 11+
  Pax Web 8
  Jetty 9.4
  javax.servlet

Karaf 4.5.x (work in progress)
  Java 17+ or possibly Java 21+
  Pax Web 11.1.x
  Jetty 12.1
  jakarta.servlet

The final minimum Java version for Karaf 4.5 does not appear to be settled yet. Jetty 12.1 requires at least Java 17, while there is also ongoing work proposing Java 21 as the Karaf 4.5 baseline.

Karaf is therefore effectively skipping Pax Web 10 and moving directly from Pax Web 8 with javax.servlet to Pax Web 11 with jakarta.servlet.

This means that simply upgrading the existing Jetty dependencies would not provide compatibility with both Karaf generations. Supporting current and future Karaf versions would also require supporting both Servlet namespaces.

It might therefore be useful to split the Jetty transport into separate modules, for example:

  • a Java 11 / Jetty 9.4 / javax.servlet transport compatible with Karaf 4.4;
  • a Java 17+ / Jetty 12 / jakarta.servlet transport compatible with the future Karaf 4.5 stack;
  • optionally, a Java 17+ / Jetty 12 / javax.servlet transport for Pax Web 10 and non-Karaf users.

Each module could then properly define its version-specific dependencies. This would also prevent issues such as #157 and #288 while continuing to avoid implementation dependencies in the Core module.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions