Hi,

The work you mention Carsten was done as part of milestone 1 (“Upgrade to Jakarta Servlet API 5.x”) of https://issues.apache.org/jira/browse/FELIX-6612 <https://issues.apache.org/jira/browse/FELIX-6612>, where milestone 2 was “Upgrade to Jakarta Servlet API 6.x” (https://github.com/apache/felix-dev/tree/jakarta-servlet-6 <https://github.com/apache/felix-dev/tree/jakarta-servlet-6>).

For more details, kindly please refer to comment just posted in https://issues.apache.org/jira/browse/FELIX-6612 <https://issues.apache.org/jira/browse/FELIX-6612> , i.e. https://issues.apache.org/jira/browse/FELIX-6612?focusedCommentId=17759121&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17759121 <https://issues.apache.org/jira/browse/FELIX-6612?focusedCommentId=17759121&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17759121>

Regards,

--
  Michael H. Siemaszko
  Telegram: mhsiemaszko
  Email:mhs@into.software,
         mhsiemas...@7thraylabs.com
  WWW:http://ideas.into.software/
  GitHub:https://github.com/ideas-into-software/
  LinkedIn:http://www.linkedin.com/in/mhsiemaszko/
  Twitter:https://twitter.com/IntoSoftware/


On 8/24/23 08:06, Carsten Ziegeler wrote:
Hi

some of our released modules are still based on Servlet API 3. Starting with version 5 of the Servlet API, the packages have been renamed from javax.servlet to jakarta.servlet and with version 6 of the API, deprecated methods have been removed.

This means that a module compiled for Servlet API 3 does not run ootb with Servlet API 5. And a module compiled for Servlet API 5 might not run ootb with Servlet API 6.

For users of our modules we have to provide a way forward to allow them to leverage newer Servlet API versions - but without loosing our user base or making it unnecessarily hard for them. We have a large user base out there which is still on Servlet API 3.

This is how I think a path forward can look like:

For our http server implementation (http jetty and http bridge), we have the 4.x branch - it supports Servlet API 3, OSGi HTTP Service and OSGi HTTP Whiteboard 1.x. We'll continue to provide fixes for this branch. However this branch is based on Eclipse Jetty 9.4 and the Jetty project recommends to update to newer Jetty versions.

For users who want to leverage Servlet API, we have http jetty and http bridge 5.x on our main branch. This is based on Jetty 11. Our implementation on the main branch supports Servlet API 3, Servlet API 5, OSGi HTTP Service and OSGi HTTP Whiteboard 1.x and 2.x. This allows our users to run modules using older servlet APIs with modules using newer Servlet APIs in parallel - without a need to migrate their code. We should encourage our users to move to this version - which should be a drop-in replacement for most users. Only users who also leverage Jetty API of 9.x might need to update their code to Jetty API 11.x.

Most of the other modules in Apache Felix around servlets are the webconsole and various webconsole plugins. Currently the webconsole uses Servlet API 3 and the OSGi HTTP Service. With the next release of the webconsole, we will move to the OSGi HTTP Whiteboard 1.x away from the outdated OSGi HTTP Service. In addition the webconsole will optionally support *plugins* using the Servlet API 5. This gives a migration path for all plugins while still allowing all of this to run in a Servlet API 3 container.

With that in place, we can migrate our webconsole plugins to Servlet API 5. And we already started with this in our code base.

Once we have all plugins migrated, we can switch the webconsole to be based on Servlet API 5, OSGi HTTP Whiteboard 2.x and then optionally support plugins using Servlet API 3. With that all our code should be on Servlet API 5 - but all existing plugins regardless if they use Servlet API 3 or 5 should still work in the webconsole.

The final piece is Servlet API 6 - I think for the webconsole and the plugins, we can make them work with Servlet API 5 and Servlet API 6 by basing them on Servlet API 5 and avoiding the removed methods. This way we don't need to maintain any branches for all of that code.

But for the http server implementations (http base and http jetty) this is not possible. We already have a branch for those leveraging Jetty 12 which supports Servlet API 6. However, this version does not support any earlier Servlet API. While it is good to get this work started, I think the first hill we have to climb is to get all our code to use Servlet API 5 and take our users with us. Once we are there we can look down on the road ahead to Servlet API 6 as we will have a much clearer view by then.

Regards
Carsten

Reply via email to