{"id":13547,"date":"2023-01-05T12:02:33","date_gmt":"2023-01-05T11:02:33","guid":{"rendered":"https:\/\/vived.io\/?p=13547"},"modified":"2023-01-05T16:12:41","modified_gmt":"2023-01-05T15:12:41","slug":"wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/","title":{"rendered":"Wszystko,  co mogli\u015bcie przegapi\u0107 w Javie w 2022  &#8211; JVM Weekly #119"},"content":{"rendered":"\n<h2 id=\"1-rok-w-ktorym-graalvm-stal-sie-rzecza\" data-num=1>1. Rok, w kt\u00f3rym GraalVM sta\u0142 si\u0119 &#8222;rzecz\u0105&#8221;<\/h2>\n\n\n\n<p>Je\u017celi kto\u015b kaza\u0142by mi wybra\u0107, co moim zdaniem by\u0142o najwi\u0119kszym wydarzeniem w 2022 roku dla JVM, wskaza\u0142bym wszystko to, co dzia\u0142o si\u0119 w \u015bwiecie GraalVM. Mijaj\u0105cy rok bardzo rozja\u015bni\u0142 bowiem miejsce, jakie zajmuje GraalVM w ekosystemie Javy.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/image-27.png\" alt=\"\" width=\"489\" height=\"326\"\/><\/figure><\/div>\n\n\n<p>Przez lata tym, co najbardziej blokowa\u0142o adopcj\u0119 GraalVM, by\u0142 bowiem jego niejasny model licencyjny. O ile projekt alternatywnej dla JVM, uniwersalnej maszyny wirtualnej (jednej by wszystkimi rz\u0105dzi\u0107 \ud83d\udc8d) zawsze mocno powi\u0105zany by\u0142 z JDK, o tyle w praktyce relacja mi\u0119dzy t\u0105 dw\u00f3jk\u0105 nigdy nie by\u0142a klarowna. W inny spos\u00f3b si\u0119 go rozwija\u0142o, inaczej by\u0142 dystrybuowany, ale co najwa\u017cniejsze \u2013 opiera\u0142 si\u0119 na zupe\u0142nie innej licencji ni\u017c OpenJDK. Zar\u00f3wno wydanie spo\u0142eczno\u015bciowe (GraalVM Community Edition), jak i korporacyjne (GraalVM Enterprise Edition) pozostawa\u0142y w\u0142asno\u015bci\u0105 Oracle.<\/p>\n\n\n\n<p>Podczas JavaOne 2022 og\u0142oszono za\u015b, \u017ce Oracle oddaje GraalVM Community Edition w r\u0119ce spo\u0142eczno\u015bci i stanie si\u0119 nareszcie cz\u0119\u015bci\u0105 OpenJDK (Enterprise Edition pozostanie pod star\u0105 licencj\u0105). Jak du\u017ca jest to zmiana dla GraalVM, ale r\u00f3wnie\u017c Project Leyden i reszty ekosystemu JVM opisywa\u0142em kiedy\u015b w <a href=\"https:\/\/vived.io\/how-committing-graalvm-to-openjdk-changes-the-rules-for-project-leyden-jvm-weekly-110\/\">d\u0142u\u017cszym tek\u015bcie<\/a>. TLDR: temat kompilacji AoT w Javie wreszcie zaczyna po lat pewnego miotania si\u0119 nabiera\u0107 porz\u0105dku.<\/p>\n\n\n\n<p>Dodatkowo, wiemy ju\u017c, pod jak\u0105 &#8222;parasolk\u0105&#8221; ca\u0142e te przenosiny przebiega\u0107. GraalVM CE jest szerszym ekosystemem, a tylko cz\u0119\u015b\u0107 dotycz\u0105ca Javy b\u0119dzie migrowana do JDK. Dlatego do zaprojektowania i przeprowadzenia ca\u0142o\u015bci powo\u0142ano specjaln\u0105 inicjatyw\u0119 \u2013 projekt Galahad. Pierwszym krokiem b\u0119dzie wprowadzenie JDK drugiego (a w\u0142a\u015bciwie trzeciego) kompilatora JIT. Wiadomo te\u017c ju\u017c, \u017ce ca\u0142y GraalVM zmieni sw\u00f3j cykl wydawniczy tak, by zsynchronizowa\u0107 si\u0119 z JDK.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/7c6.jpg\" alt=\"\" width=\"512\" height=\"288\"\/><figcaption class=\"wp-element-caption\">Chyl\u0119 czo\u0142a przed nazw\u0105. Galahad to rycerz Kr\u00f3la Artura, kt\u00f3ry dostarczy\u0142 Graala do Camelotu. Sprawi\u0142a ona, \u017ce cieplutko mi si\u0119 na serduszku zrobi\u0142o mimo \u015bniegu naoko\u0142o.<\/figcaption><\/figure><\/div>\n\n\n<p>Poza zmianami organizacyjno\/licencyjnymi, du\u017ce nowo\u015bci pojawi\u0142y si\u0119 w samej platformie. Poza ci\u0105g\u0142\u0105 prac\u0105 nad performance i wsparciem nowych \u015brodowisk uruchomieniowych (min. procesor\u00f3w M1), zabrano si\u0119 za modularyzacj\u0119 platformy. Do tej pory niezale\u017cnie od tego, kt\u00f3ry z wielu j\u0119zyk\u00f3w wspieranych przez GraalVM by\u0142 przez nas u\u017cywany (a pewnie w 90% przypadk\u00f3w jest to jednak Java), bazowy obraz zawiera\u0142 pliki niezb\u0119dne do uruchomienia np. JavaScript czy LLVM. Z drugiej strony, taki Python czy Ruby musia\u0142y by\u0107 ju\u017c bezpo\u015brednio doinstalowywane. Sytuacja zosta\u0142a posprz\u0105tana w 2022 i teraz ka\u017cdy z dodatkowych modu\u0142\u00f3w musi by\u0107 doinstalowywany \u2013 \u201ego\u0142y\u201d GraalVM wspiera wy\u0142\u0105cznie Jav\u0119 (co pewnie bardzo u\u0142atwia prac\u0119 zespo\u0142u odpowiedzialnego za Galahada). Zalet\u0105 tego rozwi\u0105zania jest to, \u017ce uda\u0142o si\u0119 mocno zredukowa\u0107 bazowy rozmiar obrazu, kosztem kilku dodatkowych komend dla programist\u00f3w LLVM czy JS. Dla wi\u0119kszego dobra.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/hot-fuzz.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Reakcja programist\u00f3w JavaScript na zapowiedzi GraalVM<\/figcaption><\/figure><\/div>\n\n\n<p>GraalVM AD 2022 to te\u017c lepsza obs\u0142uga bibliotek zewn\u0119trznych. Jako, \u017ce GraalVM tworzy statyczny obraz zawieraj\u0105cy pre-kompilowane klasy, na etapie tworzenia artefaktu wynikowego zmuszony jest do wyczyszczenia tych klas, kt\u00f3re nie s\u0105 u\u017cywane z poziomu wej\u015bcia aplikacji. O ile brzmi to rozs\u0105dnie, to w Javie do\u015b\u0107 mocno rozpanoszy\u0142 si\u0119 mechanizm refleksji, kt\u00f3ry sprawia, \u017ce aplikacja mo\u017ce odnie\u015b\u0107 si\u0119 do arbitralnie dowolnej klasy dost\u0119pnej na classpath.<\/p>\n\n\n\n<p>A co je\u015bli takowego classpath nie ma? Szcz\u0119\u015bliwie, mo\u017cemy przekaza\u0107 GraalVM list\u0119 klas, kt\u00f3rych nie powinien czy\u015bci\u0107 (programi\u015bci Androida znaj\u0105 ten mechanizm pewnie z ProGuarda). W wypadku bibliotek third-party prowadzi\u0142o to jednak do duplikacji pracy, gdy ka\u017cdy projekt musia\u0142 w zasadzie robi\u0107 to samodzielnie. Dlatego w 2022 pojawi\u0142o si\u0119 <strong><a href=\"https:\/\/www.graalvm.org\/22.2\/reference-manual\/native-image\/metadata\/\">GraalVM Reachability Metadata Repository<\/a><\/strong>, spo\u0142eczno\u015bciowe centrum pozwalaj\u0105ce dzieli\u0107 si\u0119 takimi definicjami \u2013 troch\u0119 jak to ma miejsce np. z typami w TypeScripcie. Co najwa\u017cniejsze \u2013 <strong>GraalVM Native Build Tools<\/strong> mog\u0105 zosta\u0107 skonfigurowane, aby automatycznie zaci\u0105ga\u0107 te definicje do znalezionych w kodzie zale\u017cno\u015bci.<\/p>\n\n\n\n<h2 id=\"2-inwestycje-gigantow-bigtech-w-jave\" data-num=2>2. Inwestycje gigant\u00f3w BigTech w Jav\u0119<\/h2>\n\n\n\n<p>Pewnie wi\u0119kszo\u015b\u0107 kojarzy projekt AdoptOpenJDK, kt\u00f3ry powsta\u0142 jako efekt wysi\u0142k\u00f3w spo\u0142eczno\u015bci walcz\u0105cej o \u201cwoln\u0105\u201d implementacje JDK w momencie, kiedy Oracle par\u0119 lat temu uczyni\u0142 Oracle JDK p\u0142atnym dla u\u017cytku komercyjnego. AdoptOpenJDK pocz\u0105tkowo rozwijany by\u0142 przez spo\u0142eczno\u015b\u0107 JUG\u00f3w z ca\u0142ego \u015bwiata, by ostatecznie trafi\u0107 pod skrzyd\u0142a Eclipse Foundation. W efekcie AdoptOpenJDK zosta\u0142o przechrzczone na na Eclipse Adoptium (JDK jest znakiem towarowym nale\u017c\u0105cym do Oracle), a do opieki nad projektem powsta\u0142a Adoptium Working Group. Oczywi\u015bcie, kto\u015b nad tym kodem musi pracowa\u0107 i go utrzymywa\u0107, dlatego Adoptium Working Group posiada swoich korporacyjnych sponsor\u00f3w. I to takich naprawd\u0119 du\u017cych, a w 2022 mieli\u015bmy zwi\u0105zane z tym kilka og\u0142osze\u0144.<\/p>\n\n\n\n<p>Taki np. RedHat (mimo \u017ce przez wiele lat posiada\u0142 w\u0142asne OpenJDK) <a href=\"https:\/\/developers.redhat.com\/articles\/2022\/08\/24\/red-hat-expands-support-java-eclipse-temurin\">w 2022 og\u0142osi\u0142, \u017ce zamierza skupi\u0107 si\u0119 na Temurinie<\/a>. Oznacza to, \u017ce klienci firmy mog\u0105 liczy\u0107 na oficjalny support tego wydania i to w\u0142a\u015bnie ono ma by\u0107 dost\u0119pne we wszystkich produktach firmy. Jest to troch\u0119 inny model ni\u017c np. Microsoftu, kt\u00f3ry u\u017cywa Temurina jako buildu dla JDK 8, ale do p\u00f3\u017aniejszych JDK posiada swoje w\u0142asne warianty.<\/p>\n\n\n\n<p>RedHat jednak zawsze z rozwojem OpenJDK w wi\u0119kszym lub mniejszym stopniu si\u0119 kojarzy\u0142. Du\u017co wi\u0119kszym by\u0142o og\u0142oszenie od Google. Firma <a href=\"https:\/\/adoptium.net\/blog\/2022\/10\/adoptium-welcomes-google\/\">zapowiedzia\u0142a bowiem, \u017ce do\u0142\u0105cza do grupy roboczej Adoptium jak Cz\u0142onek Strategiczny<\/a>. Google nie ograniczy\u0142o si\u0119 tylko i wy\u0142\u0105cznie do rzucania w JDK workami pieni\u0119dzy, ale wraz z Alibab\u0105 <a href=\"https:\/\/www.alibabacloud.com\/blog\/a-short-exploration-of-java-class-pre-initialization_599378\">zacz\u0119li pracowa\u0107 nad przyspieszeniem startu platformy<\/a>.<\/p>\n\n\n\n<p>Wspomniany ju\u017c Microsoft postanowi\u0142 p\u00f3j\u015b\u0107 jednak jeszcze szerzej. S\u0105 czasem takie nag\u0142\u00f3wki, po kt\u00f3rych przeczytaniu musz\u0119 upewni\u0107 \u017ce wszystko dobrze zrozumia\u0142em. W pierwszej chwili informacja, \u017ce Microsoft <a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/microsoft-joins-jakarta-ee-and-microprofile-working-groups-at-eclipse-foundation\/\">staje si\u0119 cz\u0119\u015bci\u0105 cia\u0142a standaryzuj\u0105cego zar\u00f3wno Jakarty EE, jak i MicroProfilu<\/a> wyda\u0142a mi si\u0119 by\u0107 po prostu\u2026 jaka\u015b nierealistyczna.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/07\/Untitled-1-1024x227.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek akurat Microsoft lubi takimi rzeczami zaskakiwa\u0107. Do tej pory pami\u0119tam moje oczy, gdy to w\u0142a\u015bnie oni wypu\u015bcili wersj\u0119 Javy na procesory M1 \ud83d\ude40<\/figcaption><\/figure>\n\n\n\n<p>Jest to jednak do\u015b\u0107 naturalny ruch: Microsoft schyli\u0142 si\u0119 po prostu po nisko wisz\u0105ce pieni\u0105dze. Azure b\u0119dzie pierwsz\u0105 chmur\u0105, kt\u00f3ra zapewni natywne us\u0142ugi serwer\u00f3w aplikacyjnych Javy. Ju\u017c dzisiaj dost\u0119pne zostan\u0105 zar\u00f3wno WebLogic, jak i WebSphere czy JBoss EAP.<\/p>\n\n\n\n<p>Aczkolwiek w temacie wsparcia chmurowego dla Jakarty, dalej uwa\u017cam, \u017ce najciekawszym nowym projektem roku by\u0142a <a href=\"https:\/\/www.payara.fish\/products\/payara-cloud\/\">Payara Cloud<\/a>. Dzia\u0142a ona tak, \u017ce bierzesz swojego <strong>*.war<\/strong> zgodnego ze specyfikacj\u0105 Jakarta Web Profile, uploadujesz go na chmur\u0119 i\u2026 gotowe. Je\u015bli spojrzymy na Serwery Aplikacyjne jako \u015brodowisko uruchomieniowy dla aplikacji (czym w zasadzie s\u0105), to podej\u015bcie \u201ewrzucam jar\/war i zapominam o mojej aplikacji cloud-native\u201d wydaje si\u0119 by\u0107 a\u017c nazbyt kusz\u0105ce.<\/p>\n\n\n\n<p>Po prostu ponownie historia zatoczy\u0142a ko\u0142o.<\/p>\n\n\n\n<h2 id=\"3-jdk-11-w-androidzie\" data-num=3>3. JDK 11 w Androidzie<\/h2>\n\n\n\n<p>W 2022 premier\u0119 mia\u0142 Android 13. Nie s\u0142yszeli\u015bcie o tym? Nic dziwnego. Kiedy\u015b by\u0142a to naprawd\u0119 du\u017ce wydarzenie, ale dzi\u015b premiera w tym wypadku oznacza\u0142a \u201ezmergowanie\u201d ca\u0142o\u015bci do g\u0142\u00f3wnej ga\u0142\u0119zi AOSP (Android Open-Source Project) oraz wypuszczenie nowej wersji na Pixele. Potem za\u015b zaczyna si\u0119 okres oczekiwania na ruchy reszty graczy rynkowych \u2013 troch\u0119 jak to ma miejsce w wypadku Kernela Linuxa. R\u00f3wnie\u017c lista nowo\u015bci jest z nim do\u015b\u0107 zbli\u017cona \u2013 wi\u0119kszo\u015b\u0107 zmian odbywa si\u0119 teraz &#8222;pod mask\u0105&#8221;.<\/p>\n\n\n\n<p>Dlaczego wi\u0119c o tym pisz\u0119? Ot\u00f3\u017c wraz z &#8222;trzynastk\u0105&#8221; \u015bwi\u0119towali\u015bmy <a href=\"https:\/\/android-developers.googleblog.com\/2022\/08\/android-13-is-in-aosp.html\">przej\u015bcie Androida na OpenJDK 11<\/a>, wprowadzaj\u0105c do platformy min. Mo\u017cliwo\u015b\u0107 u\u017cywania var, VarHandle z <code>java.util.concurrent<\/code> czy wielu innych pomocniczych API (jak <code>Optional.ifPresentOrElse()<\/code> \u2764\ufe0f). Wida\u0107, \u017ce wyniki procesu Google\/Oracle z 2021 rozwi\u0105za\u0142y tw\u00f3rcom r\u0119ce i powoli b\u0119d\u0105 wdra\u017ca\u0107 nowo\u015bci z Javy do Androida.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-17.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek wiem, \u017ce pewnie wszyscy zainteresowani ju\u017c dawno u\u017cywaj\u0105 Kotlina<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"4-helidon-nima-pierwszy-framework-loom-first\" data-num=4>4. Helidon N\u00edma &#8211; pierwszy Framework Loom-first<\/h2>\n\n\n\n<p>Project Loom nie schodzi\u0142 z j\u0119zyk\u00f3w w zasadzie przez wi\u0119kszo\u015b\u0107 2022, ale je\u015bli mia\u0142bym wybra\u0107 jedn\u0105 zapowied\u017a, kt\u00f3ra jest najbardziej ekscytuj\u0105c\u0105 w tym kontek\u015bcie, to by\u0142by to Helidon N\u00edma. Okazuje si\u0119 bowiem, \u017ce szykuje nam si\u0119 pierwszy(?) framework, w kt\u00f3rym Loom nie b\u0119dzie doklejonym dodatkiem, a \u201eFirst-Class Citizen\u201d.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/download-2.png\" alt=\"\" width=\"498\" height=\"280\"\/><figcaption class=\"wp-element-caption\">\u201e\u00ed\u201d to tak zwane \u201ei z akcentem ostrym (akutem)\u201d, co mo\u017ce nam sugerowa\u0107, jak nazwa N\u00edma b\u0119dzie wymawiana.<\/figcaption><\/figure><\/div>\n\n\n<p>Na razie <a href=\"https:\/\/medium.com\/helidon\/helidon-n%C3%ADma-helidon-on-virtual-threads-130bb2ea2088\">ukaza\u0142a si\u0119 wersja Alfa<\/a>, a na pe\u0142n\u0105 przyjdzie nam jeszcze poczeka\u0107 \u2013 tw\u00f3rcy zapowiedzieli bowiem, \u017ce prac\u0119 nad ni\u0105 powstan\u0105 mniej wi\u0119cej do ko\u0144ca tego roku, kiedy nale\u017cy si\u0119 spodziewa\u0107 jej stabilnego wydania, r\u00f3wnoleg\u0142ego do Helidona 4.0. Jak na tak wczesny etap otrzymali\u015bmy ju\u017c ca\u0142kiem sporo szczeg\u00f3\u0142\u00f3w technicznych \u2013 towarzysz\u0105ca postowi premierowemu <a href=\"https:\/\/medium.com\/helidon\/helidon-n%C3%ADma-helidon-on-virtual-threads-130bb2ea2088\">publikacja Thomasa Langera<\/a> skupia si\u0119 na tym, jak N\u00edma na tym etapie prezentuje si\u0119 w por\u00f3wnaniu z MicroProfilowym Helidonem, a tak\u017ce z bezpo\u015bredni\u0105 konkurencj\u0105, za jak\u0105 tw\u00f3rcy uznaj\u0105 Netty\u2019ego. Jak mo\u017cna przeczyta\u0107, jednym z cel\u00f3w N\u00edmy jest w\u0142a\u015bnie ca\u0142kowite wyrugowanie Netty\u2019ego z helidonowego ekosystemu.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image-8.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Ci\u0105gle pami\u0119tam, gdy to w\u0142a\u015bnie Netty by\u0142a pupilem spo\u0142eczno\u015bci<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"5-akka-zmienila-model-licencyjny\" data-num=5>5. Akka zmieni\u0142a model licencyjny<\/h2>\n\n\n\n<p>Akka to w dzisiejszych czasach jeden z g\u0142\u00f3wnych trzon\u00f3w Scali i jeden z g\u0142\u00f3wnych powod\u00f3w, dla kt\u00f3rych to w\u0142a\u015bnie tym j\u0119zykiem interesuj\u0105 si\u0119 firmy. Jest to jedna z najlepszych w ca\u0142ej bran\u017cy implementacji modelu aktorowego, kt\u00f3ry dzi\u0119ki wsparciu dojrza\u0142ej (i dobrze znanej w bran\u017cy) platformy \u2013 jak\u0105 jest JVM \u2013 stanowi\u0142a prawdziwie bardzo kusz\u0105c\u0105 kombinacje. Dlatego te\u017c tak du\u017cym echem w bran\u017cy odbi\u0142a si\u0119 w \u015bwiecie programistycznym wiadomo\u015b\u0107, \u017ce od wersji 2.7 <a href=\"https:\/\/www.lightbend.com\/company\/news\/lightbend-changes-its-software-licensing-model-for-akka-technology\">Akka zmienia model licencyjny z Apache 2.0 na BSL v1.1 (Business Source License)<\/a>, stworzonej przez MariaDB. Zmiana licencji oznacza w zasadzie zamkni\u0119cie etapu rozwoju Akki w oparciu o tak zwany \u201eOpen Core\u201d.<\/p>\n\n\n\n<p>Co BSL oznacza dla Akki w praktyce? Ot\u00f3\u017c nowe wersje b\u0119d\u0105 w dalszym ci\u0105gu publikowane pod Apache 2.0, jednak ze sporym op\u00f3\u017anieniem \u2013 dopiero po trzech latach. Do tego czasu ka\u017cda nowa wersja b\u0119dzie co prawda udost\u0119pniana wraz ze \u017ar\u00f3d\u0142ami, ale za darmo b\u0119dzie wolno z niej korzysta\u0107 wy\u0142\u0105cznie na \u015brodowiskach nieprodukcyjnych. Je\u017celi b\u0119dziemy chcieli u\u017cy\u0107 Akki w systemie produkcyjnym, a roczny przych\u00f3d naszej firmy przekracza 25 milion\u00f3w dolar\u00f3w, niezb\u0119dne b\u0119dzie uiszczenie op\u0142at licencyjnych. Ich ceny zaczynaj\u0105 si\u0119 od oko\u0142o $2,000 USD za rdze\u0144 procesora, definiowany jako rdze\u0144 sprz\u0119towy \/ vCore \/ vCPU. Je\u017celi chcemy zmodyfikowa\u0107 Akk\u0119 na swoje potrzeby, licencja wyniesie nas $72,000 USD.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/giphy.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Mam wra\u017cenie, \u017ce tego typu sumy nie b\u0119dzie tak \u0142atwo przepchn\u0105\u0107 przez firmowe finanse.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"6-aws-lambda-snapstart\" data-num=6>6. AWS Lambda SnapStart<\/h2>\n\n\n\n<p>Czy\u017cby\u015bmy zapami\u0119tali 2022 jako rok, w kt\u00f3rym problem &#8222;zimnego startu&#8221; Java zosta\u0142 ostatecznie rozwi\u0105zany, przynajmniej na AWSie? Jest na to spora szansa, poniewa\u017c ko\u0144cem roku Amazon &#8211; nieco z zaskoczenia &#8211; <a href=\"https:\/\/aws.amazon.com\/blogs\/aws\/new-accelerate-your-lambda-functions-with-lambda-snapstart\/\">pokaza\u0142 AWS Lambda SnapStart<\/a>.<\/p>\n\n\n\n<p>Wykonanie ka\u017cdej funkcji Lambda sk\u0142ada si\u0119 z trzech faz \u2013 Init, Invoke oraz Shutdown. Bootstrap \u015brodowiska w ramach pierwszej z nich polega na przygotowanie ca\u0142ego \u015brodowiska do stanu, w kt\u00f3rym jest w stanie przyjmowa\u0107 ruch &#8211; jest to w\u0142a\u015bnie wspomniany Cold Start. Aby unikn\u0105\u0107 powtarzania tej operacji, SnapStart w tym momencie stan pami\u0119ci lambdy zapisuje i odk\u0142ada \u201ena p\u00f3\u017aniej\u201d, gdy nasza funkcja nie b\u0119dzie wystarczaj\u0105co rozgrzana. Dzi\u0119ki temu czas uruchomienia zostaje zredukowany do minimum. Ca\u0142o\u015b\u0107 pod spodem u\u017cywa \u015bwie\u017cutkiego (i wci\u0105\u017c rozwijanego) javowego API CRaC, kt\u00f3re pomaga w sytuacji, gdy niezb\u0119dne jest od\u015bwie\u017cenie snapshotu \u2013 AWS Lambda udost\u0119pnia odpowiednie hooki.<\/p>\n\n\n\n<p>Je\u015bli temat Was zaciekawi\u0142, <a href=\"https:\/\/vived.io\/the-road-to-aws-lambda-snapstart-guide-through-the-years-of-jvm-cold-start-tinkering-jvm-weekly-115\/\">rozpisa\u0142em si\u0119 kiedy\u015b<\/a> w tej kwestii w ca\u0142kiem d\u0142ugim tek\u015bcie, min. lepiej opisuj\u0105c wspomniany CRaC. Przedstawi\u0142em w nim ca\u0142\u0105 drog\u0119, kt\u00f3r\u0105 spo\u0142eczno\u015b\u0107 musia\u0142a przej\u015b\u0107 przed stworzeniem SnapStart.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/image-5-1536x732.png\" alt=\"\" width=\"768\" height=\"366\"\/><figcaption class=\"wp-element-caption\">Ma\u0142y spoiler na zach\u0119t\u0119 do CRaC.<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"7-jakarta-ee-nareszcie-ruszyla-do-przodu\" data-num=7>7. Jakarta EE nareszcie ruszy\u0142a do przodu<\/h2>\n\n\n\n<p>Rzek\u0142bym&#8230; nareszcie.<\/p>\n\n\n\n<p>Od paru lat Jakarta EE pozostawa\u0142a w dziwnym miejscu. Ze wzgl\u0119du na brak praw do pakietu <code>javax<\/code>, ca\u0142a spo\u0142eczno\u015b\u0107 skupia\u0142a si\u0119 na przenosinach na nowy namespace &#8211; <code>jakarta<\/code>. Ostatnie wi\u0119ksze wydanie &#8211; Jakarta EE 9.1 z 2021 &#8211; skupia\u0142o si\u0119 na dopinaniu zmian zwi\u0105zanych z tym przej\u015bciem. W 2022 mieli\u015bmy za\u015b okazj\u0119 \u015bwi\u0119towa\u0107 <a href=\"https:\/\/jakarta.ee\/specifications\/platform\/10\/\">premier\u0119 Jakarty EE 10<\/a>, kt\u00f3r\u0105 mo\u017cna uzna\u0107 za pierwszy prawdziwy krok do przodu od czasu rebrandingu projektu.<\/p>\n\n\n\n<p>Je\u017celi mia\u0142bym wskaza\u0107 jedn\u0105, najwi\u0119ksz\u0105 zmian\u0119 w nowym wydaniu, wybra\u0142bym chyba pojawienie si\u0119 nowego Profilu \u2013 Core. Czym s\u0105 profile? Kiedy\u015b mieli\u015bmy tylko jeden wariant Java EE, co by\u0142o proste, ale powodowa\u0142o problemy. Standard by\u0142 szeroki, a aby przej\u015b\u0107 certyfikacje dany serwer aplikacyjny musia\u0142 zaimplementowa\u0107 ka\u017cde nowe API, co wyd\u0142u\u017ca\u0142o czas adopcji nowych rozwi\u0105za\u0144. Dlatego te\u017c tw\u00f3rcy JEE wyr\u00f3\u017cnili dwa profile \u2013 Full i Web, gdzie ten drugi przeznaczony by\u0142 dla typowych aplikacji Webowych&#8230; takich z lat 200X.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ELn2jkN.jpg\" alt=\"\" width=\"533\" height=\"249\"\/><\/figure><\/div>\n\n\n<p>To wszystko jednak dzia\u0142o si\u0119 w epoce, zanim zacz\u0119li\u015bmy pakowa\u0107 nasze aplikacje w pojedyncze deployowane jarki. Ta zmiana \u2013 oraz nowa generacja rozwi\u0105za\u0144 \u2013 spowodowa\u0142a konieczno\u015b\u0107 dalszego dokrojenia liczby kluczowych API wy\u0142\u0105cznie do tych przydatnych w takim use-case. Tak powsta\u0142 niezale\u017cny od Jakarty EE MicroProfile, a teraz jego konkurent(?) \u2013 oficjalny profil Core Jakarty EE. Dlaczego Jakarta EE tworzy w\u0142asne rozwi\u0105zanie zamiast dogada\u0107 si\u0119 z Microprofile? TLDR: <a href=\"https:\/\/jakartaee-ambassadors.io\/2021\/05\/10\/jakarta-ee-ambassadors-joint-position-on-jakarta-ee-and-microprofile-alignment\/\">zwi\u0105zane jest to z elastyczno\u015bci\u0105, kt\u00f3rej tw\u00f3rcy MP \u0142akn\u0105, a kt\u00f3rej Jakarta EE nie jest za bardzo w stanie im zaoferowa\u0107<\/a>. Nie oznacza to jednak, \u017ce mi\u0119dzy projektami jest jakikolwiek konflikt \u2013 w tej chwili jednak Core Profile b\u0119dzie m\u00f3g\u0142 po prostu stanowi\u0107 baz\u0119, kt\u00f3r\u0105 MicroProfile b\u0119dzie w stanie rozbudowywa\u0107.<\/p>\n\n\n\n<p>To jednak nie wszystko. Od lat trwa proces nieustannego odchudzania korporacyjnej Javy, i w tym kierunku poszed\u0142 te\u017c standard CDI &#8211; Context and Dependency Injection. Opr\u00f3cz podzia\u0142u na wersje SE (dla standardowej Javy, u\u017cywana min. przez Helidon) i EE, teraz pojawi\u0142y si\u0119 kolejne warianty \u2013 CDI Full oraz CDI Lite. Ten ostatni zawiera\u0107 wy\u0142\u0105cznie najbardziej kluczowe aspekty CDI. Zosta\u0142 zaprojektowany, \u017ceby by\u0107 w stanie wspiera\u0107 potrzeby popularnych projekt\u00f3w, takich jak Dagger czy Guice, pomijaj\u0105c bardziej zaawansowane funkcjonalno\u015bci powi\u0105zane z cyklem \u017cycia wstrzykiwanych zale\u017cno\u015bci.<\/p>\n\n\n\n<p>Og\u00f3lnie.. du\u017co si\u0119 dzieje. Mam nadzieje, \u017ce 2023 b\u0119dzie r\u00f3wnie udanym dla programist\u00f3w Jakarty EE. Teraz, kiedy wi\u0119kszo\u015b\u0107 ekosystemu &#8211; ze Springiem, Helidon czy jOOQ na czele &#8211; przepisa\u0142o si\u0119 ju\u017c na now\u0105 &#8222;otwart\u0105&#8221; wersj\u0119, tw\u00f3rcy standardu b\u0119d\u0105 w stanie wreszcie udowodni\u0107, \u017ce warto si\u0119 nim interesowa\u0107.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image-30.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Ciekawe kiedy troch\u0119 serca dostanie Jakarta Faces<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"8-wildfly-rezygnuje-z-release-trainu\" data-num=8>8. WildFly rezygnuje z \u201cRelease Trainu\u201d<\/h2>\n\n\n\n<p>Pozostaj\u0105c w temacie Jakarty EE, kolejna informacja dotyczy WildFly. Jednocze\u015bnie ze wzgl\u0119du na to, jak mocno idzie pod pr\u0105d trendom, je\u015bli chodzi o spos\u00f3b releasowania oprogramowania, powinna by\u0107 interesuj\u0105ca dla nieco szerszej rzeszy ludzi ni\u017c typowe og\u0142oszenia zwi\u0105zane z Jav\u0105 EE.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a88c509edad.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Ma\u0142y Spoiler<\/figcaption><\/figure><\/div>\n\n\n<p>Ot\u00f3\u017c w dobie, gdy wi\u0119kszo\u015b\u0107 projekt\u00f3w przechodzi na regularny \u201cpoci\u0105g releasowy\u201d, WildFly zdecydowa\u0142 si\u0119 na swoisty krok w ty\u0142 i oparcie swoich nowych wersji o zdefiniowane zbiory funkcjonalno\u015bci. Jest to swoisty powr\u00f3t do korzeni, gdy nowe wydania serwer\u00f3w aplikacyjnych by\u0142y znacznie rzadsze i wi\u0105za\u0142y si\u0119 w\u0142a\u015bnie z du\u017cymi podbiciami standardu, nie konkretnymi datami w kalendarzu.<\/p>\n\n\n\n<p>Jedn\u0105 z du\u017cych funkcjonalno\u015bci (poza aktualizacj\u0105 do Jakarta EE 10), jakie &#8222;dowi\u00f3z\u0142&#8221; w 2022 WildFly jest S2I &#8211; Source-to-Image (S2I). M\u00f3wimy tutaj o zestawie narz\u0119dzi, na kt\u00f3ry sk\u0142adaj\u0105 si\u0119 nowe bazowe obrazy dla javowych LTS w wersji JDK11 i JDK17 (brak \u00f3semki), nowy plugin mavenowy, zestaw chmurowych funkcjonalno\u015bci o wdzi\u0119cznej nazwie Galeon oraz nowa wersja wsparcia dla Helm dla WildFly 2.0.<\/p>\n\n\n\n<p>Ja wiem, \u017ce Cloud-Native serwer Enterprisowej Javy brzmi dla wielu jak kuriozum, wida\u0107 jednak, \u017ce tw\u00f3rcy WildFly chc\u0105 jeszcze troch\u0119 powalczy\u0107 na nowym terytorium. Ten serwer aplikacyjny zawsze uchodzi\u0142 za tego najbardziej \u201c\u015bwiatowego\u201d cz\u0142onka spo\u0142eczno\u015bci Jav\u2026 Jakarta EE, tak\u017ce podejrzewam, \u017ce w\u015br\u00f3d jego u\u017cytkownik\u00f3w znajd\u0105 si\u0119 tacy, kt\u00f3rzy b\u0119d\u0105 mieli ochot\u0119 z S2I poeksperymentowa\u0107.<\/p>\n\n\n\n<h2 id=\"9-uczenie-maszynowe-trafilo-do-standardu-javy\" data-num=9>9. Uczenie Maszynowe trafi\u0142o do standardu Javy<\/h2>\n\n\n\n<p>By\u0142 takie okres w 2021, gdzie do\u015b\u0107 dynamicznie zaczyna\u0142y si\u0119 pojawia\u0107 rozwi\u0105zania do Machine Learningu celuj\u0105ce w programist\u00f3w Javy. Zar\u00f3wno Oracle, jak i LinkedIn pr\u00f3bowa\u0142y zaprezentowa\u0107 spo\u0142eczno\u015bci swoje rozwi\u0105zania, ale jak g\u0142o\u015bno by\u0142o na pocz\u0105tku, tak ostatnimi czasy i o Tribuo, i o Dagli jest relatywnie cicho. Nie zmienia to jednak faktu, \u017ce przestrze\u0144 ML-owa jest zbyt \u0142akomym k\u0105skiem \u017ceby go ot-tak odpu\u015bci\u0107 i odda\u0107 Pythonowi.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/cxwla0hvwtu51.jpg\" alt=\"\" width=\"359\" height=\"434\"\/><figcaption class=\"wp-element-caption\">Za bardzo s\u0105 irytuj\u0105cy<\/figcaption><\/figure><\/div>\n\n\n<p>Javowy ekosystem nie poddaje si\u0119 wi\u0119c, o czym \u015bwiadczy\u0107 mo\u017ce formalna akceptacja dla prac nad <a href=\"https:\/\/www.deepnetts.com\/blog\/jsr-381-visual-recognition-api\">JSR-381 Visual Recognition (VisRec) Specification<\/a>. Wbrew do\u015b\u0107 myl\u0105cej nazwie, ma to by\u0107 standard wysokopoziomowego API dla zar\u00f3wno podstawowego uczenia maszynowego (ML), jak i klasyfikacji obraz\u00f3w i rozpoznawania obiekt\u00f3w. JSR 381 ma zapewni\u0107 wsp\u00f3lnego API dla MLa, wsp\u00f3lnego dla r\u00f3\u017cnych domen. Jego referencyjna implementacja jest oparta na bibliotece <a href=\"https:\/\/www.deepnetts.com\">DeepNetts<\/a>, ale ca\u0142o\u015b\u0107 ju\u017c w tym momencie wspierana jest przez <a href=\"https:\/\/djl.ai\/\">Deep Java Library<\/a>, bibliotece stworzonej przez Amazon.<\/p>\n\n\n\n<h2 id=\"10-alpaquita-linux-os-dedykowany-pod-skonteneryzowana-jave\" data-num=10>10. Alpaquita Linux &#8211; OS dedykowany pod skonteneryzowan\u0105 Jav\u0119<\/h2>\n\n\n\n<p>W 2022 BellSoft &#8211; tw\u00f3rcy Liberia JDK &#8211; postanowili stworzy\u0107 now\u0105, referencyjn\u0105 dystrybucj\u0119 Linuxa przeznaczon\u0105 bezpo\u015brednio do uruchamiania Javy w kontenerach. Na pierwszy rzut oka brzmi to troch\u0119 jak strzelanie z armaty do muchy, ale w tym szale\u0144stwie jest metoda. Tw\u00f3rcy wzi\u0119li bowiem minimalistycznego Alpine, kt\u00f3ry sam w sobie dodaje naprawd\u0119 minimalny narzut (u\u017cywa\u0142em go w praktyce, jest prawie niezauwa\u017calny), ale zmodyfikowali w spos\u00f3b, kt\u00f3ry zapewni\u0107 ma w wypadku aplikacji JVM-owych znacznie lepsze bezpiecze\u0144stwo i wydajno\u015b\u0107.<\/p>\n\n\n\n<p>BellSoft min. stworzy\u0142 zmodyfikowany wariant alokatora pami\u0119ci <code>musl<\/code>, u\u017cywanego tak\u017ce przez Alpine, a kt\u00f3rego wsparcie zosta\u0142o dodane ca\u0142kiem niedawno w JDK 16. Ca\u0142o\u015b\u0107 <a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-introduces-alpaquita-linux\/\">nazwali Alpaquita Linux<\/a>, dodali wsparcie LTS i zapakowali razem ze wcze\u015bniej wspomnianym Liberica JDK. Opublikowali te\u017c troch\u0119 liczb i benchmark\u00f3w, kt\u00f3re maj\u0105 potwierdza\u0107 ich wersj\u0119, \u017ce uda\u0142o im si\u0119 stworzy\u0107 najlepiej dostosowany do potrzeb javy i kontener\u00f3w dystrybucje Linuxa.<\/p>\n\n\n\n<h2 id=\"najciekawsze-wydania-roku-jezyki-jvm\" data-num=11>Najciekawsze wydania roku &#8211; j\u0119zyki JVM<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Java 18<\/h3>\n\n\n\n<p>Po JDK 17, kt\u00f3re jak pewnie wielu z Was pami\u0119ta by\u0142o wydaniem typu LTS (Long-Time Support), zakres \u201cosiemnastki\u201d nie nale\u017cy do jakich\u015b olbrzymich, ale i tak jest w niej troch\u0119 rzeczy, nad kt\u00f3rymi warto si\u0119 pochyli\u0107.<\/p>\n\n\n\n<p>JDK 18 przyni\u00f3s\u0142 bowiem <a href=\"https:\/\/openjdk.org\/jeps\/408\">408: Simple Web Server<\/a> (wbudowania w Jav\u0119 minimalistycznego Web Server) oraz <a href=\"https:\/\/openjdk.org\/jeps\/413\">413: Code Snippets in Java API Documentation<\/a> (wprowadzaj\u0105cy znacznik @snippet do JavaDoc, co ma na celu upro\u015bci\u0107 do\u0142\u0105czanie przyk\u0142adowego kodu \u017ar\u00f3d\u0142owego do dokumentacji API).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Dy5LXlWWoAYZU_Q.jpg\" alt=\"\" width=\"489\" height=\"363\"\/><figcaption class=\"wp-element-caption\">Oba brzmi\u0105 ciekawie, ale ju\u017c sobie nie ufam<\/figcaption><\/figure><\/div>\n\n\n<p>Opr\u00f3cz tego JDK 18 to par\u0119 zmian pod mask\u0105 (<a href=\"https:\/\/openjdk.org\/jeps\/416\">416: Reimplement Core Reflection with Method Handles<\/a>, <a href=\"https:\/\/openjdk.org\/jeps\/400\">400: UTF-8 by Default<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/418\">418: Internet-Address Resolution SPI<\/a>) a tak\u017ce <a href=\"https:\/\/openjdk.org\/jeps\/421\">JEP 421: Deprecate Finalization for Removal<\/a> &#8211; Deprekacja Finalizer\u00f3w, kt\u00f3ra spotka\u0142a si\u0119 z mas\u0105 kontrowersji ze strony spo\u0142eczno\u015bci, ale i tak zosta\u0142a &#8222;przepchni\u0119ta&#8221; ku chwale projektu Loom.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Java 19<\/h3>\n\n\n\n<p>Wydanie to z jednej strony wydawa\u0107 si\u0119 mo\u017ce czym\u015b ma\u0142ym, jednak niech nie zmyl\u0105 Was pozory jedynie pojedynczej stabilnej funkcjonalno\u015bci \u2013 mamy bowiem do czynienia z jednym z najwa\u017cniejszych nowych JDK od lat, sk\u0142onny jestem stwierdzi\u0107, \u017ce nawet od czasu JDK 9 z jego systemem modu\u0142\u00f3w. Po raz pierwszy bowiem mamy okazj\u0119 wersje Preview projekt\u00f3w, kt\u00f3re stanowi\u0107 b\u0119d\u0105 przysz\u0142o\u015b\u0107 JVM.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/rainbow-puke.gif\" alt=\"\" width=\"374\" height=\"210\"\/><figcaption class=\"wp-element-caption\">TLDR w formie graficznej<\/figcaption><\/figure><\/div>\n\n\n<p>W JDK 19 zobaczyli\u015bmy wreszcie te\u017c pierwszy preview oczekiwanego od lat Looma. Spo\u0142eczno\u015b\u0107 bawi si\u0119 ca\u0142o\u015bci\u0105 w najlepsze od d\u0142u\u017cszego czasu, a teraz r\u00f3wnie\u017c programi\u015bci obawiaj\u0105cy si\u0119 samodzielnie kompilowanych wersji b\u0119d\u0105 mogli wypr\u00f3bowa\u0107 wirtualne w\u0105tki i bezbole\u015bnie sprawdzi\u0107, czy ca\u0142o\u015b\u0107 wytrzyma\u0142a ca\u0142y hype z jakim wi\u0105za\u0142y si\u0119 kolejne zapowiedzi projektu. R\u00f3wnocze\u015bnie, d\u0142ugo oczekiwana Strukturalna Wsp\u00f3\u0142bie\u017cno\u015b\u0107, b\u0119d\u0105ca cz\u0119\u015bci\u0105 Looma r\u00f3wnie\u017c trafi\u0142 do inkubacji, i stanowi\u0105c naturalne uzupe\u0142nienie Wirtualnych W\u0105tk\u00f3w.<\/p>\n\n\n\n<p>Kolejny gracze wagi ultraci\u0119\u017ckiej, <a href=\"https:\/\/openjdk.org\/jeps\/424\">424: Foreign Function &amp; Memory API<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/426\">426: Vector API<\/a> czyli efekty Projektu Panama, r\u00f3wnie\u017c pojawi\u0142 si\u0119 w nowym wydaniu JDK. Przed nami materializuje si\u0119 nast\u0119pca JNI, kt\u00f3ry zapewni\u0107 ma nam now\u0105, lepsz\u0105 integracj\u0119 z natywnym kodem i pami\u0119ci\u0105.<\/p>\n\n\n\n<p>Obserwowali\u015bmy te\u017c dalszy rozw\u00f3j rozwi\u0105za\u0144 znajduj\u0105cych si\u0119 pod parasolk\u0105 Project Amber, takich jak <a href=\"https:\/\/openjdk.org\/jeps\/427\">427: Pattern Matching for switch<\/a> czy <a href=\"https:\/\/openjdk.org\/jeps\/404\">405: Record Patterns (Preview)<\/a>.<\/p>\n\n\n\n<p>Opr\u00f3cz aktualizacji du\u017cych projekt\u00f3w, tw\u00f3rcy Javy pokusili si\u0119 o wsparcie dystrybucji uruchamianych na procesorach z rodziny RISC-V. Platforma ta naprawd\u0119 ostatnio jest a j\u0119zykach &#8211; min. w tym tygodniu Google og\u0142osi\u0142o, \u017ce chce uczyni\u0107 z niej jeden z trzon\u00f3w Androida.<\/p>\n\n\n\n<p>Wi\u0119cej o JDK 19 <a href=\"https:\/\/vived.io\/jdk-19-released-jvm-weekly-105\/\">znajdziecie tutaj<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Kotlin 1.7<\/h3>\n\n\n\n<p>Kotlin nie mia\u0142 w tym roku lekko. JetBrains zmuszone by\u0142o migrowa\u0107 zesp\u00f3\u0142 pracuj\u0105cy nad j\u0119zykiem z Federacji Rosyjskiej, co z pewno\u015bci\u0105 nie pomog\u0142o na szeroko rozumian\u0105 produktywno\u015b\u0107. Nie znaczy to jednak, \u017ce 2022 nie wprowadzi\u0142 \u017cadnych nowo\u015bci do j\u0119zyka. Ukaza\u0142 si\u0119 min. <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew17.html\">Kotlin 1.7<\/a><\/p>\n\n\n\n<p>Najwa\u017cniejsz\u0105 nowo\u015bci\u0105 wydaje si\u0119 z pewno\u015bci\u0105 wersja Alfa kompilatora K2. To w\u0142a\u015bnie K2 jest przysz\u0142o\u015bci\u0105 Kotlina. Tw\u00f3rcy j\u0119zyka (platformy?) chc\u0105, aby w niedalekiej przysz\u0142o\u015bci by\u0107 w stanie w realny spos\u00f3b stworzy\u0107 z Kotlina rozwi\u0105zanie prawdziwie multiplatformowe, bez potrzeby wielokrotnej implementacji tych samych funkcjonalno\u015bci. Wersja Alfa na razie wspiera wy\u0142\u0105cznie JVM i jest jeszcze do\u015b\u0107 mocno ograniczona, ale pierwsza testowa edycja to bardzo wa\u017cny krok dla ca\u0142ego projektu.<\/p>\n\n\n\n<p>Z nowo\u015bci z pewno\u015bci\u0105 wymieni\u0107 trzeba te\u017c inkrementaln\u0105 kompilacje za pomoc\u0105 Gradle. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce ich wewn\u0119trzne testy wykaza\u0142y popraw\u0119 o ponad 80% dla zmian po trafieniu do cache. Kotlin od lat ma opinie dosy\u0107 przyci\u0119\u017ckawego, dlatego ka\u017cdy ruch w stron\u0119 poprawy Developer Experience (a takimi s\u0105 w ko\u0144cu wszelkie poprawki procesu kompilacji) s\u0105 bardzo na miejscu.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-1-2.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Teraz \u017ceby \u201eda\u0107 co je\u015b\u0107\u201d K2, b\u0119dziemy musieli pisa\u0107 kod znacznie szybciej<\/figcaption><\/figure><\/div>\n\n\n<p>Je\u017celi chodzi za\u015b o rzeczy zwi\u0105zane z syntaxem j\u0119zyka, to zdecydowanie to wydanie stoi pod znakiem dalszego pokrycia sytuacji brzegowych, z kt\u00f3rymi radzi\u0107 sobie musi system typ\u00f3w Kotlina. Nowe wydanie przynosi bowiem min. typy ostatecznie nie-nullowalne oraz wnioskowanie typ\u00f3w w ramach tzw. Builder\u00f3w. Wprowadzono te\u017c operator underscore, pozwalaj\u0105cy na automatyczne wnioskowania o typie generycznym, gdy znane s\u0105 pozosta\u0142e argumenty.<\/p>\n\n\n\n<p>Zaraz przed sylwestrem ukaza\u0142 si\u0119 te\u017c Kotlin 1.8, ale ten nie doczeka\u0142 si\u0119 jeszcze nawet oficjalnego announcementu poza <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew18.html\">aktualizacj\u0105 dokumentacji<\/a>, wi\u0119c nie zaliczam go do dziedzictwa 2022 i zajm\u0119 si\u0119 dopiero za tydzie\u0144.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Groovy 4.0<\/h3>\n\n\n\n<p>Dla Groovy&#8217;ego przysz\u0142y chude lata &#8211; nowo\u015bci w tym j\u0119zyku do\u015b\u0107 s\u0142abo rezonuj\u0105 ze spo\u0142eczno\u015bci\u0105. Sam musz\u0119 przyzna\u0107, \u017ce pomimo tego \u017ce regularnie \u015bledz\u0119 \u015bwiat technologii, to wydanego par\u0119 lat temu Groovy\u2019ego 3.0 przegapi\u0142em i dowiedzia\u0142em si\u0119 o nim grubo po oficjalnej premierze. Na wersj\u0119 4.0 by\u0142em ju\u017c troch\u0119 przygotowany, ale ona te\u017c zdecydowanie nie wybrzmia\u0142a w\u015br\u00f3d programist\u00f3w \u2013 jej zesz\u0142oroczna premiera przesz\u0142a maksymalnie bez echa. Troch\u0119 si\u0119 nie dziwie &#8211; <a href=\"https:\/\/groovy-lang.org\/releasenotes\/groovy-4.0.html\">\u201cczw\u00f3rka\u201d to jednak taka \u201cciep\u0142a woda w kranie\u201d<\/a> jak Switch expressions, Sealed types, JavaShell czy Rekordy.<\/p>\n\n\n\n<p>Co prawda mo\u017cna w niej znale\u017a\u0107 par\u0119 ciekawszych pere\u0142ek, ale wi\u0119kszo\u015b\u0107 z nich (jak cho\u0107by GINQ \u2013 Groovy-Integrated Query) czy intryguj\u0105ce Groovy Contracts na razie znajduj\u0105 si\u0119 w inkubacji. Iskierk\u0105 nadziei jest jednak to, \u017ce Groovy 5.0 zapowiada si\u0119 dzi\u0119ki nim ca\u0142kiem smakowicie. Mo\u017cliwe, \u017ce aby zrobi\u0107 du\u017cy krok do przodu, tw\u00f3rcy musieli najpierw ulepszy\u0107 kompatybilno\u015b\u0107 z Jav\u0105. I co prawda nie wierz\u0119, \u017ce Groovy kiedykolwiek odzyska pozycj\u0119, kt\u00f3r\u0105 mia\u0142 jeszcze kilka lat temu, ale mo\u017ce jeden z ciekawszych j\u0119zyk\u00f3w JVMa jeszcze nas kiedy\u015b zaskoczy.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a88c4f59cf7.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Mam wra\u017cenie, \u017ce aktualnie Groovy, tak pot\u0119\u017cny dzi\u0119ki swojemu metaprogramingowi i wsparciu do tworzenia eleganckich DSLi, jeszcze czasem przewija si\u0119 przez foldery \/test w projektach tylko dzi\u0119ki Spockowi \ud83d\udd96\ud83c\udffb.<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">Clojure 1.11<\/h3>\n\n\n\n<p>Ostatnim, ale zdecydowanie nie najmniejszym z nowych wyda\u0144 jest nowa wersja j\u0119zyka Clojure! Czasy, kiedy by\u0142em z Clojure na bie\u017c\u0105co troch\u0119 ju\u017c min\u0119\u0142y, ale jako \u017ce poprzednia nowa wersja pojawi\u0142a si\u0119 jeszcze w roku 2018 &#8222;clojurowcom\u201d przysz\u0142o troch\u0119 poczeka\u0107. Zakup <a href=\"https:\/\/building.nubank.com.br\/nubank-acquires-cognitect-press-release\/\">tw\u00f3rc\u00f3w j\u0119zyka przez Nubank w 2020<\/a> nie przyspieszy\u0142 jako\u015b mocno rozwoju j\u0119zyka, ale te\u017c nale\u017cy pami\u0119ta\u0107, \u017ce niekt\u00f3re narz\u0119dzia s\u0105 &#8222;kompletne&#8221;.<\/p>\n\n\n\n<p>Clojure 1.11 zapewnia now\u0105 sk\u0142adni\u0119 wywo\u0142ywania argument\u00f3w s\u0142\u00f3w kluczowych \u2013 funkcje, kt\u00f3re przyjmuj\u0105 argumenty s\u0142\u00f3w kluczowych, mog\u0105 teraz otrzymywa\u0107 map\u0119 zamiast par klucz\/warto\u015b\u0107. Pojawi\u0142a si\u0119 te\u017c nowa przestrze\u0144 nazw (w uproszczeniu \u2013 pakiet) <code>clojure.math<\/code>, zapewniaj\u0105ca funkcje opakowuj\u0105ce metody dost\u0119pne w <code>java.lang.Math<\/code> dla \u201clong\u00f3w\u201d i \u201cdubli\u201d. Dodatkowo, istnieje teraz opcja aliasowanie przestrzeni nazw w spos\u00f3b, kt\u00f3ry nie powoduje b\u0142\u0119du, je\u017celi dany namespace nie jest dost\u0119pny. Do samego core j\u0119zyka dodano za\u015b sporo nowych funkcji.<\/p>\n\n\n\n<p>A na ko\u0144cu tej sekcji \u017cart. Po czym poznasz programist\u0119 Clojure? Bo Ci o tym powie!<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858cf2eeca.png\" alt=\"\" width=\"783\" height=\"368\"\/><figcaption class=\"wp-element-caption\">I to w czym\u015b co przypomina \u201cstarsz\u0105 mow\u0119\u201d<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"najciekawsze-wydania-roku-frameworki-i-biblioteki\" data-num=12>Najciekawsze wydania roku &#8211; frameworki i biblioteki<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Spring Framework 6.0 i Spring Boot 3.0<\/h3>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-38.png\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>Ko\u0144c\u00f3wk\u0105 2022 ukaza\u0142y si\u0119 Spring Framework 6.0 oraz Spring Boot 3.0. I cho\u0107by nie wiem jak wiele zmian przynosi\u0142y same w sobie, to z pewno\u015bci\u0105 najwi\u0119ksz\u0105 rewolucj\u0105 jest porzucenie wsparcia starszych wersji Javy. I kiedy m\u00f3wi\u0119 tutaj \u201estarsze\u201d, na my\u015bli mam nie Jave 1.6, nawet nie Java 1.8 ale nawet\u2026 Jave 16. Nowy Spring do dzia\u0142ania wymaga Javy 17. Pivotal nie poszed\u0142 tutaj na \u017cadne kompromisy i nowego \u201emajora\u201d projekt\u00f3w przystosowa\u0142 do dzia\u0142ania wy\u0142\u0105cznie z najnowszym dost\u0119pnym w tej chwili wydaniem LTS.<\/p>\n\n\n\n<p>Nowa Java to jedno, ale Spring Framework 6.0 przynosi r\u00f3wnie\u017c now\u0105 Jakarte w wersji 9.1+. Warto o tym wiedzie\u0107, poniewa\u017c proces migracyjny mo\u017ce okaza\u0107 si\u0119 tutaj (co dla wielu b\u0119dzie pewnie zaskoczeniem) trudniejszy ni\u017c w wypadku Javy. Przypominam bowiem o tym, \u017ce Jakarta EE 9.1+ to ta edycja, kt\u00f3ra pozby\u0142a si\u0119 pakietu <code>javax.*<\/code> na rzecz <code>jakarta.*<\/code>, w ten spos\u00f3b uchodz\u0105c z zasi\u0119gu Oracle i nale\u017c\u0105cych do nich trademark\u00f3w.<\/p>\n\n\n\n<p>Je\u015bli \u015bledzili\u015bcie wiadomo\u015bci o nowym Springu od jego pierwszych zapowiedzi, mam dla Was z\u0142\u0105 nowin\u0119 \u2013 okazuje si\u0119 bowiem, \u017ce d\u0142ugo oczekiwane wsparcie JPMSa, systemu modu\u0142\u00f3w Javy, nie b\u0119dzie gotowe na premier\u0119. Jak przyznaj\u0105 tw\u00f3rcy, mo\u017cna si\u0119 spodziewa\u0107 jego pojawienia w p\u00f3\u017aniejszych wersjach, ale pierwsza wersja Spring Framework 6 skupia si\u0119 szczeg\u00f3lnie na wsparciu kompilacji Ahead-of-Time i GraalVM, a modu\u0142y utrudnia\u0142yby ten proces, komplikuj\u0105c tak zwan\u0105 \u201eanaliz\u0119 osi\u0105galno\u015bci\u201d. Nale\u017cy bowiem pami\u0119ta\u0107, \u017ce w odr\u00f3\u017cnieniu od nowych graczy na rynku framework\u00f3w jak Quarkus, Helidon czy Micronaut, Spring bardzo, bardzo mocno opiera si\u0119 na Reflection API. Dla niego wi\u0119c proces wsparcia dla GraalVM, kt\u00f3ry refleksji nie wspiera jest wi\u0119c znacznie trudniejszy.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/mKhrLx1.jpg\" alt=\"\" width=\"534\" height=\"428\"\/><\/figure><\/div>\n\n\n<p>D\u0142u\u017csz\u0105 przegl\u0105d\u00f3wk\u0119 nowego Springa mojego autorstwa <a href=\"https:\/\/vived.io\/new-era-for-spring-spring-framework-6-0-spring-boot-3-0-and-only-jdk-17-jvm-weekly-22\/\">znajdziecie tutaj<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SLF4j 2.0<\/h3>\n\n\n\n<p>Podejrzewam, \u017ce praktycznie ka\u017cdy z czytaj\u0105cych ten newsletter (przynajmniej z tych b\u0119d\u0105cych w bran\u017cy ju\u017c par\u0119 lat) cho\u0107 raz mia\u0142 przyjemno\u015b\u0107 dok\u0142adania do projektu <strong>slf4j<\/strong>. Nazw\u0119 t\u0105 rozwija si\u0119 jako <em>The Simple Logging Facade for Java<\/em> i tak\u0105 w\u0142a\u015bnie jest jej rola. Dekad\u0119 temu, <strong>log4j<\/strong> w swojej pierwszej wersji by\u0142 frameworkiem mocno skomplikowanym, o niskopoziomowym API.<\/p>\n\n\n\n<p>Od czasu \u015bwietno\u015bci <strong>slf4j<\/strong> bran\u017ca jednak troch\u0119 wyewoluowa\u0142a. Najpierw pojawi\u0142 si\u0119 <strong>Logback<\/strong>, a nast\u0119pnie pojawi\u0142 si\u0119 <strong>log4j2<\/strong>, kt\u00f3ry przyni\u00f3s\u0142 API kompatybilne z <strong>slf4j<\/strong>, ale ju\u017c bez dodatkowego narzutu abstrakcji. W mi\u0119dzyczasie pojawi\u0142 si\u0119 te\u017c <code>java.lang.system.Logger<\/code>, czyli drugie podej\u015bcie tw\u00f3rc\u00f3w JDK do tematu logowania \u2013 du\u017co bardziej udane. To wszystko sk\u0142ada si\u0119 na fakt, \u017ce lata \u015bwietno\u015bci slf4j ma chyba za sob\u0105.<\/p>\n\n\n\n<p>Co jednak przynosi <a href=\"https:\/\/www.slf4j.org\/news.html\">slf4j 2.0<\/a>? Pewnym zmianom uleg\u0142o API (mocno przemodelowane zosta\u0142y niekt\u00f3re buildery oraz do\u0142o\u017cono Fluent Logging API), ale z pewno\u015bci\u0105 najwi\u0119ksza rewolucja wydarzy\u0142a si\u0119 pod mask\u0105. Wraz z now\u0105 wersj\u0105, slf4j pozby\u0142 si\u0119 wsparcia dla JDK mniejszych ni\u017c JDK 8 \u2013 nie s\u0105 wi\u0119c tak \u201eambitni\u201d jak tw\u00f3rcy np. Springa, ale te\u017c ze wzgl\u0119du na swoje mocne zakorzenienie w przesz\u0142o\u015bci jest to do\u015b\u0107 rozs\u0105dny krok. Jednak r\u00f3wnie\u017c Ci u\u017cywaj\u0105cy nowszych JDK 9+ du\u017co zyskaj\u0105 na migracji \u2013 w odr\u00f3\u017cnieniu od Springa, slf4j doczeka\u0142 si\u0119 bowiem wsparcia dla modu\u0142\u00f3w JPMS, dzi\u0119ki czemu \u0142atwiej b\u0119dzie si\u0119 go u\u017cywa\u0142o w zmodularyzowanych projektach.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Hibernate 6.0<\/h3>\n\n\n\n<p><a href=\"https:\/\/hibernate.org\/orm\/releases\/6.0\/\">Hibernate 6.0<\/a> to edycj\u0119, kt\u00f3ra jest pierwszym \u201cmajorem\u201d Hibernate od roku 2011. Nie oznacza to oczywi\u015bcie, \u017ce rozw\u00f3j biblioteki sta\u0142 w miejscu \u2013 ka\u017cda z regularnie wydawanych minor\u00f3w 5.x przynosi\u0142a nowo\u015bci. Ostatnimi czasy jednak wi\u0119cej m\u00f3wi\u0142o si\u0119 o pobocznych projektach, takich jak cho\u0107by Hibernate Reactive.<\/p>\n\n\n\n<p>Nowy Hibernate to przede wszystkim nowe adnotacje, kt\u00f3re porzuci\u0142y swoje XMLowe korzenie i doczeka\u0142y si\u0119 sporej ilo\u015bci zmian min. lepsze type-safety. Du\u017cym krokiem do przodu jest te\u017c Semantic Query Model (SQM) \u2013 nowy parser zapyta\u0144 o encje, kt\u00f3ry obs\u0142uguje zar\u00f3wno JPQL, jak i Criteria API. Nowy parser b\u0119dzie znacznie bardziej elastyczny, dzi\u0119ki czemu zapewniamy lepsz\u0105 translacj\u0119 zapyta\u0144 o encje w j\u0119zyku SQL. Dodatkowo, pojawi\u0142a si\u0119 poprawa wydajno\u015bci poprzez zmian\u0119 z odczytu kolumn po nazwie na odczyt wed\u0142ug pozycji w ramach ResultSetu oraz aktualizacja u\u017cywanego przez Hibernate parsera z ANTLR.<\/p>\n\n\n\n<p>Bardzo du\u017c\u0105 zmian\u0105 jest te\u017c migracja Hibernate na Jakart\u0119 EE i porzucenie starych API zwi\u0105zanych z Java EE. To w\u0142a\u015bnie min. z tym wi\u0105\u017ce si\u0119 podbicie du\u017cej wersji aplikacji \u2013 z wiadomych wzgl\u0119d\u00f3w, pojawia si\u0119 potrzeba migracji z przestrzeni nazw <code>javax.persistence<\/code> do <code>jakarta.persistence<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ktor 2.0<\/h3>\n\n\n\n<p>Ktor to rozwijany przez JetBrains referencyny Framework dla Kotlina do tworzenia aplikacji webowych. Nowa edycja nie bez <a href=\"https:\/\/ktor.io\/changelog\/2.0\/\">powodu ma du\u017cy \u201cnumerek\u201d 2.0<\/a> \u2013 wiele API (np. Plugin\u00f3w) zosta\u0142o przebudowane w zasadzie od podstaw, zgodnie z ostatnim duchem Kotlin Multiplatform Ktor zacz\u0105\u0142 wspiera\u0107 min. platform\u0119 Native. Z mojej perspektywy jednak najciekawsz\u0105 nowo\u015bci\u0105 jest (nareszcie) wsparcie Retries.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">AWS SDK dla Kotlina ze wsparciem Korutyn<\/h3>\n\n\n\n<p>Na koniec, je\u017celi u\u017cywacie AWS i Kotlina, to bardzo polecam Wam wypr\u00f3bowa\u0107 AWS SKD w wersji Kotlinowej. Opublikowana w tym roku wersja &#8222;natywn\u0105&#8221; dla j\u0119zyka JetBrains wspiera bowiem korutyny, co jest o tyle kluczowe, \u017ce AWS SDK sk\u0142ada si\u0119 w zasadzie z samych operacji I\/O. Mi\u0142o ze strony AWS, \u017ce zdecydowa\u0142 si\u0119 na specjaln\u0105 edycj\u0119 Kotlinow\u0105 \u2013 o ile kompatybilno\u015b\u0107 tego j\u0119zyka z Jav\u0105 pozwala poradzi\u0107 sobie w wi\u0119kszo\u015bci sytuacji, o tyle dobrze, \u017ceby po 2022 nie trzeba by\u0142o si\u0119 do tego za cz\u0119sto ucieka\u0107 \u2013 w ko\u0144cu stabilne korutyny maj\u0105 ju\u017c kilka dobrych lat.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Vaadin 23<\/h3>\n\n\n\n<p>Czym jest Vaadin, wielu z Was zapyta? W czasach, kiedy wszystkim wydawa\u0142o si\u0119, \u017ce generowanie frontendu z Javy to jest rewelacyjny pomys\u0142 (a bior\u0105c tymczasowy sza\u0142 na Railsy \u2013 trudno si\u0119 tym ludziom by\u0142o dziwi\u0107), w \u015bwiecie JVMa powsta\u0142 Vaadin, kt\u00f3ry mia\u0142 zaj\u0105\u0107 si\u0119 minimalizacj\u0105 znajomo\u015bci frontendu przez osoby chc\u0105ce stworzy\u0107 pe\u0142n\u0105 aplikacj\u0119 webow\u0105. Czasy mamy troch\u0119 inne i troch\u0119 nauczyli\u015bmy si\u0119, \u017ce dedykowany in\u017cynier frontendu to jednak jest dobry pomys\u0142, ale nie sprawia to, \u017ce Vaadin daje za wygran\u0105.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/old-men-are-461e37487c.jpg\" alt=\"\" width=\"450\" height=\"313\"\/><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/vaadin.com\/blog\/vaadin-23-is-finally-here\">Nowe wydanie<\/a> min. porzuca wsparcie dla Javy starszej ni\u017c 11, a tak\u017ce zmiany w design systemie Vaadin to jednak nie tylko sam core, ale tak\u017ce ca\u0142a platforma, posiadaj\u0105ca dwa g\u0142\u00f3wne, konkurencyjne Frameworki.<\/p>\n\n\n\n<p>Pierwszym z nich jest <a href=\"https:\/\/vaadin.com\/flow\">Flow<\/a>, kt\u00f3ry s\u0142u\u017cy do generowania kodu JavaScript w 100% z poziomu Javy, a \u201cdwudziestka tr\u00f3jka\u201d przynosi min. pe\u0142ne wsparcie npm i Vite \u2013 coraz popularniejszego narz\u0119dzia dla budowanie aplikacji frontendowych.<\/p>\n\n\n\n<p>Drugi to za\u015b <a href=\"https:\/\/hilla.dev\/\">Hille<\/a>, nowy framework webowy dla programist\u00f3w Java, kt\u00f3ry \u0142\u0105czy backend ze Spring Boot z TypeScript, daj\u0105c nam \u201cpe\u0142nostosow\u0105\u201d aplikacj\u0119, je\u015bli jednak frontendem si\u0119 tak bardzo nie brzydzimy. Znany wcze\u015bniej jako Vaadin Fusion, Hilla oferowa\u0107 ma wiele mo\u017cliwo\u015bci upraszczaj\u0105cych tworzenie aplikacji biznesowych, takich jak ujednolicona konfiguracja projektu dla Java i TypeScripta. Posiada te\u017c bogaty zestaw komponent\u00f3w UI. Wygl\u0105da to ca\u0142kiem ciekawie, aczkolwiek dzisiaj osoby poszukuj\u0105ce rozwi\u0105zania FullStack, pewnie zdecyduj\u0105 si\u0119 pr\u0119dzej na JHipstera.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Helidon 3.0<\/h3>\n\n\n\n<p>Helidon stanowi swoist\u0105 implementacje referencyjn\u0105 dla MicroProfile i \u201emikro\u201d Jakarty EE od samego Oracle. Nowa edycja wymaga do dzia\u0142ania minimum JDK 17. Oracle idzie jak burza.w procesie wypychania u\u017cytkownik\u00f3w na najnowsze LTS\u2019y \u2013 jak wida\u0107 na za\u0142\u0105czonym przyk\u0142adzie, przyj\u0119li metod\u0119 kija (minimalne wspierane wydania) i marchewki (istotne nowo\u015bci).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/fe2a38f4-4dbd-4f91-b64a-db5e24718f7f_text.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Przy czym Java 17 to na dobr\u0105 spraw\u0119 te\u017c marchewka<\/figcaption><\/figure><\/div>\n\n\n<p>Bo za takow\u0105 \u201eistotn\u0105 nowo\u015b\u0107\u201d z pewno\u015bci\u0105 uzna\u0107 mo\u017cna wsparcie dla MicroProfile 5.0 oraz wyselekcjonowanych aspekt\u00f3w Jakarta EE 9.1. W jaki\u015b spos\u00f3b zabawnym jest dla mnie, \u017ce wraz z tym podbiciem r\u00f3wnie\u017c framework od Oracle pozbywa si\u0119 trademarkowanej paczki <code>javax.<\/code> na rzecz <code>jakarta<\/code>.. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce jest to pierwszy produkt korporacji kt\u00f3ry dokona\u0142 tej zmiany.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"has-text-align-center\">Je\u015bli jeszcze tu jeste\u015bcie &#8211; dzi\u0119kuj\u0119 za wytrwa\u0142o\u015b\u0107 \ud83c\udf89 <br>I mam nadziej\u0119, \u017ce 2023 b\u0119dzie r\u00f3wnie ciekawy co 2022 \ud83e\udd29<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jako, \u017ce rozpocz\u0105\u0142 si\u0119 rok 2023 i \u015bwiat JVM dopiero si\u0119 rozp\u0119dza stwierdzi\u0142em, \u017ce pierwsz\u0105 w tym roku edycj\u0119 po\u015bwi\u0119c\u0119 na podsumowanie tego, co wydarzy\u0142o si\u0119 w 2022. Wydarzy\u0142o si\u0119 wiele, tak\u017ce wyszed\u0142 mi smok, ale my\u015bl\u0119, \u017ce ca\u0142o\u015b\u0107 b\u0119dzie bardzo interesuj\u0105ca dla ka\u017cdego, kto nie \u015bledzi\u0142 uwa\u017cnie Javy w 2022.<\/p>\n","protected":false},"author":10,"featured_media":13559,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259,1],"tags":[],"class_list":["post-13547","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl","category-no-category"],"acf":{"estimated_reading_time":"28","feature_image_blog":{"ID":13561,"id":13561,"title":"ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752","filename":"ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752.png","filesize":2032237,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752.png","link":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/arturskowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752\/","alt":"","author":"10","description":"","caption":"","name":"arturskowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752","status":"inherit","uploaded_to":13547,"date":"2023-01-05 11:02:11","modified":"2023-01-05 11:02:11","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1536,"height":1024,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752-150x150.png","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752-300x200.png","medium-width":300,"medium-height":200,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752-768x512.png","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752-1024x683.png","large-width":1024,"large-height":683,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752.png","1536x1536-width":1536,"1536x1536-height":1024,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752.png","2048x2048-width":1536,"2048x2048-height":1024,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752.png","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":200,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752.png","gform-image-choice-md-width":400,"gform-image-choice-md-height":267,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ArturSkowronski_pyramide_of_toys_with_fireworks_b8a6a904-f8fc-4964-a324-2b37e0576752.png","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":400}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png","feature_image_visible":true},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 - JVM Weekly #119 - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 - JVM Weekly #119 - Vived\" \/>\n<meta property=\"og:description\" content=\"Jako, \u017ce rozpocz\u0105\u0142 si\u0119 rok 2023 i \u015bwiat JVM dopiero si\u0119 rozp\u0119dza stwierdzi\u0142em, \u017ce pierwsz\u0105 w tym roku edycj\u0119 po\u015bwi\u0119c\u0119 na podsumowanie tego, co wydarzy\u0142o si\u0119 w 2022. Wydarzy\u0142o si\u0119 wiele, tak\u017ce wyszed\u0142 mi smok, ale my\u015bl\u0119, \u017ce ca\u0142o\u015b\u0107 b\u0119dzie bardzo interesuj\u0105ca dla ka\u017cdego, kto nie \u015bledzi\u0142 uwa\u017cnie Javy w 2022.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-05T11:02:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-05T15:12:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 &#8211; JVM Weekly #119\",\"datePublished\":\"2023-01-05T11:02:33+00:00\",\"dateModified\":\"2023-01-05T15:12:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/\"},\"wordCount\":5622,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png\",\"articleSection\":[\"JVM\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/\",\"url\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/\",\"name\":\"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 - JVM Weekly #119 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png\",\"datePublished\":\"2023-01-05T11:02:33+00:00\",\"dateModified\":\"2023-01-05T15:12:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 &#8211; JVM Weekly #119\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"caption\":\"Artur Skowro\u0144ski\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 - JVM Weekly #119 - Vived","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:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/","og_locale":"pl_PL","og_type":"article","og_title":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 - JVM Weekly #119 - Vived","og_description":"Jako, \u017ce rozpocz\u0105\u0142 si\u0119 rok 2023 i \u015bwiat JVM dopiero si\u0119 rozp\u0119dza stwierdzi\u0142em, \u017ce pierwsz\u0105 w tym roku edycj\u0119 po\u015bwi\u0119c\u0119 na podsumowanie tego, co wydarzy\u0142o si\u0119 w 2022. Wydarzy\u0142o si\u0119 wiele, tak\u017ce wyszed\u0142 mi smok, ale my\u015bl\u0119, \u017ce ca\u0142o\u015b\u0107 b\u0119dzie bardzo interesuj\u0105ca dla ka\u017cdego, kto nie \u015bledzi\u0142 uwa\u017cnie Javy w 2022.","og_url":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/","og_site_name":"Vived","article_published_time":"2023-01-05T11:02:33+00:00","article_modified_time":"2023-01-05T15:12:41+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 &#8211; JVM Weekly #119","datePublished":"2023-01-05T11:02:33+00:00","dateModified":"2023-01-05T15:12:41+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/"},"wordCount":5622,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png","articleSection":["JVM","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/","url":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/","name":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 - JVM Weekly #119 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png","datePublished":"2023-01-05T11:02:33+00:00","dateModified":"2023-01-05T15:12:41+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/JVM-Weekly-1200x628_V2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/wszystko-co-mogliscie-przegapic-w-javie-w-2022-jvm-weekly-119\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Wszystko, co mogli\u015bcie przegapi\u0107 w Javie w 2022 &#8211; JVM Weekly #119"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. Rok, w kt\u00f3rym GraalVM sta\u0142 si\u0119 \"rzecz\u0105\"<\/h2>\n","innerContent":["\n<h2>1. Rok, w kt\u00f3rym GraalVM sta\u0142 si\u0119 \"rzecz\u0105\"<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi kto\u015b kaza\u0142by mi wybra\u0107, co moim zdaniem by\u0142o najwi\u0119kszym wydarzeniem w 2022 roku dla JVM, wskaza\u0142bym wszystko to, co dzia\u0142o si\u0119 w \u015bwiecie GraalVM. Mijaj\u0105cy rok bardzo rozja\u015bni\u0142 bowiem miejsce, jakie zajmuje GraalVM w ekosystemie Javy.<\/p>\n","innerContent":["\n<p>Je\u017celi kto\u015b kaza\u0142by mi wybra\u0107, co moim zdaniem by\u0142o najwi\u0119kszym wydarzeniem w 2022 roku dla JVM, wskaza\u0142bym wszystko to, co dzia\u0142o si\u0119 w \u015bwiecie GraalVM. Mijaj\u0105cy rok bardzo rozja\u015bni\u0142 bowiem miejsce, jakie zajmuje GraalVM w ekosystemie Javy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":489,"height":326},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/image-27.png\" alt=\"\" width=\"489\" height=\"326\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/10\/image-27.png\" alt=\"\" width=\"489\" height=\"326\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przez lata tym, co najbardziej blokowa\u0142o adopcj\u0119 GraalVM, by\u0142 bowiem jego niejasny model licencyjny. O ile projekt alternatywnej dla JVM, uniwersalnej maszyny wirtualnej (jednej by wszystkimi rz\u0105dzi\u0107 \ud83d\udc8d) zawsze mocno powi\u0105zany by\u0142 z JDK, o tyle w praktyce relacja mi\u0119dzy t\u0105 dw\u00f3jk\u0105 nigdy nie by\u0142a klarowna. W inny spos\u00f3b si\u0119 go rozwija\u0142o, inaczej by\u0142 dystrybuowany, ale co najwa\u017cniejsze \u2013 opiera\u0142 si\u0119 na zupe\u0142nie innej licencji ni\u017c OpenJDK. Zar\u00f3wno wydanie spo\u0142eczno\u015bciowe (GraalVM Community Edition), jak i korporacyjne (GraalVM Enterprise Edition) pozostawa\u0142y w\u0142asno\u015bci\u0105 Oracle.<\/p>\n","innerContent":["\n<p>Przez lata tym, co najbardziej blokowa\u0142o adopcj\u0119 GraalVM, by\u0142 bowiem jego niejasny model licencyjny. O ile projekt alternatywnej dla JVM, uniwersalnej maszyny wirtualnej (jednej by wszystkimi rz\u0105dzi\u0107 \ud83d\udc8d) zawsze mocno powi\u0105zany by\u0142 z JDK, o tyle w praktyce relacja mi\u0119dzy t\u0105 dw\u00f3jk\u0105 nigdy nie by\u0142a klarowna. W inny spos\u00f3b si\u0119 go rozwija\u0142o, inaczej by\u0142 dystrybuowany, ale co najwa\u017cniejsze \u2013 opiera\u0142 si\u0119 na zupe\u0142nie innej licencji ni\u017c OpenJDK. Zar\u00f3wno wydanie spo\u0142eczno\u015bciowe (GraalVM Community Edition), jak i korporacyjne (GraalVM Enterprise Edition) pozostawa\u0142y w\u0142asno\u015bci\u0105 Oracle.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Podczas JavaOne 2022 og\u0142oszono za\u015b, \u017ce Oracle oddaje GraalVM Community Edition w r\u0119ce spo\u0142eczno\u015bci i stanie si\u0119 nareszcie cz\u0119\u015bci\u0105 OpenJDK (Enterprise Edition pozostanie pod star\u0105 licencj\u0105). Jak du\u017ca jest to zmiana dla GraalVM, ale r\u00f3wnie\u017c Project Leyden i reszty ekosystemu JVM opisywa\u0142em kiedy\u015b w <a href=\"https:\/\/vived.io\/how-committing-graalvm-to-openjdk-changes-the-rules-for-project-leyden-jvm-weekly-110\/\">d\u0142u\u017cszym tek\u015bcie<\/a>. TLDR: temat kompilacji AoT w Javie wreszcie zaczyna po lat pewnego miotania si\u0119 nabiera\u0107 porz\u0105dku.<\/p>\n","innerContent":["\n<p>Podczas JavaOne 2022 og\u0142oszono za\u015b, \u017ce Oracle oddaje GraalVM Community Edition w r\u0119ce spo\u0142eczno\u015bci i stanie si\u0119 nareszcie cz\u0119\u015bci\u0105 OpenJDK (Enterprise Edition pozostanie pod star\u0105 licencj\u0105). Jak du\u017ca jest to zmiana dla GraalVM, ale r\u00f3wnie\u017c Project Leyden i reszty ekosystemu JVM opisywa\u0142em kiedy\u015b w <a href=\"https:\/\/vived.io\/how-committing-graalvm-to-openjdk-changes-the-rules-for-project-leyden-jvm-weekly-110\/\">d\u0142u\u017cszym tek\u015bcie<\/a>. TLDR: temat kompilacji AoT w Javie wreszcie zaczyna po lat pewnego miotania si\u0119 nabiera\u0107 porz\u0105dku.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodatkowo, wiemy ju\u017c, pod jak\u0105 \"parasolk\u0105\" ca\u0142e te przenosiny przebiega\u0107. GraalVM CE jest szerszym ekosystemem, a tylko cz\u0119\u015b\u0107 dotycz\u0105ca Javy b\u0119dzie migrowana do JDK. Dlatego do zaprojektowania i przeprowadzenia ca\u0142o\u015bci powo\u0142ano specjaln\u0105 inicjatyw\u0119 \u2013 projekt Galahad. Pierwszym krokiem b\u0119dzie wprowadzenie JDK drugiego (a w\u0142a\u015bciwie trzeciego) kompilatora JIT. Wiadomo te\u017c ju\u017c, \u017ce ca\u0142y GraalVM zmieni sw\u00f3j cykl wydawniczy tak, by zsynchronizowa\u0107 si\u0119 z JDK.<\/p>\n","innerContent":["\n<p>Dodatkowo, wiemy ju\u017c, pod jak\u0105 \"parasolk\u0105\" ca\u0142e te przenosiny przebiega\u0107. GraalVM CE jest szerszym ekosystemem, a tylko cz\u0119\u015b\u0107 dotycz\u0105ca Javy b\u0119dzie migrowana do JDK. Dlatego do zaprojektowania i przeprowadzenia ca\u0142o\u015bci powo\u0142ano specjaln\u0105 inicjatyw\u0119 \u2013 projekt Galahad. Pierwszym krokiem b\u0119dzie wprowadzenie JDK drugiego (a w\u0142a\u015bciwie trzeciego) kompilatora JIT. Wiadomo te\u017c ju\u017c, \u017ce ca\u0142y GraalVM zmieni sw\u00f3j cykl wydawniczy tak, by zsynchronizowa\u0107 si\u0119 z JDK.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":512,"height":288},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/7c6.jpg\" alt=\"\" width=\"512\" height=\"288\"\/><figcaption class=\"wp-element-caption\">Chyl\u0119 czo\u0142a przed nazw\u0105. Galahad to rycerz Kr\u00f3la Artura, kt\u00f3ry dostarczy\u0142 Graala do Camelotu. Sprawi\u0142a ona, \u017ce cieplutko mi si\u0119 na serduszku zrobi\u0142o mimo \u015bniegu naoko\u0142o.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/7c6.jpg\" alt=\"\" width=\"512\" height=\"288\"\/><figcaption class=\"wp-element-caption\">Chyl\u0119 czo\u0142a przed nazw\u0105. Galahad to rycerz Kr\u00f3la Artura, kt\u00f3ry dostarczy\u0142 Graala do Camelotu. Sprawi\u0142a ona, \u017ce cieplutko mi si\u0119 na serduszku zrobi\u0142o mimo \u015bniegu naoko\u0142o.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Poza zmianami organizacyjno\/licencyjnymi, du\u017ce nowo\u015bci pojawi\u0142y si\u0119 w samej platformie. Poza ci\u0105g\u0142\u0105 prac\u0105 nad performance i wsparciem nowych \u015brodowisk uruchomieniowych (min. procesor\u00f3w M1), zabrano si\u0119 za modularyzacj\u0119 platformy. Do tej pory niezale\u017cnie od tego, kt\u00f3ry z wielu j\u0119zyk\u00f3w wspieranych przez GraalVM by\u0142 przez nas u\u017cywany (a pewnie w 90% przypadk\u00f3w jest to jednak Java), bazowy obraz zawiera\u0142 pliki niezb\u0119dne do uruchomienia np. JavaScript czy LLVM. Z drugiej strony, taki Python czy Ruby musia\u0142y by\u0107 ju\u017c bezpo\u015brednio doinstalowywane. Sytuacja zosta\u0142a posprz\u0105tana w 2022 i teraz ka\u017cdy z dodatkowych modu\u0142\u00f3w musi by\u0107 doinstalowywany \u2013 \u201ego\u0142y\u201d GraalVM wspiera wy\u0142\u0105cznie Jav\u0119 (co pewnie bardzo u\u0142atwia prac\u0119 zespo\u0142u odpowiedzialnego za Galahada). Zalet\u0105 tego rozwi\u0105zania jest to, \u017ce uda\u0142o si\u0119 mocno zredukowa\u0107 bazowy rozmiar obrazu, kosztem kilku dodatkowych komend dla programist\u00f3w LLVM czy JS. Dla wi\u0119kszego dobra.<\/p>\n","innerContent":["\n<p>Poza zmianami organizacyjno\/licencyjnymi, du\u017ce nowo\u015bci pojawi\u0142y si\u0119 w samej platformie. Poza ci\u0105g\u0142\u0105 prac\u0105 nad performance i wsparciem nowych \u015brodowisk uruchomieniowych (min. procesor\u00f3w M1), zabrano si\u0119 za modularyzacj\u0119 platformy. Do tej pory niezale\u017cnie od tego, kt\u00f3ry z wielu j\u0119zyk\u00f3w wspieranych przez GraalVM by\u0142 przez nas u\u017cywany (a pewnie w 90% przypadk\u00f3w jest to jednak Java), bazowy obraz zawiera\u0142 pliki niezb\u0119dne do uruchomienia np. JavaScript czy LLVM. Z drugiej strony, taki Python czy Ruby musia\u0142y by\u0107 ju\u017c bezpo\u015brednio doinstalowywane. Sytuacja zosta\u0142a posprz\u0105tana w 2022 i teraz ka\u017cdy z dodatkowych modu\u0142\u00f3w musi by\u0107 doinstalowywany \u2013 \u201ego\u0142y\u201d GraalVM wspiera wy\u0142\u0105cznie Jav\u0119 (co pewnie bardzo u\u0142atwia prac\u0119 zespo\u0142u odpowiedzialnego za Galahada). Zalet\u0105 tego rozwi\u0105zania jest to, \u017ce uda\u0142o si\u0119 mocno zredukowa\u0107 bazowy rozmiar obrazu, kosztem kilku dodatkowych komend dla programist\u00f3w LLVM czy JS. Dla wi\u0119kszego dobra.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/hot-fuzz.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Reakcja programist\u00f3w JavaScript na zapowiedzi GraalVM<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/hot-fuzz.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Reakcja programist\u00f3w JavaScript na zapowiedzi GraalVM<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>GraalVM AD 2022 to te\u017c lepsza obs\u0142uga bibliotek zewn\u0119trznych. Jako, \u017ce GraalVM tworzy statyczny obraz zawieraj\u0105cy pre-kompilowane klasy, na etapie tworzenia artefaktu wynikowego zmuszony jest do wyczyszczenia tych klas, kt\u00f3re nie s\u0105 u\u017cywane z poziomu wej\u015bcia aplikacji. O ile brzmi to rozs\u0105dnie, to w Javie do\u015b\u0107 mocno rozpanoszy\u0142 si\u0119 mechanizm refleksji, kt\u00f3ry sprawia, \u017ce aplikacja mo\u017ce odnie\u015b\u0107 si\u0119 do arbitralnie dowolnej klasy dost\u0119pnej na classpath.<\/p>\n","innerContent":["\n<p>GraalVM AD 2022 to te\u017c lepsza obs\u0142uga bibliotek zewn\u0119trznych. Jako, \u017ce GraalVM tworzy statyczny obraz zawieraj\u0105cy pre-kompilowane klasy, na etapie tworzenia artefaktu wynikowego zmuszony jest do wyczyszczenia tych klas, kt\u00f3re nie s\u0105 u\u017cywane z poziomu wej\u015bcia aplikacji. O ile brzmi to rozs\u0105dnie, to w Javie do\u015b\u0107 mocno rozpanoszy\u0142 si\u0119 mechanizm refleksji, kt\u00f3ry sprawia, \u017ce aplikacja mo\u017ce odnie\u015b\u0107 si\u0119 do arbitralnie dowolnej klasy dost\u0119pnej na classpath.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A co je\u015bli takowego classpath nie ma? Szcz\u0119\u015bliwie, mo\u017cemy przekaza\u0107 GraalVM list\u0119 klas, kt\u00f3rych nie powinien czy\u015bci\u0107 (programi\u015bci Androida znaj\u0105 ten mechanizm pewnie z ProGuarda). W wypadku bibliotek third-party prowadzi\u0142o to jednak do duplikacji pracy, gdy ka\u017cdy projekt musia\u0142 w zasadzie robi\u0107 to samodzielnie. Dlatego w 2022 pojawi\u0142o si\u0119 <strong><a href=\"https:\/\/www.graalvm.org\/22.2\/reference-manual\/native-image\/metadata\/\">GraalVM Reachability Metadata Repository<\/a><\/strong>, spo\u0142eczno\u015bciowe centrum pozwalaj\u0105ce dzieli\u0107 si\u0119 takimi definicjami \u2013 troch\u0119 jak to ma miejsce np. z typami w TypeScripcie. Co najwa\u017cniejsze \u2013 <strong>GraalVM Native Build Tools<\/strong> mog\u0105 zosta\u0107 skonfigurowane, aby automatycznie zaci\u0105ga\u0107 te definicje do znalezionych w kodzie zale\u017cno\u015bci.<\/p>\n","innerContent":["\n<p>A co je\u015bli takowego classpath nie ma? Szcz\u0119\u015bliwie, mo\u017cemy przekaza\u0107 GraalVM list\u0119 klas, kt\u00f3rych nie powinien czy\u015bci\u0107 (programi\u015bci Androida znaj\u0105 ten mechanizm pewnie z ProGuarda). W wypadku bibliotek third-party prowadzi\u0142o to jednak do duplikacji pracy, gdy ka\u017cdy projekt musia\u0142 w zasadzie robi\u0107 to samodzielnie. Dlatego w 2022 pojawi\u0142o si\u0119 <strong><a href=\"https:\/\/www.graalvm.org\/22.2\/reference-manual\/native-image\/metadata\/\">GraalVM Reachability Metadata Repository<\/a><\/strong>, spo\u0142eczno\u015bciowe centrum pozwalaj\u0105ce dzieli\u0107 si\u0119 takimi definicjami \u2013 troch\u0119 jak to ma miejsce np. z typami w TypeScripcie. Co najwa\u017cniejsze \u2013 <strong>GraalVM Native Build Tools<\/strong> mog\u0105 zosta\u0107 skonfigurowane, aby automatycznie zaci\u0105ga\u0107 te definicje do znalezionych w kodzie zale\u017cno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Inwestycje gigant\u00f3w BigTech w Jav\u0119<\/h2>\n","innerContent":["\n<h2>2. Inwestycje gigant\u00f3w BigTech w Jav\u0119<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pewnie wi\u0119kszo\u015b\u0107 kojarzy projekt AdoptOpenJDK, kt\u00f3ry powsta\u0142 jako efekt wysi\u0142k\u00f3w spo\u0142eczno\u015bci walcz\u0105cej o \u201cwoln\u0105\u201d implementacje JDK w momencie, kiedy Oracle par\u0119 lat temu uczyni\u0142 Oracle JDK p\u0142atnym dla u\u017cytku komercyjnego. AdoptOpenJDK pocz\u0105tkowo rozwijany by\u0142 przez spo\u0142eczno\u015b\u0107 JUG\u00f3w z ca\u0142ego \u015bwiata, by ostatecznie trafi\u0107 pod skrzyd\u0142a Eclipse Foundation. W efekcie AdoptOpenJDK zosta\u0142o przechrzczone na na Eclipse Adoptium (JDK jest znakiem towarowym nale\u017c\u0105cym do Oracle), a do opieki nad projektem powsta\u0142a Adoptium Working Group. Oczywi\u015bcie, kto\u015b nad tym kodem musi pracowa\u0107 i go utrzymywa\u0107, dlatego Adoptium Working Group posiada swoich korporacyjnych sponsor\u00f3w. I to takich naprawd\u0119 du\u017cych, a w 2022 mieli\u015bmy zwi\u0105zane z tym kilka og\u0142osze\u0144.<\/p>\n","innerContent":["\n<p>Pewnie wi\u0119kszo\u015b\u0107 kojarzy projekt AdoptOpenJDK, kt\u00f3ry powsta\u0142 jako efekt wysi\u0142k\u00f3w spo\u0142eczno\u015bci walcz\u0105cej o \u201cwoln\u0105\u201d implementacje JDK w momencie, kiedy Oracle par\u0119 lat temu uczyni\u0142 Oracle JDK p\u0142atnym dla u\u017cytku komercyjnego. AdoptOpenJDK pocz\u0105tkowo rozwijany by\u0142 przez spo\u0142eczno\u015b\u0107 JUG\u00f3w z ca\u0142ego \u015bwiata, by ostatecznie trafi\u0107 pod skrzyd\u0142a Eclipse Foundation. W efekcie AdoptOpenJDK zosta\u0142o przechrzczone na na Eclipse Adoptium (JDK jest znakiem towarowym nale\u017c\u0105cym do Oracle), a do opieki nad projektem powsta\u0142a Adoptium Working Group. Oczywi\u015bcie, kto\u015b nad tym kodem musi pracowa\u0107 i go utrzymywa\u0107, dlatego Adoptium Working Group posiada swoich korporacyjnych sponsor\u00f3w. I to takich naprawd\u0119 du\u017cych, a w 2022 mieli\u015bmy zwi\u0105zane z tym kilka og\u0142osze\u0144.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Taki np. RedHat (mimo \u017ce przez wiele lat posiada\u0142 w\u0142asne OpenJDK) <a href=\"https:\/\/developers.redhat.com\/articles\/2022\/08\/24\/red-hat-expands-support-java-eclipse-temurin\">w 2022 og\u0142osi\u0142, \u017ce zamierza skupi\u0107 si\u0119 na Temurinie<\/a>. Oznacza to, \u017ce klienci firmy mog\u0105 liczy\u0107 na oficjalny support tego wydania i to w\u0142a\u015bnie ono ma by\u0107 dost\u0119pne we wszystkich produktach firmy. Jest to troch\u0119 inny model ni\u017c np. Microsoftu, kt\u00f3ry u\u017cywa Temurina jako buildu dla JDK 8, ale do p\u00f3\u017aniejszych JDK posiada swoje w\u0142asne warianty.<\/p>\n","innerContent":["\n<p>Taki np. RedHat (mimo \u017ce przez wiele lat posiada\u0142 w\u0142asne OpenJDK) <a href=\"https:\/\/developers.redhat.com\/articles\/2022\/08\/24\/red-hat-expands-support-java-eclipse-temurin\">w 2022 og\u0142osi\u0142, \u017ce zamierza skupi\u0107 si\u0119 na Temurinie<\/a>. Oznacza to, \u017ce klienci firmy mog\u0105 liczy\u0107 na oficjalny support tego wydania i to w\u0142a\u015bnie ono ma by\u0107 dost\u0119pne we wszystkich produktach firmy. Jest to troch\u0119 inny model ni\u017c np. Microsoftu, kt\u00f3ry u\u017cywa Temurina jako buildu dla JDK 8, ale do p\u00f3\u017aniejszych JDK posiada swoje w\u0142asne warianty.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>RedHat jednak zawsze z rozwojem OpenJDK w wi\u0119kszym lub mniejszym stopniu si\u0119 kojarzy\u0142. Du\u017co wi\u0119kszym by\u0142o og\u0142oszenie od Google. Firma <a href=\"https:\/\/adoptium.net\/blog\/2022\/10\/adoptium-welcomes-google\/\">zapowiedzia\u0142a bowiem, \u017ce do\u0142\u0105cza do grupy roboczej Adoptium jak Cz\u0142onek Strategiczny<\/a>. Google nie ograniczy\u0142o si\u0119 tylko i wy\u0142\u0105cznie do rzucania w JDK workami pieni\u0119dzy, ale wraz z Alibab\u0105 <a href=\"https:\/\/www.alibabacloud.com\/blog\/a-short-exploration-of-java-class-pre-initialization_599378\">zacz\u0119li pracowa\u0107 nad przyspieszeniem startu platformy<\/a>.<\/p>\n","innerContent":["\n<p>RedHat jednak zawsze z rozwojem OpenJDK w wi\u0119kszym lub mniejszym stopniu si\u0119 kojarzy\u0142. Du\u017co wi\u0119kszym by\u0142o og\u0142oszenie od Google. Firma <a href=\"https:\/\/adoptium.net\/blog\/2022\/10\/adoptium-welcomes-google\/\">zapowiedzia\u0142a bowiem, \u017ce do\u0142\u0105cza do grupy roboczej Adoptium jak Cz\u0142onek Strategiczny<\/a>. Google nie ograniczy\u0142o si\u0119 tylko i wy\u0142\u0105cznie do rzucania w JDK workami pieni\u0119dzy, ale wraz z Alibab\u0105 <a href=\"https:\/\/www.alibabacloud.com\/blog\/a-short-exploration-of-java-class-pre-initialization_599378\">zacz\u0119li pracowa\u0107 nad przyspieszeniem startu platformy<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wspomniany ju\u017c Microsoft postanowi\u0142 p\u00f3j\u015b\u0107 jednak jeszcze szerzej. S\u0105 czasem takie nag\u0142\u00f3wki, po kt\u00f3rych przeczytaniu musz\u0119 upewni\u0107 \u017ce wszystko dobrze zrozumia\u0142em. W pierwszej chwili informacja, \u017ce Microsoft <a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/microsoft-joins-jakarta-ee-and-microprofile-working-groups-at-eclipse-foundation\/\">staje si\u0119 cz\u0119\u015bci\u0105 cia\u0142a standaryzuj\u0105cego zar\u00f3wno Jakarty EE, jak i MicroProfilu<\/a> wyda\u0142a mi si\u0119 by\u0107 po prostu\u2026 jaka\u015b nierealistyczna.<\/p>\n","innerContent":["\n<p>Wspomniany ju\u017c Microsoft postanowi\u0142 p\u00f3j\u015b\u0107 jednak jeszcze szerzej. S\u0105 czasem takie nag\u0142\u00f3wki, po kt\u00f3rych przeczytaniu musz\u0119 upewni\u0107 \u017ce wszystko dobrze zrozumia\u0142em. W pierwszej chwili informacja, \u017ce Microsoft <a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/microsoft-joins-jakarta-ee-and-microprofile-working-groups-at-eclipse-foundation\/\">staje si\u0119 cz\u0119\u015bci\u0105 cia\u0142a standaryzuj\u0105cego zar\u00f3wno Jakarty EE, jak i MicroProfilu<\/a> wyda\u0142a mi si\u0119 by\u0107 po prostu\u2026 jaka\u015b nierealistyczna.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/07\/Untitled-1-1024x227.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek akurat Microsoft lubi takimi rzeczami zaskakiwa\u0107. Do tej pory pami\u0119tam moje oczy, gdy to w\u0142a\u015bnie oni wypu\u015bcili wersj\u0119 Javy na procesory M1 \ud83d\ude40<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/07\/Untitled-1-1024x227.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek akurat Microsoft lubi takimi rzeczami zaskakiwa\u0107. Do tej pory pami\u0119tam moje oczy, gdy to w\u0142a\u015bnie oni wypu\u015bcili wersj\u0119 Javy na procesory M1 \ud83d\ude40<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jest to jednak do\u015b\u0107 naturalny ruch: Microsoft schyli\u0142 si\u0119 po prostu po nisko wisz\u0105ce pieni\u0105dze. Azure b\u0119dzie pierwsz\u0105 chmur\u0105, kt\u00f3ra zapewni natywne us\u0142ugi serwer\u00f3w aplikacyjnych Javy. Ju\u017c dzisiaj dost\u0119pne zostan\u0105 zar\u00f3wno WebLogic, jak i WebSphere czy JBoss EAP.<\/p>\n","innerContent":["\n<p>Jest to jednak do\u015b\u0107 naturalny ruch: Microsoft schyli\u0142 si\u0119 po prostu po nisko wisz\u0105ce pieni\u0105dze. Azure b\u0119dzie pierwsz\u0105 chmur\u0105, kt\u00f3ra zapewni natywne us\u0142ugi serwer\u00f3w aplikacyjnych Javy. Ju\u017c dzisiaj dost\u0119pne zostan\u0105 zar\u00f3wno WebLogic, jak i WebSphere czy JBoss EAP.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Aczkolwiek w temacie wsparcia chmurowego dla Jakarty, dalej uwa\u017cam, \u017ce najciekawszym nowym projektem roku by\u0142a <a href=\"https:\/\/www.payara.fish\/products\/payara-cloud\/\">Payara Cloud<\/a>. Dzia\u0142a ona tak, \u017ce bierzesz swojego <strong>*.war<\/strong> zgodnego ze specyfikacj\u0105 Jakarta Web Profile, uploadujesz go na chmur\u0119 i\u2026 gotowe. Je\u015bli spojrzymy na Serwery Aplikacyjne jako \u015brodowisko uruchomieniowy dla aplikacji (czym w zasadzie s\u0105), to podej\u015bcie \u201ewrzucam jar\/war i zapominam o mojej aplikacji cloud-native\u201d wydaje si\u0119 by\u0107 a\u017c nazbyt kusz\u0105ce.<\/p>\n","innerContent":["\n<p>Aczkolwiek w temacie wsparcia chmurowego dla Jakarty, dalej uwa\u017cam, \u017ce najciekawszym nowym projektem roku by\u0142a <a href=\"https:\/\/www.payara.fish\/products\/payara-cloud\/\">Payara Cloud<\/a>. Dzia\u0142a ona tak, \u017ce bierzesz swojego <strong>*.war<\/strong> zgodnego ze specyfikacj\u0105 Jakarta Web Profile, uploadujesz go na chmur\u0119 i\u2026 gotowe. Je\u015bli spojrzymy na Serwery Aplikacyjne jako \u015brodowisko uruchomieniowy dla aplikacji (czym w zasadzie s\u0105), to podej\u015bcie \u201ewrzucam jar\/war i zapominam o mojej aplikacji cloud-native\u201d wydaje si\u0119 by\u0107 a\u017c nazbyt kusz\u0105ce.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po prostu ponownie historia zatoczy\u0142a ko\u0142o.<\/p>\n","innerContent":["\n<p>Po prostu ponownie historia zatoczy\u0142a ko\u0142o.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. JDK 11 w Androidzie<\/h2>\n","innerContent":["\n<h2>3. JDK 11 w Androidzie<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W 2022 premier\u0119 mia\u0142 Android 13. Nie s\u0142yszeli\u015bcie o tym? Nic dziwnego. Kiedy\u015b by\u0142a to naprawd\u0119 du\u017ce wydarzenie, ale dzi\u015b premiera w tym wypadku oznacza\u0142a \u201ezmergowanie\u201d ca\u0142o\u015bci do g\u0142\u00f3wnej ga\u0142\u0119zi AOSP (Android Open-Source Project) oraz wypuszczenie nowej wersji na Pixele. Potem za\u015b zaczyna si\u0119 okres oczekiwania na ruchy reszty graczy rynkowych \u2013 troch\u0119 jak to ma miejsce w wypadku Kernela Linuxa. R\u00f3wnie\u017c lista nowo\u015bci jest z nim do\u015b\u0107 zbli\u017cona \u2013 wi\u0119kszo\u015b\u0107 zmian odbywa si\u0119 teraz \"pod mask\u0105\".<\/p>\n","innerContent":["\n<p>W 2022 premier\u0119 mia\u0142 Android 13. Nie s\u0142yszeli\u015bcie o tym? Nic dziwnego. Kiedy\u015b by\u0142a to naprawd\u0119 du\u017ce wydarzenie, ale dzi\u015b premiera w tym wypadku oznacza\u0142a \u201ezmergowanie\u201d ca\u0142o\u015bci do g\u0142\u00f3wnej ga\u0142\u0119zi AOSP (Android Open-Source Project) oraz wypuszczenie nowej wersji na Pixele. Potem za\u015b zaczyna si\u0119 okres oczekiwania na ruchy reszty graczy rynkowych \u2013 troch\u0119 jak to ma miejsce w wypadku Kernela Linuxa. R\u00f3wnie\u017c lista nowo\u015bci jest z nim do\u015b\u0107 zbli\u017cona \u2013 wi\u0119kszo\u015b\u0107 zmian odbywa si\u0119 teraz \"pod mask\u0105\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dlaczego wi\u0119c o tym pisz\u0119? Ot\u00f3\u017c wraz z \"trzynastk\u0105\" \u015bwi\u0119towali\u015bmy <a href=\"https:\/\/android-developers.googleblog.com\/2022\/08\/android-13-is-in-aosp.html\">przej\u015bcie Androida na OpenJDK 11<\/a>, wprowadzaj\u0105c do platformy min. Mo\u017cliwo\u015b\u0107 u\u017cywania var, VarHandle z <code>java.util.concurrent<\/code> czy wielu innych pomocniczych API (jak <code>Optional.ifPresentOrElse()<\/code> \u2764\ufe0f). Wida\u0107, \u017ce wyniki procesu Google\/Oracle z 2021 rozwi\u0105za\u0142y tw\u00f3rcom r\u0119ce i powoli b\u0119d\u0105 wdra\u017ca\u0107 nowo\u015bci z Javy do Androida.<\/p>\n","innerContent":["\n<p>Dlaczego wi\u0119c o tym pisz\u0119? Ot\u00f3\u017c wraz z \"trzynastk\u0105\" \u015bwi\u0119towali\u015bmy <a href=\"https:\/\/android-developers.googleblog.com\/2022\/08\/android-13-is-in-aosp.html\">przej\u015bcie Androida na OpenJDK 11<\/a>, wprowadzaj\u0105c do platformy min. Mo\u017cliwo\u015b\u0107 u\u017cywania var, VarHandle z <code>java.util.concurrent<\/code> czy wielu innych pomocniczych API (jak <code>Optional.ifPresentOrElse()<\/code> \u2764\ufe0f). Wida\u0107, \u017ce wyniki procesu Google\/Oracle z 2021 rozwi\u0105za\u0142y tw\u00f3rcom r\u0119ce i powoli b\u0119d\u0105 wdra\u017ca\u0107 nowo\u015bci z Javy do Androida.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-17.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek wiem, \u017ce pewnie wszyscy zainteresowani ju\u017c dawno u\u017cywaj\u0105 Kotlina<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/image-17.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek wiem, \u017ce pewnie wszyscy zainteresowani ju\u017c dawno u\u017cywaj\u0105 Kotlina<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>4. Helidon N\u00edma - pierwszy Framework Loom-first<\/h2>\n","innerContent":["\n<h2>4. Helidon N\u00edma - pierwszy Framework Loom-first<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Project Loom nie schodzi\u0142 z j\u0119zyk\u00f3w w zasadzie przez wi\u0119kszo\u015b\u0107 2022, ale je\u015bli mia\u0142bym wybra\u0107 jedn\u0105 zapowied\u017a, kt\u00f3ra jest najbardziej ekscytuj\u0105c\u0105 w tym kontek\u015bcie, to by\u0142by to Helidon N\u00edma. Okazuje si\u0119 bowiem, \u017ce szykuje nam si\u0119 pierwszy(?) framework, w kt\u00f3rym Loom nie b\u0119dzie doklejonym dodatkiem, a \u201eFirst-Class Citizen\u201d.<\/p>\n","innerContent":["\n<p>Project Loom nie schodzi\u0142 z j\u0119zyk\u00f3w w zasadzie przez wi\u0119kszo\u015b\u0107 2022, ale je\u015bli mia\u0142bym wybra\u0107 jedn\u0105 zapowied\u017a, kt\u00f3ra jest najbardziej ekscytuj\u0105c\u0105 w tym kontek\u015bcie, to by\u0142by to Helidon N\u00edma. Okazuje si\u0119 bowiem, \u017ce szykuje nam si\u0119 pierwszy(?) framework, w kt\u00f3rym Loom nie b\u0119dzie doklejonym dodatkiem, a \u201eFirst-Class Citizen\u201d.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":498,"height":280},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/download-2.png\" alt=\"\" width=\"498\" height=\"280\"\/><figcaption class=\"wp-element-caption\">\u201e\u00ed\u201d to tak zwane \u201ei z akcentem ostrym (akutem)\u201d, co mo\u017ce nam sugerowa\u0107, jak nazwa N\u00edma b\u0119dzie wymawiana.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/download-2.png\" alt=\"\" width=\"498\" height=\"280\"\/><figcaption class=\"wp-element-caption\">\u201e\u00ed\u201d to tak zwane \u201ei z akcentem ostrym (akutem)\u201d, co mo\u017ce nam sugerowa\u0107, jak nazwa N\u00edma b\u0119dzie wymawiana.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na razie <a href=\"https:\/\/medium.com\/helidon\/helidon-n%C3%ADma-helidon-on-virtual-threads-130bb2ea2088\">ukaza\u0142a si\u0119 wersja Alfa<\/a>, a na pe\u0142n\u0105 przyjdzie nam jeszcze poczeka\u0107 \u2013 tw\u00f3rcy zapowiedzieli bowiem, \u017ce prac\u0119 nad ni\u0105 powstan\u0105 mniej wi\u0119cej do ko\u0144ca tego roku, kiedy nale\u017cy si\u0119 spodziewa\u0107 jej stabilnego wydania, r\u00f3wnoleg\u0142ego do Helidona 4.0. Jak na tak wczesny etap otrzymali\u015bmy ju\u017c ca\u0142kiem sporo szczeg\u00f3\u0142\u00f3w technicznych \u2013 towarzysz\u0105ca postowi premierowemu <a href=\"https:\/\/medium.com\/helidon\/helidon-n%C3%ADma-helidon-on-virtual-threads-130bb2ea2088\">publikacja Thomasa Langera<\/a> skupia si\u0119 na tym, jak N\u00edma na tym etapie prezentuje si\u0119 w por\u00f3wnaniu z MicroProfilowym Helidonem, a tak\u017ce z bezpo\u015bredni\u0105 konkurencj\u0105, za jak\u0105 tw\u00f3rcy uznaj\u0105 Netty\u2019ego. Jak mo\u017cna przeczyta\u0107, jednym z cel\u00f3w N\u00edmy jest w\u0142a\u015bnie ca\u0142kowite wyrugowanie Netty\u2019ego z helidonowego ekosystemu.<\/p>\n","innerContent":["\n<p>Na razie <a href=\"https:\/\/medium.com\/helidon\/helidon-n%C3%ADma-helidon-on-virtual-threads-130bb2ea2088\">ukaza\u0142a si\u0119 wersja Alfa<\/a>, a na pe\u0142n\u0105 przyjdzie nam jeszcze poczeka\u0107 \u2013 tw\u00f3rcy zapowiedzieli bowiem, \u017ce prac\u0119 nad ni\u0105 powstan\u0105 mniej wi\u0119cej do ko\u0144ca tego roku, kiedy nale\u017cy si\u0119 spodziewa\u0107 jej stabilnego wydania, r\u00f3wnoleg\u0142ego do Helidona 4.0. Jak na tak wczesny etap otrzymali\u015bmy ju\u017c ca\u0142kiem sporo szczeg\u00f3\u0142\u00f3w technicznych \u2013 towarzysz\u0105ca postowi premierowemu <a href=\"https:\/\/medium.com\/helidon\/helidon-n%C3%ADma-helidon-on-virtual-threads-130bb2ea2088\">publikacja Thomasa Langera<\/a> skupia si\u0119 na tym, jak N\u00edma na tym etapie prezentuje si\u0119 w por\u00f3wnaniu z MicroProfilowym Helidonem, a tak\u017ce z bezpo\u015bredni\u0105 konkurencj\u0105, za jak\u0105 tw\u00f3rcy uznaj\u0105 Netty\u2019ego. Jak mo\u017cna przeczyta\u0107, jednym z cel\u00f3w N\u00edmy jest w\u0142a\u015bnie ca\u0142kowite wyrugowanie Netty\u2019ego z helidonowego ekosystemu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image-8.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Ci\u0105gle pami\u0119tam, gdy to w\u0142a\u015bnie Netty by\u0142a pupilem spo\u0142eczno\u015bci<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image-8.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Ci\u0105gle pami\u0119tam, gdy to w\u0142a\u015bnie Netty by\u0142a pupilem spo\u0142eczno\u015bci<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>5. Akka zmieni\u0142a model licencyjny<\/h2>\n","innerContent":["\n<h2>5. Akka zmieni\u0142a model licencyjny<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Akka to w dzisiejszych czasach jeden z g\u0142\u00f3wnych trzon\u00f3w Scali i jeden z g\u0142\u00f3wnych powod\u00f3w, dla kt\u00f3rych to w\u0142a\u015bnie tym j\u0119zykiem interesuj\u0105 si\u0119 firmy. Jest to jedna z najlepszych w ca\u0142ej bran\u017cy implementacji modelu aktorowego, kt\u00f3ry dzi\u0119ki wsparciu dojrza\u0142ej (i dobrze znanej w bran\u017cy) platformy \u2013 jak\u0105 jest JVM \u2013 stanowi\u0142a prawdziwie bardzo kusz\u0105c\u0105 kombinacje. Dlatego te\u017c tak du\u017cym echem w bran\u017cy odbi\u0142a si\u0119 w \u015bwiecie programistycznym wiadomo\u015b\u0107, \u017ce od wersji 2.7 <a href=\"https:\/\/www.lightbend.com\/company\/news\/lightbend-changes-its-software-licensing-model-for-akka-technology\">Akka zmienia model licencyjny z Apache 2.0 na BSL v1.1 (Business Source License)<\/a>, stworzonej przez MariaDB. Zmiana licencji oznacza w zasadzie zamkni\u0119cie etapu rozwoju Akki w oparciu o tak zwany \u201eOpen Core\u201d.<\/p>\n","innerContent":["\n<p>Akka to w dzisiejszych czasach jeden z g\u0142\u00f3wnych trzon\u00f3w Scali i jeden z g\u0142\u00f3wnych powod\u00f3w, dla kt\u00f3rych to w\u0142a\u015bnie tym j\u0119zykiem interesuj\u0105 si\u0119 firmy. Jest to jedna z najlepszych w ca\u0142ej bran\u017cy implementacji modelu aktorowego, kt\u00f3ry dzi\u0119ki wsparciu dojrza\u0142ej (i dobrze znanej w bran\u017cy) platformy \u2013 jak\u0105 jest JVM \u2013 stanowi\u0142a prawdziwie bardzo kusz\u0105c\u0105 kombinacje. Dlatego te\u017c tak du\u017cym echem w bran\u017cy odbi\u0142a si\u0119 w \u015bwiecie programistycznym wiadomo\u015b\u0107, \u017ce od wersji 2.7 <a href=\"https:\/\/www.lightbend.com\/company\/news\/lightbend-changes-its-software-licensing-model-for-akka-technology\">Akka zmienia model licencyjny z Apache 2.0 na BSL v1.1 (Business Source License)<\/a>, stworzonej przez MariaDB. Zmiana licencji oznacza w zasadzie zamkni\u0119cie etapu rozwoju Akki w oparciu o tak zwany \u201eOpen Core\u201d.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co BSL oznacza dla Akki w praktyce? Ot\u00f3\u017c nowe wersje b\u0119d\u0105 w dalszym ci\u0105gu publikowane pod Apache 2.0, jednak ze sporym op\u00f3\u017anieniem \u2013 dopiero po trzech latach. Do tego czasu ka\u017cda nowa wersja b\u0119dzie co prawda udost\u0119pniana wraz ze \u017ar\u00f3d\u0142ami, ale za darmo b\u0119dzie wolno z niej korzysta\u0107 wy\u0142\u0105cznie na \u015brodowiskach nieprodukcyjnych. Je\u017celi b\u0119dziemy chcieli u\u017cy\u0107 Akki w systemie produkcyjnym, a roczny przych\u00f3d naszej firmy przekracza 25 milion\u00f3w dolar\u00f3w, niezb\u0119dne b\u0119dzie uiszczenie op\u0142at licencyjnych. Ich ceny zaczynaj\u0105 si\u0119 od oko\u0142o $2,000 USD za rdze\u0144 procesora, definiowany jako rdze\u0144 sprz\u0119towy \/ vCore \/ vCPU. Je\u017celi chcemy zmodyfikowa\u0107 Akk\u0119 na swoje potrzeby, licencja wyniesie nas $72,000 USD.<\/p>\n","innerContent":["\n<p>Co BSL oznacza dla Akki w praktyce? Ot\u00f3\u017c nowe wersje b\u0119d\u0105 w dalszym ci\u0105gu publikowane pod Apache 2.0, jednak ze sporym op\u00f3\u017anieniem \u2013 dopiero po trzech latach. Do tego czasu ka\u017cda nowa wersja b\u0119dzie co prawda udost\u0119pniana wraz ze \u017ar\u00f3d\u0142ami, ale za darmo b\u0119dzie wolno z niej korzysta\u0107 wy\u0142\u0105cznie na \u015brodowiskach nieprodukcyjnych. Je\u017celi b\u0119dziemy chcieli u\u017cy\u0107 Akki w systemie produkcyjnym, a roczny przych\u00f3d naszej firmy przekracza 25 milion\u00f3w dolar\u00f3w, niezb\u0119dne b\u0119dzie uiszczenie op\u0142at licencyjnych. Ich ceny zaczynaj\u0105 si\u0119 od oko\u0142o $2,000 USD za rdze\u0144 procesora, definiowany jako rdze\u0144 sprz\u0119towy \/ vCore \/ vCPU. Je\u017celi chcemy zmodyfikowa\u0107 Akk\u0119 na swoje potrzeby, licencja wyniesie nas $72,000 USD.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/giphy.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Mam wra\u017cenie, \u017ce tego typu sumy nie b\u0119dzie tak \u0142atwo przepchn\u0105\u0107 przez firmowe finanse.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/giphy.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Mam wra\u017cenie, \u017ce tego typu sumy nie b\u0119dzie tak \u0142atwo przepchn\u0105\u0107 przez firmowe finanse.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>6. AWS Lambda SnapStart<\/h2>\n","innerContent":["\n<h2>6. AWS Lambda SnapStart<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Czy\u017cby\u015bmy zapami\u0119tali 2022 jako rok, w kt\u00f3rym problem \"zimnego startu\" Java zosta\u0142 ostatecznie rozwi\u0105zany, przynajmniej na AWSie? Jest na to spora szansa, poniewa\u017c ko\u0144cem roku Amazon - nieco z zaskoczenia - <a href=\"https:\/\/aws.amazon.com\/blogs\/aws\/new-accelerate-your-lambda-functions-with-lambda-snapstart\/\">pokaza\u0142 AWS Lambda SnapStart<\/a>.<\/p>\n","innerContent":["\n<p>Czy\u017cby\u015bmy zapami\u0119tali 2022 jako rok, w kt\u00f3rym problem \"zimnego startu\" Java zosta\u0142 ostatecznie rozwi\u0105zany, przynajmniej na AWSie? Jest na to spora szansa, poniewa\u017c ko\u0144cem roku Amazon - nieco z zaskoczenia - <a href=\"https:\/\/aws.amazon.com\/blogs\/aws\/new-accelerate-your-lambda-functions-with-lambda-snapstart\/\">pokaza\u0142 AWS Lambda SnapStart<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wykonanie ka\u017cdej funkcji Lambda sk\u0142ada si\u0119 z trzech faz \u2013 Init, Invoke oraz Shutdown. Bootstrap \u015brodowiska w ramach pierwszej z nich polega na przygotowanie ca\u0142ego \u015brodowiska do stanu, w kt\u00f3rym jest w stanie przyjmowa\u0107 ruch - jest to w\u0142a\u015bnie wspomniany Cold Start. Aby unikn\u0105\u0107 powtarzania tej operacji, SnapStart w tym momencie stan pami\u0119ci lambdy zapisuje i odk\u0142ada \u201ena p\u00f3\u017aniej\u201d, gdy nasza funkcja nie b\u0119dzie wystarczaj\u0105co rozgrzana. Dzi\u0119ki temu czas uruchomienia zostaje zredukowany do minimum. Ca\u0142o\u015b\u0107 pod spodem u\u017cywa \u015bwie\u017cutkiego (i wci\u0105\u017c rozwijanego) javowego API CRaC, kt\u00f3re pomaga w sytuacji, gdy niezb\u0119dne jest od\u015bwie\u017cenie snapshotu \u2013 AWS Lambda udost\u0119pnia odpowiednie hooki.<\/p>\n","innerContent":["\n<p>Wykonanie ka\u017cdej funkcji Lambda sk\u0142ada si\u0119 z trzech faz \u2013 Init, Invoke oraz Shutdown. Bootstrap \u015brodowiska w ramach pierwszej z nich polega na przygotowanie ca\u0142ego \u015brodowiska do stanu, w kt\u00f3rym jest w stanie przyjmowa\u0107 ruch - jest to w\u0142a\u015bnie wspomniany Cold Start. Aby unikn\u0105\u0107 powtarzania tej operacji, SnapStart w tym momencie stan pami\u0119ci lambdy zapisuje i odk\u0142ada \u201ena p\u00f3\u017aniej\u201d, gdy nasza funkcja nie b\u0119dzie wystarczaj\u0105co rozgrzana. Dzi\u0119ki temu czas uruchomienia zostaje zredukowany do minimum. Ca\u0142o\u015b\u0107 pod spodem u\u017cywa \u015bwie\u017cutkiego (i wci\u0105\u017c rozwijanego) javowego API CRaC, kt\u00f3re pomaga w sytuacji, gdy niezb\u0119dne jest od\u015bwie\u017cenie snapshotu \u2013 AWS Lambda udost\u0119pnia odpowiednie hooki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli temat Was zaciekawi\u0142, <a href=\"https:\/\/vived.io\/the-road-to-aws-lambda-snapstart-guide-through-the-years-of-jvm-cold-start-tinkering-jvm-weekly-115\/\">rozpisa\u0142em si\u0119 kiedy\u015b<\/a> w tej kwestii w ca\u0142kiem d\u0142ugim tek\u015bcie, min. lepiej opisuj\u0105c wspomniany CRaC. Przedstawi\u0142em w nim ca\u0142\u0105 drog\u0119, kt\u00f3r\u0105 spo\u0142eczno\u015b\u0107 musia\u0142a przej\u015b\u0107 przed stworzeniem SnapStart.<\/p>\n","innerContent":["\n<p>Je\u015bli temat Was zaciekawi\u0142, <a href=\"https:\/\/vived.io\/the-road-to-aws-lambda-snapstart-guide-through-the-years-of-jvm-cold-start-tinkering-jvm-weekly-115\/\">rozpisa\u0142em si\u0119 kiedy\u015b<\/a> w tej kwestii w ca\u0142kiem d\u0142ugim tek\u015bcie, min. lepiej opisuj\u0105c wspomniany CRaC. Przedstawi\u0142em w nim ca\u0142\u0105 drog\u0119, kt\u00f3r\u0105 spo\u0142eczno\u015b\u0107 musia\u0142a przej\u015b\u0107 przed stworzeniem SnapStart.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":768,"height":366},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/image-5-1536x732.png\" alt=\"\" width=\"768\" height=\"366\"\/><figcaption class=\"wp-element-caption\">Ma\u0142y spoiler na zach\u0119t\u0119 do CRaC.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/12\/image-5-1536x732.png\" alt=\"\" width=\"768\" height=\"366\"\/><figcaption class=\"wp-element-caption\">Ma\u0142y spoiler na zach\u0119t\u0119 do CRaC.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>7. Jakarta EE nareszcie ruszy\u0142a do przodu<\/h2>\n","innerContent":["\n<h2>7. Jakarta EE nareszcie ruszy\u0142a do przodu<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Rzek\u0142bym... nareszcie.<\/p>\n","innerContent":["\n<p>Rzek\u0142bym... nareszcie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Od paru lat Jakarta EE pozostawa\u0142a w dziwnym miejscu. Ze wzgl\u0119du na brak praw do pakietu <code>javax<\/code>, ca\u0142a spo\u0142eczno\u015b\u0107 skupia\u0142a si\u0119 na przenosinach na nowy namespace - <code>jakarta<\/code>. Ostatnie wi\u0119ksze wydanie - Jakarta EE 9.1 z 2021 - skupia\u0142o si\u0119 na dopinaniu zmian zwi\u0105zanych z tym przej\u015bciem. W 2022 mieli\u015bmy za\u015b okazj\u0119 \u015bwi\u0119towa\u0107 <a href=\"https:\/\/jakarta.ee\/specifications\/platform\/10\/\">premier\u0119 Jakarty EE 10<\/a>, kt\u00f3r\u0105 mo\u017cna uzna\u0107 za pierwszy prawdziwy krok do przodu od czasu rebrandingu projektu.<\/p>\n","innerContent":["\n<p>Od paru lat Jakarta EE pozostawa\u0142a w dziwnym miejscu. Ze wzgl\u0119du na brak praw do pakietu <code>javax<\/code>, ca\u0142a spo\u0142eczno\u015b\u0107 skupia\u0142a si\u0119 na przenosinach na nowy namespace - <code>jakarta<\/code>. Ostatnie wi\u0119ksze wydanie - Jakarta EE 9.1 z 2021 - skupia\u0142o si\u0119 na dopinaniu zmian zwi\u0105zanych z tym przej\u015bciem. W 2022 mieli\u015bmy za\u015b okazj\u0119 \u015bwi\u0119towa\u0107 <a href=\"https:\/\/jakarta.ee\/specifications\/platform\/10\/\">premier\u0119 Jakarty EE 10<\/a>, kt\u00f3r\u0105 mo\u017cna uzna\u0107 za pierwszy prawdziwy krok do przodu od czasu rebrandingu projektu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi mia\u0142bym wskaza\u0107 jedn\u0105, najwi\u0119ksz\u0105 zmian\u0119 w nowym wydaniu, wybra\u0142bym chyba pojawienie si\u0119 nowego Profilu \u2013 Core. Czym s\u0105 profile? Kiedy\u015b mieli\u015bmy tylko jeden wariant Java EE, co by\u0142o proste, ale powodowa\u0142o problemy. Standard by\u0142 szeroki, a aby przej\u015b\u0107 certyfikacje dany serwer aplikacyjny musia\u0142 zaimplementowa\u0107 ka\u017cde nowe API, co wyd\u0142u\u017ca\u0142o czas adopcji nowych rozwi\u0105za\u0144. Dlatego te\u017c tw\u00f3rcy JEE wyr\u00f3\u017cnili dwa profile \u2013 Full i Web, gdzie ten drugi przeznaczony by\u0142 dla typowych aplikacji Webowych... takich z lat 200X.<\/p>\n","innerContent":["\n<p>Je\u017celi mia\u0142bym wskaza\u0107 jedn\u0105, najwi\u0119ksz\u0105 zmian\u0119 w nowym wydaniu, wybra\u0142bym chyba pojawienie si\u0119 nowego Profilu \u2013 Core. Czym s\u0105 profile? Kiedy\u015b mieli\u015bmy tylko jeden wariant Java EE, co by\u0142o proste, ale powodowa\u0142o problemy. Standard by\u0142 szeroki, a aby przej\u015b\u0107 certyfikacje dany serwer aplikacyjny musia\u0142 zaimplementowa\u0107 ka\u017cde nowe API, co wyd\u0142u\u017ca\u0142o czas adopcji nowych rozwi\u0105za\u0144. Dlatego te\u017c tw\u00f3rcy JEE wyr\u00f3\u017cnili dwa profile \u2013 Full i Web, gdzie ten drugi przeznaczony by\u0142 dla typowych aplikacji Webowych... takich z lat 200X.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":533,"height":249},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ELn2jkN.jpg\" alt=\"\" width=\"533\" height=\"249\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/ELn2jkN.jpg\" alt=\"\" width=\"533\" height=\"249\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To wszystko jednak dzia\u0142o si\u0119 w epoce, zanim zacz\u0119li\u015bmy pakowa\u0107 nasze aplikacje w pojedyncze deployowane jarki. Ta zmiana \u2013 oraz nowa generacja rozwi\u0105za\u0144 \u2013 spowodowa\u0142a konieczno\u015b\u0107 dalszego dokrojenia liczby kluczowych API wy\u0142\u0105cznie do tych przydatnych w takim use-case. Tak powsta\u0142 niezale\u017cny od Jakarty EE MicroProfile, a teraz jego konkurent(?) \u2013 oficjalny profil Core Jakarty EE. Dlaczego Jakarta EE tworzy w\u0142asne rozwi\u0105zanie zamiast dogada\u0107 si\u0119 z Microprofile? TLDR: <a href=\"https:\/\/jakartaee-ambassadors.io\/2021\/05\/10\/jakarta-ee-ambassadors-joint-position-on-jakarta-ee-and-microprofile-alignment\/\">zwi\u0105zane jest to z elastyczno\u015bci\u0105, kt\u00f3rej tw\u00f3rcy MP \u0142akn\u0105, a kt\u00f3rej Jakarta EE nie jest za bardzo w stanie im zaoferowa\u0107<\/a>. Nie oznacza to jednak, \u017ce mi\u0119dzy projektami jest jakikolwiek konflikt \u2013 w tej chwili jednak Core Profile b\u0119dzie m\u00f3g\u0142 po prostu stanowi\u0107 baz\u0119, kt\u00f3r\u0105 MicroProfile b\u0119dzie w stanie rozbudowywa\u0107.<\/p>\n","innerContent":["\n<p>To wszystko jednak dzia\u0142o si\u0119 w epoce, zanim zacz\u0119li\u015bmy pakowa\u0107 nasze aplikacje w pojedyncze deployowane jarki. Ta zmiana \u2013 oraz nowa generacja rozwi\u0105za\u0144 \u2013 spowodowa\u0142a konieczno\u015b\u0107 dalszego dokrojenia liczby kluczowych API wy\u0142\u0105cznie do tych przydatnych w takim use-case. Tak powsta\u0142 niezale\u017cny od Jakarty EE MicroProfile, a teraz jego konkurent(?) \u2013 oficjalny profil Core Jakarty EE. Dlaczego Jakarta EE tworzy w\u0142asne rozwi\u0105zanie zamiast dogada\u0107 si\u0119 z Microprofile? TLDR: <a href=\"https:\/\/jakartaee-ambassadors.io\/2021\/05\/10\/jakarta-ee-ambassadors-joint-position-on-jakarta-ee-and-microprofile-alignment\/\">zwi\u0105zane jest to z elastyczno\u015bci\u0105, kt\u00f3rej tw\u00f3rcy MP \u0142akn\u0105, a kt\u00f3rej Jakarta EE nie jest za bardzo w stanie im zaoferowa\u0107<\/a>. Nie oznacza to jednak, \u017ce mi\u0119dzy projektami jest jakikolwiek konflikt \u2013 w tej chwili jednak Core Profile b\u0119dzie m\u00f3g\u0142 po prostu stanowi\u0107 baz\u0119, kt\u00f3r\u0105 MicroProfile b\u0119dzie w stanie rozbudowywa\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie wszystko. Od lat trwa proces nieustannego odchudzania korporacyjnej Javy, i w tym kierunku poszed\u0142 te\u017c standard CDI - Context and Dependency Injection. Opr\u00f3cz podzia\u0142u na wersje SE (dla standardowej Javy, u\u017cywana min. przez Helidon) i EE, teraz pojawi\u0142y si\u0119 kolejne warianty \u2013 CDI Full oraz CDI Lite. Ten ostatni zawiera\u0107 wy\u0142\u0105cznie najbardziej kluczowe aspekty CDI. Zosta\u0142 zaprojektowany, \u017ceby by\u0107 w stanie wspiera\u0107 potrzeby popularnych projekt\u00f3w, takich jak Dagger czy Guice, pomijaj\u0105c bardziej zaawansowane funkcjonalno\u015bci powi\u0105zane z cyklem \u017cycia wstrzykiwanych zale\u017cno\u015bci.<\/p>\n","innerContent":["\n<p>To jednak nie wszystko. Od lat trwa proces nieustannego odchudzania korporacyjnej Javy, i w tym kierunku poszed\u0142 te\u017c standard CDI - Context and Dependency Injection. Opr\u00f3cz podzia\u0142u na wersje SE (dla standardowej Javy, u\u017cywana min. przez Helidon) i EE, teraz pojawi\u0142y si\u0119 kolejne warianty \u2013 CDI Full oraz CDI Lite. Ten ostatni zawiera\u0107 wy\u0142\u0105cznie najbardziej kluczowe aspekty CDI. Zosta\u0142 zaprojektowany, \u017ceby by\u0107 w stanie wspiera\u0107 potrzeby popularnych projekt\u00f3w, takich jak Dagger czy Guice, pomijaj\u0105c bardziej zaawansowane funkcjonalno\u015bci powi\u0105zane z cyklem \u017cycia wstrzykiwanych zale\u017cno\u015bci.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Og\u00f3lnie.. du\u017co si\u0119 dzieje. Mam nadzieje, \u017ce 2023 b\u0119dzie r\u00f3wnie udanym dla programist\u00f3w Jakarty EE. Teraz, kiedy wi\u0119kszo\u015b\u0107 ekosystemu - ze Springiem, Helidon czy jOOQ na czele - przepisa\u0142o si\u0119 ju\u017c na now\u0105 \"otwart\u0105\" wersj\u0119, tw\u00f3rcy standardu b\u0119d\u0105 w stanie wreszcie udowodni\u0107, \u017ce warto si\u0119 nim interesowa\u0107.<\/p>\n","innerContent":["\n<p>Og\u00f3lnie.. du\u017co si\u0119 dzieje. Mam nadzieje, \u017ce 2023 b\u0119dzie r\u00f3wnie udanym dla programist\u00f3w Jakarty EE. Teraz, kiedy wi\u0119kszo\u015b\u0107 ekosystemu - ze Springiem, Helidon czy jOOQ na czele - przepisa\u0142o si\u0119 ju\u017c na now\u0105 \"otwart\u0105\" wersj\u0119, tw\u00f3rcy standardu b\u0119d\u0105 w stanie wreszcie udowodni\u0107, \u017ce warto si\u0119 nim interesowa\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image-30.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Ciekawe kiedy troch\u0119 serca dostanie Jakarta Faces<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/image-30.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Ciekawe kiedy troch\u0119 serca dostanie Jakarta Faces<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>8. WildFly rezygnuje z \u201cRelease Trainu\u201d<\/h2>\n","innerContent":["\n<h2>8. WildFly rezygnuje z \u201cRelease Trainu\u201d<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pozostaj\u0105c w temacie Jakarty EE, kolejna informacja dotyczy WildFly. Jednocze\u015bnie ze wzgl\u0119du na to, jak mocno idzie pod pr\u0105d trendom, je\u015bli chodzi o spos\u00f3b releasowania oprogramowania, powinna by\u0107 interesuj\u0105ca dla nieco szerszej rzeszy ludzi ni\u017c typowe og\u0142oszenia zwi\u0105zane z Jav\u0105 EE.<\/p>\n","innerContent":["\n<p>Pozostaj\u0105c w temacie Jakarty EE, kolejna informacja dotyczy WildFly. Jednocze\u015bnie ze wzgl\u0119du na to, jak mocno idzie pod pr\u0105d trendom, je\u015bli chodzi o spos\u00f3b releasowania oprogramowania, powinna by\u0107 interesuj\u0105ca dla nieco szerszej rzeszy ludzi ni\u017c typowe og\u0142oszenia zwi\u0105zane z Jav\u0105 EE.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a88c509edad.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Ma\u0142y Spoiler<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a88c509edad.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Ma\u0142y Spoiler<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ot\u00f3\u017c w dobie, gdy wi\u0119kszo\u015b\u0107 projekt\u00f3w przechodzi na regularny \u201cpoci\u0105g releasowy\u201d, WildFly zdecydowa\u0142 si\u0119 na swoisty krok w ty\u0142 i oparcie swoich nowych wersji o zdefiniowane zbiory funkcjonalno\u015bci. Jest to swoisty powr\u00f3t do korzeni, gdy nowe wydania serwer\u00f3w aplikacyjnych by\u0142y znacznie rzadsze i wi\u0105za\u0142y si\u0119 w\u0142a\u015bnie z du\u017cymi podbiciami standardu, nie konkretnymi datami w kalendarzu.<\/p>\n","innerContent":["\n<p>Ot\u00f3\u017c w dobie, gdy wi\u0119kszo\u015b\u0107 projekt\u00f3w przechodzi na regularny \u201cpoci\u0105g releasowy\u201d, WildFly zdecydowa\u0142 si\u0119 na swoisty krok w ty\u0142 i oparcie swoich nowych wersji o zdefiniowane zbiory funkcjonalno\u015bci. Jest to swoisty powr\u00f3t do korzeni, gdy nowe wydania serwer\u00f3w aplikacyjnych by\u0142y znacznie rzadsze i wi\u0105za\u0142y si\u0119 w\u0142a\u015bnie z du\u017cymi podbiciami standardu, nie konkretnymi datami w kalendarzu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jedn\u0105 z du\u017cych funkcjonalno\u015bci (poza aktualizacj\u0105 do Jakarta EE 10), jakie \"dowi\u00f3z\u0142\" w 2022 WildFly jest S2I - Source-to-Image (S2I). M\u00f3wimy tutaj o zestawie narz\u0119dzi, na kt\u00f3ry sk\u0142adaj\u0105 si\u0119 nowe bazowe obrazy dla javowych LTS w wersji JDK11 i JDK17 (brak \u00f3semki), nowy plugin mavenowy, zestaw chmurowych funkcjonalno\u015bci o wdzi\u0119cznej nazwie Galeon oraz nowa wersja wsparcia dla Helm dla WildFly 2.0.<\/p>\n","innerContent":["\n<p>Jedn\u0105 z du\u017cych funkcjonalno\u015bci (poza aktualizacj\u0105 do Jakarta EE 10), jakie \"dowi\u00f3z\u0142\" w 2022 WildFly jest S2I - Source-to-Image (S2I). M\u00f3wimy tutaj o zestawie narz\u0119dzi, na kt\u00f3ry sk\u0142adaj\u0105 si\u0119 nowe bazowe obrazy dla javowych LTS w wersji JDK11 i JDK17 (brak \u00f3semki), nowy plugin mavenowy, zestaw chmurowych funkcjonalno\u015bci o wdzi\u0119cznej nazwie Galeon oraz nowa wersja wsparcia dla Helm dla WildFly 2.0.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ja wiem, \u017ce Cloud-Native serwer Enterprisowej Javy brzmi dla wielu jak kuriozum, wida\u0107 jednak, \u017ce tw\u00f3rcy WildFly chc\u0105 jeszcze troch\u0119 powalczy\u0107 na nowym terytorium. Ten serwer aplikacyjny zawsze uchodzi\u0142 za tego najbardziej \u201c\u015bwiatowego\u201d cz\u0142onka spo\u0142eczno\u015bci Jav\u2026 Jakarta EE, tak\u017ce podejrzewam, \u017ce w\u015br\u00f3d jego u\u017cytkownik\u00f3w znajd\u0105 si\u0119 tacy, kt\u00f3rzy b\u0119d\u0105 mieli ochot\u0119 z S2I poeksperymentowa\u0107.<\/p>\n","innerContent":["\n<p>Ja wiem, \u017ce Cloud-Native serwer Enterprisowej Javy brzmi dla wielu jak kuriozum, wida\u0107 jednak, \u017ce tw\u00f3rcy WildFly chc\u0105 jeszcze troch\u0119 powalczy\u0107 na nowym terytorium. Ten serwer aplikacyjny zawsze uchodzi\u0142 za tego najbardziej \u201c\u015bwiatowego\u201d cz\u0142onka spo\u0142eczno\u015bci Jav\u2026 Jakarta EE, tak\u017ce podejrzewam, \u017ce w\u015br\u00f3d jego u\u017cytkownik\u00f3w znajd\u0105 si\u0119 tacy, kt\u00f3rzy b\u0119d\u0105 mieli ochot\u0119 z S2I poeksperymentowa\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>9. Uczenie Maszynowe trafi\u0142o do standardu Javy<\/h2>\n","innerContent":["\n<h2>9. Uczenie Maszynowe trafi\u0142o do standardu Javy<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>By\u0142 takie okres w 2021, gdzie do\u015b\u0107 dynamicznie zaczyna\u0142y si\u0119 pojawia\u0107 rozwi\u0105zania do Machine Learningu celuj\u0105ce w programist\u00f3w Javy. Zar\u00f3wno Oracle, jak i LinkedIn pr\u00f3bowa\u0142y zaprezentowa\u0107 spo\u0142eczno\u015bci swoje rozwi\u0105zania, ale jak g\u0142o\u015bno by\u0142o na pocz\u0105tku, tak ostatnimi czasy i o Tribuo, i o Dagli jest relatywnie cicho. Nie zmienia to jednak faktu, \u017ce przestrze\u0144 ML-owa jest zbyt \u0142akomym k\u0105skiem \u017ceby go ot-tak odpu\u015bci\u0107 i odda\u0107 Pythonowi.<\/p>\n","innerContent":["\n<p>By\u0142 takie okres w 2021, gdzie do\u015b\u0107 dynamicznie zaczyna\u0142y si\u0119 pojawia\u0107 rozwi\u0105zania do Machine Learningu celuj\u0105ce w programist\u00f3w Javy. Zar\u00f3wno Oracle, jak i LinkedIn pr\u00f3bowa\u0142y zaprezentowa\u0107 spo\u0142eczno\u015bci swoje rozwi\u0105zania, ale jak g\u0142o\u015bno by\u0142o na pocz\u0105tku, tak ostatnimi czasy i o Tribuo, i o Dagli jest relatywnie cicho. Nie zmienia to jednak faktu, \u017ce przestrze\u0144 ML-owa jest zbyt \u0142akomym k\u0105skiem \u017ceby go ot-tak odpu\u015bci\u0107 i odda\u0107 Pythonowi.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":359,"height":434},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/cxwla0hvwtu51.jpg\" alt=\"\" width=\"359\" height=\"434\"\/><figcaption class=\"wp-element-caption\">Za bardzo s\u0105 irytuj\u0105cy<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/cxwla0hvwtu51.jpg\" alt=\"\" width=\"359\" height=\"434\"\/><figcaption class=\"wp-element-caption\">Za bardzo s\u0105 irytuj\u0105cy<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Javowy ekosystem nie poddaje si\u0119 wi\u0119c, o czym \u015bwiadczy\u0107 mo\u017ce formalna akceptacja dla prac nad <a href=\"https:\/\/www.deepnetts.com\/blog\/jsr-381-visual-recognition-api\">JSR-381 Visual Recognition (VisRec) Specification<\/a>. Wbrew do\u015b\u0107 myl\u0105cej nazwie, ma to by\u0107 standard wysokopoziomowego API dla zar\u00f3wno podstawowego uczenia maszynowego (ML), jak i klasyfikacji obraz\u00f3w i rozpoznawania obiekt\u00f3w. JSR 381 ma zapewni\u0107 wsp\u00f3lnego API dla MLa, wsp\u00f3lnego dla r\u00f3\u017cnych domen. Jego referencyjna implementacja jest oparta na bibliotece <a href=\"https:\/\/www.deepnetts.com\">DeepNetts<\/a>, ale ca\u0142o\u015b\u0107 ju\u017c w tym momencie wspierana jest przez <a href=\"https:\/\/djl.ai\/\">Deep Java Library<\/a>, bibliotece stworzonej przez Amazon.<\/p>\n","innerContent":["\n<p>Javowy ekosystem nie poddaje si\u0119 wi\u0119c, o czym \u015bwiadczy\u0107 mo\u017ce formalna akceptacja dla prac nad <a href=\"https:\/\/www.deepnetts.com\/blog\/jsr-381-visual-recognition-api\">JSR-381 Visual Recognition (VisRec) Specification<\/a>. Wbrew do\u015b\u0107 myl\u0105cej nazwie, ma to by\u0107 standard wysokopoziomowego API dla zar\u00f3wno podstawowego uczenia maszynowego (ML), jak i klasyfikacji obraz\u00f3w i rozpoznawania obiekt\u00f3w. JSR 381 ma zapewni\u0107 wsp\u00f3lnego API dla MLa, wsp\u00f3lnego dla r\u00f3\u017cnych domen. Jego referencyjna implementacja jest oparta na bibliotece <a href=\"https:\/\/www.deepnetts.com\">DeepNetts<\/a>, ale ca\u0142o\u015b\u0107 ju\u017c w tym momencie wspierana jest przez <a href=\"https:\/\/djl.ai\/\">Deep Java Library<\/a>, bibliotece stworzonej przez Amazon.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>10. Alpaquita Linux - OS dedykowany pod skonteneryzowan\u0105 Jav\u0119<\/h2>\n","innerContent":["\n<h2>10. Alpaquita Linux - OS dedykowany pod skonteneryzowan\u0105 Jav\u0119<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W 2022 BellSoft - tw\u00f3rcy Liberia JDK - postanowili stworzy\u0107 now\u0105, referencyjn\u0105 dystrybucj\u0119 Linuxa przeznaczon\u0105 bezpo\u015brednio do uruchamiania Javy w kontenerach. Na pierwszy rzut oka brzmi to troch\u0119 jak strzelanie z armaty do muchy, ale w tym szale\u0144stwie jest metoda. Tw\u00f3rcy wzi\u0119li bowiem minimalistycznego Alpine, kt\u00f3ry sam w sobie dodaje naprawd\u0119 minimalny narzut (u\u017cywa\u0142em go w praktyce, jest prawie niezauwa\u017calny), ale zmodyfikowali w spos\u00f3b, kt\u00f3ry zapewni\u0107 ma w wypadku aplikacji JVM-owych znacznie lepsze bezpiecze\u0144stwo i wydajno\u015b\u0107.<\/p>\n","innerContent":["\n<p>W 2022 BellSoft - tw\u00f3rcy Liberia JDK - postanowili stworzy\u0107 now\u0105, referencyjn\u0105 dystrybucj\u0119 Linuxa przeznaczon\u0105 bezpo\u015brednio do uruchamiania Javy w kontenerach. Na pierwszy rzut oka brzmi to troch\u0119 jak strzelanie z armaty do muchy, ale w tym szale\u0144stwie jest metoda. Tw\u00f3rcy wzi\u0119li bowiem minimalistycznego Alpine, kt\u00f3ry sam w sobie dodaje naprawd\u0119 minimalny narzut (u\u017cywa\u0142em go w praktyce, jest prawie niezauwa\u017calny), ale zmodyfikowali w spos\u00f3b, kt\u00f3ry zapewni\u0107 ma w wypadku aplikacji JVM-owych znacznie lepsze bezpiecze\u0144stwo i wydajno\u015b\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>BellSoft min. stworzy\u0142 zmodyfikowany wariant alokatora pami\u0119ci <code>musl<\/code>, u\u017cywanego tak\u017ce przez Alpine, a kt\u00f3rego wsparcie zosta\u0142o dodane ca\u0142kiem niedawno w JDK 16. Ca\u0142o\u015b\u0107 <a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-introduces-alpaquita-linux\/\">nazwali Alpaquita Linux<\/a>, dodali wsparcie LTS i zapakowali razem ze wcze\u015bniej wspomnianym Liberica JDK. Opublikowali te\u017c troch\u0119 liczb i benchmark\u00f3w, kt\u00f3re maj\u0105 potwierdza\u0107 ich wersj\u0119, \u017ce uda\u0142o im si\u0119 stworzy\u0107 najlepiej dostosowany do potrzeb javy i kontener\u00f3w dystrybucje Linuxa.<\/p>\n","innerContent":["\n<p>BellSoft min. stworzy\u0142 zmodyfikowany wariant alokatora pami\u0119ci <code>musl<\/code>, u\u017cywanego tak\u017ce przez Alpine, a kt\u00f3rego wsparcie zosta\u0142o dodane ca\u0142kiem niedawno w JDK 16. Ca\u0142o\u015b\u0107 <a href=\"https:\/\/bell-sw.com\/blog\/bellsoft-introduces-alpaquita-linux\/\">nazwali Alpaquita Linux<\/a>, dodali wsparcie LTS i zapakowali razem ze wcze\u015bniej wspomnianym Liberica JDK. Opublikowali te\u017c troch\u0119 liczb i benchmark\u00f3w, kt\u00f3re maj\u0105 potwierdza\u0107 ich wersj\u0119, \u017ce uda\u0142o im si\u0119 stworzy\u0107 najlepiej dostosowany do potrzeb javy i kontener\u00f3w dystrybucje Linuxa.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Najciekawsze wydania roku - j\u0119zyki JVM<\/h2>\n","innerContent":["\n<h2>Najciekawsze wydania roku - j\u0119zyki JVM<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Java 18<\/h3>\n","innerContent":["\n<h3>Java 18<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Po JDK 17, kt\u00f3re jak pewnie wielu z Was pami\u0119ta by\u0142o wydaniem typu LTS (Long-Time Support), zakres \u201cosiemnastki\u201d nie nale\u017cy do jakich\u015b olbrzymich, ale i tak jest w niej troch\u0119 rzeczy, nad kt\u00f3rymi warto si\u0119 pochyli\u0107.<\/p>\n","innerContent":["\n<p>Po JDK 17, kt\u00f3re jak pewnie wielu z Was pami\u0119ta by\u0142o wydaniem typu LTS (Long-Time Support), zakres \u201cosiemnastki\u201d nie nale\u017cy do jakich\u015b olbrzymich, ale i tak jest w niej troch\u0119 rzeczy, nad kt\u00f3rymi warto si\u0119 pochyli\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JDK 18 przyni\u00f3s\u0142 bowiem <a href=\"https:\/\/openjdk.org\/jeps\/408\">408: Simple Web Server<\/a> (wbudowania w Jav\u0119 minimalistycznego Web Server) oraz <a href=\"https:\/\/openjdk.org\/jeps\/413\">413: Code Snippets in Java API Documentation<\/a> (wprowadzaj\u0105cy znacznik @snippet do JavaDoc, co ma na celu upro\u015bci\u0107 do\u0142\u0105czanie przyk\u0142adowego kodu \u017ar\u00f3d\u0142owego do dokumentacji API).<\/p>\n","innerContent":["\n<p>JDK 18 przyni\u00f3s\u0142 bowiem <a href=\"https:\/\/openjdk.org\/jeps\/408\">408: Simple Web Server<\/a> (wbudowania w Jav\u0119 minimalistycznego Web Server) oraz <a href=\"https:\/\/openjdk.org\/jeps\/413\">413: Code Snippets in Java API Documentation<\/a> (wprowadzaj\u0105cy znacznik @snippet do JavaDoc, co ma na celu upro\u015bci\u0107 do\u0142\u0105czanie przyk\u0142adowego kodu \u017ar\u00f3d\u0142owego do dokumentacji API).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":489,"height":363},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Dy5LXlWWoAYZU_Q.jpg\" alt=\"\" width=\"489\" height=\"363\"\/><figcaption class=\"wp-element-caption\">Oba brzmi\u0105 ciekawie, ale ju\u017c sobie nie ufam<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/Dy5LXlWWoAYZU_Q.jpg\" alt=\"\" width=\"489\" height=\"363\"\/><figcaption class=\"wp-element-caption\">Oba brzmi\u0105 ciekawie, ale ju\u017c sobie nie ufam<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Opr\u00f3cz tego JDK 18 to par\u0119 zmian pod mask\u0105 (<a href=\"https:\/\/openjdk.org\/jeps\/416\">416: Reimplement Core Reflection with Method Handles<\/a>, <a href=\"https:\/\/openjdk.org\/jeps\/400\">400: UTF-8 by Default<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/418\">418: Internet-Address Resolution SPI<\/a>) a tak\u017ce <a href=\"https:\/\/openjdk.org\/jeps\/421\">JEP 421: Deprecate Finalization for Removal<\/a> - Deprekacja Finalizer\u00f3w, kt\u00f3ra spotka\u0142a si\u0119 z mas\u0105 kontrowersji ze strony spo\u0142eczno\u015bci, ale i tak zosta\u0142a \"przepchni\u0119ta\" ku chwale projektu Loom.<\/p>\n","innerContent":["\n<p>Opr\u00f3cz tego JDK 18 to par\u0119 zmian pod mask\u0105 (<a href=\"https:\/\/openjdk.org\/jeps\/416\">416: Reimplement Core Reflection with Method Handles<\/a>, <a href=\"https:\/\/openjdk.org\/jeps\/400\">400: UTF-8 by Default<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/418\">418: Internet-Address Resolution SPI<\/a>) a tak\u017ce <a href=\"https:\/\/openjdk.org\/jeps\/421\">JEP 421: Deprecate Finalization for Removal<\/a> - Deprekacja Finalizer\u00f3w, kt\u00f3ra spotka\u0142a si\u0119 z mas\u0105 kontrowersji ze strony spo\u0142eczno\u015bci, ale i tak zosta\u0142a \"przepchni\u0119ta\" ku chwale projektu Loom.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Java 19<\/h3>\n","innerContent":["\n<h3>Java 19<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wydanie to z jednej strony wydawa\u0107 si\u0119 mo\u017ce czym\u015b ma\u0142ym, jednak niech nie zmyl\u0105 Was pozory jedynie pojedynczej stabilnej funkcjonalno\u015bci \u2013 mamy bowiem do czynienia z jednym z najwa\u017cniejszych nowych JDK od lat, sk\u0142onny jestem stwierdzi\u0107, \u017ce nawet od czasu JDK 9 z jego systemem modu\u0142\u00f3w. Po raz pierwszy bowiem mamy okazj\u0119 wersje Preview projekt\u00f3w, kt\u00f3re stanowi\u0107 b\u0119d\u0105 przysz\u0142o\u015b\u0107 JVM.<\/p>\n","innerContent":["\n<p>Wydanie to z jednej strony wydawa\u0107 si\u0119 mo\u017ce czym\u015b ma\u0142ym, jednak niech nie zmyl\u0105 Was pozory jedynie pojedynczej stabilnej funkcjonalno\u015bci \u2013 mamy bowiem do czynienia z jednym z najwa\u017cniejszych nowych JDK od lat, sk\u0142onny jestem stwierdzi\u0107, \u017ce nawet od czasu JDK 9 z jego systemem modu\u0142\u00f3w. Po raz pierwszy bowiem mamy okazj\u0119 wersje Preview projekt\u00f3w, kt\u00f3re stanowi\u0107 b\u0119d\u0105 przysz\u0142o\u015b\u0107 JVM.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":374,"height":210},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/rainbow-puke.gif\" alt=\"\" width=\"374\" height=\"210\"\/><figcaption class=\"wp-element-caption\">TLDR w formie graficznej<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/09\/rainbow-puke.gif\" alt=\"\" width=\"374\" height=\"210\"\/><figcaption class=\"wp-element-caption\">TLDR w formie graficznej<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W JDK 19 zobaczyli\u015bmy wreszcie te\u017c pierwszy preview oczekiwanego od lat Looma. Spo\u0142eczno\u015b\u0107 bawi si\u0119 ca\u0142o\u015bci\u0105 w najlepsze od d\u0142u\u017cszego czasu, a teraz r\u00f3wnie\u017c programi\u015bci obawiaj\u0105cy si\u0119 samodzielnie kompilowanych wersji b\u0119d\u0105 mogli wypr\u00f3bowa\u0107 wirtualne w\u0105tki i bezbole\u015bnie sprawdzi\u0107, czy ca\u0142o\u015b\u0107 wytrzyma\u0142a ca\u0142y hype z jakim wi\u0105za\u0142y si\u0119 kolejne zapowiedzi projektu. R\u00f3wnocze\u015bnie, d\u0142ugo oczekiwana Strukturalna Wsp\u00f3\u0142bie\u017cno\u015b\u0107, b\u0119d\u0105ca cz\u0119\u015bci\u0105 Looma r\u00f3wnie\u017c trafi\u0142 do inkubacji, i stanowi\u0105c naturalne uzupe\u0142nienie Wirtualnych W\u0105tk\u00f3w.<\/p>\n","innerContent":["\n<p>W JDK 19 zobaczyli\u015bmy wreszcie te\u017c pierwszy preview oczekiwanego od lat Looma. Spo\u0142eczno\u015b\u0107 bawi si\u0119 ca\u0142o\u015bci\u0105 w najlepsze od d\u0142u\u017cszego czasu, a teraz r\u00f3wnie\u017c programi\u015bci obawiaj\u0105cy si\u0119 samodzielnie kompilowanych wersji b\u0119d\u0105 mogli wypr\u00f3bowa\u0107 wirtualne w\u0105tki i bezbole\u015bnie sprawdzi\u0107, czy ca\u0142o\u015b\u0107 wytrzyma\u0142a ca\u0142y hype z jakim wi\u0105za\u0142y si\u0119 kolejne zapowiedzi projektu. R\u00f3wnocze\u015bnie, d\u0142ugo oczekiwana Strukturalna Wsp\u00f3\u0142bie\u017cno\u015b\u0107, b\u0119d\u0105ca cz\u0119\u015bci\u0105 Looma r\u00f3wnie\u017c trafi\u0142 do inkubacji, i stanowi\u0105c naturalne uzupe\u0142nienie Wirtualnych W\u0105tk\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejny gracze wagi ultraci\u0119\u017ckiej, <a href=\"https:\/\/openjdk.org\/jeps\/424\">424: Foreign Function &amp; Memory API<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/426\">426: Vector API<\/a> czyli efekty Projektu Panama, r\u00f3wnie\u017c pojawi\u0142 si\u0119 w nowym wydaniu JDK. Przed nami materializuje si\u0119 nast\u0119pca JNI, kt\u00f3ry zapewni\u0107 ma nam now\u0105, lepsz\u0105 integracj\u0119 z natywnym kodem i pami\u0119ci\u0105.<\/p>\n","innerContent":["\n<p>Kolejny gracze wagi ultraci\u0119\u017ckiej, <a href=\"https:\/\/openjdk.org\/jeps\/424\">424: Foreign Function &amp; Memory API<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/426\">426: Vector API<\/a> czyli efekty Projektu Panama, r\u00f3wnie\u017c pojawi\u0142 si\u0119 w nowym wydaniu JDK. Przed nami materializuje si\u0119 nast\u0119pca JNI, kt\u00f3ry zapewni\u0107 ma nam now\u0105, lepsz\u0105 integracj\u0119 z natywnym kodem i pami\u0119ci\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Obserwowali\u015bmy te\u017c dalszy rozw\u00f3j rozwi\u0105za\u0144 znajduj\u0105cych si\u0119 pod parasolk\u0105 Project Amber, takich jak <a href=\"https:\/\/openjdk.org\/jeps\/427\">427: Pattern Matching for switch<\/a> czy <a href=\"https:\/\/openjdk.org\/jeps\/404\">405: Record Patterns (Preview)<\/a>.<\/p>\n","innerContent":["\n<p>Obserwowali\u015bmy te\u017c dalszy rozw\u00f3j rozwi\u0105za\u0144 znajduj\u0105cych si\u0119 pod parasolk\u0105 Project Amber, takich jak <a href=\"https:\/\/openjdk.org\/jeps\/427\">427: Pattern Matching for switch<\/a> czy <a href=\"https:\/\/openjdk.org\/jeps\/404\">405: Record Patterns (Preview)<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Opr\u00f3cz aktualizacji du\u017cych projekt\u00f3w, tw\u00f3rcy Javy pokusili si\u0119 o wsparcie dystrybucji uruchamianych na procesorach z rodziny RISC-V. Platforma ta naprawd\u0119 ostatnio jest a j\u0119zykach - min. w tym tygodniu Google og\u0142osi\u0142o, \u017ce chce uczyni\u0107 z niej jeden z trzon\u00f3w Androida.<\/p>\n","innerContent":["\n<p>Opr\u00f3cz aktualizacji du\u017cych projekt\u00f3w, tw\u00f3rcy Javy pokusili si\u0119 o wsparcie dystrybucji uruchamianych na procesorach z rodziny RISC-V. Platforma ta naprawd\u0119 ostatnio jest a j\u0119zykach - min. w tym tygodniu Google og\u0142osi\u0142o, \u017ce chce uczyni\u0107 z niej jeden z trzon\u00f3w Androida.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wi\u0119cej o JDK 19 <a href=\"https:\/\/vived.io\/jdk-19-released-jvm-weekly-105\/\">znajdziecie tutaj<\/a>.<\/p>\n","innerContent":["\n<p>Wi\u0119cej o JDK 19 <a href=\"https:\/\/vived.io\/jdk-19-released-jvm-weekly-105\/\">znajdziecie tutaj<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Kotlin 1.7<\/h3>\n","innerContent":["\n<h3>Kotlin 1.7<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kotlin nie mia\u0142 w tym roku lekko. JetBrains zmuszone by\u0142o migrowa\u0107 zesp\u00f3\u0142 pracuj\u0105cy nad j\u0119zykiem z Federacji Rosyjskiej, co z pewno\u015bci\u0105 nie pomog\u0142o na szeroko rozumian\u0105 produktywno\u015b\u0107. Nie znaczy to jednak, \u017ce 2022 nie wprowadzi\u0142 \u017cadnych nowo\u015bci do j\u0119zyka. Ukaza\u0142 si\u0119 min. <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew17.html\">Kotlin 1.7<\/a><\/p>\n","innerContent":["\n<p>Kotlin nie mia\u0142 w tym roku lekko. JetBrains zmuszone by\u0142o migrowa\u0107 zesp\u00f3\u0142 pracuj\u0105cy nad j\u0119zykiem z Federacji Rosyjskiej, co z pewno\u015bci\u0105 nie pomog\u0142o na szeroko rozumian\u0105 produktywno\u015b\u0107. Nie znaczy to jednak, \u017ce 2022 nie wprowadzi\u0142 \u017cadnych nowo\u015bci do j\u0119zyka. Ukaza\u0142 si\u0119 min. <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew17.html\">Kotlin 1.7<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Najwa\u017cniejsz\u0105 nowo\u015bci\u0105 wydaje si\u0119 z pewno\u015bci\u0105 wersja Alfa kompilatora K2. To w\u0142a\u015bnie K2 jest przysz\u0142o\u015bci\u0105 Kotlina. Tw\u00f3rcy j\u0119zyka (platformy?) chc\u0105, aby w niedalekiej przysz\u0142o\u015bci by\u0107 w stanie w realny spos\u00f3b stworzy\u0107 z Kotlina rozwi\u0105zanie prawdziwie multiplatformowe, bez potrzeby wielokrotnej implementacji tych samych funkcjonalno\u015bci. Wersja Alfa na razie wspiera wy\u0142\u0105cznie JVM i jest jeszcze do\u015b\u0107 mocno ograniczona, ale pierwsza testowa edycja to bardzo wa\u017cny krok dla ca\u0142ego projektu.<\/p>\n","innerContent":["\n<p>Najwa\u017cniejsz\u0105 nowo\u015bci\u0105 wydaje si\u0119 z pewno\u015bci\u0105 wersja Alfa kompilatora K2. To w\u0142a\u015bnie K2 jest przysz\u0142o\u015bci\u0105 Kotlina. Tw\u00f3rcy j\u0119zyka (platformy?) chc\u0105, aby w niedalekiej przysz\u0142o\u015bci by\u0107 w stanie w realny spos\u00f3b stworzy\u0107 z Kotlina rozwi\u0105zanie prawdziwie multiplatformowe, bez potrzeby wielokrotnej implementacji tych samych funkcjonalno\u015bci. Wersja Alfa na razie wspiera wy\u0142\u0105cznie JVM i jest jeszcze do\u015b\u0107 mocno ograniczona, ale pierwsza testowa edycja to bardzo wa\u017cny krok dla ca\u0142ego projektu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z nowo\u015bci z pewno\u015bci\u0105 wymieni\u0107 trzeba te\u017c inkrementaln\u0105 kompilacje za pomoc\u0105 Gradle. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce ich wewn\u0119trzne testy wykaza\u0142y popraw\u0119 o ponad 80% dla zmian po trafieniu do cache. Kotlin od lat ma opinie dosy\u0107 przyci\u0119\u017ckawego, dlatego ka\u017cdy ruch w stron\u0119 poprawy Developer Experience (a takimi s\u0105 w ko\u0144cu wszelkie poprawki procesu kompilacji) s\u0105 bardzo na miejscu.<\/p>\n","innerContent":["\n<p>Z nowo\u015bci z pewno\u015bci\u0105 wymieni\u0107 trzeba te\u017c inkrementaln\u0105 kompilacje za pomoc\u0105 Gradle. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce ich wewn\u0119trzne testy wykaza\u0142y popraw\u0119 o ponad 80% dla zmian po trafieniu do cache. Kotlin od lat ma opinie dosy\u0107 przyci\u0119\u017ckawego, dlatego ka\u017cdy ruch w stron\u0119 poprawy Developer Experience (a takimi s\u0105 w ko\u0144cu wszelkie poprawki procesu kompilacji) s\u0105 bardzo na miejscu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-1-2.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Teraz \u017ceby \u201eda\u0107 co je\u015b\u0107\u201d K2, b\u0119dziemy musieli pisa\u0107 kod znacznie szybciej<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/giphy-1-2.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Teraz \u017ceby \u201eda\u0107 co je\u015b\u0107\u201d K2, b\u0119dziemy musieli pisa\u0107 kod znacznie szybciej<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi chodzi za\u015b o rzeczy zwi\u0105zane z syntaxem j\u0119zyka, to zdecydowanie to wydanie stoi pod znakiem dalszego pokrycia sytuacji brzegowych, z kt\u00f3rymi radzi\u0107 sobie musi system typ\u00f3w Kotlina. Nowe wydanie przynosi bowiem min. typy ostatecznie nie-nullowalne oraz wnioskowanie typ\u00f3w w ramach tzw. Builder\u00f3w. Wprowadzono te\u017c operator underscore, pozwalaj\u0105cy na automatyczne wnioskowania o typie generycznym, gdy znane s\u0105 pozosta\u0142e argumenty.<\/p>\n","innerContent":["\n<p>Je\u017celi chodzi za\u015b o rzeczy zwi\u0105zane z syntaxem j\u0119zyka, to zdecydowanie to wydanie stoi pod znakiem dalszego pokrycia sytuacji brzegowych, z kt\u00f3rymi radzi\u0107 sobie musi system typ\u00f3w Kotlina. Nowe wydanie przynosi bowiem min. typy ostatecznie nie-nullowalne oraz wnioskowanie typ\u00f3w w ramach tzw. Builder\u00f3w. Wprowadzono te\u017c operator underscore, pozwalaj\u0105cy na automatyczne wnioskowania o typie generycznym, gdy znane s\u0105 pozosta\u0142e argumenty.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zaraz przed sylwestrem ukaza\u0142 si\u0119 te\u017c Kotlin 1.8, ale ten nie doczeka\u0142 si\u0119 jeszcze nawet oficjalnego announcementu poza <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew18.html\">aktualizacj\u0105 dokumentacji<\/a>, wi\u0119c nie zaliczam go do dziedzictwa 2022 i zajm\u0119 si\u0119 dopiero za tydzie\u0144.<\/p>\n","innerContent":["\n<p>Zaraz przed sylwestrem ukaza\u0142 si\u0119 te\u017c Kotlin 1.8, ale ten nie doczeka\u0142 si\u0119 jeszcze nawet oficjalnego announcementu poza <a href=\"https:\/\/kotlinlang.org\/docs\/whatsnew18.html\">aktualizacj\u0105 dokumentacji<\/a>, wi\u0119c nie zaliczam go do dziedzictwa 2022 i zajm\u0119 si\u0119 dopiero za tydzie\u0144.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Groovy 4.0<\/h3>\n","innerContent":["\n<h3>Groovy 4.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dla Groovy'ego przysz\u0142y chude lata - nowo\u015bci w tym j\u0119zyku do\u015b\u0107 s\u0142abo rezonuj\u0105 ze spo\u0142eczno\u015bci\u0105. Sam musz\u0119 przyzna\u0107, \u017ce pomimo tego \u017ce regularnie \u015bledz\u0119 \u015bwiat technologii, to wydanego par\u0119 lat temu Groovy\u2019ego 3.0 przegapi\u0142em i dowiedzia\u0142em si\u0119 o nim grubo po oficjalnej premierze. Na wersj\u0119 4.0 by\u0142em ju\u017c troch\u0119 przygotowany, ale ona te\u017c zdecydowanie nie wybrzmia\u0142a w\u015br\u00f3d programist\u00f3w \u2013 jej zesz\u0142oroczna premiera przesz\u0142a maksymalnie bez echa. Troch\u0119 si\u0119 nie dziwie - <a href=\"https:\/\/groovy-lang.org\/releasenotes\/groovy-4.0.html\">\u201cczw\u00f3rka\u201d to jednak taka \u201cciep\u0142a woda w kranie\u201d<\/a> jak Switch expressions, Sealed types, JavaShell czy Rekordy.<\/p>\n","innerContent":["\n<p>Dla Groovy'ego przysz\u0142y chude lata - nowo\u015bci w tym j\u0119zyku do\u015b\u0107 s\u0142abo rezonuj\u0105 ze spo\u0142eczno\u015bci\u0105. Sam musz\u0119 przyzna\u0107, \u017ce pomimo tego \u017ce regularnie \u015bledz\u0119 \u015bwiat technologii, to wydanego par\u0119 lat temu Groovy\u2019ego 3.0 przegapi\u0142em i dowiedzia\u0142em si\u0119 o nim grubo po oficjalnej premierze. Na wersj\u0119 4.0 by\u0142em ju\u017c troch\u0119 przygotowany, ale ona te\u017c zdecydowanie nie wybrzmia\u0142a w\u015br\u00f3d programist\u00f3w \u2013 jej zesz\u0142oroczna premiera przesz\u0142a maksymalnie bez echa. Troch\u0119 si\u0119 nie dziwie - <a href=\"https:\/\/groovy-lang.org\/releasenotes\/groovy-4.0.html\">\u201cczw\u00f3rka\u201d to jednak taka \u201cciep\u0142a woda w kranie\u201d<\/a> jak Switch expressions, Sealed types, JavaShell czy Rekordy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co prawda mo\u017cna w niej znale\u017a\u0107 par\u0119 ciekawszych pere\u0142ek, ale wi\u0119kszo\u015b\u0107 z nich (jak cho\u0107by GINQ \u2013 Groovy-Integrated Query) czy intryguj\u0105ce Groovy Contracts na razie znajduj\u0105 si\u0119 w inkubacji. Iskierk\u0105 nadziei jest jednak to, \u017ce Groovy 5.0 zapowiada si\u0119 dzi\u0119ki nim ca\u0142kiem smakowicie. Mo\u017cliwe, \u017ce aby zrobi\u0107 du\u017cy krok do przodu, tw\u00f3rcy musieli najpierw ulepszy\u0107 kompatybilno\u015b\u0107 z Jav\u0105. I co prawda nie wierz\u0119, \u017ce Groovy kiedykolwiek odzyska pozycj\u0119, kt\u00f3r\u0105 mia\u0142 jeszcze kilka lat temu, ale mo\u017ce jeden z ciekawszych j\u0119zyk\u00f3w JVMa jeszcze nas kiedy\u015b zaskoczy.<\/p>\n","innerContent":["\n<p>Co prawda mo\u017cna w niej znale\u017a\u0107 par\u0119 ciekawszych pere\u0142ek, ale wi\u0119kszo\u015b\u0107 z nich (jak cho\u0107by GINQ \u2013 Groovy-Integrated Query) czy intryguj\u0105ce Groovy Contracts na razie znajduj\u0105 si\u0119 w inkubacji. Iskierk\u0105 nadziei jest jednak to, \u017ce Groovy 5.0 zapowiada si\u0119 dzi\u0119ki nim ca\u0142kiem smakowicie. Mo\u017cliwe, \u017ce aby zrobi\u0107 du\u017cy krok do przodu, tw\u00f3rcy musieli najpierw ulepszy\u0107 kompatybilno\u015b\u0107 z Jav\u0105. I co prawda nie wierz\u0119, \u017ce Groovy kiedykolwiek odzyska pozycj\u0119, kt\u00f3r\u0105 mia\u0142 jeszcze kilka lat temu, ale mo\u017ce jeden z ciekawszych j\u0119zyk\u00f3w JVMa jeszcze nas kiedy\u015b zaskoczy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a88c4f59cf7.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Mam wra\u017cenie, \u017ce aktualnie Groovy, tak pot\u0119\u017cny dzi\u0119ki swojemu metaprogramingowi i wsparciu do tworzenia eleganckich DSLi, jeszcze czasem przewija si\u0119 przez foldery \/test w projektach tylko dzi\u0119ki Spockowi \ud83d\udd96\ud83c\udffb.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a88c4f59cf7.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Mam wra\u017cenie, \u017ce aktualnie Groovy, tak pot\u0119\u017cny dzi\u0119ki swojemu metaprogramingowi i wsparciu do tworzenia eleganckich DSLi, jeszcze czasem przewija si\u0119 przez foldery \/test w projektach tylko dzi\u0119ki Spockowi \ud83d\udd96\ud83c\udffb.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Clojure 1.11<\/h3>\n","innerContent":["\n<h3>Clojure 1.11<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatnim, ale zdecydowanie nie najmniejszym z nowych wyda\u0144 jest nowa wersja j\u0119zyka Clojure! Czasy, kiedy by\u0142em z Clojure na bie\u017c\u0105co troch\u0119 ju\u017c min\u0119\u0142y, ale jako \u017ce poprzednia nowa wersja pojawi\u0142a si\u0119 jeszcze w roku 2018 \"clojurowcom\u201d przysz\u0142o troch\u0119 poczeka\u0107. Zakup <a href=\"https:\/\/building.nubank.com.br\/nubank-acquires-cognitect-press-release\/\">tw\u00f3rc\u00f3w j\u0119zyka przez Nubank w 2020<\/a> nie przyspieszy\u0142 jako\u015b mocno rozwoju j\u0119zyka, ale te\u017c nale\u017cy pami\u0119ta\u0107, \u017ce niekt\u00f3re narz\u0119dzia s\u0105 \"kompletne\".<\/p>\n","innerContent":["\n<p>Ostatnim, ale zdecydowanie nie najmniejszym z nowych wyda\u0144 jest nowa wersja j\u0119zyka Clojure! Czasy, kiedy by\u0142em z Clojure na bie\u017c\u0105co troch\u0119 ju\u017c min\u0119\u0142y, ale jako \u017ce poprzednia nowa wersja pojawi\u0142a si\u0119 jeszcze w roku 2018 \"clojurowcom\u201d przysz\u0142o troch\u0119 poczeka\u0107. Zakup <a href=\"https:\/\/building.nubank.com.br\/nubank-acquires-cognitect-press-release\/\">tw\u00f3rc\u00f3w j\u0119zyka przez Nubank w 2020<\/a> nie przyspieszy\u0142 jako\u015b mocno rozwoju j\u0119zyka, ale te\u017c nale\u017cy pami\u0119ta\u0107, \u017ce niekt\u00f3re narz\u0119dzia s\u0105 \"kompletne\".<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Clojure 1.11 zapewnia now\u0105 sk\u0142adni\u0119 wywo\u0142ywania argument\u00f3w s\u0142\u00f3w kluczowych \u2013 funkcje, kt\u00f3re przyjmuj\u0105 argumenty s\u0142\u00f3w kluczowych, mog\u0105 teraz otrzymywa\u0107 map\u0119 zamiast par klucz\/warto\u015b\u0107. Pojawi\u0142a si\u0119 te\u017c nowa przestrze\u0144 nazw (w uproszczeniu \u2013 pakiet) <code>clojure.math<\/code>, zapewniaj\u0105ca funkcje opakowuj\u0105ce metody dost\u0119pne w <code>java.lang.Math<\/code> dla \u201clong\u00f3w\u201d i \u201cdubli\u201d. Dodatkowo, istnieje teraz opcja aliasowanie przestrzeni nazw w spos\u00f3b, kt\u00f3ry nie powoduje b\u0142\u0119du, je\u017celi dany namespace nie jest dost\u0119pny. Do samego core j\u0119zyka dodano za\u015b sporo nowych funkcji.<\/p>\n","innerContent":["\n<p>Clojure 1.11 zapewnia now\u0105 sk\u0142adni\u0119 wywo\u0142ywania argument\u00f3w s\u0142\u00f3w kluczowych \u2013 funkcje, kt\u00f3re przyjmuj\u0105 argumenty s\u0142\u00f3w kluczowych, mog\u0105 teraz otrzymywa\u0107 map\u0119 zamiast par klucz\/warto\u015b\u0107. Pojawi\u0142a si\u0119 te\u017c nowa przestrze\u0144 nazw (w uproszczeniu \u2013 pakiet) <code>clojure.math<\/code>, zapewniaj\u0105ca funkcje opakowuj\u0105ce metody dost\u0119pne w <code>java.lang.Math<\/code> dla \u201clong\u00f3w\u201d i \u201cdubli\u201d. Dodatkowo, istnieje teraz opcja aliasowanie przestrzeni nazw w spos\u00f3b, kt\u00f3ry nie powoduje b\u0142\u0119du, je\u017celi dany namespace nie jest dost\u0119pny. Do samego core j\u0119zyka dodano za\u015b sporo nowych funkcji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na ko\u0144cu tej sekcji \u017cart. Po czym poznasz programist\u0119 Clojure? Bo Ci o tym powie!<\/p>\n","innerContent":["\n<p>A na ko\u0144cu tej sekcji \u017cart. Po czym poznasz programist\u0119 Clojure? Bo Ci o tym powie!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":783,"height":368},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858cf2eeca.png\" alt=\"\" width=\"783\" height=\"368\"\/><figcaption class=\"wp-element-caption\">I to w czym\u015b co przypomina \u201cstarsz\u0105 mow\u0119\u201d<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a858cf2eeca.png\" alt=\"\" width=\"783\" height=\"368\"\/><figcaption class=\"wp-element-caption\">I to w czym\u015b co przypomina \u201cstarsz\u0105 mow\u0119\u201d<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Najciekawsze wydania roku - frameworki i biblioteki<\/h2>\n","innerContent":["\n<h2>Najciekawsze wydania roku - frameworki i biblioteki<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Spring Framework 6.0 i Spring Boot 3.0<\/h3>\n","innerContent":["\n<h3>Spring Framework 6.0 i Spring Boot 3.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-38.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/11\/image-38.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ko\u0144c\u00f3wk\u0105 2022 ukaza\u0142y si\u0119 Spring Framework 6.0 oraz Spring Boot 3.0. I cho\u0107by nie wiem jak wiele zmian przynosi\u0142y same w sobie, to z pewno\u015bci\u0105 najwi\u0119ksz\u0105 rewolucj\u0105 jest porzucenie wsparcia starszych wersji Javy. I kiedy m\u00f3wi\u0119 tutaj \u201estarsze\u201d, na my\u015bli mam nie Jave 1.6, nawet nie Java 1.8 ale nawet\u2026 Jave 16. Nowy Spring do dzia\u0142ania wymaga Javy 17. Pivotal nie poszed\u0142 tutaj na \u017cadne kompromisy i nowego \u201emajora\u201d projekt\u00f3w przystosowa\u0142 do dzia\u0142ania wy\u0142\u0105cznie z najnowszym dost\u0119pnym w tej chwili wydaniem LTS.<\/p>\n","innerContent":["\n<p>Ko\u0144c\u00f3wk\u0105 2022 ukaza\u0142y si\u0119 Spring Framework 6.0 oraz Spring Boot 3.0. I cho\u0107by nie wiem jak wiele zmian przynosi\u0142y same w sobie, to z pewno\u015bci\u0105 najwi\u0119ksz\u0105 rewolucj\u0105 jest porzucenie wsparcia starszych wersji Javy. I kiedy m\u00f3wi\u0119 tutaj \u201estarsze\u201d, na my\u015bli mam nie Jave 1.6, nawet nie Java 1.8 ale nawet\u2026 Jave 16. Nowy Spring do dzia\u0142ania wymaga Javy 17. Pivotal nie poszed\u0142 tutaj na \u017cadne kompromisy i nowego \u201emajora\u201d projekt\u00f3w przystosowa\u0142 do dzia\u0142ania wy\u0142\u0105cznie z najnowszym dost\u0119pnym w tej chwili wydaniem LTS.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nowa Java to jedno, ale Spring Framework 6.0 przynosi r\u00f3wnie\u017c now\u0105 Jakarte w wersji 9.1+. Warto o tym wiedzie\u0107, poniewa\u017c proces migracyjny mo\u017ce okaza\u0107 si\u0119 tutaj (co dla wielu b\u0119dzie pewnie zaskoczeniem) trudniejszy ni\u017c w wypadku Javy. Przypominam bowiem o tym, \u017ce Jakarta EE 9.1+ to ta edycja, kt\u00f3ra pozby\u0142a si\u0119 pakietu <code>javax.*<\/code> na rzecz <code>jakarta.*<\/code>, w ten spos\u00f3b uchodz\u0105c z zasi\u0119gu Oracle i nale\u017c\u0105cych do nich trademark\u00f3w.<\/p>\n","innerContent":["\n<p>Nowa Java to jedno, ale Spring Framework 6.0 przynosi r\u00f3wnie\u017c now\u0105 Jakarte w wersji 9.1+. Warto o tym wiedzie\u0107, poniewa\u017c proces migracyjny mo\u017ce okaza\u0107 si\u0119 tutaj (co dla wielu b\u0119dzie pewnie zaskoczeniem) trudniejszy ni\u017c w wypadku Javy. Przypominam bowiem o tym, \u017ce Jakarta EE 9.1+ to ta edycja, kt\u00f3ra pozby\u0142a si\u0119 pakietu <code>javax.*<\/code> na rzecz <code>jakarta.*<\/code>, w ten spos\u00f3b uchodz\u0105c z zasi\u0119gu Oracle i nale\u017c\u0105cych do nich trademark\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli \u015bledzili\u015bcie wiadomo\u015bci o nowym Springu od jego pierwszych zapowiedzi, mam dla Was z\u0142\u0105 nowin\u0119 \u2013 okazuje si\u0119 bowiem, \u017ce d\u0142ugo oczekiwane wsparcie JPMSa, systemu modu\u0142\u00f3w Javy, nie b\u0119dzie gotowe na premier\u0119. Jak przyznaj\u0105 tw\u00f3rcy, mo\u017cna si\u0119 spodziewa\u0107 jego pojawienia w p\u00f3\u017aniejszych wersjach, ale pierwsza wersja Spring Framework 6 skupia si\u0119 szczeg\u00f3lnie na wsparciu kompilacji Ahead-of-Time i GraalVM, a modu\u0142y utrudnia\u0142yby ten proces, komplikuj\u0105c tak zwan\u0105 \u201eanaliz\u0119 osi\u0105galno\u015bci\u201d. Nale\u017cy bowiem pami\u0119ta\u0107, \u017ce w odr\u00f3\u017cnieniu od nowych graczy na rynku framework\u00f3w jak Quarkus, Helidon czy Micronaut, Spring bardzo, bardzo mocno opiera si\u0119 na Reflection API. Dla niego wi\u0119c proces wsparcia dla GraalVM, kt\u00f3ry refleksji nie wspiera jest wi\u0119c znacznie trudniejszy.<\/p>\n","innerContent":["\n<p>Je\u015bli \u015bledzili\u015bcie wiadomo\u015bci o nowym Springu od jego pierwszych zapowiedzi, mam dla Was z\u0142\u0105 nowin\u0119 \u2013 okazuje si\u0119 bowiem, \u017ce d\u0142ugo oczekiwane wsparcie JPMSa, systemu modu\u0142\u00f3w Javy, nie b\u0119dzie gotowe na premier\u0119. Jak przyznaj\u0105 tw\u00f3rcy, mo\u017cna si\u0119 spodziewa\u0107 jego pojawienia w p\u00f3\u017aniejszych wersjach, ale pierwsza wersja Spring Framework 6 skupia si\u0119 szczeg\u00f3lnie na wsparciu kompilacji Ahead-of-Time i GraalVM, a modu\u0142y utrudnia\u0142yby ten proces, komplikuj\u0105c tak zwan\u0105 \u201eanaliz\u0119 osi\u0105galno\u015bci\u201d. Nale\u017cy bowiem pami\u0119ta\u0107, \u017ce w odr\u00f3\u017cnieniu od nowych graczy na rynku framework\u00f3w jak Quarkus, Helidon czy Micronaut, Spring bardzo, bardzo mocno opiera si\u0119 na Reflection API. Dla niego wi\u0119c proces wsparcia dla GraalVM, kt\u00f3ry refleksji nie wspiera jest wi\u0119c znacznie trudniejszy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":534,"height":428},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/mKhrLx1.jpg\" alt=\"\" width=\"534\" height=\"428\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/mKhrLx1.jpg\" alt=\"\" width=\"534\" height=\"428\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>D\u0142u\u017csz\u0105 przegl\u0105d\u00f3wk\u0119 nowego Springa mojego autorstwa <a href=\"https:\/\/vived.io\/new-era-for-spring-spring-framework-6-0-spring-boot-3-0-and-only-jdk-17-jvm-weekly-22\/\">znajdziecie tutaj<\/a>.<\/p>\n","innerContent":["\n<p>D\u0142u\u017csz\u0105 przegl\u0105d\u00f3wk\u0119 nowego Springa mojego autorstwa <a href=\"https:\/\/vived.io\/new-era-for-spring-spring-framework-6-0-spring-boot-3-0-and-only-jdk-17-jvm-weekly-22\/\">znajdziecie tutaj<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>SLF4j 2.0<\/h3>\n","innerContent":["\n<h3>SLF4j 2.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Podejrzewam, \u017ce praktycznie ka\u017cdy z czytaj\u0105cych ten newsletter (przynajmniej z tych b\u0119d\u0105cych w bran\u017cy ju\u017c par\u0119 lat) cho\u0107 raz mia\u0142 przyjemno\u015b\u0107 dok\u0142adania do projektu <strong>slf4j<\/strong>. Nazw\u0119 t\u0105 rozwija si\u0119 jako <em>The Simple Logging Facade for Java<\/em> i tak\u0105 w\u0142a\u015bnie jest jej rola. Dekad\u0119 temu, <strong>log4j<\/strong> w swojej pierwszej wersji by\u0142 frameworkiem mocno skomplikowanym, o niskopoziomowym API.<\/p>\n","innerContent":["\n<p>Podejrzewam, \u017ce praktycznie ka\u017cdy z czytaj\u0105cych ten newsletter (przynajmniej z tych b\u0119d\u0105cych w bran\u017cy ju\u017c par\u0119 lat) cho\u0107 raz mia\u0142 przyjemno\u015b\u0107 dok\u0142adania do projektu <strong>slf4j<\/strong>. Nazw\u0119 t\u0105 rozwija si\u0119 jako <em>The Simple Logging Facade for Java<\/em> i tak\u0105 w\u0142a\u015bnie jest jej rola. Dekad\u0119 temu, <strong>log4j<\/strong> w swojej pierwszej wersji by\u0142 frameworkiem mocno skomplikowanym, o niskopoziomowym API.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Od czasu \u015bwietno\u015bci <strong>slf4j<\/strong> bran\u017ca jednak troch\u0119 wyewoluowa\u0142a. Najpierw pojawi\u0142 si\u0119 <strong>Logback<\/strong>, a nast\u0119pnie pojawi\u0142 si\u0119 <strong>log4j2<\/strong>, kt\u00f3ry przyni\u00f3s\u0142 API kompatybilne z <strong>slf4j<\/strong>, ale ju\u017c bez dodatkowego narzutu abstrakcji. W mi\u0119dzyczasie pojawi\u0142 si\u0119 te\u017c <code>java.lang.system.Logger<\/code>, czyli drugie podej\u015bcie tw\u00f3rc\u00f3w JDK do tematu logowania \u2013 du\u017co bardziej udane. To wszystko sk\u0142ada si\u0119 na fakt, \u017ce lata \u015bwietno\u015bci slf4j ma chyba za sob\u0105.<\/p>\n","innerContent":["\n<p>Od czasu \u015bwietno\u015bci <strong>slf4j<\/strong> bran\u017ca jednak troch\u0119 wyewoluowa\u0142a. Najpierw pojawi\u0142 si\u0119 <strong>Logback<\/strong>, a nast\u0119pnie pojawi\u0142 si\u0119 <strong>log4j2<\/strong>, kt\u00f3ry przyni\u00f3s\u0142 API kompatybilne z <strong>slf4j<\/strong>, ale ju\u017c bez dodatkowego narzutu abstrakcji. W mi\u0119dzyczasie pojawi\u0142 si\u0119 te\u017c <code>java.lang.system.Logger<\/code>, czyli drugie podej\u015bcie tw\u00f3rc\u00f3w JDK do tematu logowania \u2013 du\u017co bardziej udane. To wszystko sk\u0142ada si\u0119 na fakt, \u017ce lata \u015bwietno\u015bci slf4j ma chyba za sob\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co jednak przynosi <a href=\"https:\/\/www.slf4j.org\/news.html\">slf4j 2.0<\/a>? Pewnym zmianom uleg\u0142o API (mocno przemodelowane zosta\u0142y niekt\u00f3re buildery oraz do\u0142o\u017cono Fluent Logging API), ale z pewno\u015bci\u0105 najwi\u0119ksza rewolucja wydarzy\u0142a si\u0119 pod mask\u0105. Wraz z now\u0105 wersj\u0105, slf4j pozby\u0142 si\u0119 wsparcia dla JDK mniejszych ni\u017c JDK 8 \u2013 nie s\u0105 wi\u0119c tak \u201eambitni\u201d jak tw\u00f3rcy np. Springa, ale te\u017c ze wzgl\u0119du na swoje mocne zakorzenienie w przesz\u0142o\u015bci jest to do\u015b\u0107 rozs\u0105dny krok. Jednak r\u00f3wnie\u017c Ci u\u017cywaj\u0105cy nowszych JDK 9+ du\u017co zyskaj\u0105 na migracji \u2013 w odr\u00f3\u017cnieniu od Springa, slf4j doczeka\u0142 si\u0119 bowiem wsparcia dla modu\u0142\u00f3w JPMS, dzi\u0119ki czemu \u0142atwiej b\u0119dzie si\u0119 go u\u017cywa\u0142o w zmodularyzowanych projektach.<\/p>\n","innerContent":["\n<p>Co jednak przynosi <a href=\"https:\/\/www.slf4j.org\/news.html\">slf4j 2.0<\/a>? Pewnym zmianom uleg\u0142o API (mocno przemodelowane zosta\u0142y niekt\u00f3re buildery oraz do\u0142o\u017cono Fluent Logging API), ale z pewno\u015bci\u0105 najwi\u0119ksza rewolucja wydarzy\u0142a si\u0119 pod mask\u0105. Wraz z now\u0105 wersj\u0105, slf4j pozby\u0142 si\u0119 wsparcia dla JDK mniejszych ni\u017c JDK 8 \u2013 nie s\u0105 wi\u0119c tak \u201eambitni\u201d jak tw\u00f3rcy np. Springa, ale te\u017c ze wzgl\u0119du na swoje mocne zakorzenienie w przesz\u0142o\u015bci jest to do\u015b\u0107 rozs\u0105dny krok. Jednak r\u00f3wnie\u017c Ci u\u017cywaj\u0105cy nowszych JDK 9+ du\u017co zyskaj\u0105 na migracji \u2013 w odr\u00f3\u017cnieniu od Springa, slf4j doczeka\u0142 si\u0119 bowiem wsparcia dla modu\u0142\u00f3w JPMS, dzi\u0119ki czemu \u0142atwiej b\u0119dzie si\u0119 go u\u017cywa\u0142o w zmodularyzowanych projektach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Hibernate 6.0<\/h3>\n","innerContent":["\n<h3>Hibernate 6.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/hibernate.org\/orm\/releases\/6.0\/\">Hibernate 6.0<\/a> to edycj\u0119, kt\u00f3ra jest pierwszym \u201cmajorem\u201d Hibernate od roku 2011. Nie oznacza to oczywi\u015bcie, \u017ce rozw\u00f3j biblioteki sta\u0142 w miejscu \u2013 ka\u017cda z regularnie wydawanych minor\u00f3w 5.x przynosi\u0142a nowo\u015bci. Ostatnimi czasy jednak wi\u0119cej m\u00f3wi\u0142o si\u0119 o pobocznych projektach, takich jak cho\u0107by Hibernate Reactive.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/hibernate.org\/orm\/releases\/6.0\/\">Hibernate 6.0<\/a> to edycj\u0119, kt\u00f3ra jest pierwszym \u201cmajorem\u201d Hibernate od roku 2011. Nie oznacza to oczywi\u015bcie, \u017ce rozw\u00f3j biblioteki sta\u0142 w miejscu \u2013 ka\u017cda z regularnie wydawanych minor\u00f3w 5.x przynosi\u0142a nowo\u015bci. Ostatnimi czasy jednak wi\u0119cej m\u00f3wi\u0142o si\u0119 o pobocznych projektach, takich jak cho\u0107by Hibernate Reactive.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nowy Hibernate to przede wszystkim nowe adnotacje, kt\u00f3re porzuci\u0142y swoje XMLowe korzenie i doczeka\u0142y si\u0119 sporej ilo\u015bci zmian min. lepsze type-safety. Du\u017cym krokiem do przodu jest te\u017c Semantic Query Model (SQM) \u2013 nowy parser zapyta\u0144 o encje, kt\u00f3ry obs\u0142uguje zar\u00f3wno JPQL, jak i Criteria API. Nowy parser b\u0119dzie znacznie bardziej elastyczny, dzi\u0119ki czemu zapewniamy lepsz\u0105 translacj\u0119 zapyta\u0144 o encje w j\u0119zyku SQL. Dodatkowo, pojawi\u0142a si\u0119 poprawa wydajno\u015bci poprzez zmian\u0119 z odczytu kolumn po nazwie na odczyt wed\u0142ug pozycji w ramach ResultSetu oraz aktualizacja u\u017cywanego przez Hibernate parsera z ANTLR.<\/p>\n","innerContent":["\n<p>Nowy Hibernate to przede wszystkim nowe adnotacje, kt\u00f3re porzuci\u0142y swoje XMLowe korzenie i doczeka\u0142y si\u0119 sporej ilo\u015bci zmian min. lepsze type-safety. Du\u017cym krokiem do przodu jest te\u017c Semantic Query Model (SQM) \u2013 nowy parser zapyta\u0144 o encje, kt\u00f3ry obs\u0142uguje zar\u00f3wno JPQL, jak i Criteria API. Nowy parser b\u0119dzie znacznie bardziej elastyczny, dzi\u0119ki czemu zapewniamy lepsz\u0105 translacj\u0119 zapyta\u0144 o encje w j\u0119zyku SQL. Dodatkowo, pojawi\u0142a si\u0119 poprawa wydajno\u015bci poprzez zmian\u0119 z odczytu kolumn po nazwie na odczyt wed\u0142ug pozycji w ramach ResultSetu oraz aktualizacja u\u017cywanego przez Hibernate parsera z ANTLR.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Bardzo du\u017c\u0105 zmian\u0105 jest te\u017c migracja Hibernate na Jakart\u0119 EE i porzucenie starych API zwi\u0105zanych z Java EE. To w\u0142a\u015bnie min. z tym wi\u0105\u017ce si\u0119 podbicie du\u017cej wersji aplikacji \u2013 z wiadomych wzgl\u0119d\u00f3w, pojawia si\u0119 potrzeba migracji z przestrzeni nazw <code>javax.persistence<\/code> do <code>jakarta.persistence<\/code>.<\/p>\n","innerContent":["\n<p>Bardzo du\u017c\u0105 zmian\u0105 jest te\u017c migracja Hibernate na Jakart\u0119 EE i porzucenie starych API zwi\u0105zanych z Java EE. To w\u0142a\u015bnie min. z tym wi\u0105\u017ce si\u0119 podbicie du\u017cej wersji aplikacji \u2013 z wiadomych wzgl\u0119d\u00f3w, pojawia si\u0119 potrzeba migracji z przestrzeni nazw <code>javax.persistence<\/code> do <code>jakarta.persistence<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Ktor 2.0<\/h3>\n","innerContent":["\n<h3>Ktor 2.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ktor to rozwijany przez JetBrains referencyny Framework dla Kotlina do tworzenia aplikacji webowych. Nowa edycja nie bez <a href=\"https:\/\/ktor.io\/changelog\/2.0\/\">powodu ma du\u017cy \u201cnumerek\u201d 2.0<\/a> \u2013 wiele API (np. Plugin\u00f3w) zosta\u0142o przebudowane w zasadzie od podstaw, zgodnie z ostatnim duchem Kotlin Multiplatform Ktor zacz\u0105\u0142 wspiera\u0107 min. platform\u0119 Native. Z mojej perspektywy jednak najciekawsz\u0105 nowo\u015bci\u0105 jest (nareszcie) wsparcie Retries.<\/p>\n","innerContent":["\n<p>Ktor to rozwijany przez JetBrains referencyny Framework dla Kotlina do tworzenia aplikacji webowych. Nowa edycja nie bez <a href=\"https:\/\/ktor.io\/changelog\/2.0\/\">powodu ma du\u017cy \u201cnumerek\u201d 2.0<\/a> \u2013 wiele API (np. Plugin\u00f3w) zosta\u0142o przebudowane w zasadzie od podstaw, zgodnie z ostatnim duchem Kotlin Multiplatform Ktor zacz\u0105\u0142 wspiera\u0107 min. platform\u0119 Native. Z mojej perspektywy jednak najciekawsz\u0105 nowo\u015bci\u0105 jest (nareszcie) wsparcie Retries.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>AWS SDK dla Kotlina ze wsparciem Korutyn<\/h3>\n","innerContent":["\n<h3>AWS SDK dla Kotlina ze wsparciem Korutyn<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na koniec, je\u017celi u\u017cywacie AWS i Kotlina, to bardzo polecam Wam wypr\u00f3bowa\u0107 AWS SKD w wersji Kotlinowej. Opublikowana w tym roku wersja \"natywn\u0105\" dla j\u0119zyka JetBrains wspiera bowiem korutyny, co jest o tyle kluczowe, \u017ce AWS SDK sk\u0142ada si\u0119 w zasadzie z samych operacji I\/O. Mi\u0142o ze strony AWS, \u017ce zdecydowa\u0142 si\u0119 na specjaln\u0105 edycj\u0119 Kotlinow\u0105 \u2013 o ile kompatybilno\u015b\u0107 tego j\u0119zyka z Jav\u0105 pozwala poradzi\u0107 sobie w wi\u0119kszo\u015bci sytuacji, o tyle dobrze, \u017ceby po 2022 nie trzeba by\u0142o si\u0119 do tego za cz\u0119sto ucieka\u0107 \u2013 w ko\u0144cu stabilne korutyny maj\u0105 ju\u017c kilka dobrych lat.<\/p>\n","innerContent":["\n<p>Na koniec, je\u017celi u\u017cywacie AWS i Kotlina, to bardzo polecam Wam wypr\u00f3bowa\u0107 AWS SKD w wersji Kotlinowej. Opublikowana w tym roku wersja \"natywn\u0105\" dla j\u0119zyka JetBrains wspiera bowiem korutyny, co jest o tyle kluczowe, \u017ce AWS SDK sk\u0142ada si\u0119 w zasadzie z samych operacji I\/O. Mi\u0142o ze strony AWS, \u017ce zdecydowa\u0142 si\u0119 na specjaln\u0105 edycj\u0119 Kotlinow\u0105 \u2013 o ile kompatybilno\u015b\u0107 tego j\u0119zyka z Jav\u0105 pozwala poradzi\u0107 sobie w wi\u0119kszo\u015bci sytuacji, o tyle dobrze, \u017ceby po 2022 nie trzeba by\u0142o si\u0119 do tego za cz\u0119sto ucieka\u0107 \u2013 w ko\u0144cu stabilne korutyny maj\u0105 ju\u017c kilka dobrych lat.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Vaadin 23<\/h3>\n","innerContent":["\n<h3>Vaadin 23<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Czym jest Vaadin, wielu z Was zapyta? W czasach, kiedy wszystkim wydawa\u0142o si\u0119, \u017ce generowanie frontendu z Javy to jest rewelacyjny pomys\u0142 (a bior\u0105c tymczasowy sza\u0142 na Railsy \u2013 trudno si\u0119 tym ludziom by\u0142o dziwi\u0107), w \u015bwiecie JVMa powsta\u0142 Vaadin, kt\u00f3ry mia\u0142 zaj\u0105\u0107 si\u0119 minimalizacj\u0105 znajomo\u015bci frontendu przez osoby chc\u0105ce stworzy\u0107 pe\u0142n\u0105 aplikacj\u0119 webow\u0105. Czasy mamy troch\u0119 inne i troch\u0119 nauczyli\u015bmy si\u0119, \u017ce dedykowany in\u017cynier frontendu to jednak jest dobry pomys\u0142, ale nie sprawia to, \u017ce Vaadin daje za wygran\u0105.<\/p>\n","innerContent":["\n<p>Czym jest Vaadin, wielu z Was zapyta? W czasach, kiedy wszystkim wydawa\u0142o si\u0119, \u017ce generowanie frontendu z Javy to jest rewelacyjny pomys\u0142 (a bior\u0105c tymczasowy sza\u0142 na Railsy \u2013 trudno si\u0119 tym ludziom by\u0142o dziwi\u0107), w \u015bwiecie JVMa powsta\u0142 Vaadin, kt\u00f3ry mia\u0142 zaj\u0105\u0107 si\u0119 minimalizacj\u0105 znajomo\u015bci frontendu przez osoby chc\u0105ce stworzy\u0107 pe\u0142n\u0105 aplikacj\u0119 webow\u0105. Czasy mamy troch\u0119 inne i troch\u0119 nauczyli\u015bmy si\u0119, \u017ce dedykowany in\u017cynier frontendu to jednak jest dobry pomys\u0142, ale nie sprawia to, \u017ce Vaadin daje za wygran\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":450,"height":313},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/old-men-are-461e37487c.jpg\" alt=\"\" width=\"450\" height=\"313\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/01\/old-men-are-461e37487c.jpg\" alt=\"\" width=\"450\" height=\"313\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/vaadin.com\/blog\/vaadin-23-is-finally-here\">Nowe wydanie<\/a> min. porzuca wsparcie dla Javy starszej ni\u017c 11, a tak\u017ce zmiany w design systemie Vaadin to jednak nie tylko sam core, ale tak\u017ce ca\u0142a platforma, posiadaj\u0105ca dwa g\u0142\u00f3wne, konkurencyjne Frameworki.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/vaadin.com\/blog\/vaadin-23-is-finally-here\">Nowe wydanie<\/a> min. porzuca wsparcie dla Javy starszej ni\u017c 11, a tak\u017ce zmiany w design systemie Vaadin to jednak nie tylko sam core, ale tak\u017ce ca\u0142a platforma, posiadaj\u0105ca dwa g\u0142\u00f3wne, konkurencyjne Frameworki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pierwszym z nich jest <a href=\"https:\/\/vaadin.com\/flow\">Flow<\/a>, kt\u00f3ry s\u0142u\u017cy do generowania kodu JavaScript w 100% z poziomu Javy, a \u201cdwudziestka tr\u00f3jka\u201d przynosi min. pe\u0142ne wsparcie npm i Vite \u2013 coraz popularniejszego narz\u0119dzia dla budowanie aplikacji frontendowych.<\/p>\n","innerContent":["\n<p>Pierwszym z nich jest <a href=\"https:\/\/vaadin.com\/flow\">Flow<\/a>, kt\u00f3ry s\u0142u\u017cy do generowania kodu JavaScript w 100% z poziomu Javy, a \u201cdwudziestka tr\u00f3jka\u201d przynosi min. pe\u0142ne wsparcie npm i Vite \u2013 coraz popularniejszego narz\u0119dzia dla budowanie aplikacji frontendowych.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Drugi to za\u015b <a href=\"https:\/\/hilla.dev\/\">Hille<\/a>, nowy framework webowy dla programist\u00f3w Java, kt\u00f3ry \u0142\u0105czy backend ze Spring Boot z TypeScript, daj\u0105c nam \u201cpe\u0142nostosow\u0105\u201d aplikacj\u0119, je\u015bli jednak frontendem si\u0119 tak bardzo nie brzydzimy. Znany wcze\u015bniej jako Vaadin Fusion, Hilla oferowa\u0107 ma wiele mo\u017cliwo\u015bci upraszczaj\u0105cych tworzenie aplikacji biznesowych, takich jak ujednolicona konfiguracja projektu dla Java i TypeScripta. Posiada te\u017c bogaty zestaw komponent\u00f3w UI. Wygl\u0105da to ca\u0142kiem ciekawie, aczkolwiek dzisiaj osoby poszukuj\u0105ce rozwi\u0105zania FullStack, pewnie zdecyduj\u0105 si\u0119 pr\u0119dzej na JHipstera.<\/p>\n","innerContent":["\n<p>Drugi to za\u015b <a href=\"https:\/\/hilla.dev\/\">Hille<\/a>, nowy framework webowy dla programist\u00f3w Java, kt\u00f3ry \u0142\u0105czy backend ze Spring Boot z TypeScript, daj\u0105c nam \u201cpe\u0142nostosow\u0105\u201d aplikacj\u0119, je\u015bli jednak frontendem si\u0119 tak bardzo nie brzydzimy. Znany wcze\u015bniej jako Vaadin Fusion, Hilla oferowa\u0107 ma wiele mo\u017cliwo\u015bci upraszczaj\u0105cych tworzenie aplikacji biznesowych, takich jak ujednolicona konfiguracja projektu dla Java i TypeScripta. Posiada te\u017c bogaty zestaw komponent\u00f3w UI. Wygl\u0105da to ca\u0142kiem ciekawie, aczkolwiek dzisiaj osoby poszukuj\u0105ce rozwi\u0105zania FullStack, pewnie zdecyduj\u0105 si\u0119 pr\u0119dzej na JHipstera.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>Helidon 3.0<\/h3>\n","innerContent":["\n<h3>Helidon 3.0<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Helidon stanowi swoist\u0105 implementacje referencyjn\u0105 dla MicroProfile i \u201emikro\u201d Jakarty EE od samego Oracle. Nowa edycja wymaga do dzia\u0142ania minimum JDK 17. Oracle idzie jak burza.w procesie wypychania u\u017cytkownik\u00f3w na najnowsze LTS\u2019y \u2013 jak wida\u0107 na za\u0142\u0105czonym przyk\u0142adzie, przyj\u0119li metod\u0119 kija (minimalne wspierane wydania) i marchewki (istotne nowo\u015bci).<\/p>\n","innerContent":["\n<p>Helidon stanowi swoist\u0105 implementacje referencyjn\u0105 dla MicroProfile i \u201emikro\u201d Jakarty EE od samego Oracle. Nowa edycja wymaga do dzia\u0142ania minimum JDK 17. Oracle idzie jak burza.w procesie wypychania u\u017cytkownik\u00f3w na najnowsze LTS\u2019y \u2013 jak wida\u0107 na za\u0142\u0105czonym przyk\u0142adzie, przyj\u0119li metod\u0119 kija (minimalne wspierane wydania) i marchewki (istotne nowo\u015bci).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/fe2a38f4-4dbd-4f91-b64a-db5e24718f7f_text.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Przy czym Java 17 to na dobr\u0105 spraw\u0119 te\u017c marchewka<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/08\/fe2a38f4-4dbd-4f91-b64a-db5e24718f7f_text.gif\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Przy czym Java 17 to na dobr\u0105 spraw\u0119 te\u017c marchewka<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Bo za takow\u0105 \u201eistotn\u0105 nowo\u015b\u0107\u201d z pewno\u015bci\u0105 uzna\u0107 mo\u017cna wsparcie dla MicroProfile 5.0 oraz wyselekcjonowanych aspekt\u00f3w Jakarta EE 9.1. W jaki\u015b spos\u00f3b zabawnym jest dla mnie, \u017ce wraz z tym podbiciem r\u00f3wnie\u017c framework od Oracle pozbywa si\u0119 trademarkowanej paczki <code>javax.<\/code> na rzecz <code>jakarta<\/code>.. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce jest to pierwszy produkt korporacji kt\u00f3ry dokona\u0142 tej zmiany.<\/p>\n","innerContent":["\n<p>Bo za takow\u0105 \u201eistotn\u0105 nowo\u015b\u0107\u201d z pewno\u015bci\u0105 uzna\u0107 mo\u017cna wsparcie dla MicroProfile 5.0 oraz wyselekcjonowanych aspekt\u00f3w Jakarta EE 9.1. W jaki\u015b spos\u00f3b zabawnym jest dla mnie, \u017ce wraz z tym podbiciem r\u00f3wnie\u017c framework od Oracle pozbywa si\u0119 trademarkowanej paczki <code>javax.<\/code> na rzecz <code>jakarta<\/code>.. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce jest to pierwszy produkt korporacji kt\u00f3ry dokona\u0142 tej zmiany.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<p class=\"has-text-align-center\">Je\u015bli jeszcze tu jeste\u015bcie - dzi\u0119kuj\u0119 za wytrwa\u0142o\u015b\u0107 \ud83c\udf89 <br>I mam nadziej\u0119, \u017ce 2023 b\u0119dzie r\u00f3wnie ciekawy co 2022 \ud83e\udd29<\/p>\n","innerContent":["\n<p class=\"has-text-align-center\">Je\u015bli jeszcze tu jeste\u015bcie - dzi\u0119kuj\u0119 za wytrwa\u0142o\u015b\u0107 \ud83c\udf89 <br>I mam nadziej\u0119, \u017ce 2023 b\u0119dzie r\u00f3wnie ciekawy co 2022 \ud83e\udd29<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/13547","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=13547"}],"version-history":[{"count":20,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/13547\/revisions"}],"predecessor-version":[{"id":13588,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/13547\/revisions\/13588"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/13559"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=13547"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=13547"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=13547"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}