Za dzisiejszy tytuł to na YouTubie demonetyzacja byłaby raczej gwarantowana (jakbyśmy chociaż mieli jakąś monetyzacje), mimo że tak naprawdę nie mamy na myśli niczego zdrożnego, bo wejdziemy po prostu znowu w bebechy JVM. A oprócz tego – nowy Intellij Idea oraz Testcontainers.
1. Nowy IntelliJ na pomoc w okiełznaniu zależności
No to zacznijmy od JetBrains. Firma miała w tym roku trochę pod górkę, ale wyraźnie wraca do regularnego wypuszczania nowych funkcjonalności. Po kilku zapowiedziach dotyczących Kotlina, w zeszłym tygodniu otrzymaliśmy bowiem również kolejną edycję Intellij. Sugeruje mi ona trochę, że jednak wiele planów nieco się opóźniło, ponieważ nowe wydanie nie jest jakieś niezwykle bogate w nowości. Nie znaczy to jednak, że nie ma w nim niczego ciekawego.
Z pewnością gwiazdą wydania jest tutaj Dependency Analyzer. Dostarcza on informacji o wszystkich zależnościach Maven i Gradle używanych w projekcie, pomagając deweloperom wykrywać i rozwiązywać konflikty między nimi. Narzędzie pozwala na filtrowanie zduplikowanych zależności i pomaga w poprawieniu konfiguracji kompilacji. W kontekście dependencji ciekawe rzeczy przynosi też wersja Ultimate. Ta bowiem dzięki zintegrowanej z nową wersją IDE wtyczki Package Checker wykrywanie zależności Maven i Gradle, które są uważane za podatne na ataki, a także sugeruje dostępne poprawki. Zmian jest oczywiście więcej, jak choćby zmodernizowane centrum notyfikacji, generator nowego projektu czy też edytor Markdown. Oprócz tego – jak zwykle dużo innej drobnicy (min. dla Dockera i Kubernetesa) oraz obowiązkowe wsparcie dla nowych wersji języka – Java 18, Kotlin 1.6.20 itd.
Przy okazji kolejnej wersji Intellij, wspomnę również o nowej edycji scalowego plugina, który również jednak nie przynosi jakoś bardzo wiele. Lepsze wsparcie dla Scala 3, lepsze wykrywanie o co realnie chodziło użytkownikowi przy aliasowanych exportach, wykrywanie nieużywanych deklaracji…
A jak już przy IDE jesteśmy, to wczoraj ukazało się nowe wydanie plugina do VS Code dla Javy. Co przynosi? Jak łatwo się domyśleć – Javę 18, podpowiadanie nazw parametrów w funkcjach w sposób, który znacie pewnie z Intellij (propsuje!), ale także usprawniono współpracę z tak zwanym “serwerem języka”. Serwer języka to mózg stojący za rozumieniem, co dzieje się w waszym kodzie i wysyłającym do waszego IDE informacje o błędach składni/kompilacji, podpowiedzi bazujących na strukturze kodu i w zasadzie o wszystkim, co istotne się pod maską dzieje. VSCode używa rozwiązania dostarczonego przez Eclipse, a nowa wersja integracji ma lepiej informować programistę, jeżeli z samą integracją pójdzie coś nie tak i trzeba ją zrestartować lub zregenerować jej pliki wynikowe.
Źródła
Zainstaluj teraz i czytaj tylko dobre teksty!
2. Nowe szaty TestContainers
Ostatnio kiedy informowaliśmy o TestContainers, trochę podśmiechiwałem się z idei przenoszenia testów lokalnych opartych o kontenery do chmury…
…ale ogólnie z Testcontainers to my się bardzo lubimy, dlatego z uwagą śledzę pojawiające się u nich nowości. A tym razem nowością jest min. nowe logo, którą AtomicJar świętuje zarówno potężny spike adopcji jak i pojawienie się w sekcji Adopt ostatniego Technology Radaru.
Oczywiście jednak nowy Testcontainers to nie jedynie nowe logo, ale także trochę zmian pod spodem. Testcontainers 1.17.0 to bowiem wsparcie dla HiveMQ, znacznie lepszy performance. Twórcy chwalą się nawet 60% przyspieszenia w niektórych sytuacjach – jeśli uda się w realnych przypadkach użycia uzyskać choćby 30%, już da nam to spory zysk, biorąc pod uwagę jak wszyscy kochamy oczekiwanie na rezultat testów.
Ok, tak naprawdę trochę wykorzystuje tutaj ostatnie zapowiedzi, by podzielić się z Wami informacją, że Zalando (tak, to Zalando od butów, które równocześnie jest też jednym z fajniejszych jvm-owych e-commerce na świecie) wydało ostatnio bardzo dobry tekst o tym, jak u nich w firmie wygląda testowanie za pomocą Testcontainers. Nie ma w nim niczego strasznie rewolucyjnego, ale IMHO dobrze jest czasem zobaczyć, jak tego typu rozwiązania działają w firmach z sukcesami. Może się czymś zainspirujecie, mnie osobiście bardzo spodobało się zaproponowane przez nich użycie Shutdown Hooków – aczkolwiek właśnie wspomniany w poprzednim akapicie Testcontainer 1.17.0 powinien sprawić, że nie będą potrzebne, dzięki lepszemu automatycznemu cleanupowi.
Źródła
- New milestone, new look, new release, same Testcontainers! – AtomicJar, Inc.
- Functional tests with Testcontainers
Zainstaluj teraz i czytaj tylko dobre teksty!
3. Jak działa CRaC (i dlaczego tak dobrze?)
A na zakończenie, będzie trochę o projekcie CRaC (Coordinated Restore at Checkpoint, żeby Wam się brzydkie rzeczy nie kojarzyły), który udowadnia nam dwie rzeczy – że bycie Cloud Native jest w 2022 bardzo istotne, a twórcy Javy lubią redundancje. Jak bowiem inaczej wytłumaczyć fakt, że po raz kolejny próbują rozwiązać problem, który już raz ogarnęli za pomocą JDK 13 i Application Class Data Sharing
Dobra, ale czym ten CRaC jest? Stojący za nim Anton Kozlov z Azula uważa, że aplikacje javowe mogą uniknąć długiego uruchamiania i procesu “rozgrzewania”, zapisując pełny stan środowiska uruchomieniowego. Zapisany stan może być następnie używany do szybkiego uruchamiania konkretnej instancji – całość przypominać ma nieco, jak działa proces zapisu stanu w emulatorach gier. Dodatkowo, wiele instancji może wypączkować z takiego pojedynczego “savestate”. Oczywiście wiąże się z tym trochę problemów (samo środowisko uruchomieniowe może się zmienić, wspomniana wieloinstancjowość też jest wyzwaniem), dlatego sugeruje on “research” nad odpowiednimi API w ramach Javy, które mogłyby sobie ze wspomnianymi problemami poradzić i umożliwić wielość opcji, jeśli chodzi o miejsce, gdzie wspomniany stan można by było “zrzucać”. Projekt ma być szczególnie istotny w środowiskach chmurowych, gdzie długi rozruch jest istotnym wyzwaniem.
Dlaczego jednak w ogólę o tym piszę? Mimo, że o projekcie jest dosyć cicho od czasu jego zapowiedzi w lipcu 2021, to jednak pracę nad nim trwają sobie w tle, a w lutym ukazała się nawet nowa wersja buildu JDK 17 zawierająca jego wersję preview. Głównym motywatorem jest jednak fakt, że foojay.io opisało w bardzo przystępny sposób, jakie mechanizmy mają zostać wprowadzone do JVM w ramach projektu. Dodatkowo, autor opracowania, Gerrit Grunwald, przygotował też demo, które pozwoli Wam na zrozumienia zasady działania całości na realnym przykładzie. Jeżeli lubicie więc jazdę na krawędzi, to jest to zdecydowanie dobra okazja, żeby poeksperymentować z CRaCiem.