Kurs Java

Spring Framework 6 - Pierwszy raport!

To już za kilka miesięcy! Dokładnie w czwartym kwartale tego roku planowane są finalne wersje Spring Framework 6 i Spring Boot 3. Z tej okazji już dziś rozpoczynamy cykl artykułów informujących o tym, czego można spodziewać się w najnowszej odsłonie platformy. Nasza raport numer jeden dotyczy tego, co wydarzyło się w grudniu, a konkretnie co znalazło się w wersji M1 (milestone release) nowego Springa.
Appa Notka. Milestone release jest istotnym punktem w ramach procesu przygotowywania finalnej wersji produktu. Na tym etapie nie ma jeszcze wszystkich planowanych funkcji. Istnieją jedynie pierwsze rozwiązania, które zostają poddane testom, mającym na celu upewnić twórców, że nadają się one do wdrożenia w finalnej wersji.

Nowa Jakarta EE

Niezwykle istotną zmianą w kontekście nowego Springa jest przejście na Jakartę EE 9 (do 2018 roku znana jako Java EE). Podobnie jak Java EE, Jakarta EE to zbiór specyfikacji, a więc pewnego rodzaju projektów różnych rozwiązań systemowych, takich jak np. komunikacja sieciowa, bezpieczeństwo, czy współpraca z bazami danych (np. transakcje).
Taki projekt (specyfikacja) jest złożony z zestawu klas i interfejsów wraz z dokumentacją opisującą ich działanie. Implementacja takiej specyfikacji może być wykonana później przez dowolnego dostawcę. Dostawca realizuje projekt względem własnych potrzeb, ale istnienie odgórnego projektu zapewnia podstawową zgodność pomiędzy tym, co przygotują różni dostawcy. Jedną z najbardziej znanych specyfikacji jest Jakarta Persistence (dawniej JPA Persistence), która definiuje interfejsy i klasy abstrakcje dla mapowania obiektowo relacyjnego. Implementację dostarcza na przykład Hibernate. Choć istnieją inne, na przykład EclipseLink czy Apache OpenJPA.

Gdzie się zgubiła Java EE?

Eclipse Foundation musiała prawnie zmienić nazwę Java EE! Powodem było to, że Oracle ma prawa do marki Java. Wybranie nowej marki odbyło się z udziałem społeczności. Najwięcej głosów zdobyła właśnie Jakarta. Co ciekawe, Eclipse Foundation nie może tworzyć żadnych nowych pakietów Java przy użyciu przestrzeni nazw javax, ale może tworzyć nowe klasy i podklasy w ramach już istniejących.

Zmiany w Core Container

W 2020 roku w Jakarta EE dokonano zmiany namespace, co skutkuje pojawieniem się nowych importów. Zamiast javax.* teraz mamy jakarta.*. Ma to swoje konsekwencje dla Core Container-a Springa. Adnotacja @Inject, która do tej pory znajdowała się w pakiecie javax.inject, teraz jest dostępna w jakarta.inject. Adnotacje takie jak @PostConstruct i @PreDestroy można znaleźć w jakarta.annotation. Na obecnym etapie Spring wykrywa również ich odpowiedniki w javax, ale w finalnej wersji prawdopodobnie nie będą one dostępne.

Przechowywanie danych i transakcje

Ze względu na Jakarta EE, należy pamiętać o aktualizacji Hibernate ORM do wersji 5.6.x z artefaktem hibernate-core-jakarta, a także przełączeniu importów javax.persistence na jakarta.persistence. W związku z tymi zmianami obowiązującą wersją walidatorów Hibernate staje się Hibernate Validator to 7.0.x z importami jakarta.validation.

Zmiany dotyczące aplikacji webowych

