{"id":10142,"date":"2021-05-04T11:27:26","date_gmt":"2021-05-04T09:27:26","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-36\/"},"modified":"2022-09-19T13:10:53","modified_gmt":"2022-09-19T11:10:53","slug":"jvm-tuesday-vol-36","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/","title":{"rendered":"JVM Tuesday vol. 36"},"content":{"rendered":"<p>Zacznijmy od najwa\u017cniejszego:<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-6.png\" alt=\"\" width=\"407\" height=\"298\" \/><figcaption>May the 4th be with You!\u00a0<\/figcaption><\/figure>\n<p>A teraz do konkret\u00f3w<\/p>\n<h2 id=\"1-micronaut-vs-quarkus-ktorego-wybrac\" data-num=1>1. <a href=\"https:\/\/blog.softwaremill.com\/micronaut-vs-quarkus-whats-the-difference-5068f0da5390\">Micronaut vs Quarkus &#8211; kt\u00f3rego wybra\u0107 ? \u2694\ufe0f<\/a><\/h2>\n<p>Przez kup\u0119 lat w \u015bwiecie JVMowych Framework\u00f3w by\u0142 Spring Boot, daleko w tyle implementacje Java EE, a potem d\u0142ugo, d\u0142ugo nic. Gdzie\u015b tam majaczy\u0142 Spark (nie myli\u0107 z Apache Spark), jak\u0105\u015b tam nisz\u0119 zajmowa\u0142 Dropwizard, pasjonaci mogli bawi\u0107 si\u0119 Grailsami\u2026 i to by by\u0142o na tyle.<\/p>\n<figure class=\"kg-card kg-image-card\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-9.png\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-9.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-9.png 620w\" alt=\"\" width=\"620\" height=\"465\" \/><\/figure>\n<p>Sytuacja ostatnimi czasy zmieni\u0142a si\u0119 diametralnie. Wraz z premier\u0105 Micronauta od Object Computing (kt\u00f3rzy wcze\u015bniej stworzyli wspomniane przed momentem Grails) zauwa\u017cy\u0107 mo\u017cemy ponowne zainteresowanie wykrojeniem sobie kawa\u0142ka smakowitego javowego tortu. Wydaje si\u0119, \u017ce najpopularniejszym z pretendent\u00f3w jest Quarkus, o kt\u00f3rym w zasadzie wszyscy wypowiadaj\u0105 si\u0119 w samych superlatywach. Mo\u017cna si\u0119 zastanowi\u0107, co takiego si\u0119 zmieni\u0142o, \u017ce niezagro\u017cona do tej pory pozycja Springa nie jest ju\u017c taka oczywista &#8211; i je\u017celi dobrze si\u0119 przygl\u0105dn\u0105\u0107, to do\u015b\u0107 jasnym staje si\u0119 fakt, \u017ce podzi\u0119kowa\u0107 mo\u017cemy za to trzem si\u0142om &#8211; chmurze (aczkolwiek ta sama w sobie, co najwy\u017cej wypromowa\u0142a Spring Boota), Kubernetesowi oraz GraalVM. Je\u017celi spojrze\u0107 na to, czym chwal\u0105 si\u0119 w zasadzie wszystkie nowe rozwi\u0105zania, to w\u0142a\u015bnie bycie Cloud Native &#8211; co w rozumieniu javowym sprowadza si\u0119 do dw\u00f3ch czynnik\u00f3w. Pierwszym z nich jest szybki start &#8211; bol\u0105czka Springa &#8211; kt\u00f3ry w znacznym stopniu u\u0142atwia autoskalowanie w ramach klastra. Nie mo\u017cna te\u017c umniejsza\u0107 roli faktu, \u017ce graalowe binarki s\u0105 naprawd\u0119 ma\u0142e, a je\u017celi dobrze znamy nasze \u015brodowisko uruchomieniowe &#8211; maszyna wirtualna (poza jednak diablo szybkim kompilatorem JIT, <a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">kt\u00f3rego jednak rozwi\u0105zania graalowe powoli goni\u0105<\/a>) nie stanowi ju\u017c takiej zalety. Spring si\u0119 odgryza prezentuj\u0105c wersj\u0119 Native, a informacje o jego \u015bmierci s\u0105 srogo przesadzone, jednak na pewno tw\u00f3rcy tego kr\u00f3la JVMa musz\u0105 bacznie obserwowa\u0107 poczynania konkurencji.<\/p>\n<p>Ok, po przeczytaniu poprzedniego akapitu z pewno\u015bci\u0105 (bior\u0105c pod uwag\u0119 m\u00f3j dar przekonywania ) postanowili\u015bcie pobawi\u0107 si\u0119 kt\u00f3rym\u015b z nowych rozwi\u0105za\u0144. Jak jednak wybra\u0107, kt\u00f3re z nich lepiej dopasuje si\u0119 do naszego projektu? Mimo wielu podobie\u0144stw mi\u0119dzy Micronautem, a Quarkusem istnieje spora liczba r\u00f3\u017cnic. Dlatego te\u017c nale\u017cy podzi\u0119kowa\u0107 SoftwareMill za bardzo interesuj\u0105c\u0105 analiz\u0119 por\u00f3wnawcz\u0105 obu rozwi\u0105za\u0144. Tekst zosta\u0142 napisany ju\u017c w styczniu, ale dopiero w ostatnich tygodniach zosta\u0142 on \u201czauwa\u017cony\u201d przez szeroko rozumiane \u201cinternety\u201d, w tym do naszych \u0142apek. Na szcz\u0119\u015bcie, chocia\u017c ostatnimi czasami Java p\u0119dzi do przodu niesamowicie szybko, tekst nie zd\u0105\u017cy\u0142 si\u0119 zestarze\u0107 ani o jot\u0119 i dalej stanowi \u015bwietne wprowadzenie do tematu.<\/p>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-7.png\" sizes=\"auto, (min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/6_image-7.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-7.png 800w\" alt=\"\" width=\"800\" height=\"687\" \/><figcaption>G\u0142upi, nieprawdziwy dowcip &#8211; nie tak jak co poniekt\u00f3re JSowe frameworki &lt;hehe&gt;<\/figcaption><\/figure>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n<li><a href=\"https:\/\/blog.softwaremill.com\/micronaut-vs-quarkus-whats-the-difference-5068f0da5390\">Micronaut vs Quarkus \u2014 what\u2019s the difference?<\/a><\/li>\n<li><a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">Multi-Tier Compilation in GraalVM<\/a><\/li>\n<\/ul>\n<h2 id=\"2-pra-jpms-osgi-trafia-pod-skrzydla-fundacji-eclipse\" data-num=2>2. <a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/java-osgi-eclipse\/\">Pra-JPMS &#8211; OSGI &#8211; trafia pod skrzyd\u0142a fundacji Eclipse <\/a><\/h2>\n<p>Drugie z dzisiejszych og\u0142osze\u0144 dotyczy tematu, kt\u00f3ry nie s\u0105dzi\u0142em, \u017ce kiedykolwiek jeszcze trafi do naszego ma\u0142ego, cotygodniowego przegl\u0105du. Potraktujcie wi\u0119c poni\u017csze jako ciekawostk\u0119 g\u0142\u00f3wnie natury historycznej.<\/p>\n<figure class=\"kg-card kg-image-card\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_giphy-7.gif\" alt=\"\" width=\"480\" height=\"362\" \/><\/figure>\n<p>Ostatnimi tygodniami bardzo g\u0142o\u015bnym w ekosystemie wydarzeniem by\u0142o przej\u015bcie <a href=\"https:\/\/blog.adoptium.net\/2021\/03\/eclipse-adoptium-announcement\/\">AdoptOpenJDK pod skrzyd\u0142a Fundacji Eclipse<\/a>, gdzie pod brandem Adoptium powsta\u0142a grupa robocza tego projektu. Totalnie umkn\u0119\u0142o naszej uwadze, <a href=\"https:\/\/blog.osgi.org\/2020\/12\/osgi-core-release-8-is-now-final-and.html?m=1\">\u017ce na bardzo podobny ruch zdecydowa\u0142 si\u0119 OSGI<\/a>, kt\u00f3ry wraz z ko\u0144cem poprzedniego roku rozpocz\u0105\u0142 transformacj\u0119, kt\u00f3ra uczyni projekt cz\u0119\u015bci\u0105 rodziny Eclipse. Ko\u0144cem marca za\u015b og\u0142oszone zosta\u0142o powstanie zwi\u0105zanej z projektem <a href=\"https:\/\/blog.osgi.org\/2021\/03\/update-on-osgi-working-group.html?m=1\">Working Group<\/a>.<\/p>\n<p>Tych kt\u00f3rzy nie wiedz\u0105, czym OSGI jest, ci\u0119\u017cko za to wini\u0107. OSGI to akronim od Open Service Gateway Initiative &#8211; specyfikacji definiuj\u0105cej system komponent\u00f3w oparty na j\u0119zyku Java, czyli pierwszego podej\u015bcia do tematu modularyzacji j\u0119zyka, pochodz\u0105cego jeszcze z 1999 roku. Jednym z przyk\u0142ad\u00f3w jego u\u017cycia jest m.in. system plugin\u00f3w Eclipse (st\u0105d te\u017c nie dziwi fakt przej\u0119cia przez niego kontroli nad projektem). Przez lata by\u0142a to technologia do\u015b\u0107 niszowa, aczkolwiek spotykana w niekt\u00f3rych wi\u0119kszych projektach &#8211; i tylko nich. Publikacja JPMS wraz z dziewi\u0105t\u0105 wersj\u0105 tego j\u0119zyka ostatecznie przekre\u015bli\u0142a wszelkie szanse OSGI na masow\u0105 adopcje.<\/p>\n<p>Sam osobi\u015bcie mia\u0142em przyjemno\u015b\u0107 pracowa\u0107 z OSGI wy\u0142\u0105cznie raz &#8211; by\u0142o to podczas implementacji autorskiego pluginu do Confluence. Do\u015bwiadczenie by\u0142o do\u015b\u0107 paskudne, w zwi\u0105zku z czym mam nadzieje, \u017ce ca\u0142o\u015b\u0107 relatywnie szybko odejdzie na zas\u0142u\u017cony odpoczynek obok Applet\u00f3w i Corby &#8211; aczkolwiek bior\u0105c pod uwag\u0119, ile legacy jest na \u015bwiecie, jestem raczej pewien, \u017ce jeszcze zdarzy nam si\u0119 kiedy\u015b zmierzy\u0107.<\/p>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-1\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n<li><a href=\"https:\/\/blog.adoptium.net\/2021\/03\/eclipse-adoptium-announcement\/\">Eclipse Adoptium Welcomes You<\/a><\/li>\n<li><a href=\"https:\/\/blog.osgi.org\/2020\/12\/osgi-core-release-8-is-now-final-and.html?m=1\">OSGi Core Release 8 is now final and published<\/a><\/li>\n<li><a href=\"https:\/\/blog.osgi.org\/2021\/03\/update-on-osgi-working-group.html?m=1\">Update on the OSGi Working Group<\/a><\/li>\n<\/ul>\n<h2 id=\"3-sun-misc-unsafe-odchodzi-w-niebyt-wraz-z-java-17\" data-num=3>3. <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-runtime-encapsulation-internals\">sun.misc.Unsafe odchodzi w niebyt wraz z Jav\u0105 17<\/a><\/h2>\n<p>A na zako\u0144czenie dzisiejszej edycji &#8211; kontynuacja tematu modularyzacji,<\/p>\n<p>Przyznam, \u017ce mimo i\u017c przez lata blog Oracle nie kojarzy\u0142 mi si\u0119 z najlepszymi materia\u0142ami \u201cedukacyjnymi\u201d, od kilku edycji JDK mamy do czynienia z pewn\u0105 zmian\u0105 mentalu. W Oracle zauwa\u017cyli chyba, \u017ce maj\u0105 do\u015b\u0107 unikaln\u0105 pozycj\u0119 i zacz\u0119li inwestowa\u0107 wi\u0119cej w produkowane materia\u0142y. Mamy Podcast, Videocast, a tak\u017ce sporo ciekawych publikacji w ramach Java Magazine (ichniejszego bloga) &#8211; nie tylko skupiaj\u0105cych si\u0119 na istniej\u0105cych funkcjonalno\u015bciach, ale<br \/>\nte\u017c niejednokrotnie zapowiadaj\u0105cych przysz\u0142e rozwini\u0119cia platformy. Tak jest i w tym przypadku &#8211; artyku\u0142 kt\u00f3rym si\u0119 z Wami dzielimy jest bardzo istotnym studium kompromis\u00f3w, na jakie musiano si\u0119 zdecydowa\u0107 podczas wdra\u017cania do JDK modularyzacji, r\u00f3wnocze\u015bnie zahaczaj\u0105cym o Jave 17 i zmiany, jakie ma przynie\u015b\u0107 pod tym wzgl\u0119dem to wydanie.<\/p>\n<p>Jak pewnie wiecie, o ile modularyzacja w ramach samych aplikacji jest problemem nietrywialnym, w dalszym ci\u0105gu pozostaje o rz\u0105d wielko\u015bci prostsza od pr\u00f3by wdro\u017cenia twardej, prawie \u017ce \u201cfizycznej\u201d izolacji w internalach samego j\u0119zyka. Od pierwszych pr\u00f3b wdro\u017cenia Jigsawa (nazwa kodowa JPMSa) to w\u0142a\u015bnie ten problem sp\u0119dza\u0142 sen z powiek architektom.<\/p>\n<figure class=\"kg-card kg-image-card\"><img loading=\"lazy\" decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_giphy-8.gif\" alt=\"\" width=\"500\" height=\"278\" \/><\/figure>\n<p>Przyk\u0142adowo, bardzo wiele aplikacji (jak i bibliotek) chc\u0105c uzyska\u0107 maksymalny poziom wydajno\u015bci, omija\u0142o zarz\u0105dzanie pami\u0119ci\u0105 ze strony maszyny wirtualnej. Czynione to by\u0142o poprzez u\u017cywanie w teorii niedost\u0119pnych, ale istniej\u0105cych na classpath-ie klas typu <em>sun.misc.Unsafe<\/em>. Wprowadzenie pe\u0142nej modularyzacji \u201cbebech\u00f3w\u201d j\u0119zyka niechybnie doprowadzi\u0142oby do z\u0142amania kompatybilno\u015bci wstecznej, co sprawi\u0142oby, \u017ce masa projekt\u00f3w nie mia\u0142aby realnej szansy na migracj\u0119 do nowej wersji Javy. W zwi\u0105zku z tym zdecydowano si\u0119 odsun\u0105\u0107 problem w czasie &#8211; j\u0105dro j\u0119zyka nie zosta\u0142o w pe\u0142ni zmodularyzowane (wci\u0105\u017c mo\u017cna by\u0142o w nim grzeba\u0107), a u\u017cycie \u201czabronionych\u201d klas wi\u0105za\u0142o si\u0119 z ostrze\u017ceniem podczas kompilacji.<\/p>\n<p>Java 16 zmieni\u0142a to zachowanie &#8211; teraz powoduje ono b\u0142\u0105d, a \u017ceby naprawi\u0107 budowanie niezb\u0119dne jest podanie prawid\u0142owej flagi maszynie wirtualnej. Java 17 nie pozwoli nawet na to. Tw\u00f3rcy j\u0119zyka zdecydowali, \u017ce od tej pory klasy typu sun.misc.Unsafe trafi\u0105 do modu\u0142u <em>jdk.unsupported<\/em>, widocznego w drodze wyj\u0105tku na classpath. Ca\u0142o\u015b\u0107 odb\u0119dzie si\u0119 w ramach <a href=\"https:\/\/openjdk.java.net\/jeps\/403\">JEP 403: Strongly encapsulate JDK internals<\/a> (dawno nie by\u0142o JEP\u00f3w, prawda )? D\u0142ugoterminowym rozwi\u0105zaniem maj\u0105 za\u015b by\u0107 nowo\u015bci dostarczane przez projekt Panama, kt\u00f3re maj\u0105 doprowadzi\u0107 do sytuacji, gdy sun.misc.Unsafe nie b\u0119dzie do niczego potrzebny.<\/p>\n<p>Czego zar\u00f3wno nam wszystkim, jak i tw\u00f3rcom JDK \u017cyczymy. W mi\u0119dzyczasie, je\u015bli chcecie pozna\u0107 szczeg\u00f3\u0142y ca\u0142ego procesu, zapraszam <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-runtime-encapsulation-internals\">do wspomnianej publikacji na blogu Oracle.<\/a><\/p>\n<h3 id=\"%C5%BCr%C3%B3d%C5%82a\">\u017br\u00f3d\u0142a<\/h3>\n<ul>\n<li><a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-runtime-encapsulation-internals\">A peek into Java 17: Continuing the drive to encapsulate the Java runtime internals<\/a><\/li>\n<li><a href=\"https:\/\/openjdk.java.net\/jeps\/403\">JEP 403: Strongly encapsulate JDK internals<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>W dzisiejszej edycji dzielimy si\u0119 &#8222;sneak peakiem&#8221; tego co w Javie 17. Opr\u00f3cz tego og\u0142oszenia dotycz\u0105ce OSGI oraz pomoc w wyborze jednego z nowych Javowych Webowych Framework\u00f3w.<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-10142","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"6"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Tuesday vol. 36 - 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\/jvm-tuesday-vol-36\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 36 - Vived\" \/>\n<meta property=\"og:description\" content=\"W dzisiejszej edycji dzielimy si\u0119 &quot;sneak peakiem&quot; tego co w Javie 17. Opr\u00f3cz tego og\u0142oszenia dotycz\u0105ce OSGI oraz pomoc w wyborze jednego z nowych Javowych Webowych Framework\u00f3w.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-05-04T09:27:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-6.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\\\/jvm-tuesday-vol-36\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\\\/\\\/3.68.244.71\\\/#\\\/schema\\\/person\\\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 36\",\"datePublished\":\"2021-05-04T09:27:26+00:00\",\"dateModified\":\"2022-09-19T11:10:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/\"},\"wordCount\":1298,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/3.68.244.71\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vived.io\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/5_image-6.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/\",\"url\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/\",\"name\":\"JVM Tuesday vol. 36 - Vived\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/3.68.244.71\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vived.io\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/5_image-6.png\",\"datePublished\":\"2021-05-04T09:27:26+00:00\",\"dateModified\":\"2022-09-19T11:10:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vived.io\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/5_image-6.png\",\"contentUrl\":\"https:\\\/\\\/vived.io\\\/wp-content\\\/uploads\\\/2021\\\/08\\\/5_image-6.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vived.io\\\/pl\\\/jvm-tuesday-vol-36\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\\\/\\\/vived.io\\\/pl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 36\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/3.68.244.71\\\/#website\",\"url\":\"https:\\\/\\\/3.68.244.71\\\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\\\/\\\/3.68.244.71\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/3.68.244.71\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/3.68.244.71\\\/#organization\",\"name\":\"Vived\",\"url\":\"https:\\\/\\\/3.68.244.71\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/3.68.244.71\\\/#\\\/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:\\\/\\\/3.68.244.71\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/3.68.244.71\\\/#\\\/schema\\\/person\\\/0eb0878110cb27edfbfe46e841fe6db3\",\"name\":\"Artur Skowro\u0144ski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g\",\"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":"JVM Tuesday vol. 36 - 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\/jvm-tuesday-vol-36\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 36 - Vived","og_description":"W dzisiejszej edycji dzielimy si\u0119 \"sneak peakiem\" tego co w Javie 17. Opr\u00f3cz tego og\u0142oszenia dotycz\u0105ce OSGI oraz pomoc w wyborze jednego z nowych Javowych Webowych Framework\u00f3w.","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/","og_site_name":"Vived","article_published_time":"2021-05-04T09:27:26+00:00","article_modified_time":"2022-09-19T11:10:53+00:00","og_image":[{"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-6.png","type":"","width":"","height":""}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/3.68.244.71\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 36","datePublished":"2021-05-04T09:27:26+00:00","dateModified":"2022-09-19T11:10:53+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/"},"wordCount":1298,"commentCount":0,"publisher":{"@id":"https:\/\/3.68.244.71\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-6.png","articleSection":["JVM"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/","name":"JVM Tuesday vol. 36 - Vived","isPartOf":{"@id":"https:\/\/3.68.244.71\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-6.png","datePublished":"2021-05-04T09:27:26+00:00","dateModified":"2022-09-19T11:10:53+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-6.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-6.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-36\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 36"}]},{"@type":"WebSite","@id":"https:\/\/3.68.244.71\/#website","url":"https:\/\/3.68.244.71\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/3.68.244.71\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/3.68.244.71\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/3.68.244.71\/#organization","name":"Vived","url":"https:\/\/3.68.244.71\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/3.68.244.71\/#\/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:\/\/3.68.244.71\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/3.68.244.71\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","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":null,"attrs":[],"innerBlocks":[],"innerHTML":"Zacznijmy od najwa\u017cniejszego:\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-6.png\" alt=\"\" width=\"407\" height=\"298\" \/>\n<figcaption>May the 4th be with You!\u00a0<\/figcaption><\/figure>\nA teraz do konkret\u00f3w\n<h2 id=\"1-micronaut-vs-quarkuskt%C3%B3rego-wybra%C4%87-%F0%9F%A9%B8%E2%9A%94%EF%B8%8F\">1. <a href=\"https:\/\/blog.softwaremill.com\/micronaut-vs-quarkus-whats-the-difference-5068f0da5390\">Micronaut vs Quarkus - kt\u00f3rego wybra\u0107 ? \u2694\ufe0f<\/a><\/h2>\nPrzez kup\u0119 lat w \u015bwiecie JVMowych Framework\u00f3w by\u0142 Spring Boot, daleko w tyle implementacje Java EE, a potem d\u0142ugo, d\u0142ugo nic. Gdzie\u015b tam majaczy\u0142 Spark (nie myli\u0107 z Apache Spark), jak\u0105\u015b tam nisz\u0119 zajmowa\u0142 Dropwizard, pasjonaci mogli bawi\u0107 si\u0119 Grailsami\u2026 i to by by\u0142o na tyle.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-9.png\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-9.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-9.png 620w\" alt=\"\" width=\"620\" height=\"465\" \/><\/figure>\nSytuacja ostatnimi czasy zmieni\u0142a si\u0119 diametralnie. Wraz z premier\u0105 Micronauta od Object Computing (kt\u00f3rzy wcze\u015bniej stworzyli wspomniane przed momentem Grails) zauwa\u017cy\u0107 mo\u017cemy ponowne zainteresowanie wykrojeniem sobie kawa\u0142ka smakowitego javowego tortu. Wydaje si\u0119, \u017ce najpopularniejszym z pretendent\u00f3w jest Quarkus, o kt\u00f3rym w zasadzie wszyscy wypowiadaj\u0105 si\u0119 w samych superlatywach. Mo\u017cna si\u0119 zastanowi\u0107, co takiego si\u0119 zmieni\u0142o, \u017ce niezagro\u017cona do tej pory pozycja Springa nie jest ju\u017c taka oczywista - i je\u017celi dobrze si\u0119 przygl\u0105dn\u0105\u0107, to do\u015b\u0107 jasnym staje si\u0119 fakt, \u017ce podzi\u0119kowa\u0107 mo\u017cemy za to trzem si\u0142om - chmurze (aczkolwiek ta sama w sobie, co najwy\u017cej wypromowa\u0142a Spring Boota), Kubernetesowi oraz GraalVM. Je\u017celi spojrze\u0107 na to, czym chwal\u0105 si\u0119 w zasadzie wszystkie nowe rozwi\u0105zania, to w\u0142a\u015bnie bycie Cloud Native - co w rozumieniu javowym sprowadza si\u0119 do dw\u00f3ch czynnik\u00f3w. Pierwszym z nich jest szybki start - bol\u0105czka Springa - kt\u00f3ry w znacznym stopniu u\u0142atwia autoskalowanie w ramach klastra. Nie mo\u017cna te\u017c umniejsza\u0107 roli faktu, \u017ce graalowe binarki s\u0105 naprawd\u0119 ma\u0142e, a je\u017celi dobrze znamy nasze \u015brodowisko uruchomieniowe - maszyna wirtualna (poza jednak diablo szybkim kompilatorem JIT, <a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">kt\u00f3rego jednak rozwi\u0105zania graalowe powoli goni\u0105<\/a>) nie stanowi ju\u017c takiej zalety. Spring si\u0119 odgryza prezentuj\u0105c wersj\u0119 Native, a informacje o jego \u015bmierci s\u0105 srogo przesadzone, jednak na pewno tw\u00f3rcy tego kr\u00f3la JVMa musz\u0105 bacznie obserwowa\u0107 poczynania konkurencji.\n\nOk, po przeczytaniu poprzedniego akapitu z pewno\u015bci\u0105 (bior\u0105c pod uwag\u0119 m\u00f3j dar przekonywania ) postanowili\u015bcie pobawi\u0107 si\u0119 kt\u00f3rym\u015b z nowych rozwi\u0105za\u0144. Jak jednak wybra\u0107, kt\u00f3re z nich lepiej dopasuje si\u0119 do naszego projektu? Mimo wielu podobie\u0144stw mi\u0119dzy Micronautem, a Quarkusem istnieje spora liczba r\u00f3\u017cnic. Dlatego te\u017c nale\u017cy podzi\u0119kowa\u0107 SoftwareMill za bardzo interesuj\u0105c\u0105 analiz\u0119 por\u00f3wnawcz\u0105 obu rozwi\u0105za\u0144. Tekst zosta\u0142 napisany ju\u017c w styczniu, ale dopiero w ostatnich tygodniach zosta\u0142 on \u201czauwa\u017cony\u201d przez szeroko rozumiane \u201cinternety\u201d, w tym do naszych \u0142apek. Na szcz\u0119\u015bcie, chocia\u017c ostatnimi czasami Java p\u0119dzi do przodu niesamowicie szybko, tekst nie zd\u0105\u017cy\u0142 si\u0119 zestarze\u0107 ani o jot\u0119 i dalej stanowi \u015bwietne wprowadzenie do tematu.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-7.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/6_image-7.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-7.png 800w\" alt=\"\" width=\"800\" height=\"687\" \/>\n\n<figcaption>G\u0142upi, nieprawdziwy dowcip - nie tak jak co poniekt\u00f3re JSowe frameworki &lt;hehe&gt;<\/figcaption><\/figure>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/blog.softwaremill.com\/micronaut-vs-quarkus-whats-the-difference-5068f0da5390\">Micronaut vs Quarkus \u2014 what\u2019s the difference?<\/a><\/li>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">Multi-Tier Compilation in GraalVM<\/a><\/li>\n<\/ul>\n<h2 id=\"2-pra-jpmsosgitrafia-pod-skrzyd%C5%82a-fundacji-eclipse-%F0%9F%91%B4\">2. <a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/java-osgi-eclipse\/\">Pra-JPMS - OSGI - trafia pod skrzyd\u0142a fundacji Eclipse <\/a><\/h2>\nDrugie z dzisiejszych og\u0142osze\u0144 dotyczy tematu, kt\u00f3ry nie s\u0105dzi\u0142em, \u017ce kiedykolwiek jeszcze trafi do naszego ma\u0142ego, cotygodniowego przegl\u0105du. Potraktujcie wi\u0119c poni\u017csze jako ciekawostk\u0119 g\u0142\u00f3wnie natury historycznej.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_giphy-7.gif\" alt=\"\" width=\"480\" height=\"362\" \/><\/figure>\nOstatnimi tygodniami bardzo g\u0142o\u015bnym w ekosystemie wydarzeniem by\u0142o przej\u015bcie <a href=\"https:\/\/blog.adoptium.net\/2021\/03\/eclipse-adoptium-announcement\/\">AdoptOpenJDK pod skrzyd\u0142a Fundacji Eclipse<\/a>, gdzie pod brandem Adoptium powsta\u0142a grupa robocza tego projektu. Totalnie umkn\u0119\u0142o naszej uwadze, <a href=\"https:\/\/blog.osgi.org\/2020\/12\/osgi-core-release-8-is-now-final-and.html?m=1\">\u017ce na bardzo podobny ruch zdecydowa\u0142 si\u0119 OSGI<\/a>, kt\u00f3ry wraz z ko\u0144cem poprzedniego roku rozpocz\u0105\u0142 transformacj\u0119, kt\u00f3ra uczyni projekt cz\u0119\u015bci\u0105 rodziny Eclipse. Ko\u0144cem marca za\u015b og\u0142oszone zosta\u0142o powstanie zwi\u0105zanej z projektem <a href=\"https:\/\/blog.osgi.org\/2021\/03\/update-on-osgi-working-group.html?m=1\">Working Group<\/a>.\n\nTych kt\u00f3rzy nie wiedz\u0105, czym OSGI jest, ci\u0119\u017cko za to wini\u0107. OSGI to akronim od Open Service Gateway Initiative - specyfikacji definiuj\u0105cej system komponent\u00f3w oparty na j\u0119zyku Java, czyli pierwszego podej\u015bcia do tematu modularyzacji j\u0119zyka, pochodz\u0105cego jeszcze z 1999 roku. Jednym z przyk\u0142ad\u00f3w jego u\u017cycia jest m.in. system plugin\u00f3w Eclipse (st\u0105d te\u017c nie dziwi fakt przej\u0119cia przez niego kontroli nad projektem). Przez lata by\u0142a to technologia do\u015b\u0107 niszowa, aczkolwiek spotykana w niekt\u00f3rych wi\u0119kszych projektach - i tylko nich. Publikacja JPMS wraz z dziewi\u0105t\u0105 wersj\u0105 tego j\u0119zyka ostatecznie przekre\u015bli\u0142a wszelkie szanse OSGI na masow\u0105 adopcje.\n\nSam osobi\u015bcie mia\u0142em przyjemno\u015b\u0107 pracowa\u0107 z OSGI wy\u0142\u0105cznie raz - by\u0142o to podczas implementacji autorskiego pluginu do Confluence. Do\u015bwiadczenie by\u0142o do\u015b\u0107 paskudne, w zwi\u0105zku z czym mam nadzieje, \u017ce ca\u0142o\u015b\u0107 relatywnie szybko odejdzie na zas\u0142u\u017cony odpoczynek obok Applet\u00f3w i Corby - aczkolwiek bior\u0105c pod uwag\u0119, ile legacy jest na \u015bwiecie, jestem raczej pewien, \u017ce jeszcze zdarzy nam si\u0119 kiedy\u015b zmierzy\u0107.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-1\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/blog.adoptium.net\/2021\/03\/eclipse-adoptium-announcement\/\">Eclipse Adoptium Welcomes You<\/a><\/li>\n \t<li><a href=\"https:\/\/blog.osgi.org\/2020\/12\/osgi-core-release-8-is-now-final-and.html?m=1\">OSGi Core Release 8 is now final and published<\/a><\/li>\n \t<li><a href=\"https:\/\/blog.osgi.org\/2021\/03\/update-on-osgi-working-group.html?m=1\">Update on the OSGi Working Group<\/a><\/li>\n<\/ul>\n<h2 id=\"3-sunmiscunsafe-odchodzi-w-niebyt-wraz-z-jav%C4%85-17-%F0%9F%A5%B3\">3. <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-runtime-encapsulation-internals\">sun.misc.Unsafe odchodzi w niebyt wraz z Jav\u0105 17<\/a><\/h2>\nA na zako\u0144czenie dzisiejszej edycji - kontynuacja tematu modularyzacji,\n\nPrzyznam, \u017ce mimo i\u017c przez lata blog Oracle nie kojarzy\u0142 mi si\u0119 z najlepszymi materia\u0142ami \u201cedukacyjnymi\u201d, od kilku edycji JDK mamy do czynienia z pewn\u0105 zmian\u0105 mentalu. W Oracle zauwa\u017cyli chyba, \u017ce maj\u0105 do\u015b\u0107 unikaln\u0105 pozycj\u0119 i zacz\u0119li inwestowa\u0107 wi\u0119cej w produkowane materia\u0142y. Mamy Podcast, Videocast, a tak\u017ce sporo ciekawych publikacji w ramach Java Magazine (ichniejszego bloga) - nie tylko skupiaj\u0105cych si\u0119 na istniej\u0105cych funkcjonalno\u015bciach, ale\nte\u017c niejednokrotnie zapowiadaj\u0105cych przysz\u0142e rozwini\u0119cia platformy. Tak jest i w tym przypadku - artyku\u0142 kt\u00f3rym si\u0119 z Wami dzielimy jest bardzo istotnym studium kompromis\u00f3w, na jakie musiano si\u0119 zdecydowa\u0107 podczas wdra\u017cania do JDK modularyzacji, r\u00f3wnocze\u015bnie zahaczaj\u0105cym o Jave 17 i zmiany, jakie ma przynie\u015b\u0107 pod tym wzgl\u0119dem to wydanie.\n\nJak pewnie wiecie, o ile modularyzacja w ramach samych aplikacji jest problemem nietrywialnym, w dalszym ci\u0105gu pozostaje o rz\u0105d wielko\u015bci prostsza od pr\u00f3by wdro\u017cenia twardej, prawie \u017ce \u201cfizycznej\u201d izolacji w internalach samego j\u0119zyka. Od pierwszych pr\u00f3b wdro\u017cenia Jigsawa (nazwa kodowa JPMSa) to w\u0142a\u015bnie ten problem sp\u0119dza\u0142 sen z powiek architektom.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_giphy-8.gif\" alt=\"\" width=\"500\" height=\"278\" \/><\/figure>\nPrzyk\u0142adowo, bardzo wiele aplikacji (jak i bibliotek) chc\u0105c uzyska\u0107 maksymalny poziom wydajno\u015bci, omija\u0142o zarz\u0105dzanie pami\u0119ci\u0105 ze strony maszyny wirtualnej. Czynione to by\u0142o poprzez u\u017cywanie w teorii niedost\u0119pnych, ale istniej\u0105cych na classpath-ie klas typu <em>sun.misc.Unsafe<\/em>. Wprowadzenie pe\u0142nej modularyzacji \u201cbebech\u00f3w\u201d j\u0119zyka niechybnie doprowadzi\u0142oby do z\u0142amania kompatybilno\u015bci wstecznej, co sprawi\u0142oby, \u017ce masa projekt\u00f3w nie mia\u0142aby realnej szansy na migracj\u0119 do nowej wersji Javy. W zwi\u0105zku z tym zdecydowano si\u0119 odsun\u0105\u0107 problem w czasie - j\u0105dro j\u0119zyka nie zosta\u0142o w pe\u0142ni zmodularyzowane (wci\u0105\u017c mo\u017cna by\u0142o w nim grzeba\u0107), a u\u017cycie \u201czabronionych\u201d klas wi\u0105za\u0142o si\u0119 z ostrze\u017ceniem podczas kompilacji.\n\nJava 16 zmieni\u0142a to zachowanie - teraz powoduje ono b\u0142\u0105d, a \u017ceby naprawi\u0107 budowanie niezb\u0119dne jest podanie prawid\u0142owej flagi maszynie wirtualnej. Java 17 nie pozwoli nawet na to. Tw\u00f3rcy j\u0119zyka zdecydowali, \u017ce od tej pory klasy typu sun.misc.Unsafe trafi\u0105 do modu\u0142u <em>jdk.unsupported<\/em>, widocznego w drodze wyj\u0105tku na classpath. Ca\u0142o\u015b\u0107 odb\u0119dzie si\u0119 w ramach <a href=\"https:\/\/openjdk.java.net\/jeps\/403\">JEP 403: Strongly encapsulate JDK internals<\/a> (dawno nie by\u0142o JEP\u00f3w, prawda )? D\u0142ugoterminowym rozwi\u0105zaniem maj\u0105 za\u015b by\u0107 nowo\u015bci dostarczane przez projekt Panama, kt\u00f3re maj\u0105 doprowadzi\u0107 do sytuacji, gdy sun.misc.Unsafe nie b\u0119dzie do niczego potrzebny.\n\nCzego zar\u00f3wno nam wszystkim, jak i tw\u00f3rcom JDK \u017cyczymy. W mi\u0119dzyczasie, je\u015bli chcecie pozna\u0107 szczeg\u00f3\u0142y ca\u0142ego procesu, zapraszam <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-runtime-encapsulation-internals\">do wspomnianej publikacji na blogu Oracle.<\/a>\n<h3 id=\"%C5%BCr%C3%B3d%C5%82a\">\u017br\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-runtime-encapsulation-internals\">A peek into Java 17: Continuing the drive to encapsulate the Java runtime internals<\/a><\/li>\n \t<li><a href=\"https:\/\/openjdk.java.net\/jeps\/403\">JEP 403: Strongly encapsulate JDK internals<\/a><\/li>\n<\/ul>","innerContent":["Zacznijmy od najwa\u017cniejszego:\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-6.png\" alt=\"\" width=\"407\" height=\"298\" \/>\n<figcaption>May the 4th be with You!\u00a0<\/figcaption><\/figure>\nA teraz do konkret\u00f3w\n<h2 id=\"1-micronaut-vs-quarkuskt%C3%B3rego-wybra%C4%87-%F0%9F%A9%B8%E2%9A%94%EF%B8%8F\">1. <a href=\"https:\/\/blog.softwaremill.com\/micronaut-vs-quarkus-whats-the-difference-5068f0da5390\">Micronaut vs Quarkus - kt\u00f3rego wybra\u0107 ? \u2694\ufe0f<\/a><\/h2>\nPrzez kup\u0119 lat w \u015bwiecie JVMowych Framework\u00f3w by\u0142 Spring Boot, daleko w tyle implementacje Java EE, a potem d\u0142ugo, d\u0142ugo nic. Gdzie\u015b tam majaczy\u0142 Spark (nie myli\u0107 z Apache Spark), jak\u0105\u015b tam nisz\u0119 zajmowa\u0142 Dropwizard, pasjonaci mogli bawi\u0107 si\u0119 Grailsami\u2026 i to by by\u0142o na tyle.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-9.png\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/4_image-9.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/3_image-9.png 620w\" alt=\"\" width=\"620\" height=\"465\" \/><\/figure>\nSytuacja ostatnimi czasy zmieni\u0142a si\u0119 diametralnie. Wraz z premier\u0105 Micronauta od Object Computing (kt\u00f3rzy wcze\u015bniej stworzyli wspomniane przed momentem Grails) zauwa\u017cy\u0107 mo\u017cemy ponowne zainteresowanie wykrojeniem sobie kawa\u0142ka smakowitego javowego tortu. Wydaje si\u0119, \u017ce najpopularniejszym z pretendent\u00f3w jest Quarkus, o kt\u00f3rym w zasadzie wszyscy wypowiadaj\u0105 si\u0119 w samych superlatywach. Mo\u017cna si\u0119 zastanowi\u0107, co takiego si\u0119 zmieni\u0142o, \u017ce niezagro\u017cona do tej pory pozycja Springa nie jest ju\u017c taka oczywista - i je\u017celi dobrze si\u0119 przygl\u0105dn\u0105\u0107, to do\u015b\u0107 jasnym staje si\u0119 fakt, \u017ce podzi\u0119kowa\u0107 mo\u017cemy za to trzem si\u0142om - chmurze (aczkolwiek ta sama w sobie, co najwy\u017cej wypromowa\u0142a Spring Boota), Kubernetesowi oraz GraalVM. Je\u017celi spojrze\u0107 na to, czym chwal\u0105 si\u0119 w zasadzie wszystkie nowe rozwi\u0105zania, to w\u0142a\u015bnie bycie Cloud Native - co w rozumieniu javowym sprowadza si\u0119 do dw\u00f3ch czynnik\u00f3w. Pierwszym z nich jest szybki start - bol\u0105czka Springa - kt\u00f3ry w znacznym stopniu u\u0142atwia autoskalowanie w ramach klastra. Nie mo\u017cna te\u017c umniejsza\u0107 roli faktu, \u017ce graalowe binarki s\u0105 naprawd\u0119 ma\u0142e, a je\u017celi dobrze znamy nasze \u015brodowisko uruchomieniowe - maszyna wirtualna (poza jednak diablo szybkim kompilatorem JIT, <a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">kt\u00f3rego jednak rozwi\u0105zania graalowe powoli goni\u0105<\/a>) nie stanowi ju\u017c takiej zalety. Spring si\u0119 odgryza prezentuj\u0105c wersj\u0119 Native, a informacje o jego \u015bmierci s\u0105 srogo przesadzone, jednak na pewno tw\u00f3rcy tego kr\u00f3la JVMa musz\u0105 bacznie obserwowa\u0107 poczynania konkurencji.\n\nOk, po przeczytaniu poprzedniego akapitu z pewno\u015bci\u0105 (bior\u0105c pod uwag\u0119 m\u00f3j dar przekonywania ) postanowili\u015bcie pobawi\u0107 si\u0119 kt\u00f3rym\u015b z nowych rozwi\u0105za\u0144. Jak jednak wybra\u0107, kt\u00f3re z nich lepiej dopasuje si\u0119 do naszego projektu? Mimo wielu podobie\u0144stw mi\u0119dzy Micronautem, a Quarkusem istnieje spora liczba r\u00f3\u017cnic. Dlatego te\u017c nale\u017cy podzi\u0119kowa\u0107 SoftwareMill za bardzo interesuj\u0105c\u0105 analiz\u0119 por\u00f3wnawcz\u0105 obu rozwi\u0105za\u0144. Tekst zosta\u0142 napisany ju\u017c w styczniu, ale dopiero w ostatnich tygodniach zosta\u0142 on \u201czauwa\u017cony\u201d przez szeroko rozumiane \u201cinternety\u201d, w tym do naszych \u0142apek. Na szcz\u0119\u015bcie, chocia\u017c ostatnimi czasami Java p\u0119dzi do przodu niesamowicie szybko, tekst nie zd\u0105\u017cy\u0142 si\u0119 zestarze\u0107 ani o jot\u0119 i dalej stanowi \u015bwietne wprowadzenie do tematu.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-7.png\" sizes=\"(min-width: 720px) 720px\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/6_image-7.png 600w, https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image-7.png 800w\" alt=\"\" width=\"800\" height=\"687\" \/>\n\n<figcaption>G\u0142upi, nieprawdziwy dowcip - nie tak jak co poniekt\u00f3re JSowe frameworki &lt;hehe&gt;<\/figcaption><\/figure>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/blog.softwaremill.com\/micronaut-vs-quarkus-whats-the-difference-5068f0da5390\">Micronaut vs Quarkus \u2014 what\u2019s the difference?<\/a><\/li>\n \t<li><a href=\"https:\/\/medium.com\/graalvm\/multi-tier-compilation-in-graalvm-5fbc65f92402\">Multi-Tier Compilation in GraalVM<\/a><\/li>\n<\/ul>\n<h2 id=\"2-pra-jpmsosgitrafia-pod-skrzyd%C5%82a-fundacji-eclipse-%F0%9F%91%B4\">2. <a href=\"https:\/\/www.infoq.com\/news\/2021\/04\/java-osgi-eclipse\/\">Pra-JPMS - OSGI - trafia pod skrzyd\u0142a fundacji Eclipse <\/a><\/h2>\nDrugie z dzisiejszych og\u0142osze\u0144 dotyczy tematu, kt\u00f3ry nie s\u0105dzi\u0142em, \u017ce kiedykolwiek jeszcze trafi do naszego ma\u0142ego, cotygodniowego przegl\u0105du. Potraktujcie wi\u0119c poni\u017csze jako ciekawostk\u0119 g\u0142\u00f3wnie natury historycznej.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_giphy-7.gif\" alt=\"\" width=\"480\" height=\"362\" \/><\/figure>\nOstatnimi tygodniami bardzo g\u0142o\u015bnym w ekosystemie wydarzeniem by\u0142o przej\u015bcie <a href=\"https:\/\/blog.adoptium.net\/2021\/03\/eclipse-adoptium-announcement\/\">AdoptOpenJDK pod skrzyd\u0142a Fundacji Eclipse<\/a>, gdzie pod brandem Adoptium powsta\u0142a grupa robocza tego projektu. Totalnie umkn\u0119\u0142o naszej uwadze, <a href=\"https:\/\/blog.osgi.org\/2020\/12\/osgi-core-release-8-is-now-final-and.html?m=1\">\u017ce na bardzo podobny ruch zdecydowa\u0142 si\u0119 OSGI<\/a>, kt\u00f3ry wraz z ko\u0144cem poprzedniego roku rozpocz\u0105\u0142 transformacj\u0119, kt\u00f3ra uczyni projekt cz\u0119\u015bci\u0105 rodziny Eclipse. Ko\u0144cem marca za\u015b og\u0142oszone zosta\u0142o powstanie zwi\u0105zanej z projektem <a href=\"https:\/\/blog.osgi.org\/2021\/03\/update-on-osgi-working-group.html?m=1\">Working Group<\/a>.\n\nTych kt\u00f3rzy nie wiedz\u0105, czym OSGI jest, ci\u0119\u017cko za to wini\u0107. OSGI to akronim od Open Service Gateway Initiative - specyfikacji definiuj\u0105cej system komponent\u00f3w oparty na j\u0119zyku Java, czyli pierwszego podej\u015bcia do tematu modularyzacji j\u0119zyka, pochodz\u0105cego jeszcze z 1999 roku. Jednym z przyk\u0142ad\u00f3w jego u\u017cycia jest m.in. system plugin\u00f3w Eclipse (st\u0105d te\u017c nie dziwi fakt przej\u0119cia przez niego kontroli nad projektem). Przez lata by\u0142a to technologia do\u015b\u0107 niszowa, aczkolwiek spotykana w niekt\u00f3rych wi\u0119kszych projektach - i tylko nich. Publikacja JPMS wraz z dziewi\u0105t\u0105 wersj\u0105 tego j\u0119zyka ostatecznie przekre\u015bli\u0142a wszelkie szanse OSGI na masow\u0105 adopcje.\n\nSam osobi\u015bcie mia\u0142em przyjemno\u015b\u0107 pracowa\u0107 z OSGI wy\u0142\u0105cznie raz - by\u0142o to podczas implementacji autorskiego pluginu do Confluence. Do\u015bwiadczenie by\u0142o do\u015b\u0107 paskudne, w zwi\u0105zku z czym mam nadzieje, \u017ce ca\u0142o\u015b\u0107 relatywnie szybko odejdzie na zas\u0142u\u017cony odpoczynek obok Applet\u00f3w i Corby - aczkolwiek bior\u0105c pod uwag\u0119, ile legacy jest na \u015bwiecie, jestem raczej pewien, \u017ce jeszcze zdarzy nam si\u0119 kiedy\u015b zmierzy\u0107.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a-1\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/blog.adoptium.net\/2021\/03\/eclipse-adoptium-announcement\/\">Eclipse Adoptium Welcomes You<\/a><\/li>\n \t<li><a href=\"https:\/\/blog.osgi.org\/2020\/12\/osgi-core-release-8-is-now-final-and.html?m=1\">OSGi Core Release 8 is now final and published<\/a><\/li>\n \t<li><a href=\"https:\/\/blog.osgi.org\/2021\/03\/update-on-osgi-working-group.html?m=1\">Update on the OSGi Working Group<\/a><\/li>\n<\/ul>\n<h2 id=\"3-sunmiscunsafe-odchodzi-w-niebyt-wraz-z-jav%C4%85-17-%F0%9F%A5%B3\">3. <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-runtime-encapsulation-internals\">sun.misc.Unsafe odchodzi w niebyt wraz z Jav\u0105 17<\/a><\/h2>\nA na zako\u0144czenie dzisiejszej edycji - kontynuacja tematu modularyzacji,\n\nPrzyznam, \u017ce mimo i\u017c przez lata blog Oracle nie kojarzy\u0142 mi si\u0119 z najlepszymi materia\u0142ami \u201cedukacyjnymi\u201d, od kilku edycji JDK mamy do czynienia z pewn\u0105 zmian\u0105 mentalu. W Oracle zauwa\u017cyli chyba, \u017ce maj\u0105 do\u015b\u0107 unikaln\u0105 pozycj\u0119 i zacz\u0119li inwestowa\u0107 wi\u0119cej w produkowane materia\u0142y. Mamy Podcast, Videocast, a tak\u017ce sporo ciekawych publikacji w ramach Java Magazine (ichniejszego bloga) - nie tylko skupiaj\u0105cych si\u0119 na istniej\u0105cych funkcjonalno\u015bciach, ale\nte\u017c niejednokrotnie zapowiadaj\u0105cych przysz\u0142e rozwini\u0119cia platformy. Tak jest i w tym przypadku - artyku\u0142 kt\u00f3rym si\u0119 z Wami dzielimy jest bardzo istotnym studium kompromis\u00f3w, na jakie musiano si\u0119 zdecydowa\u0107 podczas wdra\u017cania do JDK modularyzacji, r\u00f3wnocze\u015bnie zahaczaj\u0105cym o Jave 17 i zmiany, jakie ma przynie\u015b\u0107 pod tym wzgl\u0119dem to wydanie.\n\nJak pewnie wiecie, o ile modularyzacja w ramach samych aplikacji jest problemem nietrywialnym, w dalszym ci\u0105gu pozostaje o rz\u0105d wielko\u015bci prostsza od pr\u00f3by wdro\u017cenia twardej, prawie \u017ce \u201cfizycznej\u201d izolacji w internalach samego j\u0119zyka. Od pierwszych pr\u00f3b wdro\u017cenia Jigsawa (nazwa kodowa JPMSa) to w\u0142a\u015bnie ten problem sp\u0119dza\u0142 sen z powiek architektom.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/1_giphy-8.gif\" alt=\"\" width=\"500\" height=\"278\" \/><\/figure>\nPrzyk\u0142adowo, bardzo wiele aplikacji (jak i bibliotek) chc\u0105c uzyska\u0107 maksymalny poziom wydajno\u015bci, omija\u0142o zarz\u0105dzanie pami\u0119ci\u0105 ze strony maszyny wirtualnej. Czynione to by\u0142o poprzez u\u017cywanie w teorii niedost\u0119pnych, ale istniej\u0105cych na classpath-ie klas typu <em>sun.misc.Unsafe<\/em>. Wprowadzenie pe\u0142nej modularyzacji \u201cbebech\u00f3w\u201d j\u0119zyka niechybnie doprowadzi\u0142oby do z\u0142amania kompatybilno\u015bci wstecznej, co sprawi\u0142oby, \u017ce masa projekt\u00f3w nie mia\u0142aby realnej szansy na migracj\u0119 do nowej wersji Javy. W zwi\u0105zku z tym zdecydowano si\u0119 odsun\u0105\u0107 problem w czasie - j\u0105dro j\u0119zyka nie zosta\u0142o w pe\u0142ni zmodularyzowane (wci\u0105\u017c mo\u017cna by\u0142o w nim grzeba\u0107), a u\u017cycie \u201czabronionych\u201d klas wi\u0105za\u0142o si\u0119 z ostrze\u017ceniem podczas kompilacji.\n\nJava 16 zmieni\u0142a to zachowanie - teraz powoduje ono b\u0142\u0105d, a \u017ceby naprawi\u0107 budowanie niezb\u0119dne jest podanie prawid\u0142owej flagi maszynie wirtualnej. Java 17 nie pozwoli nawet na to. Tw\u00f3rcy j\u0119zyka zdecydowali, \u017ce od tej pory klasy typu sun.misc.Unsafe trafi\u0105 do modu\u0142u <em>jdk.unsupported<\/em>, widocznego w drodze wyj\u0105tku na classpath. Ca\u0142o\u015b\u0107 odb\u0119dzie si\u0119 w ramach <a href=\"https:\/\/openjdk.java.net\/jeps\/403\">JEP 403: Strongly encapsulate JDK internals<\/a> (dawno nie by\u0142o JEP\u00f3w, prawda )? D\u0142ugoterminowym rozwi\u0105zaniem maj\u0105 za\u015b by\u0107 nowo\u015bci dostarczane przez projekt Panama, kt\u00f3re maj\u0105 doprowadzi\u0107 do sytuacji, gdy sun.misc.Unsafe nie b\u0119dzie do niczego potrzebny.\n\nCzego zar\u00f3wno nam wszystkim, jak i tw\u00f3rcom JDK \u017cyczymy. W mi\u0119dzyczasie, je\u015bli chcecie pozna\u0107 szczeg\u00f3\u0142y ca\u0142ego procesu, zapraszam <a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-runtime-encapsulation-internals\">do wspomnianej publikacji na blogu Oracle.<\/a>\n<h3 id=\"%C5%BCr%C3%B3d%C5%82a\">\u017br\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/blogs.oracle.com\/javamagazine\/java-runtime-encapsulation-internals\">A peek into Java 17: Continuing the drive to encapsulate the Java runtime internals<\/a><\/li>\n \t<li><a href=\"https:\/\/openjdk.java.net\/jeps\/403\">JEP 403: Strongly encapsulate JDK internals<\/a><\/li>\n<\/ul>"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10142","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=10142"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10142\/revisions"}],"predecessor-version":[{"id":10575,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10142\/revisions\/10575"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}