{"id":10130,"date":"2021-06-01T14:58:27","date_gmt":"2021-06-01T12:58:27","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-40\/"},"modified":"2022-09-19T13:10:52","modified_gmt":"2022-09-19T11:10:52","slug":"jvm-tuesday-vol-40","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/","title":{"rendered":"JVM Tuesday vol. 40"},"content":{"rendered":"<h2 id=\"1-openjdk-od-microsoftu-wydane\" data-num=1><a href=\"https:\/\/devblogs.microsoft.com\/java\/announcing-general-availability-of-microsoft-build-of-openjdk\/\">1. OpenJDK od Microsoftu wydane<\/a><\/h2>\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.png\" alt=\"\" width=\"460\" height=\"294\" \/><figcaption>Bracia si\u0119 w ko\u0144cu chyba pogodzili<\/figcaption><\/figure>\n<p>Podobnie, jak w przypadku edycji sobotniej, dzisiejszy \u201cwtorek\u201d rozpoczniemy og\u0142oszeniem z konferencji Microsoft Build, kt\u00f3re nie za\u0142apa\u0142o si\u0119 do news\u00f3w zwi\u0105zanych z rzemie\u015blnictwem oprogramowania.<\/p>\n<p>Dla os\u00f3b \u015bledz\u0105cych dzia\u0142ania Microsoftu z pewno\u015bci\u0105 nie b\u0119dzie tajemnic\u0105, \u017ce firma z Redmond do\u015b\u0107 mocno inwestuje ostatnio w Jav\u0119. Kulminacj\u0105 jej dzia\u0142a\u0144 mo\u017ce by\u0107 fakt, \u017ce w zesz\u0142ym tygodniu wypu\u015bci\u0142a ona w ko\u0144cu sw\u00f3j w\u0142asny wariant OpenJDK. Na razie dost\u0119pna jest wersja JDK 11, ale do wczesnego wgl\u0105du trafi\u0142a te\u017c \u201cszesnastka\u201d. Ca\u0142o\u015b\u0107 oparta jest o Eclipse Adoptium, kt\u00f3rego Microsoft jest sponsorem.<\/p>\n<p>Premierze towarzyszy\u0142o r\u00f3wnie\u017c zaprezentowanie odpowiedniego zbioru <a href=\"https:\/\/docs.microsoft.com\/en-gb\/java\/openjdk\/containers\">obraz\u00f3w dockerowych<\/a> oraz nowego \u201c<a href=\"https:\/\/docs.microsoft.com\/en-gb\/java\/\">hubu<\/a>\u201d, agreguj\u0105cego wszystkie inicjatywy Microsoftu zwi\u0105zane z Jav\u0105, jak np. plugin do Visual Studio Code czy szablony do GitHub Actions. Musz\u0119 przyzna\u0107, \u017ce zaskoczy\u0142a mnie r\u00f3wnie\u017c mnogo\u015b\u0107 materia\u0142\u00f3w do nauki tego j\u0119zyka, jakie mo\u017cna tam znale\u017a\u0107. <a href=\"https:\/\/docs.microsoft.com\/en-us\/learn\/paths\/java-on-azure\/\">Java for Azure<\/a> wydaje si\u0119 by\u0107 ca\u0142kiem interesuj\u0105cym kursem, pozwalaj\u0105cym w praktyce zapozna\u0107 si\u0119 z us\u0142ugami dost\u0119pnymi w ramach chmury Microsoftu.<\/p>\n<p>No c\u00f3\u017c, historia zatoczy\u0142a ko\u0142o, i <a href=\"https:\/\/en.wikipedia.org\/wiki\/Microsoft_Java_Virtual_Machine\">po raz pierwszy od 2007<\/a> roku Microsoft znowu posiada w\u0142asn\u0105 wersj\u0119 JDK. Je\u017celi jeste\u015bcie za\u015b ciekawi, czym w og\u00f3le r\u00f3\u017cni\u0105 si\u0119 poszczeg\u00f3lne wydania OpenJDK, zapraszam do <a href=\"https:\/\/blog.frankel.ch\/common-jdks\/\">\u015bwietnego artyku\u0142u<\/a> na ten temat.<\/p>\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Microsoft_Java_Virtual_Machine\">Microsoft Java Virtual Machine<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/learn\/paths\/java-on-azure\/\">Java on Azure &#8211; Learn<\/a><\/li>\n<li><a href=\"https:\/\/blog.frankel.ch\/common-jdks\/\">Most commonly available JDKs<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-gb\/java\/openjdk\/containers\">Container images for the Microsoft Build of OpenJDK<\/a><\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/java\/announcing-general-availability-of-microsoft-build-of-openjdk\/\">Announcing General Availability of Microsoft Build of OpenJDK<\/a><\/li>\n<\/ul>\n<h2 id=\"2-jakarta-ee-9-1-przynosi-wsparcie-jdk-11\" data-num=2>2. <a href=\"https:\/\/www.infoworld.com\/article\/3620088\/eclipse-jakarta-ee-91-aligns-with-java-11.html\">Jakarta EE 9.1 przynosi wsparcie JDK 11<\/a><\/h2>\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\/giphy-13.gif\" alt=\"\" width=\"480\" height=\"368\" \/><figcaption>Jakarta EE staraj\u0105ca si\u0119 by\u0107 na bie\u017c\u0105co z LTSami Javy<\/figcaption><\/figure>\n<p>W poprzednim tygodniu ukaza\u0142a si\u0119 tak\u017ce \u201cminorowa\u201d wersja standardu Jakarta EE 9. Wydanie to pewnie nie zwr\u00f3ci\u0142oby wi\u0119kszej uwagi, gdyby nie fakt, \u017ce jego efektem jest ostateczne pozwolenie na zmigrowanie projekt\u00f3w opartych o Jakart\u0119 do Javy 11. Fakt, \u017ce dopiero teraz, dwa pe\u0142ne lata po wydaniu ostatniego LTSa, zacz\u0105\u0142 on by\u0107 wspierany przez Jakart\u0119 jest z pewno\u015bci\u0105 do\u015b\u0107 smutny i troch\u0119 wyja\u015bnia, czemu \u201centerprajsowa\u201d Java raczej nie kojarzy si\u0119 z nowoczesnymi projektami.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d09860a933.png\" alt=\"\" \/><\/figure>\n<p>\u017beby jednak nie by\u0142o tak smutno, postanowi\u0142em sprawdzi\u0107, na ile ekosystem powi\u0105zany z Jakart\u0105 dopasowa\u0142 si\u0119 do nowo wydanej wersji i musz\u0119 przyzna\u0107, \u017ce to akurat wygl\u0105da znacznie bardziej optymistycznie. W tej chwili prawie wszystkie projekty chwal\u0105ce si\u0119 kompatybilno\u015bci\u0105 z Jakart\u0105 EE wyda\u0142y ju\u017c swoje edycje przechodz\u0105ce TCK (Technology Compatibility Kit). Za \u0142y\u017ck\u0105 dziegciu mo\u017cna uzna\u0107 fakt, \u017ce tacy istotni graczej jak JBoss czy WebLogic w dalszym ci\u0105gu pozostaj\u0105 zgodni wy\u0142\u0105cznie z Jakart\u0105 EE 8. Dodatkowo, mimo usilnych pr\u00f3b nie uda\u0142o mi si\u0119 znale\u017a\u0107 \u017cadnych zapowiedzi sugeruj\u0105cych, kiedy mia\u0142oby si\u0119 to zmieni\u0107.<\/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\/giphy-14.gif\" alt=\"\" width=\"427\" height=\"480\" \/><figcaption>C\u00f3\u017c, musimy si\u0119 chyba pogodzi\u0107 z faktem, \u017ce ten \u015bwiat porusza si\u0119 do przodu po prostu nieco wolniej.<\/figcaption><\/figure>\n<h2 id=\"3-scope-locals-ciekawy-jep-zwiazany-z-projektem-loom\" data-num=3><a href=\"https:\/\/openjdk.java.net\/jeps\/8263012\">3. Scope Locals &#8211; ciekawy JEP zwi\u0105zany z Projektem Loom<\/a><\/h2>\n<p>Od pewnego czasu odgra\u017cam si\u0119, \u017ce b\u0119d\u0119 chcia\u0142 Wam opowiedzie\u0107 o jednym z ciekawszych JEP\u00f3w wydanych w ostatnim czasie. Jako \u017ce obecny tydzie\u0144 jest nieco \u201cwolniejszy\u201d, nareszcie mamy na to dobry moment. Zapoznajmy si\u0119 zatem z tym, co przynie\u015b\u0107 maj\u0105 zmienne lokalne zakresu (moje osobiste, ko\u015blawe t\u0142umaczenie wyra\u017cenia \u201cScope Locals\u201d, proposal znajduj\u0105cego si\u0119 obecnie w Draftcie)<\/p>\n<p>Zapotrzebowanie na lokalne zakresy wynika z mojego ulubionego projektu w ramach JVM &#8211; Loom. Ze wzgl\u0119du na fakt, \u017ce Loom zamierza oprze\u0107 si\u0119 na bardzo leciutkich w\u0105tkach (dzi\u0119ki czemu mo\u017cliwe staje si\u0119 tworzenie ich w zasadzie nieograniczonej ilo\u015bci), musimy bardzo uwa\u017ca\u0107 na rozmiar struktur tworzonych na potrzeby ka\u017cdego w\u0105tku (bardzo fajny artyku\u0142 na ten temat znale\u017a\u0107 mo\u017cecie <a href=\"https:\/\/webtide.com\/do-looms-claims-stack-up-part-1\/\">tutaj<\/a>). Jedn\u0105 z potencjalnych optymalizacji jest udost\u0119pnianie mi\u0119dzy w\u0142\u00f3knami (bo tak w Loomie zw\u0105 si\u0119 w\u0105tki) jak najwi\u0119cej stanu.<\/p>\n<p>Popularne Thread Locals (zmienne przypi\u0119te do w\u0105tku) od pocz\u0105tku by\u0142y kamieniem w bucie tw\u00f3rc\u00f3w Looma. Rozwi\u0105zaniem na nie maj\u0105 by\u0107 wspomniane Scope Locals &#8211; efektywnie finalne, niemutowalne zmienne lokalne, kt\u00f3re mog\u0105 by\u0107 w ramach potrzeb bezpiecznie dzielone mi\u0119dzy w\u0105tkami, zmniejszaj\u0105c ilo\u015b\u0107 niezb\u0119dnej pami\u0119ci. Ka\u017cdy w\u0105tek-dziecko posiada\u0107 ma dost\u0119p do pe\u0142nego kontekstu swojego rodzica. Pomys\u0142 realizacji tego zadania podkradziony zosta\u0142 z Common Lispa i jego \u201czmiennych specjalnych\u201d,<\/p>\n<p>O Scope Locals mo\u017cna my\u015ble\u0107 jako niewidocznych parametrach, kt\u00f3re s\u0105 przekazywane do ka\u017cdej metody. Maj\u0105 one mo\u017cliwo\u015b\u0107 przypisania do zmiennej lokalnej warto\u015bci wy\u0142\u0105cznie na potrzeby konkretnego zakresu (scope) &#8211; \u00a0po jego zako\u0144czeniu warto\u015bci zmiennych w nim ustawionych zostanie automatycznie przywr\u00f3cona. Zachowanie to pozwala np. na zakrycie warto\u015bci x i y, w kt\u00f3rym\u015b z \u201cdzieci\u201d, bez wp\u0142ywu na wszystkie inne w\u0105tki je u\u017cywaj\u0105ce.<\/p>\n<p>Do\u015b\u0107 dobrze obrazuje to kod \u017ar\u00f3d\u0142owy z JEPa:<\/p>\n<pre><code>\/\/ Declare scope locals x and y\nstatic final ScopeLocal&lt;MyType&gt; x = ScopeLocal.forType(MyType.class);\nstatic final ScopeLocal&lt;MyType&gt; y = ScopeLocal.forType(MyType.class);\n{\nScopeLocal.where(x, expr1)\n.where(y, expr2)\n.run(() -&gt; ... code that uses x.get() and y.get() ...);\n}<\/code><\/pre>\n<p>Jak wida\u0107, sk\u0142adnia przypomina troch\u0119 znane wszystkim \u201catomiki\u201d na sterydach. Warto\u015bci x i y mog\u0105 by\u0107 przekazywane z w\u0105tku \u201crodzica\u201d do w\u0105tku \u201cdziecka\u201d. Metoda run() &#8222;wi\u0105\u017ce&#8221; za\u015b w tym przypadku x i y z warto\u015bciami expr1 i expr2. Podczas wykonywania metody run () wszelkie wywo\u0142ania x.get () i y.get () zwracaj\u0105 w\u0142a\u015bnie te warto\u015bci. Poza ni\u0105, warto\u015bci te wracaj\u0105 do oryginalnych, odziedziczonych po rodzicu.<\/p>\n<p>Oczywi\u015bcie, jak to z Loomem bywa, sk\u0142adnia mo\u017ce si\u0119 jeszcze wielokrotnie zmieni\u0107 (zw\u0142aszcza, \u017ce mamy do czynienia z niczym innym jak draftem). Scope Locals maj\u0105 by\u0107 jednak rozwi\u0105zaniem jednego z najwi\u0119kszych problem\u00f3w projektu (wspomnianego ThreadLocala), dlatego te\u017c stwierdzi\u0142em, \u017ce warto si\u0119 nimi z Wami podzieli\u0107. Nie ukrywam te\u017c, \u017ce moja sympatia do tego JEPa na pewno pochodzi z faktu, \u017ce pod\u015bwiadomie troch\u0119 jednak jestem kryptoclojurowcem, wi\u0119c wszelkie nawi\u0105zania do Lispa w JDK przyjmuje z otwartymi ramionami.<\/p>\n<figure class=\"kg-card kg-image-card\"><img decoding=\"async\" class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d09879a739.png\" alt=\"\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Po masie premier o kt\u00f3rych mieli\u015bmy okazje pisa\u0107 w zesz\u0142ym tygodniu, poprzednie siedem dni by\u0142o nieco wolniejsze je\u015bli chodzi o newsy &#8211; ale dzi\u0119ki temu nareszcie mo\u017cemy pogada\u0107 o obiecanym Scope Locals. Zapraszamy do lektury!<\/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-10130","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"5"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Tuesday vol. 40 - 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-40\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 40 - Vived\" \/>\n<meta property=\"og:description\" content=\"Po masie premier o kt\u00f3rych mieli\u015bmy okazje pisa\u0107 w zesz\u0142ym tygodniu, poprzednie siedem dni by\u0142o nieco wolniejsze je\u015bli chodzi o newsy - ale dzi\u0119ki temu nareszcie mo\u017cemy pogada\u0107 o obiecanym Scope Locals. Zapraszamy do lektury!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-06-01T12:58:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_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\/jvm-tuesday-vol-40\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 40\",\"datePublished\":\"2021-06-01T12:58:27+00:00\",\"dateModified\":\"2022-09-19T11:10:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/\"},\"wordCount\":999,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/\",\"name\":\"JVM Tuesday vol. 40 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image.png\",\"datePublished\":\"2021-06-01T12:58:27+00:00\",\"dateModified\":\"2022-09-19T11:10:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 40\"}]},{\"@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":"JVM Tuesday vol. 40 - 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-40\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 40 - Vived","og_description":"Po masie premier o kt\u00f3rych mieli\u015bmy okazje pisa\u0107 w zesz\u0142ym tygodniu, poprzednie siedem dni by\u0142o nieco wolniejsze je\u015bli chodzi o newsy - ale dzi\u0119ki temu nareszcie mo\u017cemy pogada\u0107 o obiecanym Scope Locals. Zapraszamy do lektury!","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/","og_site_name":"Vived","article_published_time":"2021-06-01T12:58:27+00:00","article_modified_time":"2022-09-19T11:10:52+00:00","og_image":[{"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image.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-40\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 40","datePublished":"2021-06-01T12:58:27+00:00","dateModified":"2022-09-19T11:10:52+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/"},"wordCount":999,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image.png","articleSection":["JVM"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/","name":"JVM Tuesday vol. 40 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image.png","datePublished":"2021-06-01T12:58:27+00:00","dateModified":"2022-09-19T11:10:52+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/5_image.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-40\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 40"}]},{"@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":null,"attrs":[],"innerBlocks":[],"innerHTML":"<h2 id=\"1-openjdk-od-microsoftu-wydane-%F0%9F%AA%9F\"><a href=\"https:\/\/devblogs.microsoft.com\/java\/announcing-general-availability-of-microsoft-build-of-openjdk\/\">1. OpenJDK od Microsoftu wydane<\/a><\/h2>\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.png\" alt=\"\" width=\"460\" height=\"294\" \/>\n<figcaption>Bracia si\u0119 w ko\u0144cu chyba pogodzili<\/figcaption><\/figure>\nPodobnie, jak w przypadku edycji sobotniej, dzisiejszy \u201cwtorek\u201d rozpoczniemy og\u0142oszeniem z konferencji Microsoft Build, kt\u00f3re nie za\u0142apa\u0142o si\u0119 do news\u00f3w zwi\u0105zanych z rzemie\u015blnictwem oprogramowania.\n\nDla os\u00f3b \u015bledz\u0105cych dzia\u0142ania Microsoftu z pewno\u015bci\u0105 nie b\u0119dzie tajemnic\u0105, \u017ce firma z Redmond do\u015b\u0107 mocno inwestuje ostatnio w Jav\u0119. Kulminacj\u0105 jej dzia\u0142a\u0144 mo\u017ce by\u0107 fakt, \u017ce w zesz\u0142ym tygodniu wypu\u015bci\u0142a ona w ko\u0144cu sw\u00f3j w\u0142asny wariant OpenJDK. Na razie dost\u0119pna jest wersja JDK 11, ale do wczesnego wgl\u0105du trafi\u0142a te\u017c \u201cszesnastka\u201d. Ca\u0142o\u015b\u0107 oparta jest o Eclipse Adoptium, kt\u00f3rego Microsoft jest sponsorem.\n\nPremierze towarzyszy\u0142o r\u00f3wnie\u017c zaprezentowanie odpowiedniego zbioru <a href=\"https:\/\/docs.microsoft.com\/en-gb\/java\/openjdk\/containers\">obraz\u00f3w dockerowych<\/a> oraz nowego \u201c<a href=\"https:\/\/docs.microsoft.com\/en-gb\/java\/\">hubu<\/a>\u201d, agreguj\u0105cego wszystkie inicjatywy Microsoftu zwi\u0105zane z Jav\u0105, jak np. plugin do Visual Studio Code czy szablony do GitHub Actions. Musz\u0119 przyzna\u0107, \u017ce zaskoczy\u0142a mnie r\u00f3wnie\u017c mnogo\u015b\u0107 materia\u0142\u00f3w do nauki tego j\u0119zyka, jakie mo\u017cna tam znale\u017a\u0107. <a href=\"https:\/\/docs.microsoft.com\/en-us\/learn\/paths\/java-on-azure\/\">Java for Azure<\/a> wydaje si\u0119 by\u0107 ca\u0142kiem interesuj\u0105cym kursem, pozwalaj\u0105cym w praktyce zapozna\u0107 si\u0119 z us\u0142ugami dost\u0119pnymi w ramach chmury Microsoftu.\n\nNo c\u00f3\u017c, historia zatoczy\u0142a ko\u0142o, i <a href=\"https:\/\/en.wikipedia.org\/wiki\/Microsoft_Java_Virtual_Machine\">po raz pierwszy od 2007<\/a> roku Microsoft znowu posiada w\u0142asn\u0105 wersj\u0119 JDK. Je\u017celi jeste\u015bcie za\u015b ciekawi, czym w og\u00f3le r\u00f3\u017cni\u0105 si\u0119 poszczeg\u00f3lne wydania OpenJDK, zapraszam do <a href=\"https:\/\/blog.frankel.ch\/common-jdks\/\">\u015bwietnego artyku\u0142u<\/a> na ten temat.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Microsoft_Java_Virtual_Machine\">Microsoft Java Virtual Machine<\/a><\/li>\n \t<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/learn\/paths\/java-on-azure\/\">Java on Azure - Learn<\/a><\/li>\n \t<li><a href=\"https:\/\/blog.frankel.ch\/common-jdks\/\">Most commonly available JDKs<\/a><\/li>\n \t<li><a href=\"https:\/\/docs.microsoft.com\/en-gb\/java\/openjdk\/containers\">Container images for the Microsoft Build of OpenJDK<\/a><\/li>\n \t<li><a href=\"https:\/\/devblogs.microsoft.com\/java\/announcing-general-availability-of-microsoft-build-of-openjdk\/\">Announcing General Availability of Microsoft Build of OpenJDK<\/a><\/li>\n<\/ul>\n<h2 id=\"2-jakarta-ee-91-przynosi-wsparcie-jdk-11-%F0%9F%90%A2\">2. <a href=\"https:\/\/www.infoworld.com\/article\/3620088\/eclipse-jakarta-ee-91-aligns-with-java-11.html\">Jakarta EE 9.1 przynosi wsparcie JDK 11<\/a><\/h2>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/giphy-13.gif\" alt=\"\" width=\"480\" height=\"368\" \/>\n\n<figcaption>Jakarta EE staraj\u0105ca si\u0119 by\u0107 na bie\u017c\u0105co z LTSami Javy<\/figcaption><\/figure>\nW poprzednim tygodniu ukaza\u0142a si\u0119 tak\u017ce \u201cminorowa\u201d wersja standardu Jakarta EE 9. Wydanie to pewnie nie zwr\u00f3ci\u0142oby wi\u0119kszej uwagi, gdyby nie fakt, \u017ce jego efektem jest ostateczne pozwolenie na zmigrowanie projekt\u00f3w opartych o Jakart\u0119 do Javy 11. Fakt, \u017ce dopiero teraz, dwa pe\u0142ne lata po wydaniu ostatniego LTSa, zacz\u0105\u0142 on by\u0107 wspierany przez Jakart\u0119 jest z pewno\u015bci\u0105 do\u015b\u0107 smutny i troch\u0119 wyja\u015bnia, czemu \u201centerprajsowa\u201d Java raczej nie kojarzy si\u0119 z nowoczesnymi projektami.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d09860a933.png\" alt=\"\" \/><\/figure>\n\u017beby jednak nie by\u0142o tak smutno, postanowi\u0142em sprawdzi\u0107, na ile ekosystem powi\u0105zany z Jakart\u0105 dopasowa\u0142 si\u0119 do nowo wydanej wersji i musz\u0119 przyzna\u0107, \u017ce to akurat wygl\u0105da znacznie bardziej optymistycznie. W tej chwili prawie wszystkie projekty chwal\u0105ce si\u0119 kompatybilno\u015bci\u0105 z Jakart\u0105 EE wyda\u0142y ju\u017c swoje edycje przechodz\u0105ce TCK (Technology Compatibility Kit). Za \u0142y\u017ck\u0105 dziegciu mo\u017cna uzna\u0107 fakt, \u017ce tacy istotni graczej jak JBoss czy WebLogic w dalszym ci\u0105gu pozostaj\u0105 zgodni wy\u0142\u0105cznie z Jakart\u0105 EE 8. Dodatkowo, mimo usilnych pr\u00f3b nie uda\u0142o mi si\u0119 znale\u017a\u0107 \u017cadnych zapowiedzi sugeruj\u0105cych, kiedy mia\u0142oby si\u0119 to zmieni\u0107.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/giphy-14.gif\" alt=\"\" width=\"427\" height=\"480\" \/>\n\n<figcaption>C\u00f3\u017c, musimy si\u0119 chyba pogodzi\u0107 z faktem, \u017ce ten \u015bwiat porusza si\u0119 do przodu po prostu nieco wolniej.<\/figcaption><\/figure>\n<h2 id=\"3-scope-localsciekawy-jep-zwi%C4%85zany-z-projektem-loom-%F0%9F%94%8E\"><a href=\"https:\/\/openjdk.java.net\/jeps\/8263012\">3. Scope Locals - ciekawy JEP zwi\u0105zany z Projektem Loom<\/a><\/h2>\nOd pewnego czasu odgra\u017cam si\u0119, \u017ce b\u0119d\u0119 chcia\u0142 Wam opowiedzie\u0107 o jednym z ciekawszych JEP\u00f3w wydanych w ostatnim czasie. Jako \u017ce obecny tydzie\u0144 jest nieco \u201cwolniejszy\u201d, nareszcie mamy na to dobry moment. Zapoznajmy si\u0119 zatem z tym, co przynie\u015b\u0107 maj\u0105 zmienne lokalne zakresu (moje osobiste, ko\u015blawe t\u0142umaczenie wyra\u017cenia \u201cScope Locals\u201d, proposal znajduj\u0105cego si\u0119 obecnie w Draftcie)\n\nZapotrzebowanie na lokalne zakresy wynika z mojego ulubionego projektu w ramach JVM - Loom. Ze wzgl\u0119du na fakt, \u017ce Loom zamierza oprze\u0107 si\u0119 na bardzo leciutkich w\u0105tkach (dzi\u0119ki czemu mo\u017cliwe staje si\u0119 tworzenie ich w zasadzie nieograniczonej ilo\u015bci), musimy bardzo uwa\u017ca\u0107 na rozmiar struktur tworzonych na potrzeby ka\u017cdego w\u0105tku (bardzo fajny artyku\u0142 na ten temat znale\u017a\u0107 mo\u017cecie <a href=\"https:\/\/webtide.com\/do-looms-claims-stack-up-part-1\/\">tutaj<\/a>). Jedn\u0105 z potencjalnych optymalizacji jest udost\u0119pnianie mi\u0119dzy w\u0142\u00f3knami (bo tak w Loomie zw\u0105 si\u0119 w\u0105tki) jak najwi\u0119cej stanu.\n\nPopularne Thread Locals (zmienne przypi\u0119te do w\u0105tku) od pocz\u0105tku by\u0142y kamieniem w bucie tw\u00f3rc\u00f3w Looma. Rozwi\u0105zaniem na nie maj\u0105 by\u0107 wspomniane Scope Locals - efektywnie finalne, niemutowalne zmienne lokalne, kt\u00f3re mog\u0105 by\u0107 w ramach potrzeb bezpiecznie dzielone mi\u0119dzy w\u0105tkami, zmniejszaj\u0105c ilo\u015b\u0107 niezb\u0119dnej pami\u0119ci. Ka\u017cdy w\u0105tek-dziecko posiada\u0107 ma dost\u0119p do pe\u0142nego kontekstu swojego rodzica. Pomys\u0142 realizacji tego zadania podkradziony zosta\u0142 z Common Lispa i jego \u201czmiennych specjalnych\u201d,\n\nO Scope Locals mo\u017cna my\u015ble\u0107 jako niewidocznych parametrach, kt\u00f3re s\u0105 przekazywane do ka\u017cdej metody. Maj\u0105 one mo\u017cliwo\u015b\u0107 przypisania do zmiennej lokalnej warto\u015bci wy\u0142\u0105cznie na potrzeby konkretnego zakresu (scope) - \u00a0po jego zako\u0144czeniu warto\u015bci zmiennych w nim ustawionych zostanie automatycznie przywr\u00f3cona. Zachowanie to pozwala np. na zakrycie warto\u015bci x i y, w kt\u00f3rym\u015b z \u201cdzieci\u201d, bez wp\u0142ywu na wszystkie inne w\u0105tki je u\u017cywaj\u0105ce.\n\nDo\u015b\u0107 dobrze obrazuje to kod \u017ar\u00f3d\u0142owy z JEPa:\n<pre><code>\/\/ Declare scope locals x and y\nstatic final ScopeLocal&lt;MyType&gt; x = ScopeLocal.forType(MyType.class);\nstatic final ScopeLocal&lt;MyType&gt; y = ScopeLocal.forType(MyType.class);\n{\nScopeLocal.where(x, expr1)\n.where(y, expr2)\n.run(() -&gt; ... code that uses x.get() and y.get() ...);\n}<\/code><\/pre>\nJak wida\u0107, sk\u0142adnia przypomina troch\u0119 znane wszystkim \u201catomiki\u201d na sterydach. Warto\u015bci x i y mog\u0105 by\u0107 przekazywane z w\u0105tku \u201crodzica\u201d do w\u0105tku \u201cdziecka\u201d. Metoda run() \"wi\u0105\u017ce\" za\u015b w tym przypadku x i y z warto\u015bciami expr1 i expr2. Podczas wykonywania metody run () wszelkie wywo\u0142ania x.get () i y.get () zwracaj\u0105 w\u0142a\u015bnie te warto\u015bci. Poza ni\u0105, warto\u015bci te wracaj\u0105 do oryginalnych, odziedziczonych po rodzicu.\n\nOczywi\u015bcie, jak to z Loomem bywa, sk\u0142adnia mo\u017ce si\u0119 jeszcze wielokrotnie zmieni\u0107 (zw\u0142aszcza, \u017ce mamy do czynienia z niczym innym jak draftem). Scope Locals maj\u0105 by\u0107 jednak rozwi\u0105zaniem jednego z najwi\u0119kszych problem\u00f3w projektu (wspomnianego ThreadLocala), dlatego te\u017c stwierdzi\u0142em, \u017ce warto si\u0119 nimi z Wami podzieli\u0107. Nie ukrywam te\u017c, \u017ce moja sympatia do tego JEPa na pewno pochodzi z faktu, \u017ce pod\u015bwiadomie troch\u0119 jednak jestem kryptoclojurowcem, wi\u0119c wszelkie nawi\u0105zania do Lispa w JDK przyjmuje z otwartymi ramionami.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d09879a739.png\" alt=\"\" \/><\/figure>","innerContent":["<h2 id=\"1-openjdk-od-microsoftu-wydane-%F0%9F%AA%9F\"><a href=\"https:\/\/devblogs.microsoft.com\/java\/announcing-general-availability-of-microsoft-build-of-openjdk\/\">1. OpenJDK od Microsoftu wydane<\/a><\/h2>\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.png\" alt=\"\" width=\"460\" height=\"294\" \/>\n<figcaption>Bracia si\u0119 w ko\u0144cu chyba pogodzili<\/figcaption><\/figure>\nPodobnie, jak w przypadku edycji sobotniej, dzisiejszy \u201cwtorek\u201d rozpoczniemy og\u0142oszeniem z konferencji Microsoft Build, kt\u00f3re nie za\u0142apa\u0142o si\u0119 do news\u00f3w zwi\u0105zanych z rzemie\u015blnictwem oprogramowania.\n\nDla os\u00f3b \u015bledz\u0105cych dzia\u0142ania Microsoftu z pewno\u015bci\u0105 nie b\u0119dzie tajemnic\u0105, \u017ce firma z Redmond do\u015b\u0107 mocno inwestuje ostatnio w Jav\u0119. Kulminacj\u0105 jej dzia\u0142a\u0144 mo\u017ce by\u0107 fakt, \u017ce w zesz\u0142ym tygodniu wypu\u015bci\u0142a ona w ko\u0144cu sw\u00f3j w\u0142asny wariant OpenJDK. Na razie dost\u0119pna jest wersja JDK 11, ale do wczesnego wgl\u0105du trafi\u0142a te\u017c \u201cszesnastka\u201d. Ca\u0142o\u015b\u0107 oparta jest o Eclipse Adoptium, kt\u00f3rego Microsoft jest sponsorem.\n\nPremierze towarzyszy\u0142o r\u00f3wnie\u017c zaprezentowanie odpowiedniego zbioru <a href=\"https:\/\/docs.microsoft.com\/en-gb\/java\/openjdk\/containers\">obraz\u00f3w dockerowych<\/a> oraz nowego \u201c<a href=\"https:\/\/docs.microsoft.com\/en-gb\/java\/\">hubu<\/a>\u201d, agreguj\u0105cego wszystkie inicjatywy Microsoftu zwi\u0105zane z Jav\u0105, jak np. plugin do Visual Studio Code czy szablony do GitHub Actions. Musz\u0119 przyzna\u0107, \u017ce zaskoczy\u0142a mnie r\u00f3wnie\u017c mnogo\u015b\u0107 materia\u0142\u00f3w do nauki tego j\u0119zyka, jakie mo\u017cna tam znale\u017a\u0107. <a href=\"https:\/\/docs.microsoft.com\/en-us\/learn\/paths\/java-on-azure\/\">Java for Azure<\/a> wydaje si\u0119 by\u0107 ca\u0142kiem interesuj\u0105cym kursem, pozwalaj\u0105cym w praktyce zapozna\u0107 si\u0119 z us\u0142ugami dost\u0119pnymi w ramach chmury Microsoftu.\n\nNo c\u00f3\u017c, historia zatoczy\u0142a ko\u0142o, i <a href=\"https:\/\/en.wikipedia.org\/wiki\/Microsoft_Java_Virtual_Machine\">po raz pierwszy od 2007<\/a> roku Microsoft znowu posiada w\u0142asn\u0105 wersj\u0119 JDK. Je\u017celi jeste\u015bcie za\u015b ciekawi, czym w og\u00f3le r\u00f3\u017cni\u0105 si\u0119 poszczeg\u00f3lne wydania OpenJDK, zapraszam do <a href=\"https:\/\/blog.frankel.ch\/common-jdks\/\">\u015bwietnego artyku\u0142u<\/a> na ten temat.\n<h3 id=\"%C5%BAr%C3%B3d%C5%82a\">\u0179r\u00f3d\u0142a<\/h3>\n<ul>\n \t<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Microsoft_Java_Virtual_Machine\">Microsoft Java Virtual Machine<\/a><\/li>\n \t<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/learn\/paths\/java-on-azure\/\">Java on Azure - Learn<\/a><\/li>\n \t<li><a href=\"https:\/\/blog.frankel.ch\/common-jdks\/\">Most commonly available JDKs<\/a><\/li>\n \t<li><a href=\"https:\/\/docs.microsoft.com\/en-gb\/java\/openjdk\/containers\">Container images for the Microsoft Build of OpenJDK<\/a><\/li>\n \t<li><a href=\"https:\/\/devblogs.microsoft.com\/java\/announcing-general-availability-of-microsoft-build-of-openjdk\/\">Announcing General Availability of Microsoft Build of OpenJDK<\/a><\/li>\n<\/ul>\n<h2 id=\"2-jakarta-ee-91-przynosi-wsparcie-jdk-11-%F0%9F%90%A2\">2. <a href=\"https:\/\/www.infoworld.com\/article\/3620088\/eclipse-jakarta-ee-91-aligns-with-java-11.html\">Jakarta EE 9.1 przynosi wsparcie JDK 11<\/a><\/h2>\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/giphy-13.gif\" alt=\"\" width=\"480\" height=\"368\" \/>\n\n<figcaption>Jakarta EE staraj\u0105ca si\u0119 by\u0107 na bie\u017c\u0105co z LTSami Javy<\/figcaption><\/figure>\nW poprzednim tygodniu ukaza\u0142a si\u0119 tak\u017ce \u201cminorowa\u201d wersja standardu Jakarta EE 9. Wydanie to pewnie nie zwr\u00f3ci\u0142oby wi\u0119kszej uwagi, gdyby nie fakt, \u017ce jego efektem jest ostateczne pozwolenie na zmigrowanie projekt\u00f3w opartych o Jakart\u0119 do Javy 11. Fakt, \u017ce dopiero teraz, dwa pe\u0142ne lata po wydaniu ostatniego LTSa, zacz\u0105\u0142 on by\u0107 wspierany przez Jakart\u0119 jest z pewno\u015bci\u0105 do\u015b\u0107 smutny i troch\u0119 wyja\u015bnia, czemu \u201centerprajsowa\u201d Java raczej nie kojarzy si\u0119 z nowoczesnymi projektami.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d09860a933.png\" alt=\"\" \/><\/figure>\n\u017beby jednak nie by\u0142o tak smutno, postanowi\u0142em sprawdzi\u0107, na ile ekosystem powi\u0105zany z Jakart\u0105 dopasowa\u0142 si\u0119 do nowo wydanej wersji i musz\u0119 przyzna\u0107, \u017ce to akurat wygl\u0105da znacznie bardziej optymistycznie. W tej chwili prawie wszystkie projekty chwal\u0105ce si\u0119 kompatybilno\u015bci\u0105 z Jakart\u0105 EE wyda\u0142y ju\u017c swoje edycje przechodz\u0105ce TCK (Technology Compatibility Kit). Za \u0142y\u017ck\u0105 dziegciu mo\u017cna uzna\u0107 fakt, \u017ce tacy istotni graczej jak JBoss czy WebLogic w dalszym ci\u0105gu pozostaj\u0105 zgodni wy\u0142\u0105cznie z Jakart\u0105 EE 8. Dodatkowo, mimo usilnych pr\u00f3b nie uda\u0142o mi si\u0119 znale\u017a\u0107 \u017cadnych zapowiedzi sugeruj\u0105cych, kiedy mia\u0142oby si\u0119 to zmieni\u0107.\n<figure class=\"kg-card kg-image-card kg-card-hascaption\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/giphy-14.gif\" alt=\"\" width=\"427\" height=\"480\" \/>\n\n<figcaption>C\u00f3\u017c, musimy si\u0119 chyba pogodzi\u0107 z faktem, \u017ce ten \u015bwiat porusza si\u0119 do przodu po prostu nieco wolniej.<\/figcaption><\/figure>\n<h2 id=\"3-scope-localsciekawy-jep-zwi%C4%85zany-z-projektem-loom-%F0%9F%94%8E\"><a href=\"https:\/\/openjdk.java.net\/jeps\/8263012\">3. Scope Locals - ciekawy JEP zwi\u0105zany z Projektem Loom<\/a><\/h2>\nOd pewnego czasu odgra\u017cam si\u0119, \u017ce b\u0119d\u0119 chcia\u0142 Wam opowiedzie\u0107 o jednym z ciekawszych JEP\u00f3w wydanych w ostatnim czasie. Jako \u017ce obecny tydzie\u0144 jest nieco \u201cwolniejszy\u201d, nareszcie mamy na to dobry moment. Zapoznajmy si\u0119 zatem z tym, co przynie\u015b\u0107 maj\u0105 zmienne lokalne zakresu (moje osobiste, ko\u015blawe t\u0142umaczenie wyra\u017cenia \u201cScope Locals\u201d, proposal znajduj\u0105cego si\u0119 obecnie w Draftcie)\n\nZapotrzebowanie na lokalne zakresy wynika z mojego ulubionego projektu w ramach JVM - Loom. Ze wzgl\u0119du na fakt, \u017ce Loom zamierza oprze\u0107 si\u0119 na bardzo leciutkich w\u0105tkach (dzi\u0119ki czemu mo\u017cliwe staje si\u0119 tworzenie ich w zasadzie nieograniczonej ilo\u015bci), musimy bardzo uwa\u017ca\u0107 na rozmiar struktur tworzonych na potrzeby ka\u017cdego w\u0105tku (bardzo fajny artyku\u0142 na ten temat znale\u017a\u0107 mo\u017cecie <a href=\"https:\/\/webtide.com\/do-looms-claims-stack-up-part-1\/\">tutaj<\/a>). Jedn\u0105 z potencjalnych optymalizacji jest udost\u0119pnianie mi\u0119dzy w\u0142\u00f3knami (bo tak w Loomie zw\u0105 si\u0119 w\u0105tki) jak najwi\u0119cej stanu.\n\nPopularne Thread Locals (zmienne przypi\u0119te do w\u0105tku) od pocz\u0105tku by\u0142y kamieniem w bucie tw\u00f3rc\u00f3w Looma. Rozwi\u0105zaniem na nie maj\u0105 by\u0107 wspomniane Scope Locals - efektywnie finalne, niemutowalne zmienne lokalne, kt\u00f3re mog\u0105 by\u0107 w ramach potrzeb bezpiecznie dzielone mi\u0119dzy w\u0105tkami, zmniejszaj\u0105c ilo\u015b\u0107 niezb\u0119dnej pami\u0119ci. Ka\u017cdy w\u0105tek-dziecko posiada\u0107 ma dost\u0119p do pe\u0142nego kontekstu swojego rodzica. Pomys\u0142 realizacji tego zadania podkradziony zosta\u0142 z Common Lispa i jego \u201czmiennych specjalnych\u201d,\n\nO Scope Locals mo\u017cna my\u015ble\u0107 jako niewidocznych parametrach, kt\u00f3re s\u0105 przekazywane do ka\u017cdej metody. Maj\u0105 one mo\u017cliwo\u015b\u0107 przypisania do zmiennej lokalnej warto\u015bci wy\u0142\u0105cznie na potrzeby konkretnego zakresu (scope) - \u00a0po jego zako\u0144czeniu warto\u015bci zmiennych w nim ustawionych zostanie automatycznie przywr\u00f3cona. Zachowanie to pozwala np. na zakrycie warto\u015bci x i y, w kt\u00f3rym\u015b z \u201cdzieci\u201d, bez wp\u0142ywu na wszystkie inne w\u0105tki je u\u017cywaj\u0105ce.\n\nDo\u015b\u0107 dobrze obrazuje to kod \u017ar\u00f3d\u0142owy z JEPa:\n<pre><code>\/\/ Declare scope locals x and y\nstatic final ScopeLocal&lt;MyType&gt; x = ScopeLocal.forType(MyType.class);\nstatic final ScopeLocal&lt;MyType&gt; y = ScopeLocal.forType(MyType.class);\n{\nScopeLocal.where(x, expr1)\n.where(y, expr2)\n.run(() -&gt; ... code that uses x.get() and y.get() ...);\n}<\/code><\/pre>\nJak wida\u0107, sk\u0142adnia przypomina troch\u0119 znane wszystkim \u201catomiki\u201d na sterydach. Warto\u015bci x i y mog\u0105 by\u0107 przekazywane z w\u0105tku \u201crodzica\u201d do w\u0105tku \u201cdziecka\u201d. Metoda run() \"wi\u0105\u017ce\" za\u015b w tym przypadku x i y z warto\u015bciami expr1 i expr2. Podczas wykonywania metody run () wszelkie wywo\u0142ania x.get () i y.get () zwracaj\u0105 w\u0142a\u015bnie te warto\u015bci. Poza ni\u0105, warto\u015bci te wracaj\u0105 do oryginalnych, odziedziczonych po rodzicu.\n\nOczywi\u015bcie, jak to z Loomem bywa, sk\u0142adnia mo\u017ce si\u0119 jeszcze wielokrotnie zmieni\u0107 (zw\u0142aszcza, \u017ce mamy do czynienia z niczym innym jak draftem). Scope Locals maj\u0105 by\u0107 jednak rozwi\u0105zaniem jednego z najwi\u0119kszych problem\u00f3w projektu (wspomnianego ThreadLocala), dlatego te\u017c stwierdzi\u0142em, \u017ce warto si\u0119 nimi z Wami podzieli\u0107. Nie ukrywam te\u017c, \u017ce moja sympatia do tego JEPa na pewno pochodzi z faktu, \u017ce pod\u015bwiadomie troch\u0119 jednak jestem kryptoclojurowcem, wi\u0119c wszelkie nawi\u0105zania do Lispa w JDK przyjmuje z otwartymi ramionami.\n<figure class=\"kg-card kg-image-card\"><img class=\"kg-image\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d09879a739.png\" alt=\"\" \/><\/figure>"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10130","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=10130"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10130\/revisions"}],"predecessor-version":[{"id":10571,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10130\/revisions\/10571"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}