RFC-77: Upgrades to Spring and Jakarta versions

RFCs are a way for Atlassian to share what we’re working on with our valued developer community.

It’s a document for building shared understanding of a topic. It expresses a technical solution, but can also communicate how it should be built or even document standards. The most important aspect of an RFC is that a written specification facilitates feedback and drives consensus. It’s not a tool for approving or committing to ideas, but more so a collaborative practice to shape an idea and to find serious flaws early.

Please respect our community guidelines: keep it welcoming and safe by commenting on the idea not the people (especially the author); keep it tidy by keeping on topic; empower the community by keeping comments constructive. Thanks!

Project summary

We’re upgrading Spring, Jakarta, and any other necessary dependencies to the latest stable version in all Data Center products: Jira Software 11, Jira Service Management 11, Confluence 10, Bitbucket 10, Bamboo 11, and a Crowd version to be released by the end of FY25.

Problem

Open Source Software (OSS) support for Spring 5.3.x, currently used in our Data Center products, has ended. To maintain high security standards, we’re updating to the supported 6.x line. Spring 6 is no longer compatible with the currently used Jakarta 8, requiring us to update the Jakarta version as well. This also means updating all the other libraries in our products that depend on Spring and Jakarta.

With this upgrade, we’re aiming to mitigate security risks by keeping dependencies supported and up to date. The update to Jakarta 10 represents a major shift in the Java EE world due to the namespace change from javax to jakarta. We see that the industry slowly focuses on the newer versions. We need to think about supportability in a 2+ years window. This update doesn’t just affect the libraries we’re working on now—by updating to the latest Jakarta 10, we’re also making it easier to update other dependencies in the future.

Solution

Spring

The Spring Framework provides dependency injection capabilities for apps and, together with the OSGi integration, it allows to share beans between them. As such, it’s one of the key elements of the Atlassian Plugin Framework.

We’ll upgrade to the latest Spring 6.2.x. We don’t plan to make any changes to the way Spring integrates with the Plugin Framework. However, some Spring concepts and behaviors have changed between versions. For a comprehensive description of changes, follow the official documentation:

Jakarta

Jakarta is actually a set of APIs related to each other. We aim to update to Jakarta EE Platform 10, specifically:

We won’t be making any changes to the Atlassian API unless they’re necessary because of the updates to the Jakarta API. There are also several API changes in Jakarta that may impact apps.

The plan assumes a replacement of the libraries. For example, as the Jakarta API changed the namespace, OSGi will export jakarta.* packages instead of javax.* for the APIs mentioned above.

Asks

While we’re happy to get any feedback on this RFC, we’re particularly hoping to get insights on:

  • Anything you’d like to see to make the migration easier.
  • Any hard blockers to migration you find.
10 Likes

We understand and support the need to update to the new versions, and we appreciate getting a heads-up through this RFC .

However, we expect that it will require quite some work to regain app compatibility. Therefore, what we would like to see, is

  • very early access to betas
  • enough time to work on the required changes before you publish a release

Thanks!

1 Like

Hi @metin

Our goal is to give all plugin developers as much time as possible. We are currently in progress of migrating our internal code. I expect we will start working with product teams on their migration within couple next weeks. I hope I will have more details soon.

In the meantime, is there anything else do you think would be useful to help you with migration and later support of those versions? I cannot promise anything, but if I know what would be useful, I can at least evaluate it internally :wink:

The best you can offer is a compatibility layer. :wink:

Other than that, I find it hard to foresee where the problems will pop up. Therefore, I asked for enough time to allow us to 1) find the problems 2) find the solutions for them.

Please give us a heads up if there’s hitherto undocumented scope creep (i.e. the changes we’re doing now unexpectedly also required us to make this cascading breaking change, which we forgot to add a CDAC post for).