Ignition 8.1 Jetty 12 Upgrade

Tomorrow's (4-24-2025) 8.1.49-SNAPSHOT early access build includes a major upgrade of Jetty - the third party library Ignition depends on for powering the Gateway's embedded web server.

The primary reason for the major upgrade is: Jetty v10 is end of life and will no longer receive critical bug fixes and security patches. This is at odds with our commitment for long term support of Ignition 8.1.

Performing a major upgrade of a core dependency such as Jetty is a major undertaking and not without risk. However, our development and QA team has already performed the upgrade early on in our 8.3 branch successfully, and we have learned many lessons from that effort which have been applied successfully in 8.1. We have also undergone a rigorous QA testing cycle in 8.1 to root out any issues early on before we were confident with the change.

Ideally, on upgrade to 8.1.49, you should notice no difference with this upgrade. Module authors should also notice no Ignition API changes, unless you also depend on Jetty APIs, in which case you will want to bump your module's Jetty dependency to v12.0.17.

Because this is such a major upgrade on a minor LTS version upgrade of Ignition, out of an abundance of caution, I am posting this message to encourage folks to try out the 8.1.49 Early Access build for yourselves. If you are a module author, make sure your module is compatible with the upgrade. Please post issues here if you notice anything.

My hope is that with our rigorous internal testing efforts and with an early warning in this forum to give folks plenty of time to raise red flags with this upgrade, by the time the final build of 8.1.49 is published, we can all be confident that Ignition's web server is up-to-date and secure for the LTS years ahead of us.

2 Likes

Will test. If my v8.3 conversions are a guide, I will have to offer v8.1.49+ module files for my Blob Server and my Image Streamer. (Both register servlets, and that requires the v10 APIs that were moved in v12.)

Thanks Phil. I'll note: in 8.1, we bumped the servlet spec from v3.1.0 to v4.0.1, but that should not cause a breaking API change, because we kept on the javax.servlet.* package, whereas in 8.3, we upgraded the servlet spec to v6.0.0 and also moved from the jaxax.servlet.* package to the jakarta.servlet.* package, which was a breaking API change in 8.3. This is important because the servlet API bleeds into the Ignition public API, whereas Jetty APIs are an implementation detail that does not bleed into Ignition's public APIs.

The location of the servlet package didn't trouble me. It was gaining access to the output stream to efficiently deliver big results that led to the moved Jetty API. I haven't figured out Jetty v12's handler architecture yet.

In your case, does the HttpServletResponse's output stream not work?

Thanks for the update, this does impact my Server Sent Events module.

Embr currently targets 8.1.33, but I will eventually change to target whatever becomes 8.1's final(ish) release.

I might just let the SSE module remain broken until then, unless someone complains :man_shrugging: My larger plans for the module entirely revolve around Event Streams, so support of the 8.1 version is not a priority.

1 Like

Ah, it won't be an issue for the Blob Server, after all, because it fires the one payload and done.

I do more in the Image Streamer to detect "closed", which the jetty api offers in the HttpOutputStream.