{"id":15002,"date":"2023-03-09T14:11:40","date_gmt":"2023-03-09T13:11:40","guid":{"rendered":"https:\/\/vived.io\/?p=15002"},"modified":"2023-03-12T08:12:07","modified_gmt":"2023-03-12T07:12:07","slug":"pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/","title":{"rendered":"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? &#8211; JVM Weekly vol. 127"},"content":{"rendered":"\n<h2 id=\"1-pierwsze-informacje-na-temat-jdk-21\" data-num=1>1. Pierwsze informacje na temat JDK 21<\/h2>\n\n\n\n<p>Gdy wszyscy powoli oczekujemy ju\u017c rych\u0142o zbli\u017caj\u0105cej si\u0119 premiery JDK 20, w tle powoli klaruje si\u0119 te\u017c lista funkcjonalno\u015bci, kt\u00f3re trafi\u0105 ju\u017c tej jesieni do JDK 21.<\/p>\n\n\n\n<p>Zacznijmy od JEP-\u00f3w, kt\u00f3re ju\u017c teraz oficjalnie zosta\u0142y zaproponowane jako cz\u0119\u015b\u0107 jesiennego wydania. Wszystko wskazuje wi\u0119c na to, \u017ce doczekamy si\u0119 tam wersji <a href=\"https:\/\/openjdk.org\/jeps\/430\">testowej String Templates<\/a>. Ich celem ma by\u0107 rozszerzenie Text Blocks, wprowadzonych w JDK 15. String Templates u\u0142atwiaj\u0105 wype\u0142nianie ich (ale tak\u017ce zwyk\u0142ych String\u00f3w) dynamicznymi warto\u015bciami.<\/p>\n\n\n\n<p>\u017beby lepiej zwizualizowa\u0107, jeden z przyk\u0142ad\u00f3w z JEP-a:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>String name    = &quot;Joan Smith&quot;;\nString phone   = &quot;555-123-4567&quot;;\nString address = &quot;1 Maple Drive, Anytown&quot;;\nString json = STR.&quot;&quot;&quot;\n     {\n         &quot;name&quot;:    &quot;\\{name}&quot;,\n         &quot;phone&quot;:   &quot;\\{phone}&quot;,\n         &quot;address&quot;: &quot;\\{address}&quot;\n     }\n     &quot;&quot;&quot;;<\/code><\/pre>\n\n\n\n<p>Mo\u017cliwe jest tak\u017ce wykonywanie ca\u0142ych wyra\u017ce\u0144:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;code&gt; int x = 10;\n int y = 20;\n String s = STR.&quot;\\{x} + \\{y} = \\{x + y}&quot;; \/\/ 10 + 20 = 30 <\/code><\/code><\/pre>\n\n\n\n<p>Ca\u0142o\u015b\u0107 opiera si\u0119 na tak zwanych procesorach, w powy\u017cszych przyk\u0142adach u\u017cywany by\u0142 <code>STR.<\/code>, kt\u00f3ry po prostu wykonuje interpolacje. Sam JDK wprowadza r\u00f3wnie\u017c procesor <code>FMT.<\/code>, umo\u017cliwiaj\u0105cy dodatkowe procesowani odpowiedzi, jak np. definiowanie dok\u0142adno\u015bci <code>float<\/code> po przecinku. U\u017cytkownik b\u0119dzie mia\u0142 mo\u017cliwo\u015b\u0107 definiowania r\u00f3wnie\u017c w\u0142asnych formater\u00f3w. Powsta\u0142y mechanizm wygl\u0105da na naprawd\u0119 elastyczny i wychodz\u0105cy daleko poza proste uzupe\u0142nianie stringa zmiennymi.<\/p>\n\n\n\n<p>Kolejnym ju\u017c zapowiedzianym dodatkiem jest <a href=\"https:\/\/openjdk.org\/jeps\/431\">JEP 431: Sequenced Collections<\/a>. Do tej pory brakowa\u0142o w JDK interfejsu, kt\u00f3ry m\u00f3g\u0142by definiowa\u0107 kolekcje o elementach w jasno zdefiniowanej kolejno\u015bci, r\u00f3wnocze\u015bnie umo\u017cliwiaj\u0105c \u0142atwe iterowanie po nich. Z tego powodu w zasadzie ka\u017cda z istniej\u0105cych kolekcji podchodzi\u0142a do tematu inaczej:<\/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\/03\/zpJ09Se.png\" alt=\"\" width=\"655\" height=\"138\"\/><\/figure><\/div>\n\n\n<p>Dlatego te\u017c do JDK trafi nowy interfejs, oparty o implementacj\u0119 Deque:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;code&gt;interface SequencedCollection&lt;E&gt; extends Collection&lt;E&gt; {\n     SequencedCollection&lt;E&gt; reversed();\n     void addFirst(E);\n     void addLast(E);\n     E getFirst();\n     E getLast();\n     E removeFirst();\n     E removeLast();\n}<\/code><\/code><\/pre>\n\n\n\n<p>Opr\u00f3cz lepszego wsparcia dla operacji na pierwszym i ostatnim elemencie, u\u0142atwione b\u0119dzie r\u00f3wnie\u017c iterowanie po kolekcji w odwrotnej kolejno\u015bci dzi\u0119ki wprowadzeniu metody <code>reversed()<\/code>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/ea1d325767048da637cd6ac6931abde6.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Tak \u017ceby zamkn\u0105\u0107 temat, mia\u0142em spory u\u015bmiech widz\u0105c cytat z S\u00f8ren Kierkegaard w <a href=\"https:\/\/openjdk.org\/jeps\/431\">oryginalnym podsumowaniu JEPa<\/a>.<\/figcaption><\/figure><\/div>\n\n\n<p>To jednak nie wszystko &#8211; wszystko wskazuje na to, \u017ce w JDK 21 doczekamy si\u0119 r\u00f3wnie\u017c dw\u00f3ch kolejnych JEP-\u00f3w &#8211; <a href=\"https:\/\/openjdk.org\/jeps\/8300541\">Record Patterns<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/8300542\">Pattern Matching for switch<\/a>. Jak zauwa\u017cy\u0142 Reddit <a href=\"https:\/\/www.reddit.com\/r\/java\/comments\/11lksdo\/jep_pattern_matching_for_switch_records_patterns\">\/r\/java<\/a>, mimo \u017ce oba JEPy pozostaj\u0105 jeszcze w Drafcie, to przyk\u0142ady kodu jasno odnosz\u0105 si\u0119 w nich w\u0142a\u015bnie do JDK 21. Wydaje si\u0119 wi\u0119c, \u017ce jesie\u0144 b\u0119dzie nale\u017ca\u0142a do Projektu Amber.<\/p>\n\n\n\n<p>A jak ju\u017c jeste\u015bmy przy Pattern Matchingu i dekonstrukcji rekord\u00f3w &#8211; tw\u00f3rcy JDK nie planuj\u0105 si\u0119 na tym zatrzyma\u0107. W zesz\u0142ym tygodniu Brian Goetz opublikowa\u0142 analiz\u0119 <em><a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-spec-experts\/2023-March\/003766.html\">Deconstruction patterns<\/a><\/em> dotycz\u0105c\u0105 mo\u017cliwo\u015bci zaimplementowania dekonstrukcji innych obiekt\u00f3w, ni\u017c tylko rekordy. W tym dokumencie zaproponowano wprowadzenie Dekonstruktor\u00f3w, kt\u00f3re s\u0105 uog\u00f3lnieniem rozwi\u0105za\u0144 stworzonych na potrzeby rekord\u00f3w. Pozwala\u0107 maj\u0105 one na destrukturyzacj\u0119 dowolnej klasy, kt\u00f3ra ma je zadeklarowane &#8211; dekonstruktory musz\u0105 by\u0107 zdefiniowane jawnie i wymagaj\u0105 exact-matchu.<\/p>\n\n\n\n<p>Poni\u017cszy przyk\u0142ad pokazuje, jak mog\u0142yby wygl\u0105da\u0107, aczkolwiek Brian Goetz zastrzega, \u017ce sk\u0142adania jest wy\u0142\u0105cznie pogl\u0105dowa i nie nale\u017cy si\u0119 do niej przyzwyczaja\u0107.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class Point {\n     final double x, y;\n\n     public Point(double x, double y) {\n         this.x = x;\n         this.y = y;\n     }\n\n     public matcher Point(double x, double y) {\n         x = this.x;\n         y = this.y;\n     }\n}<\/code><\/pre>\n\n\n\n<p>Stanowi\u0107 wi\u0119c maj\u0105 co\u015b w rodzaju odwrotno\u015bci konstruktor\u00f3w &#8211; maj\u0105 bowiem zbiera\u0107 warto\u015bci p\u00f3l danego obiektu i wystawia\u0107 je jako mo\u017cliwe do \u0142atwego wyekstrachowana z klasy.<\/p>\n\n\n\n<p>Tak na sam koniec warto te\u017c wspomnie\u0107, \u017ce JDK 21 b\u0119dzie wydaniem LTS (Long-Time Support). Zatem miejmy nadzieje, \u017ce b\u0119dzie jak najbardziej wype\u0142nione funkcjonalno\u015bciami &#8211; to w\u0142a\u015bnie ono bowiem b\u0119dzie na lata wydaniem sugerowanym produkcyjnemu u\u017cyciu.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"571\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-5.png\" alt=\"\" class=\"wp-image-15010\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-5.png 640w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-5-300x268.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption class=\"wp-element-caption\">Mo\u017ce to w ko\u0144cu b\u0119dzie to wydanie, kt\u00f3re przekona kolejn\u0105 grup\u0119 u\u017cytk\u00f3wnik\u00f3w JDK, \u017ce warto si\u0119 zmigrowa\u0107 na now\u0105 wersj\u0119.<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/openjdk.org\/jeps\/430\">JEP 430: String Templates (Preview)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300541\">JEP Draft: Record Patterns<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300542\">JEP Draft: Pattern Matching for switch<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/openjdk.org\/jeps\/431\">JEP 431: Sequenced Collections<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-spec-experts\/2023-March\/003766.html\">Deconstruction patterns<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"2-do-czego-sie-moze-przydac-jdk-flight-recorder\" data-num=2>2. Do czego si\u0119 mo\u017ce przyda\u0107 JDK Flight Recorder<\/h2>\n\n\n\n<p>JDK Flight Recorder (oficjalna aplikacja do monitoringu JVM) przez d\u0142ugi czas \u201clata\u0142 pod radarem\u201d wi\u0119kszo\u015b\u0107 programist\u00f3w JVM, co by\u0142o zwi\u0105zane z faktem, \u017ce wymaga\u0142 komercyjnej wersji JDK udost\u0119pnianej przez Oracle. Cho\u0107 zdarza\u0142y si\u0119 oczywi\u015bcie firmy, kt\u00f3re takow\u0105 posiada\u0142y, to jednak mocno wp\u0142ywa\u0142o to zar\u00f3wno na poziom umiej\u0119tno\u015bci programist\u00f3w (przez kiepsk\u0105 dost\u0119pno\u015b\u0107 trudno by\u0142o nauczy\u0107 si\u0119 obs\u0142ugi tego narz\u0119dzia), jak i zainteresowanie do inwestowania w jego poznanie (zbyt prawdopodobnym by\u0142o, \u017ce kolejna firma, w kt\u00f3rej b\u0119dziemy pracowa\u0107, nie b\u0119dzie mia\u0142a do niego dost\u0119pu). Teraz jednak, kiedy ju\u017c nareszcie wraz z JDK 11 ca\u0142o\u015b\u0107 trafi\u0142a w r\u0119ce spo\u0142eczno\u015bci i mo\u017cna m\u00f3wi\u0107, \u017ce wreszcie nast\u0119puje ma\u0142y, powolny renesans.<\/p>\n\n\n\n<p>Ostatnio na blogu <a class=\"autolink\" href=\"https:\/\/inside.java\">inside.java<\/a> pojawi\u0142 si\u0119 <a href=\"https:\/\/www.youtube.com\/watch?v=2gTcZgiX7IE\">bowiem zapis prezentacji Joakima Nordstr\u00f6m z Oracle<\/a>, kt\u00f3ra stanowi bardzo praktyczne wprowadzenie do tego, w jakich sytuacjach przyda\u0107 mo\u017ce si\u0119 programistom Flight Recorder. Ca\u0142o\u015b\u0107 skupia si\u0119 na API JFR i jego podstawowych sk\u0142adowych, takich jak dost\u0119pne ustawienia, zdarzenia, rodzaje dost\u0119pnych informacji i metadane i metadane. W przeci\u0105gu nieca\u0142ych 40 minut Joakim poka\u017ce Wam wi\u0119c wystarczaj\u0105co du\u017co, aby podj\u0105\u0107 decyzje czy JFR r\u00f3wnie\u017c w Waszej aplikacji.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"embed-responsive embed-responsive-16by9\"><iframe loading=\"lazy\" title=\"Programmer&#039;s Guide to JDK Flight Recorder by Joakim Nordstr\u00f6m\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/2gTcZgiX7IE?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p>JFR ma zreszt\u0105 te\u017c swoich ma\u0142ych bohater\u00f3w poza Oraclem i je\u015bli powy\u017csza prezentacja zach\u0119ci Was do spr\u00f3bowania tego narz\u0119dzia, to najlepsz\u0105 osob\u0105 do \u015bledzenia b\u0119dzie Gunnar Morling. Wyobra\u017cacie sobie na przyk\u0142ad, \u017ce taki format pliku wynikowego Flight Recordera nie jest w \u017caden spos\u00f3b udokumentowany? To w\u0142a\u015bnie Gunnar na podstawie kodu \u017ar\u00f3d\u0142owego <a href=\"https:\/\/www.morling.dev\/blog\/jdk-flight-recorder-file-format\/\">przygotowa\u0142 pe\u0142n\u0105 specyfikacj\u0119 tego<\/a>, w jaki spos\u00f3b Flight Recorder dzia\u0142a, wraz z bardzo dok\u0142adnym diagramem, kt\u00f3ry teraz pozwoli\u0107 mo\u017ce na stworzenie alternatyw do oryginalnych narz\u0119dzi Oracle, a tak\u017ce integracje ca\u0142o\u015bci z ca\u0142ym ekosystemem tooli do monitoringu. <\/p>\n\n\n\n<p>Blog Gunnara pe\u0142ny jest \u015bwietnych publikacji pokazuj\u0105cych, jak pot\u0119\u017cnym narz\u0119dziem jest Flight Recorder, jak cho\u0107by stosunkowo \u015bwie\u017cy tekst <a href=\"https:\/\/www.morling.dev\/blog\/finding-java-thread-leaks-with-jdk-flight-recorder-and-bit-of-sql\">Finding Java Thread Leaks With JDK Flight Recorder and a Bit Of SQL<\/a> czy nieco wcze\u015bniejszy <a href=\"https:\/\/www.morling.dev\/blog\/is-your-blocking-queue-blocking\">Is your Blocking Queue&#8230; Blocking?<\/a>. Do\u015b\u0107 powiedzie\u0107, \u017ce to w\u0142a\u015bnie jego publikacje zainteresowa\u0142y mnie narz\u0119dziem, kt\u00f3rego wcze\u015bniej nie dotkn\u0105\u0142bym pewnie kijem &#8211; polecam serdecznie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.morling.dev\/blog\/finding-java-thread-leaks-with-jdk-flight-recorder-and-bit-of-sql\">Finding Java Thread Leaks With JDK Flight Recorder and a Bit Of SQL<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.morling.dev\/blog\/is-your-blocking-queue-blocking\">Is your Blocking Queue&#8230; Blocking?<\/a><\/li>\n<\/ul>\n\n\n\n<h2 id=\"3-release-radar\" data-num=3>3. Release Radar<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/github.com\/apache\/maven\/releases\/tag\/maven-3.9.0\">Maven 3.9.0<\/a><\/h3>\n\n\n\n<p>Cho\u0107 kolejne wersje Mavena przechodz\u0105 ostatnimi czasy nieco bez echa, to to wci\u0105\u017c bardzo popularne narz\u0119dzie do budowania aplikacji w dalszym ci\u0105gu si\u0119 rozwija i pod\u0105\u017ca za trendami. Niedawno ukaza\u0142 si\u0119 Maven 3.9.0, kt\u00f3ry stanowi wa\u017cny krok w rozwoju projektu &#8211; porzuci\u0142 on wsparcie dla (du\u017co) starszych wersji JDK i wymaga teraz Javy 8. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce ten ruch pozwoli\u0142 im na zaktualizowanie kilka kluczowych zale\u017cno\u015bci, min. Guice czy Maven Resolver. Opr\u00f3cz tego, pojawi\u0142o si\u0119 te\u017c kilka poprawek b\u0142\u0119d\u00f3w i ulepsze\u0144 &#8211; <a href=\"https:\/\/github.com\/apache\/maven\/releases\/tag\/maven-3.9.0\">pe\u0142n\u0105 list\u0119 znajdziecie tutaj<\/a>.<\/p>\n\n\n\n<p>Tw\u00f3rcy ostrzegaj\u0105, \u017ce aktualizacja ta mo\u017ce powodowa\u0107 problemy dla niekt\u00f3rych wtyczek ze wzgl\u0119du na zmiany w sposobie obs\u0142ugi zale\u017cno\u015bci. W szczeg\u00f3lno\u015bci jest to wspomniany ju\u017c Maven Resolver, co sprawia, \u017ce niekt\u00f3re wtyczki mog\u0105 potrzebowa\u0107 zadeklarowa\u0107 zale\u017cno\u015b\u0107 od konkretnej wersji <code>plexus-utils<\/code>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-4.png\" alt=\"\" class=\"wp-image-15005\" width=\"675\" height=\"210\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-4.png 900w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-4-300x93.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-4-768x239.png 768w\" sizes=\"auto, (max-width: 675px) 100vw, 675px\" \/><figcaption class=\"wp-element-caption\">To tyle je\u015bli chodzi o argument &#8222;Maven w odr\u00f3\u017cnieniu od Gradle nigdy nie \u0142amie kompatybilno\u015bci wstecznej&#8221;.<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/netbeans.apache.org\/download\/index.html\">Apache NetBeans 17<\/a><\/h3>\n\n\n\n<p>Kto\u015b u\u017cywa jeszcze NetBeans? Je\u015bli tak, to niedawno pojawi\u0142a si\u0119 pojawi\u0142a si\u0119 nowa wersja tego edytora. <\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/apache\/netbeans\/releases\/tag\/17\">Lista zmian<\/a> jest naprawd\u0119 d\u0142uga, ale brakuje na niej czego\u015b, co mog\u0142oby zainteresowa\u0107 w takim stopniu, jak np. gro nowo\u015bci w ka\u017cdej nowej wersji Intellij, a najciekawszym aspektem ca\u0142ego wydania jest chyba to, \u017ce NetBeans wci\u0105\u017c jest rozwijany.  Je\u015bli mia\u0142bym wskaza\u0107 najwi\u0119ksze z mojej perspektywy zmiany, to do takich bardziej przyci\u0105gaj\u0105cych oczy z pewno\u015bci\u0105 mo\u017cna zaliczy\u0107 wsparcie dla Jakarta EE 10 oraz PHP 8.2.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-6-1024x674.png\" alt=\"\" class=\"wp-image-15032\" width=\"512\" height=\"337\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-6-1024x674.png 1024w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-6-300x197.png 300w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-6-768x505.png 768w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-6-1536x1010.png 1536w, https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-6.png 1946w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><figcaption class=\"wp-element-caption\">Aczkolwiek co do tego ostatniego to podejrzewam, \u017ce jednak nie informacja dla czytelnik\u00f3w tego newsletter.<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\"><a href=\"https:\/\/blog.jooq.org\/3-18-0-release-with-support-for-more-diagnostics-sql-json-oracle-associative-arrays-multi-dimensional-arrays-r2dbc-1-0\/\">jOOQ 3.18<\/a><\/h3>\n\n\n\n<p>jOOQ 3.18 zosta\u0142 wydany z kilkoma ulepszeniami. Jednym z kluczowych dodatk\u00f3w jest ulepszony DiagnosticsListener, kt\u00f3ry zapewnia dodatkow\u0105 diagnostyk\u0119 dla zapyta\u0144 SQL i nowe transformacje wzorc\u00f3w. Dodatkowo, jOOQ 3.18 dodaje obs\u0142ug\u0119 kilku &#8211; specyficznych dla dostawc\u00f3w &#8211; przydatnych rozszerze\u0144 SQL\/JSON, wi\u0119cej implementacji wprowadzonego w jOOQ 3.16 Query Object Model (QOM) API, obs\u0142ug\u0119 tablic asocjacyjnych Oracle oraz kilka usprawnie\u0144 dla <code>jooq-kotlin<\/code>, kt\u00f3re umo\u017cliwiaj\u0105 bardziej idiomatyczne.<\/p>\n\n\n\n<p>Na sam koniec warto wspomnie\u0107, \u017ce ucieszy\u0107 si\u0119 powinni fani programowania reaktywnego &#8211; wydanie to aktualizuje r\u00f3wnie\u017c wersj\u0119 <a href=\"https:\/\/www.baeldung.com\/r2dbc\">R2DBC (reaktywnego sterownika baz danych) do wersji 1.0<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dzisiaj po raz pierwszy przygl\u0105dniemy si\u0119 tematowi tego, co przyniesie nast\u0119pne du\u017ce wydanie JDK 21. Opr\u00f3cz tego kilka ciekawych materia\u0142\u00f3w o JFR i Release Radar.<\/p>\n","protected":false},"author":10,"featured_media":15014,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259,1],"tags":[],"class_list":["post-15002","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl","category-no-category"],"acf":{"estimated_reading_time":"7","feature_image_blog":{"ID":15017,"id":15017,"title":"E1iekWo","filename":"E1iekWo.jpeg","filesize":125632,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo.jpeg","link":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/e1iekwo-2\/","alt":"","author":"10","description":"","caption":"","name":"e1iekwo-2","status":"inherit","uploaded_to":15002,"date":"2023-03-09 13:11:23","modified":"2023-03-09 13:12:56","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1434,"height":934,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo-150x150.jpeg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo-300x195.jpeg","medium-width":300,"medium-height":195,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo-768x500.jpeg","medium_large-width":768,"medium_large-height":500,"large":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo-1024x667.jpeg","large-width":1024,"large-height":667,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo.jpeg","1536x1536-width":1434,"1536x1536-height":934,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo.jpeg","2048x2048-width":1434,"2048x2048-height":934,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo.jpeg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":195,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo.jpeg","gform-image-choice-md-width":400,"gform-image-choice-md-height":261,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/E1iekWo.jpeg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":391}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.png","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? - JVM Weekly vol. 127 - 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\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? - JVM Weekly vol. 127 - Vived\" \/>\n<meta property=\"og:description\" content=\"Dzisiaj po raz pierwszy przygl\u0105dniemy si\u0119 tematowi tego, co przyniesie nast\u0119pne du\u017ce wydanie JDK 21. Opr\u00f3cz tego kilka ciekawych materia\u0142\u00f3w o JFR i Release Radar.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-09T13:11:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-12T07:12:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.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\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? &#8211; JVM Weekly vol. 127\",\"datePublished\":\"2023-03-09T13:11:40+00:00\",\"dateModified\":\"2023-03-12T07:12:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/\"},\"wordCount\":1452,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.png\",\"articleSection\":[\"JVM\",\"No category\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/\",\"url\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/\",\"name\":\"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? - JVM Weekly vol. 127 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.png\",\"datePublished\":\"2023-03-09T13:11:40+00:00\",\"dateModified\":\"2023-03-12T07:12:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? &#8211; JVM Weekly vol. 127\"}]},{\"@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":"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? - JVM Weekly vol. 127 - 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\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/","og_locale":"pl_PL","og_type":"article","og_title":"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? - JVM Weekly vol. 127 - Vived","og_description":"Dzisiaj po raz pierwszy przygl\u0105dniemy si\u0119 tematowi tego, co przyniesie nast\u0119pne du\u017ce wydanie JDK 21. Opr\u00f3cz tego kilka ciekawych materia\u0142\u00f3w o JFR i Release Radar.","og_url":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/","og_site_name":"Vived","article_published_time":"2023-03-09T13:11:40+00:00","article_modified_time":"2023-03-12T07:12:07+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.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\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? &#8211; JVM Weekly vol. 127","datePublished":"2023-03-09T13:11:40+00:00","dateModified":"2023-03-12T07:12:07+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/"},"wordCount":1452,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.png","articleSection":["JVM","No category"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/","url":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/","name":"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? - JVM Weekly vol. 127 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.png","datePublished":"2023-03-09T13:11:40+00:00","dateModified":"2023-03-12T07:12:07+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/JVM-Weekly-1200x628_V2-2.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/pierwsze-informacje-na-temat-jdk-21-jvm-weekly-vol-127\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Pierwsze informacje na temat JDK 21. Co przyniesie nast\u0119pny LTS? &#8211; JVM Weekly vol. 127"}]},{"@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. Pierwsze informacje na temat JDK 21<\/h2>\n","innerContent":["\n<h2>1. Pierwsze informacje na temat JDK 21<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Gdy wszyscy powoli oczekujemy ju\u017c rych\u0142o zbli\u017caj\u0105cej si\u0119 premiery JDK 20, w tle powoli klaruje si\u0119 te\u017c lista funkcjonalno\u015bci, kt\u00f3re trafi\u0105 ju\u017c tej jesieni do JDK 21.<\/p>\n","innerContent":["\n<p>Gdy wszyscy powoli oczekujemy ju\u017c rych\u0142o zbli\u017caj\u0105cej si\u0119 premiery JDK 20, w tle powoli klaruje si\u0119 te\u017c lista funkcjonalno\u015bci, kt\u00f3re trafi\u0105 ju\u017c tej jesieni do JDK 21.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zacznijmy od JEP-\u00f3w, kt\u00f3re ju\u017c teraz oficjalnie zosta\u0142y zaproponowane jako cz\u0119\u015b\u0107 jesiennego wydania. Wszystko wskazuje wi\u0119c na to, \u017ce doczekamy si\u0119 tam wersji <a href=\"https:\/\/openjdk.org\/jeps\/430\">testowej String Templates<\/a>. Ich celem ma by\u0107 rozszerzenie Text Blocks, wprowadzonych w JDK 15. String Templates u\u0142atwiaj\u0105 wype\u0142nianie ich (ale tak\u017ce zwyk\u0142ych String\u00f3w) dynamicznymi warto\u015bciami.<\/p>\n","innerContent":["\n<p>Zacznijmy od JEP-\u00f3w, kt\u00f3re ju\u017c teraz oficjalnie zosta\u0142y zaproponowane jako cz\u0119\u015b\u0107 jesiennego wydania. Wszystko wskazuje wi\u0119c na to, \u017ce doczekamy si\u0119 tam wersji <a href=\"https:\/\/openjdk.org\/jeps\/430\">testowej String Templates<\/a>. Ich celem ma by\u0107 rozszerzenie Text Blocks, wprowadzonych w JDK 15. String Templates u\u0142atwiaj\u0105 wype\u0142nianie ich (ale tak\u017ce zwyk\u0142ych String\u00f3w) dynamicznymi warto\u015bciami.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>\u017beby lepiej zwizualizowa\u0107, jeden z przyk\u0142ad\u00f3w z JEP-a:<\/p>\n","innerContent":["\n<p>\u017beby lepiej zwizualizowa\u0107, jeden z przyk\u0142ad\u00f3w z JEP-a:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>String name    = \"Joan Smith\";\nString phone   = \"555-123-4567\";\nString address = \"1 Maple Drive, Anytown\";\nString json = STR.\"\"\"\n     {\n         \"name\":    \"\\{name}\",\n         \"phone\":   \"\\{phone}\",\n         \"address\": \"\\{address}\"\n     }\n     \"\"\";<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>String name    = \"Joan Smith\";\nString phone   = \"555-123-4567\";\nString address = \"1 Maple Drive, Anytown\";\nString json = STR.\"\"\"\n     {\n         \"name\":    \"\\{name}\",\n         \"phone\":   \"\\{phone}\",\n         \"address\": \"\\{address}\"\n     }\n     \"\"\";<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Mo\u017cliwe jest tak\u017ce wykonywanie ca\u0142ych wyra\u017ce\u0144:<\/p>\n","innerContent":["\n<p>Mo\u017cliwe jest tak\u017ce wykonywanie ca\u0142ych wyra\u017ce\u0144:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code><code> int x = 10;\n int y = 20;\n String s = STR.\"\\{x} + \\{y} = \\{x + y}\"; \/\/ 10 + 20 = 30 <\/code><\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code><code> int x = 10;\n int y = 20;\n String s = STR.\"\\{x} + \\{y} = \\{x + y}\"; \/\/ 10 + 20 = 30 <\/code><\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ca\u0142o\u015b\u0107 opiera si\u0119 na tak zwanych procesorach, w powy\u017cszych przyk\u0142adach u\u017cywany by\u0142 <code>STR.<\/code>, kt\u00f3ry po prostu wykonuje interpolacje. Sam JDK wprowadza r\u00f3wnie\u017c procesor <code>FMT.<\/code>, umo\u017cliwiaj\u0105cy dodatkowe procesowani odpowiedzi, jak np. definiowanie dok\u0142adno\u015bci <code>float<\/code> po przecinku. U\u017cytkownik b\u0119dzie mia\u0142 mo\u017cliwo\u015b\u0107 definiowania r\u00f3wnie\u017c w\u0142asnych formater\u00f3w. Powsta\u0142y mechanizm wygl\u0105da na naprawd\u0119 elastyczny i wychodz\u0105cy daleko poza proste uzupe\u0142nianie stringa zmiennymi.<\/p>\n","innerContent":["\n<p>Ca\u0142o\u015b\u0107 opiera si\u0119 na tak zwanych procesorach, w powy\u017cszych przyk\u0142adach u\u017cywany by\u0142 <code>STR.<\/code>, kt\u00f3ry po prostu wykonuje interpolacje. Sam JDK wprowadza r\u00f3wnie\u017c procesor <code>FMT.<\/code>, umo\u017cliwiaj\u0105cy dodatkowe procesowani odpowiedzi, jak np. definiowanie dok\u0142adno\u015bci <code>float<\/code> po przecinku. U\u017cytkownik b\u0119dzie mia\u0142 mo\u017cliwo\u015b\u0107 definiowania r\u00f3wnie\u017c w\u0142asnych formater\u00f3w. Powsta\u0142y mechanizm wygl\u0105da na naprawd\u0119 elastyczny i wychodz\u0105cy daleko poza proste uzupe\u0142nianie stringa zmiennymi.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kolejnym ju\u017c zapowiedzianym dodatkiem jest <a href=\"https:\/\/openjdk.org\/jeps\/431\">JEP 431: Sequenced Collections<\/a>. Do tej pory brakowa\u0142o w JDK interfejsu, kt\u00f3ry m\u00f3g\u0142by definiowa\u0107 kolekcje o elementach w jasno zdefiniowanej kolejno\u015bci, r\u00f3wnocze\u015bnie umo\u017cliwiaj\u0105c \u0142atwe iterowanie po nich. Z tego powodu w zasadzie ka\u017cda z istniej\u0105cych kolekcji podchodzi\u0142a do tematu inaczej:<\/p>\n","innerContent":["\n<p>Kolejnym ju\u017c zapowiedzianym dodatkiem jest <a href=\"https:\/\/openjdk.org\/jeps\/431\">JEP 431: Sequenced Collections<\/a>. Do tej pory brakowa\u0142o w JDK interfejsu, kt\u00f3ry m\u00f3g\u0142by definiowa\u0107 kolekcje o elementach w jasno zdefiniowanej kolejno\u015bci, r\u00f3wnocze\u015bnie umo\u017cliwiaj\u0105c \u0142atwe iterowanie po nich. Z tego powodu w zasadzie ka\u017cda z istniej\u0105cych kolekcji podchodzi\u0142a do tematu inaczej:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":655,"height":138},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/zpJ09Se.png\" alt=\"\" width=\"655\" height=\"138\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/zpJ09Se.png\" alt=\"\" width=\"655\" height=\"138\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dlatego te\u017c do JDK trafi nowy interfejs, oparty o implementacj\u0119 Deque:<\/p>\n","innerContent":["\n<p>Dlatego te\u017c do JDK trafi nowy interfejs, oparty o implementacj\u0119 Deque:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code><code>interface SequencedCollection&lt;E&gt; extends Collection&lt;E&gt; {\n     SequencedCollection&lt;E&gt; reversed();\n     void addFirst(E);\n     void addLast(E);\n     E getFirst();\n     E getLast();\n     E removeFirst();\n     E removeLast();\n}<\/code><\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code><code>interface SequencedCollection&lt;E&gt; extends Collection&lt;E&gt; {\n     SequencedCollection&lt;E&gt; reversed();\n     void addFirst(E);\n     void addLast(E);\n     E getFirst();\n     E getLast();\n     E removeFirst();\n     E removeLast();\n}<\/code><\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Opr\u00f3cz lepszego wsparcia dla operacji na pierwszym i ostatnim elemencie, u\u0142atwione b\u0119dzie r\u00f3wnie\u017c iterowanie po kolekcji w odwrotnej kolejno\u015bci dzi\u0119ki wprowadzeniu metody <code>reversed()<\/code>.<\/p>\n","innerContent":["\n<p>Opr\u00f3cz lepszego wsparcia dla operacji na pierwszym i ostatnim elemencie, u\u0142atwione b\u0119dzie r\u00f3wnie\u017c iterowanie po kolekcji w odwrotnej kolejno\u015bci dzi\u0119ki wprowadzeniu metody <code>reversed()<\/code>.<\/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\/03\/ea1d325767048da637cd6ac6931abde6.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Tak \u017ceby zamkn\u0105\u0107 temat, mia\u0142em spory u\u015bmiech widz\u0105c cytat z S\u00f8ren Kierkegaard w <a href=\"https:\/\/openjdk.org\/jeps\/431\">oryginalnym podsumowaniu JEPa<\/a>.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/ea1d325767048da637cd6ac6931abde6.jpg\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Tak \u017ceby zamkn\u0105\u0107 temat, mia\u0142em spory u\u015bmiech widz\u0105c cytat z S\u00f8ren Kierkegaard w <a href=\"https:\/\/openjdk.org\/jeps\/431\">oryginalnym podsumowaniu JEPa<\/a>.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To jednak nie wszystko - wszystko wskazuje na to, \u017ce w JDK 21 doczekamy si\u0119 r\u00f3wnie\u017c dw\u00f3ch kolejnych JEP-\u00f3w - <a href=\"https:\/\/openjdk.org\/jeps\/8300541\">Record Patterns<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/8300542\">Pattern Matching for switch<\/a>. Jak zauwa\u017cy\u0142 Reddit <a href=\"https:\/\/www.reddit.com\/r\/java\/comments\/11lksdo\/jep_pattern_matching_for_switch_records_patterns\">\/r\/java<\/a>, mimo \u017ce oba JEPy pozostaj\u0105 jeszcze w Drafcie, to przyk\u0142ady kodu jasno odnosz\u0105 si\u0119 w nich w\u0142a\u015bnie do JDK 21. Wydaje si\u0119 wi\u0119c, \u017ce jesie\u0144 b\u0119dzie nale\u017ca\u0142a do Projektu Amber.<\/p>\n","innerContent":["\n<p>To jednak nie wszystko - wszystko wskazuje na to, \u017ce w JDK 21 doczekamy si\u0119 r\u00f3wnie\u017c dw\u00f3ch kolejnych JEP-\u00f3w - <a href=\"https:\/\/openjdk.org\/jeps\/8300541\">Record Patterns<\/a> oraz <a href=\"https:\/\/openjdk.org\/jeps\/8300542\">Pattern Matching for switch<\/a>. Jak zauwa\u017cy\u0142 Reddit <a href=\"https:\/\/www.reddit.com\/r\/java\/comments\/11lksdo\/jep_pattern_matching_for_switch_records_patterns\">\/r\/java<\/a>, mimo \u017ce oba JEPy pozostaj\u0105 jeszcze w Drafcie, to przyk\u0142ady kodu jasno odnosz\u0105 si\u0119 w nich w\u0142a\u015bnie do JDK 21. Wydaje si\u0119 wi\u0119c, \u017ce jesie\u0144 b\u0119dzie nale\u017ca\u0142a do Projektu Amber.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A jak ju\u017c jeste\u015bmy przy Pattern Matchingu i dekonstrukcji rekord\u00f3w - tw\u00f3rcy JDK nie planuj\u0105 si\u0119 na tym zatrzyma\u0107. W zesz\u0142ym tygodniu Brian Goetz opublikowa\u0142 analiz\u0119 <em><a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-spec-experts\/2023-March\/003766.html\">Deconstruction patterns<\/a><\/em> dotycz\u0105c\u0105 mo\u017cliwo\u015bci zaimplementowania dekonstrukcji innych obiekt\u00f3w, ni\u017c tylko rekordy. W tym dokumencie zaproponowano wprowadzenie Dekonstruktor\u00f3w, kt\u00f3re s\u0105 uog\u00f3lnieniem rozwi\u0105za\u0144 stworzonych na potrzeby rekord\u00f3w. Pozwala\u0107 maj\u0105 one na destrukturyzacj\u0119 dowolnej klasy, kt\u00f3ra ma je zadeklarowane - dekonstruktory musz\u0105 by\u0107 zdefiniowane jawnie i wymagaj\u0105 exact-matchu.<\/p>\n","innerContent":["\n<p>A jak ju\u017c jeste\u015bmy przy Pattern Matchingu i dekonstrukcji rekord\u00f3w - tw\u00f3rcy JDK nie planuj\u0105 si\u0119 na tym zatrzyma\u0107. W zesz\u0142ym tygodniu Brian Goetz opublikowa\u0142 analiz\u0119 <em><a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-spec-experts\/2023-March\/003766.html\">Deconstruction patterns<\/a><\/em> dotycz\u0105c\u0105 mo\u017cliwo\u015bci zaimplementowania dekonstrukcji innych obiekt\u00f3w, ni\u017c tylko rekordy. W tym dokumencie zaproponowano wprowadzenie Dekonstruktor\u00f3w, kt\u00f3re s\u0105 uog\u00f3lnieniem rozwi\u0105za\u0144 stworzonych na potrzeby rekord\u00f3w. Pozwala\u0107 maj\u0105 one na destrukturyzacj\u0119 dowolnej klasy, kt\u00f3ra ma je zadeklarowane - dekonstruktory musz\u0105 by\u0107 zdefiniowane jawnie i wymagaj\u0105 exact-matchu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Poni\u017cszy przyk\u0142ad pokazuje, jak mog\u0142yby wygl\u0105da\u0107, aczkolwiek Brian Goetz zastrzega, \u017ce sk\u0142adania jest wy\u0142\u0105cznie pogl\u0105dowa i nie nale\u017cy si\u0119 do niej przyzwyczaja\u0107.<\/p>\n","innerContent":["\n<p>Poni\u017cszy przyk\u0142ad pokazuje, jak mog\u0142yby wygl\u0105da\u0107, aczkolwiek Brian Goetz zastrzega, \u017ce sk\u0142adania jest wy\u0142\u0105cznie pogl\u0105dowa i nie nale\u017cy si\u0119 do niej przyzwyczaja\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>class Point {\n     final double x, y;\n\n     public Point(double x, double y) {\n         this.x = x;\n         this.y = y;\n     }\n\n     public matcher Point(double x, double y) {\n         x = this.x;\n         y = this.y;\n     }\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>class Point {\n     final double x, y;\n\n     public Point(double x, double y) {\n         this.x = x;\n         this.y = y;\n     }\n\n     public matcher Point(double x, double y) {\n         x = this.x;\n         y = this.y;\n     }\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Stanowi\u0107 wi\u0119c maj\u0105 co\u015b w rodzaju odwrotno\u015bci konstruktor\u00f3w - maj\u0105 bowiem zbiera\u0107 warto\u015bci p\u00f3l danego obiektu i wystawia\u0107 je jako mo\u017cliwe do \u0142atwego wyekstrachowana z klasy.<\/p>\n","innerContent":["\n<p>Stanowi\u0107 wi\u0119c maj\u0105 co\u015b w rodzaju odwrotno\u015bci konstruktor\u00f3w - maj\u0105 bowiem zbiera\u0107 warto\u015bci p\u00f3l danego obiektu i wystawia\u0107 je jako mo\u017cliwe do \u0142atwego wyekstrachowana z klasy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tak na sam koniec warto te\u017c wspomnie\u0107, \u017ce JDK 21 b\u0119dzie wydaniem LTS (Long-Time Support). Zatem miejmy nadzieje, \u017ce b\u0119dzie jak najbardziej wype\u0142nione funkcjonalno\u015bciami - to w\u0142a\u015bnie ono bowiem b\u0119dzie na lata wydaniem sugerowanym produkcyjnemu u\u017cyciu.<\/p>\n","innerContent":["\n<p>Tak na sam koniec warto te\u017c wspomnie\u0107, \u017ce JDK 21 b\u0119dzie wydaniem LTS (Long-Time Support). Zatem miejmy nadzieje, \u017ce b\u0119dzie jak najbardziej wype\u0142nione funkcjonalno\u015bciami - to w\u0142a\u015bnie ono bowiem b\u0119dzie na lata wydaniem sugerowanym produkcyjnemu u\u017cyciu.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15010,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-5.png\" alt=\"\" class=\"wp-image-15010\"\/><figcaption class=\"wp-element-caption\">Mo\u017ce to w ko\u0144cu b\u0119dzie to wydanie, kt\u00f3re przekona kolejn\u0105 grup\u0119 u\u017cytk\u00f3wnik\u00f3w JDK, \u017ce warto si\u0119 zmigrowa\u0107 na now\u0105 wersj\u0119.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-5.png\" alt=\"\" class=\"wp-image-15010\"\/><figcaption class=\"wp-element-caption\">Mo\u017ce to w ko\u0144cu b\u0119dzie to wydanie, kt\u00f3re przekona kolejn\u0105 grup\u0119 u\u017cytk\u00f3wnik\u00f3w JDK, \u017ce warto si\u0119 zmigrowa\u0107 na now\u0105 wersj\u0119.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/430\">JEP 430: String Templates (Preview)<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/430\">JEP 430: String Templates (Preview)<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300541\">JEP Draft: Record Patterns<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300541\">JEP Draft: Record Patterns<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300542\">JEP Draft: Pattern Matching for switch<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/8300542\">JEP Draft: Pattern Matching for switch<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/openjdk.org\/jeps\/431\">JEP 431: Sequenced Collections<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/openjdk.org\/jeps\/431\">JEP 431: Sequenced Collections<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-spec-experts\/2023-March\/003766.html\">Deconstruction patterns<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/mail.openjdk.org\/pipermail\/amber-spec-experts\/2023-March\/003766.html\">Deconstruction patterns<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n\n\n\n\n\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"\n\n",null,"\n\n",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Do czego si\u0119 mo\u017ce przyda\u0107 JDK Flight Recorder<\/h2>\n","innerContent":["\n<h2>2. Do czego si\u0119 mo\u017ce przyda\u0107 JDK Flight Recorder<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JDK Flight Recorder (oficjalna aplikacja do monitoringu JVM) przez d\u0142ugi czas \u201clata\u0142 pod radarem\u201d wi\u0119kszo\u015b\u0107 programist\u00f3w JVM, co by\u0142o zwi\u0105zane z faktem, \u017ce wymaga\u0142 komercyjnej wersji JDK udost\u0119pnianej przez Oracle. Cho\u0107 zdarza\u0142y si\u0119 oczywi\u015bcie firmy, kt\u00f3re takow\u0105 posiada\u0142y, to jednak mocno wp\u0142ywa\u0142o to zar\u00f3wno na poziom umiej\u0119tno\u015bci programist\u00f3w (przez kiepsk\u0105 dost\u0119pno\u015b\u0107 trudno by\u0142o nauczy\u0107 si\u0119 obs\u0142ugi tego narz\u0119dzia), jak i zainteresowanie do inwestowania w jego poznanie (zbyt prawdopodobnym by\u0142o, \u017ce kolejna firma, w kt\u00f3rej b\u0119dziemy pracowa\u0107, nie b\u0119dzie mia\u0142a do niego dost\u0119pu). Teraz jednak, kiedy ju\u017c nareszcie wraz z JDK 11 ca\u0142o\u015b\u0107 trafi\u0142a w r\u0119ce spo\u0142eczno\u015bci i mo\u017cna m\u00f3wi\u0107, \u017ce wreszcie nast\u0119puje ma\u0142y, powolny renesans.<\/p>\n","innerContent":["\n<p>JDK Flight Recorder (oficjalna aplikacja do monitoringu JVM) przez d\u0142ugi czas \u201clata\u0142 pod radarem\u201d wi\u0119kszo\u015b\u0107 programist\u00f3w JVM, co by\u0142o zwi\u0105zane z faktem, \u017ce wymaga\u0142 komercyjnej wersji JDK udost\u0119pnianej przez Oracle. Cho\u0107 zdarza\u0142y si\u0119 oczywi\u015bcie firmy, kt\u00f3re takow\u0105 posiada\u0142y, to jednak mocno wp\u0142ywa\u0142o to zar\u00f3wno na poziom umiej\u0119tno\u015bci programist\u00f3w (przez kiepsk\u0105 dost\u0119pno\u015b\u0107 trudno by\u0142o nauczy\u0107 si\u0119 obs\u0142ugi tego narz\u0119dzia), jak i zainteresowanie do inwestowania w jego poznanie (zbyt prawdopodobnym by\u0142o, \u017ce kolejna firma, w kt\u00f3rej b\u0119dziemy pracowa\u0107, nie b\u0119dzie mia\u0142a do niego dost\u0119pu). Teraz jednak, kiedy ju\u017c nareszcie wraz z JDK 11 ca\u0142o\u015b\u0107 trafi\u0142a w r\u0119ce spo\u0142eczno\u015bci i mo\u017cna m\u00f3wi\u0107, \u017ce wreszcie nast\u0119puje ma\u0142y, powolny renesans.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ostatnio na blogu <a class=\"autolink\" href=\"https:\/\/inside.java\">inside.java<\/a> pojawi\u0142 si\u0119 <a href=\"https:\/\/www.youtube.com\/watch?v=2gTcZgiX7IE\">bowiem zapis prezentacji Joakima Nordstr\u00f6m z Oracle<\/a>, kt\u00f3ra stanowi bardzo praktyczne wprowadzenie do tego, w jakich sytuacjach przyda\u0107 mo\u017ce si\u0119 programistom Flight Recorder. Ca\u0142o\u015b\u0107 skupia si\u0119 na API JFR i jego podstawowych sk\u0142adowych, takich jak dost\u0119pne ustawienia, zdarzenia, rodzaje dost\u0119pnych informacji i metadane i metadane. W przeci\u0105gu nieca\u0142ych 40 minut Joakim poka\u017ce Wam wi\u0119c wystarczaj\u0105co du\u017co, aby podj\u0105\u0107 decyzje czy JFR r\u00f3wnie\u017c w Waszej aplikacji.<\/p>\n","innerContent":["\n<p>Ostatnio na blogu <a class=\"autolink\" href=\"https:\/\/inside.java\">inside.java<\/a> pojawi\u0142 si\u0119 <a href=\"https:\/\/www.youtube.com\/watch?v=2gTcZgiX7IE\">bowiem zapis prezentacji Joakima Nordstr\u00f6m z Oracle<\/a>, kt\u00f3ra stanowi bardzo praktyczne wprowadzenie do tego, w jakich sytuacjach przyda\u0107 mo\u017ce si\u0119 programistom Flight Recorder. Ca\u0142o\u015b\u0107 skupia si\u0119 na API JFR i jego podstawowych sk\u0142adowych, takich jak dost\u0119pne ustawienia, zdarzenia, rodzaje dost\u0119pnych informacji i metadane i metadane. W przeci\u0105gu nieca\u0142ych 40 minut Joakim poka\u017ce Wam wi\u0119c wystarczaj\u0105co du\u017co, aby podj\u0105\u0107 decyzje czy JFR r\u00f3wnie\u017c w Waszej aplikacji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/embed","attrs":{"url":"https:\/\/www.youtube.com\/watch?v=2gTcZgiX7IE","type":"video","providerNameSlug":"youtube","responsive":true,"className":"wp-embed-aspect-16-9 wp-has-aspect-ratio"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=2gTcZgiX7IE\n<\/div><\/figure>\n","innerContent":["\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.youtube.com\/watch?v=2gTcZgiX7IE\n<\/div><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JFR ma zreszt\u0105 te\u017c swoich ma\u0142ych bohater\u00f3w poza Oraclem i je\u015bli powy\u017csza prezentacja zach\u0119ci Was do spr\u00f3bowania tego narz\u0119dzia, to najlepsz\u0105 osob\u0105 do \u015bledzenia b\u0119dzie Gunnar Morling. Wyobra\u017cacie sobie na przyk\u0142ad, \u017ce taki format pliku wynikowego Flight Recordera nie jest w \u017caden spos\u00f3b udokumentowany? To w\u0142a\u015bnie Gunnar na podstawie kodu \u017ar\u00f3d\u0142owego <a href=\"https:\/\/www.morling.dev\/blog\/jdk-flight-recorder-file-format\/\">przygotowa\u0142 pe\u0142n\u0105 specyfikacj\u0119 tego<\/a>, w jaki spos\u00f3b Flight Recorder dzia\u0142a, wraz z bardzo dok\u0142adnym diagramem, kt\u00f3ry teraz pozwoli\u0107 mo\u017ce na stworzenie alternatyw do oryginalnych narz\u0119dzi Oracle, a tak\u017ce integracje ca\u0142o\u015bci z ca\u0142ym ekosystemem tooli do monitoringu. <\/p>\n","innerContent":["\n<p>JFR ma zreszt\u0105 te\u017c swoich ma\u0142ych bohater\u00f3w poza Oraclem i je\u015bli powy\u017csza prezentacja zach\u0119ci Was do spr\u00f3bowania tego narz\u0119dzia, to najlepsz\u0105 osob\u0105 do \u015bledzenia b\u0119dzie Gunnar Morling. Wyobra\u017cacie sobie na przyk\u0142ad, \u017ce taki format pliku wynikowego Flight Recordera nie jest w \u017caden spos\u00f3b udokumentowany? To w\u0142a\u015bnie Gunnar na podstawie kodu \u017ar\u00f3d\u0142owego <a href=\"https:\/\/www.morling.dev\/blog\/jdk-flight-recorder-file-format\/\">przygotowa\u0142 pe\u0142n\u0105 specyfikacj\u0119 tego<\/a>, w jaki spos\u00f3b Flight Recorder dzia\u0142a, wraz z bardzo dok\u0142adnym diagramem, kt\u00f3ry teraz pozwoli\u0107 mo\u017ce na stworzenie alternatyw do oryginalnych narz\u0119dzi Oracle, a tak\u017ce integracje ca\u0142o\u015bci z ca\u0142ym ekosystemem tooli do monitoringu. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Blog Gunnara pe\u0142ny jest \u015bwietnych publikacji pokazuj\u0105cych, jak pot\u0119\u017cnym narz\u0119dziem jest Flight Recorder, jak cho\u0107by stosunkowo \u015bwie\u017cy tekst <a href=\"https:\/\/www.morling.dev\/blog\/finding-java-thread-leaks-with-jdk-flight-recorder-and-bit-of-sql\">Finding Java Thread Leaks With JDK Flight Recorder and a Bit Of SQL<\/a> czy nieco wcze\u015bniejszy <a href=\"https:\/\/www.morling.dev\/blog\/is-your-blocking-queue-blocking\">Is your Blocking Queue... Blocking?<\/a>. Do\u015b\u0107 powiedzie\u0107, \u017ce to w\u0142a\u015bnie jego publikacje zainteresowa\u0142y mnie narz\u0119dziem, kt\u00f3rego wcze\u015bniej nie dotkn\u0105\u0142bym pewnie kijem - polecam serdecznie.<\/p>\n","innerContent":["\n<p>Blog Gunnara pe\u0142ny jest \u015bwietnych publikacji pokazuj\u0105cych, jak pot\u0119\u017cnym narz\u0119dziem jest Flight Recorder, jak cho\u0107by stosunkowo \u015bwie\u017cy tekst <a href=\"https:\/\/www.morling.dev\/blog\/finding-java-thread-leaks-with-jdk-flight-recorder-and-bit-of-sql\">Finding Java Thread Leaks With JDK Flight Recorder and a Bit Of SQL<\/a> czy nieco wcze\u015bniejszy <a href=\"https:\/\/www.morling.dev\/blog\/is-your-blocking-queue-blocking\">Is your Blocking Queue... Blocking?<\/a>. Do\u015b\u0107 powiedzie\u0107, \u017ce to w\u0142a\u015bnie jego publikacje zainteresowa\u0142y mnie narz\u0119dziem, kt\u00f3rego wcze\u015bniej nie dotkn\u0105\u0142bym pewnie kijem - polecam serdecznie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.morling.dev\/blog\/finding-java-thread-leaks-with-jdk-flight-recorder-and-bit-of-sql\">Finding Java Thread Leaks With JDK Flight Recorder and a Bit Of SQL<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.morling.dev\/blog\/finding-java-thread-leaks-with-jdk-flight-recorder-and-bit-of-sql\">Finding Java Thread Leaks With JDK Flight Recorder and a Bit Of SQL<\/a><\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li><a href=\"https:\/\/www.morling.dev\/blog\/is-your-blocking-queue-blocking\">Is your Blocking Queue... Blocking?<\/a><\/li>\n","innerContent":["\n<li><a href=\"https:\/\/www.morling.dev\/blog\/is-your-blocking-queue-blocking\">Is your Blocking Queue... Blocking?<\/a><\/li>\n"]}],"innerHTML":"\n<ul>\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Release Radar<\/h2>\n","innerContent":["\n<h2>3. Release Radar<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3><a href=\"https:\/\/github.com\/apache\/maven\/releases\/tag\/maven-3.9.0\">Maven 3.9.0<\/a><\/h3>\n","innerContent":["\n<h3><a href=\"https:\/\/github.com\/apache\/maven\/releases\/tag\/maven-3.9.0\">Maven 3.9.0<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Cho\u0107 kolejne wersje Mavena przechodz\u0105 ostatnimi czasy nieco bez echa, to to wci\u0105\u017c bardzo popularne narz\u0119dzie do budowania aplikacji w dalszym ci\u0105gu si\u0119 rozwija i pod\u0105\u017ca za trendami. Niedawno ukaza\u0142 si\u0119 Maven 3.9.0, kt\u00f3ry stanowi wa\u017cny krok w rozwoju projektu - porzuci\u0142 on wsparcie dla (du\u017co) starszych wersji JDK i wymaga teraz Javy 8. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce ten ruch pozwoli\u0142 im na zaktualizowanie kilka kluczowych zale\u017cno\u015bci, min. Guice czy Maven Resolver. Opr\u00f3cz tego, pojawi\u0142o si\u0119 te\u017c kilka poprawek b\u0142\u0119d\u00f3w i ulepsze\u0144 - <a href=\"https:\/\/github.com\/apache\/maven\/releases\/tag\/maven-3.9.0\">pe\u0142n\u0105 list\u0119 znajdziecie tutaj<\/a>.<\/p>\n","innerContent":["\n<p>Cho\u0107 kolejne wersje Mavena przechodz\u0105 ostatnimi czasy nieco bez echa, to to wci\u0105\u017c bardzo popularne narz\u0119dzie do budowania aplikacji w dalszym ci\u0105gu si\u0119 rozwija i pod\u0105\u017ca za trendami. Niedawno ukaza\u0142 si\u0119 Maven 3.9.0, kt\u00f3ry stanowi wa\u017cny krok w rozwoju projektu - porzuci\u0142 on wsparcie dla (du\u017co) starszych wersji JDK i wymaga teraz Javy 8. Tw\u00f3rcy chwal\u0105 si\u0119, \u017ce ten ruch pozwoli\u0142 im na zaktualizowanie kilka kluczowych zale\u017cno\u015bci, min. Guice czy Maven Resolver. Opr\u00f3cz tego, pojawi\u0142o si\u0119 te\u017c kilka poprawek b\u0142\u0119d\u00f3w i ulepsze\u0144 - <a href=\"https:\/\/github.com\/apache\/maven\/releases\/tag\/maven-3.9.0\">pe\u0142n\u0105 list\u0119 znajdziecie tutaj<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tw\u00f3rcy ostrzegaj\u0105, \u017ce aktualizacja ta mo\u017ce powodowa\u0107 problemy dla niekt\u00f3rych wtyczek ze wzgl\u0119du na zmiany w sposobie obs\u0142ugi zale\u017cno\u015bci. W szczeg\u00f3lno\u015bci jest to wspomniany ju\u017c Maven Resolver, co sprawia, \u017ce niekt\u00f3re wtyczki mog\u0105 potrzebowa\u0107 zadeklarowa\u0107 zale\u017cno\u015b\u0107 od konkretnej wersji <code>plexus-utils<\/code>.<\/p>\n","innerContent":["\n<p>Tw\u00f3rcy ostrzegaj\u0105, \u017ce aktualizacja ta mo\u017ce powodowa\u0107 problemy dla niekt\u00f3rych wtyczek ze wzgl\u0119du na zmiany w sposobie obs\u0142ugi zale\u017cno\u015bci. W szczeg\u00f3lno\u015bci jest to wspomniany ju\u017c Maven Resolver, co sprawia, \u017ce niekt\u00f3re wtyczki mog\u0105 potrzebowa\u0107 zadeklarowa\u0107 zale\u017cno\u015b\u0107 od konkretnej wersji <code>plexus-utils<\/code>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15005,"width":675,"height":210,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-4.png\" alt=\"\" class=\"wp-image-15005\" width=\"675\" height=\"210\"\/><figcaption class=\"wp-element-caption\">To tyle je\u015bli chodzi o argument \"Maven w odr\u00f3\u017cnieniu od Gradle nigdy nie \u0142amie kompatybilno\u015bci wstecznej\".<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-4.png\" alt=\"\" class=\"wp-image-15005\" width=\"675\" height=\"210\"\/><figcaption class=\"wp-element-caption\">To tyle je\u015bli chodzi o argument \"Maven w odr\u00f3\u017cnieniu od Gradle nigdy nie \u0142amie kompatybilno\u015bci wstecznej\".<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3><a href=\"https:\/\/netbeans.apache.org\/download\/index.html\">Apache NetBeans 17<\/a><\/h3>\n","innerContent":["\n<h3><a href=\"https:\/\/netbeans.apache.org\/download\/index.html\">Apache NetBeans 17<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kto\u015b u\u017cywa jeszcze NetBeans? Je\u015bli tak, to niedawno pojawi\u0142a si\u0119 pojawi\u0142a si\u0119 nowa wersja tego edytora. <\/p>\n","innerContent":["\n<p>Kto\u015b u\u017cywa jeszcze NetBeans? Je\u015bli tak, to niedawno pojawi\u0142a si\u0119 pojawi\u0142a si\u0119 nowa wersja tego edytora. <\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/github.com\/apache\/netbeans\/releases\/tag\/17\">Lista zmian<\/a> jest naprawd\u0119 d\u0142uga, ale brakuje na niej czego\u015b, co mog\u0142oby zainteresowa\u0107 w takim stopniu, jak np. gro nowo\u015bci w ka\u017cdej nowej wersji Intellij, a najciekawszym aspektem ca\u0142ego wydania jest chyba to, \u017ce NetBeans wci\u0105\u017c jest rozwijany.  Je\u015bli mia\u0142bym wskaza\u0107 najwi\u0119ksze z mojej perspektywy zmiany, to do takich bardziej przyci\u0105gaj\u0105cych oczy z pewno\u015bci\u0105 mo\u017cna zaliczy\u0107 wsparcie dla Jakarta EE 10 oraz PHP 8.2.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/github.com\/apache\/netbeans\/releases\/tag\/17\">Lista zmian<\/a> jest naprawd\u0119 d\u0142uga, ale brakuje na niej czego\u015b, co mog\u0142oby zainteresowa\u0107 w takim stopniu, jak np. gro nowo\u015bci w ka\u017cdej nowej wersji Intellij, a najciekawszym aspektem ca\u0142ego wydania jest chyba to, \u017ce NetBeans wci\u0105\u017c jest rozwijany.  Je\u015bli mia\u0142bym wskaza\u0107 najwi\u0119ksze z mojej perspektywy zmiany, to do takich bardziej przyci\u0105gaj\u0105cych oczy z pewno\u015bci\u0105 mo\u017cna zaliczy\u0107 wsparcie dla Jakarta EE 10 oraz PHP 8.2.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":15032,"width":512,"height":337,"sizeSlug":"large","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-6-1024x674.png\" alt=\"\" class=\"wp-image-15032\" width=\"512\" height=\"337\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek co do tego ostatniego to podejrzewam, \u017ce jednak nie informacja dla czytelnik\u00f3w tego newsletter.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2023\/03\/image-6-1024x674.png\" alt=\"\" class=\"wp-image-15032\" width=\"512\" height=\"337\"\/><figcaption class=\"wp-element-caption\">Aczkolwiek co do tego ostatniego to podejrzewam, \u017ce jednak nie informacja dla czytelnik\u00f3w tego newsletter.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3><a href=\"https:\/\/blog.jooq.org\/3-18-0-release-with-support-for-more-diagnostics-sql-json-oracle-associative-arrays-multi-dimensional-arrays-r2dbc-1-0\/\">jOOQ 3.18<\/a><\/h3>\n","innerContent":["\n<h3><a href=\"https:\/\/blog.jooq.org\/3-18-0-release-with-support-for-more-diagnostics-sql-json-oracle-associative-arrays-multi-dimensional-arrays-r2dbc-1-0\/\">jOOQ 3.18<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>jOOQ 3.18 zosta\u0142 wydany z kilkoma ulepszeniami. Jednym z kluczowych dodatk\u00f3w jest ulepszony DiagnosticsListener, kt\u00f3ry zapewnia dodatkow\u0105 diagnostyk\u0119 dla zapyta\u0144 SQL i nowe transformacje wzorc\u00f3w. Dodatkowo, jOOQ 3.18 dodaje obs\u0142ug\u0119 kilku - specyficznych dla dostawc\u00f3w - przydatnych rozszerze\u0144 SQL\/JSON, wi\u0119cej implementacji wprowadzonego w jOOQ 3.16 Query Object Model (QOM) API, obs\u0142ug\u0119 tablic asocjacyjnych Oracle oraz kilka usprawnie\u0144 dla <code>jooq-kotlin<\/code>, kt\u00f3re umo\u017cliwiaj\u0105 bardziej idiomatyczne.<\/p>\n","innerContent":["\n<p>jOOQ 3.18 zosta\u0142 wydany z kilkoma ulepszeniami. Jednym z kluczowych dodatk\u00f3w jest ulepszony DiagnosticsListener, kt\u00f3ry zapewnia dodatkow\u0105 diagnostyk\u0119 dla zapyta\u0144 SQL i nowe transformacje wzorc\u00f3w. Dodatkowo, jOOQ 3.18 dodaje obs\u0142ug\u0119 kilku - specyficznych dla dostawc\u00f3w - przydatnych rozszerze\u0144 SQL\/JSON, wi\u0119cej implementacji wprowadzonego w jOOQ 3.16 Query Object Model (QOM) API, obs\u0142ug\u0119 tablic asocjacyjnych Oracle oraz kilka usprawnie\u0144 dla <code>jooq-kotlin<\/code>, kt\u00f3re umo\u017cliwiaj\u0105 bardziej idiomatyczne.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na sam koniec warto wspomnie\u0107, \u017ce ucieszy\u0107 si\u0119 powinni fani programowania reaktywnego - wydanie to aktualizuje r\u00f3wnie\u017c wersj\u0119 <a href=\"https:\/\/www.baeldung.com\/r2dbc\">R2DBC (reaktywnego sterownika baz danych) do wersji 1.0<\/a>.<\/p>\n","innerContent":["\n<p>Na sam koniec warto wspomnie\u0107, \u017ce ucieszy\u0107 si\u0119 powinni fani programowania reaktywnego - wydanie to aktualizuje r\u00f3wnie\u017c wersj\u0119 <a href=\"https:\/\/www.baeldung.com\/r2dbc\">R2DBC (reaktywnego sterownika baz danych) do wersji 1.0<\/a>.<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15002","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=15002"}],"version-history":[{"count":21,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15002\/revisions"}],"predecessor-version":[{"id":15135,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/15002\/revisions\/15135"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/15014"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=15002"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=15002"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=15002"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}