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!
-
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 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!