{"id":20653,"date":"2023-01-11T12:24:29","date_gmt":"2023-01-11T11:24:29","guid":{"rendered":"https:\/\/blog.trifork.com\/?p=20653"},"modified":"2023-07-17T14:47:00","modified_gmt":"2023-07-17T12:47:00","slug":"new-baselines-java-17-and-jakarta-ee","status":"publish","type":"post","link":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/","title":{"rendered":"Spring Update #1 &#8211; New Baselines: Java 17 and Jakarta EE"},"content":{"rendered":"\n<p>In the last two months of 2022, we saw many new releases from the various Spring teams, most notably the new generations of the Core Spring Framework and Spring Boot, with versions 6 &amp; 3, respectively.<br><\/p>\n\n\n\n<p>In this 4 part blog series, I&#8217;ll provide an overview of the most important new features introduced and explain what&#8217;s involved when migrating existing applications to these new versions.<br><\/p>\n\n\n\n<p>First, we&#8217;ll introduce and explore the new baselines of Java and Jakarta EE. Let&#8217;s dive in.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>New Baselines: Java 17 and Jakarta EE<\/strong><\/h3>\n\n\n\n<p>While publishing two significant releases, the Spring development teams have taken the opportunity to raise some of the minimum requirements. Java 17 has become the new baseline for the supported language version, and the frameworks have switched to the Jakarta EE namespaces.<br><\/p>\n\n\n\n<p>Spring has supported Java 17 for quite some time already, so if your current code base is still using an older version then upgrading to Java 17 is a sensible first step. Spring 6 supports versions 18 and 19 as well.&nbsp;<br><\/p>\n\n\n\n<p>Adopting Jakarta EE means that servlet containers, JPA providers, Bean Validation implementations etc. all need to use the \u201cjakarta\u201d packages, where previously the \u201cjavax\u201d packages were used. Oracle has transferred custody of the Java EE specifications to the Eclipse Foundation, but in doing so insisted on changing the usages of the javax namespace as that\u2019s limited to Oracle which holds the rights to the Java trademark. With that, Jakarta EE specifications are incompatible with the previous Java EE versions in terms of packages. Apart from that, no other breaking changes were introduced in the initial Jakarta EE releases.<\/p>\n\n\n\n<p>Spring Boot 3 supports both Jakarta EE 9 and 10. The former only really has the package change, the latter actually contains new functionality as offered by e.g. Servlet 6.0 and JPA 3.1.&nbsp;<br><\/p>\n\n\n\n<p>The dependencies provided by default by Boot 3 have all been upgraded to recent Jakarta-EE compatible ones. Examples are Tomcat and Hibernate ORM &amp; Bean Validator. To start using Hibernate 6 you will probably need to make some changes to existing applications; JBoss has published a <a rel=\"noreferrer noopener\" aria-label=\"migration guide (opens in a new tab)\" href=\"https:\/\/docs.jboss.org\/hibernate\/orm\/6.0\/migration-guide\/migration-guide.html\" target=\"_blank\">migration guide<\/a><\/p>\n\n\n\n<p>Your own code will need to start using the new namespaces for its dependencies as well, so you\u2019ll need to perform some migration. This mostly consists of a straightforward search &amp; replace: your IDE or dedicated migration tools can assist you with that. Keep in mind that you\u2019ll need to update your stated dependencies as well, so where you were previously using <tt>javax.servlet:javax.servlet-api<\/tt> coordinates, you\u2019d now use <tt>jakarta.servlet:jakarta.servlet-api<\/tt>, for example.<\/p>\n\n\n\n<p>For suppliers providing implementations of Enterprise Java standards it\u2019s undoable to keep on supporting releases of their software for both (incompatible) versions of the standards, so it makes a lot of sense that Spring is choosing to switch to Jakarta EE with this new generation of its frameworks.<\/p>\n\n\n\n<p>This does mean that <em>everything<\/em> that you\u2019re using needs to be Jakarta-EE compatible: also think about tooling like the OpenAPI Generator here, which generates code that uses bean validation annotations! The \u201cspring\u201d generator of this tool currently provides a <a rel=\"noreferrer noopener\" aria-label=\"\u201cuseSpringBoot3\u201d option (opens in a new tab)\" href=\"https:\/\/github.com\/OpenAPITools\/openapi-generator\/blob\/master\/docs\/generators\/spring.md#config-options\" target=\"_blank\">\u201cuseSpringBoot3\u201d option<\/a>, but not all your tooling might already provide Jakarta-EE support: check this when you\u2019re thinking about upgrading<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Final Remarks<\/strong><br><\/h3>\n\n\n\n<p>Spring Framework 6 and Spring Boot 3 are significant releases with many changes and new features. Although upgrading existing applications requires effort, the process is usually manageable and straightforward. You can make a smooth transition if you ensure that all your dependencies are compatible with Jakarta EE. In the proceeding articles in this series we&#8217;ll discuss the benefits that these new versions will bring.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the last two months of 2022, we saw many new releases from the various Spring teams, most notably the new generations of the Core Spring Framework and Spring Boot, with versions 6 &amp; 3, respectively. In this 4 part blog series, I&#8217;ll provide an overview of the most important new features introduced and explain [&hellip;]<\/p>\n","protected":false},"author":62,"featured_media":20690,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[10,94],"tags":[],"class_list":["post-20653","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development","category-spring"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spring Update #1 - New Baselines: Java 17 and Jakarta EE - Trifork Blog<\/title>\n<meta name=\"description\" content=\"In this article, I explore the new baselines of Java 17 and Jakarta EE introduced at the end of 2022 with the release of Spring Framework 6 &amp; Spring Boot 3.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Update #1 - New Baselines: Java 17 and Jakarta EE - Trifork Blog\" \/>\n<meta property=\"og:description\" content=\"In this article, I explore the new baselines of Java 17 and Jakarta EE introduced at the end of 2022 with the release of Spring Framework 6 &amp; Spring Boot 3.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/\" \/>\n<meta property=\"og:site_name\" content=\"Trifork Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-11T11:24:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-17T12:47:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2023\/01\/Nurture-Email-Trifork-Academy-Example-5.png\" \/>\n\t<meta property=\"og:image:width\" content=\"751\" \/>\n\t<meta property=\"og:image:height\" content=\"230\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Joris Kuipers\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Joris Kuipers\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/\",\"url\":\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/\",\"name\":\"Spring Update #1 - New Baselines: Java 17 and Jakarta EE - Trifork Blog\",\"isPartOf\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2023\/01\/Nurture-Email-Trifork-Academy-Example-5.png\",\"datePublished\":\"2023-01-11T11:24:29+00:00\",\"dateModified\":\"2023-07-17T12:47:00+00:00\",\"author\":{\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/265bd41e503f7176742258a927de598b\"},\"description\":\"In this article, I explore the new baselines of Java 17 and Jakarta EE introduced at the end of 2022 with the release of Spring Framework 6 & Spring Boot 3.\",\"breadcrumb\":{\"@id\":\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#primaryimage\",\"url\":\"https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2023\/01\/Nurture-Email-Trifork-Academy-Example-5.png\",\"contentUrl\":\"https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2023\/01\/Nurture-Email-Trifork-Academy-Example-5.png\",\"width\":751,\"height\":230},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/trifork.nl\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spring Update #1 &#8211; New Baselines: Java 17 and Jakarta EE\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/trifork.nl\/blog\/#website\",\"url\":\"https:\/\/trifork.nl\/blog\/\",\"name\":\"Trifork Blog\",\"description\":\"Keep updated on the technical solutions Trifork is working on!\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/trifork.nl\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/265bd41e503f7176742258a927de598b\",\"name\":\"Joris Kuipers\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/trifork.nl\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/9ab8da0d60582bad84342d4602d23dbd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/9ab8da0d60582bad84342d4602d23dbd?s=96&d=mm&r=g\",\"caption\":\"Joris Kuipers\"},\"sameAs\":[\"http:\/\/www.trifork.nl\"],\"url\":\"https:\/\/trifork.nl\/blog\/author\/jorisk\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Update #1 - New Baselines: Java 17 and Jakarta EE - Trifork Blog","description":"In this article, I explore the new baselines of Java 17 and Jakarta EE introduced at the end of 2022 with the release of Spring Framework 6 & Spring Boot 3.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/","og_locale":"en_US","og_type":"article","og_title":"Spring Update #1 - New Baselines: Java 17 and Jakarta EE - Trifork Blog","og_description":"In this article, I explore the new baselines of Java 17 and Jakarta EE introduced at the end of 2022 with the release of Spring Framework 6 & Spring Boot 3.","og_url":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/","og_site_name":"Trifork Blog","article_published_time":"2023-01-11T11:24:29+00:00","article_modified_time":"2023-07-17T12:47:00+00:00","og_image":[{"width":751,"height":230,"url":"https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2023\/01\/Nurture-Email-Trifork-Academy-Example-5.png","type":"image\/png"}],"author":"Joris Kuipers","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Joris Kuipers","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/","url":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/","name":"Spring Update #1 - New Baselines: Java 17 and Jakarta EE - Trifork Blog","isPartOf":{"@id":"https:\/\/trifork.nl\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#primaryimage"},"image":{"@id":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#primaryimage"},"thumbnailUrl":"https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2023\/01\/Nurture-Email-Trifork-Academy-Example-5.png","datePublished":"2023-01-11T11:24:29+00:00","dateModified":"2023-07-17T12:47:00+00:00","author":{"@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/265bd41e503f7176742258a927de598b"},"description":"In this article, I explore the new baselines of Java 17 and Jakarta EE introduced at the end of 2022 with the release of Spring Framework 6 & Spring Boot 3.","breadcrumb":{"@id":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#primaryimage","url":"https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2023\/01\/Nurture-Email-Trifork-Academy-Example-5.png","contentUrl":"https:\/\/trifork.nl\/blog\/wp-content\/uploads\/sites\/3\/2023\/01\/Nurture-Email-Trifork-Academy-Example-5.png","width":751,"height":230},{"@type":"BreadcrumbList","@id":"https:\/\/trifork.nl\/blog\/new-baselines-java-17-and-jakarta-ee\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/trifork.nl\/blog\/"},{"@type":"ListItem","position":2,"name":"Spring Update #1 &#8211; New Baselines: Java 17 and Jakarta EE"}]},{"@type":"WebSite","@id":"https:\/\/trifork.nl\/blog\/#website","url":"https:\/\/trifork.nl\/blog\/","name":"Trifork Blog","description":"Keep updated on the technical solutions Trifork is working on!","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/trifork.nl\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/265bd41e503f7176742258a927de598b","name":"Joris Kuipers","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/trifork.nl\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/9ab8da0d60582bad84342d4602d23dbd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/9ab8da0d60582bad84342d4602d23dbd?s=96&d=mm&r=g","caption":"Joris Kuipers"},"sameAs":["http:\/\/www.trifork.nl"],"url":"https:\/\/trifork.nl\/blog\/author\/jorisk\/"}]}},"_links":{"self":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/20653","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/users\/62"}],"replies":[{"embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/comments?post=20653"}],"version-history":[{"count":1,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/20653\/revisions"}],"predecessor-version":[{"id":20802,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/posts\/20653\/revisions\/20802"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/media\/20690"}],"wp:attachment":[{"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/media?parent=20653"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/categories?post=20653"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/trifork.nl\/blog\/wp-json\/wp\/v2\/tags?post=20653"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}