Tutaj kolejna porcja zmian. Zatem uporządkujmy to nieco:
  • Migracja na Jakarta EE wymaga aktualizacji wersji następujących narzędzi: Tomcat 10, Jetty 11 lub Undertow 2.2.14 Pojawia się również nowy artefakt undertow-servlet-jakarta, co skutkuje potrzebą zmiany importów z javax.servlet na jakarta.servlet.
  • Kilka przestarzałych integracji opartych na serwletach zostało usuniętych: m.in. Commons FileUpload i Tiles, a także obsługa FreeMarker JSP. Do przesyłania plików wieloczęściowych i regularnych widoków szablonów FreeMarker zaleca się używać StandardServletMultipartResolver.
  • I teraz to, co powinno zwrócić naszą szczególną uwagę...zaleca się również tworzenie systemów w architekturze opartej o REST.
  • Spring MVC i Spring WebFlux nie wykrywają już kontrolerów wyłącznie na podstawie adnotacji @RequestMapping na poziomie typu. Oznacza to, że proxy AOP oparte na interfejsie i operujące na kontrolerach webowych, nie będzie już więcej działać. Trzeba włączyć proxy oparte na klasach dla takich kontrolerów, w przeciwnym razie interfejs musi mieć również adnotację @Controller.
    Appa Notka. To jest dopiero ciekawe. Zgodnie z tym, co napisaliśmy wczoraj na naszej grupie, obecnie Spring pozwala na zmianę adnotacji @Controller lub @RestController na inny stereotyp, np. @Repository i taki kontroler nadal działa, tzn. przyjmuje i wysyła requesty! Wymagane jest oczywiście dodanie adnotacji typu @RequestMapping.

    Jeden z kontrybutorów Springa Rossen Stoyanchev już 6 października zeszłego roku zaznaczył, że zespół zajmie się tym, aby w Spring 6 samo istnienie adnotacji @RequestMapping nie było wystarczające i wymagane będzie dodanie adnotacji @Controller.
  • HttpMethod ...stało się klasą, czyli nie jest już typem wyliczeniowym. Chociaż zachowano publiczny interfejs API, może być konieczna pewna migracja (tj. zmiana z EnumSet<HttpMethod> na Set<HttpMethod>).
Dołącz do grupy, w której znajdziesz ciekawe posty oraz poznasz odpowiedzi na swoje pytania!
Grupa Portalu Javappa
  • Regularnie publikowane posty dotyczące, Springa i Hibernate'a oraz samej Javy.
  • Możliwość zadawania pytań osobom tworzącym społeczność budowaną wokół tych samych zainteresowań
  • Bezpośredni kontakt z autorem portalu i kursów Javappa!
  • Wymiana doświadczeń między członkami grupy
  • Przyjazna atmosfera w zamkniętej grupie

Podsumowanie

No to dzieje się! Migracja do Jakarty wymuszająca zmiany w kodzie, promowanie systemów opartych o REST oraz zmiany wersji kontenerów webowych, a to dopiero początek zmian. Pamiętajmy również, że konieczny jest upgrade Javy do wersji 17, o czym pisaliśmy już w grudniu zeszłego roku.

Dla nowych projektów są to dobre wiadomości, gorzej z tymi projektami, które już istnieją i są naprawdę rozbudowane. Wygląda na to, że będzie trzeba poświęcić trochę czasu na upgrade'y i późniejsze testy (o zgrozo! przecież my też musimy aktualizować naszą aplikację webową!). Cóż...i tak niecierpliwie czekamy na kolejne informacje o tym, co nas czeka już za kilka miesięcy, gdy Spring 6 GA ujrzy światło dzienne.
Autorzy: Jarek Klimas, Patrycja Klimas
Data: 18 stycznia 2022
Labele:Backend, Poziom średniozaawansowany, Java Linki:
Spring Framework 6.0 M1 released
JAKARTA EE
java-enterprise-evolution
Masz swoje przemyślenia na temat artykułu? Podziel się nimi!
Masz pytanie odnośnie zagadnienia omawianego w artykule?
Coś, co napisaliśmy, nie zaspokoiło Twojego głodu wiedzy?
Daj nam znać co myślisz i skomentuj artykuł na facebooku!

Stale się rozwijamy, a więc bądź na bieżąco!
Na ten adres będziemy przesyłać informacje o ważniejszych aktualizacjach, a także o nowych materiałach pojawiających się na stronie.
Polub nas na Facebooku:
Nasi partnerzy: stackshare
Javappa to również profesjonalne usługi programistyczne oparte o technologie JAVA. Jeśli chesz nawiązać z nami kontakt w celu uzyskania doradztwa bądź stworzenia aplikacji webowej powinieneś poznać nasze doświadczenia.
Kliknij O nas .


Pozycjonowanie stron: Grupa TENSE