{"id":9966,"date":"2022-05-24T14:43:49","date_gmt":"2022-05-24T12:43:49","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/"},"modified":"2022-09-19T13:10:38","modified_gmt":"2022-09-19T11:10:38","slug":"jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/","title":{"rendered":"JVM Tuesday vol. 88 &#8211; Spring Boot, Leyden, Structured Concurrency"},"content":{"rendered":"\n<h2 id=\"1-spring-boot-2-7-wydany\" data-num=1>1. Spring Boot 2.7 wydany<\/h2>\n\n\n\n<p>Zgodnie ze <a href=\"https:\/\/calendar.spring.io\/\">springowym kalendarzem<\/a>, w zesz\u0142ym tygodniu mieli\u015bmy premier\u0119 nowego Spring Boota <a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-boot-2-7-0-available-now\">w wersji 2.7<\/a>, kt\u00f3remu towarzyszy\u0142o wydanie te\u017c nowych wersji kilku innych springowych projekt\u00f3w. Dlatego te\u017c dzisiejsze wydanie zaczniemy w\u0142a\u015bnie od przygl\u0105dania si\u0119, co nowego przynosi ostatnie przed Spring Boot 3.0 wydanie linii 2.x.<\/p>\n\n\n\n<p>W \u015brodku jest za\u015b i du\u017co, i niedu\u017co. Pewnie, takie rzeczy jak wsparcie zdobywaj\u0105cego coraz wi\u0119ksz\u0105 popularno\u015b\u0107 Cache2k czy \u0142atwiejsza rejestracja Jacksonowych Mixin\u00f3w to ca\u0142kiem interesuj\u0105ce dodatki, podobnie jak natywne wsparcie Podmana, alternatywy dla Dockera (tej lepszej alternatywy &#8211; w ko\u0144cu z \ud83e\uddad zamiast \ud83d\udc33&nbsp; w logu). Nie da si\u0119 jednak ukry\u0107, \u017ce wyra\u017anie jest to cisza przed burz\u0105 i wi\u0119ksze zmiany dostaniemy dopiero na jesieni, wraz z premier\u0105 \u201ctr\u00f3jeczki\u201d. Tego wra\u017cenia nie zmyje raczej ostatnia z du\u017cych nowo\u015bci w wersji 2.7, czyli AutoConfiguracja i metryki dla Spring for GraphQL.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889e63fd54.png\" alt=\"\" width=\"300\" height=\"710\"\/><figcaption>I tak jest troch\u0119 lepiej ni\u017c ostatnio \ud83d\ude09<\/figcaption><\/figure><\/div>\n\n\n<p>Z tym ostatnim zwi\u0105zana jest te\u017c najwi\u0119ksza z towarzysz\u0105cych nowemu Spring Bootowi premier &#8211; <a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-for-graphql-1-0-release\">Spring for GraphQL w stabilnej wersji 1.0<\/a>. W tym dzieje si\u0119 znacznie wi\u0119cej ni\u017c w \u201cg\u0142\u00f3wnym\u201d wydaniu.&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Znaczenie rozszerzono ilo\u015b\u0107 dost\u0119pnych dla u\u017cytkownika anotacji&nbsp;<\/li><li>ulepszono walidacje parametr\u00f3w<\/li><li>wprowadzono wsparcie batchowych zapyta\u0144 i interceptor\u00f3w<\/li><li>obs\u0142uga QueryDSL&nbsp;<\/li><li>Klient HTTP, WebSocket\u00f3w i RSocket\u00f3w<\/li><\/ul>\n\n\n\n<p>a to i tak nie wszystko. Spring for GraphQL 1.0 to wed\u0142ug mnie najciekawsza nowinka od czasu ukazania si\u0119 pierwszego preview Spring Native.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889e82a5cc.gif\" alt=\"\"\/><figcaption>Podobnie pewnie do niego niszowa, ale licz\u0119, \u017ce obie wschodz\u0105ce gwiazdy springowego \u015bwiata przebij\u0105 si\u0119 do masowej \u015bwiadomo\u015bci.<\/figcaption><\/figure><\/div>\n\n\n<p>Co poza tym towarzyszy nowemu Springowi?&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/spring-projects\/spring-security\/releases\/tag\/5.7.1\">Spring Security w wersji 5.7<\/a> wprowadza kilka nowo\u015bci do obs\u0142ugi mechanizm\u00f3w OAuth i SAML, udost\u0119pnia te\u017c <em>RequestAttributeSecurityContextRepository <\/em>i <em>SecurityContextHolderFilter<\/em>, u\u0142atwiaj\u0105ce prace z <em>SecurityContext<\/em>. Wprowadzono te\u017c specjalny DSL do obs\u0142ugi nag\u0142\u00f3wk\u00f3w CORS<\/li><li><a href=\"https:\/\/spring.io\/blog\/2022\/05\/13\/spring-data-2021-2-and-2022-0-m4-released\">Spring Data w wersji 2021.2<\/a> przynosi jeszcze wi\u0119ksze mo\u017cliwo\u015bci zdefiniowania ClassLoadera, kt\u00f3rego chemy u\u017cywa\u0107, wsparcie dla konwerter\u00f3w warto\u015bci opartych o konkretne pola w klasie, nowe mo\u017cliwo\u015bci dla projekcji encji, a tak\u017ce wi\u0119ksze i mniejsze zmiany w zasadzie w ka\u017cdym z provider\u00f3w do konkretnych baz danych.<\/li><li><a href=\"https:\/\/spring.io\/projects\/spring-ldap\">Spring LDAP w wersji 2.4.0<\/a> doczeka\u0142 si\u0119 repakietyzacji, kt\u00f3ra u\u0142atwia stosowanie go wraz z systemem modu\u0142\u00f3w<\/li><\/ul>\n\n\n\n<p>Drobiazgi w postaciu podbicia zale\u017cno\u015bci i korekcji b\u0142\u0119d\u00f3w otrzyma\u0142o te\u017c&nbsp;<a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-boot-2-7-0-available-now\">Spring Session, Spring Batch, Spring Hateoas<\/a>.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889e96de7b.png\" alt=\"\"\/><figcaption>Opr\u00f3cz powy\u017cszych, pojawi\u0142o si\u0119 te\u017c kilka mileston\u00f3w przysz\u0142ych wyda\u0144, ale tymi zajmiemy si\u0119 pewnie bli\u017cej docelowych premier.&nbsp;<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-boot-2-7-0-available-now\">Spring Boot 2.7.0 available now<\/a><\/li><li><a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-for-graphql-1-0-release\">Spring for GraphQL 1.0 Release<\/a><\/li><li><a href=\"https:\/\/spring.io\/projects\/spring-ldap\">Spring LDAP 2.40<\/a><\/li><li><a href=\"https:\/\/github.com\/spring-projects\/spring-security\/releases\/tag\/5.7.1\">Spring Security 5.7.1<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"2-zaproszenie-do-dyskusji-nad-projektem-leyden\" data-num=2>2. Zaproszenie do dyskusji nad Projektem Leyden<\/h2>\n\n\n\n<p>Ale si\u0119 wszyscy wzi\u0119li za wydajno\u015b\u0107 JVMa. Dopiero co w kwietniu du\u017cy update dosta\u0142 Project CRaC, tydzie\u0144 temu opisywali\u015bmy Project Liliput, a teraz na <a href=\"https:\/\/openjdk.java.net\/projects\/leyden\/notes\/01-beginnings\">warsztat wr\u00f3ci\u0142 Project Leyden<\/a>, o kt\u00f3rym nie s\u0142ysza\u0142em chyba od dobrego roku.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ea29b5d.png\" alt=\"\" width=\"600\" height=\"438\"\/><figcaption>Vived bawi i uczy &#8211; Lucas von Leyden to niderlandzki malarz z XVI wieku<\/figcaption><\/figure><\/div>\n\n\n<p>Czym jest Leyden? Jako koncept m\u00f3wimy tutaj o inicjatywie do\u015b\u0107 zbli\u017conej do GraalVM i zawiera z ni\u0105 mas\u0119 punkt\u00f3w wsp\u00f3lnych. Ma za zadanie stworzenie specyfikacji Statycznych Obraz\u00f3w. Obraz statyczny jest samodzielnym programem, kt\u00f3ry nie mo\u017ce \u0142adowa\u0107 \u017cadnych zewn\u0119trznych byt\u00f3w na classpath, ani generowa\u0107 nowego bajtkodu w runtime. Jest to bardzo du\u017ce ograniczenie w stosunku do zwyk\u0142ych aplikacji javowych, co dostajemy wi\u0119c w zamian? Te dwa ograniczenia, kt\u00f3rych wynikiem jest \u201czamro\u017cenie\u201d zbioru klas w docelowej aplikacji przez ca\u0142y jej cykl \u017cycia, sprawiaj\u0105, \u017ce ju\u017c na poziomie kompilacji (w ramach procesu tak zwanej kompilacji AoT (Ahead-of-Time)&nbsp; mo\u017cna wywali\u0107 wszystko co niepotrzebne, zmniejszaj\u0105c w ten spos\u00f3b zar\u00f3wno rozmiar obrazu, jak i czas jego uruchamiania.<\/p>\n\n\n\n<p>Teraz, prawie dwa lata od oryginalnego Call-For-Discussion i zebrania feedbacku, tw\u00f3rcy bior\u0105 si\u0119 za prac\u0119 nad inicjatyw\u0105 w oparciu o wygenerowane przez spo\u0142eczno\u015b\u0107 przypadki u\u017cycia. Ju\u017c teraz jednak m\u00f3wi si\u0119, \u017ce jednym z implementator\u00f3w specyfikacji m\u00f3g\u0142by by\u0107 w\u0142a\u015bnie wspomniany ju\u017c w tej sekcji GraalVM.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ed91167.png\" alt=\"\"\/><figcaption>Po dw\u00f3ch latach Padnemii, Java te\u017c ma do zrzucenia pewnie wi\u0119cej ni\u017c w 2020<\/figcaption><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/openjdk.java.net\/projects\/leyden\/notes\/01-beginnings\">Project Leyden: Beginnings<\/a><\/li><\/ul>\n\n\n\n<h2 id=\"3-structured-concurrency-w-inkubacji\" data-num=3>3. Structured Concurrency w Inkubacji<\/h2>\n\n\n\n<p>A na sam koniec feature, kt\u00f3ry w\u0142a\u015bnie trafi\u0142 do inkubacji, a b\u0119d\u0105cy cz\u0119\u015bci\u0105 Looma i stanowi\u0105cy naturalne uzupe\u0142nienie Wirtualnych W\u0105tk\u00f3w\u2026 d\u0142ugo oczekiwana Strukturalna Wsp\u00f3\u0142bie\u017cno\u015b\u0107.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ee52ecc.gif\" alt=\"\"\/><\/figure><\/div>\n\n\n<p>Czym jest strukturalna wsp\u00f3\u0142bie\u017cno\u015b\u0107? Je\u015bli kto\u015b nie chce pr\u00f3bowa\u0107 dokopywa\u0107 si\u0119 do jakich\u015b zakurzonych papier\u00f3w z lat 60-tych (bo tam mo\u017cna znale\u017a\u0107 wszystko) jej korzeni nale\u017cy doszukiwa\u0107 si\u0119 po\u015bcie blogowym \u201c<a href=\"https:\/\/250bpm.com\/blog:71\/\">Structured Concurrency<\/a>\u201d z 2016 roku, napisanym przez Martina S\u00fastrika &#8211; tw\u00f3rcy ZeroMQ. To w\u0142a\u015bnie w nim zaprezentowa\u0142 on koncepcje enkapsulowania wsp\u00f3\u0142bie\u017cnych w\u0105tk\u00f3w wykonawczych za pomoc\u0105 blok\u00f3w kodu o jasnych miejscach startu i zako\u0144czenia, kt\u00f3re gwarantowa\u0142yby, \u017ce wszystkie w\u0105tki ko\u0144cz\u0105 prac\u0119 przed wyj\u015bciem z danego bloku. Tego typu podej\u015bcie w znacznym stopniu u\u0142atwia rozumowanie na temat kodu, a r\u00f3wnie\u017c obs\u0142ug\u0119 b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<p>Idea pewnie nigdy nie zdoby\u0142aby a\u017c takiej popularno\u015bci gdyby nie Roman Elizarov, architekt kotlinowych korutyn, kt\u00f3ry postanowi\u0142 wykorzysta\u0107 j\u0105 w praktyce przy projektowaniu mechanizmu. Efekty okaza\u0142y si\u0119 by\u0107 na tyle dobre, \u017ce w ca\u0142ym JVM-ie nast\u0105pi\u0142a spora zmiana w my\u015bleniu i &#8211; przyk\u0142adowo &#8211; oryginalna wersja projektu Loom posz\u0142a w zasadzie do kosza, a ostateczny wariant, o kt\u00f3rym pisali\u015bmy dwa tygodnie temu, to ju\u017c rozwi\u0105zanie w pe\u0142ni ze Strukturaln\u0105 Wsp\u00f3\u0142bie\u017cno\u015bci\u0105 kompatybilne.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ef1a154.png\" alt=\"\"\/><figcaption>BTW: Moim zdaniem to w\u0142a\u015bnie <a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\">talk Elizarova<\/a> jest najlepszym miejscem na szersze zrozumienie tematu strukturalnej wsp\u00f3\u0142bie\u017cno\u015bci.<\/figcaption><\/figure><\/div>\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\"><\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Je\u017celi to, o czym pisa\u0142em kojarzy Wam si\u0119 z wprowadzonym w Javie 1.7 try-with-resources to macie bardzo dobre skojarzenia. W\u0142a\u015bnie na tej znajomej programistom Javy konstrukcji projektanci Looma zdecydowali si\u0119 oprze\u0107 swoj\u0105 wersj\u0119 strukturalnej wsp\u00f3\u0142bie\u017cno\u015bci:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Response handle() throws ExecutionException, InterruptedException {\n    try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {\n        Future&lt;String&gt;  user  = scope.fork(() -&gt; findUser()); \n        Future&lt;Integer&gt; order = scope.fork(() -&gt; fetchOrder());\n\n        scope.join();          \/\/ Join both forks\n        scope.throwIfFailed(); \/\/ ... and propagate errors\n\n        \/\/ Here, both forks have succeeded, so compose their results\n        return new Response(user.resultNow(), order.resultNow());\n    }\n}<\/code><\/pre>\n\n\n\n<p>W powy\u017cszym przyk\u0142adzie blok try automatycznie \u201cposprz\u0105ta\u201d wszystkie stworzone w nim w\u0105tki w wypadku jakiegokolwiek problemu. Jasno sprecyzowany jest te\u017c cykl \u017cycia ca\u0142o\u015bci, wygodnie zbiera si\u0119 te\u017c rezultaty, poniewa\u017c ca\u0142o\u015b\u0107 zachowuje si\u0119 w zasadzie jak kod synchroniczny.&nbsp;<\/p>\n\n\n\n<p>W odr\u00f3\u017cnieniu od samych wirtualnych w\u0105tk\u00f3w, b\u0119d\u0105cych obecnie jako Preview, <a href=\"https:\/\/openjdk.java.net\/jeps\/428\">JEP 428: Structured Concurrency<\/a> znajduje si\u0119 w inkubacji i raczej nie trafi do JDK 19, a tym bardziej w wersji stabilnej do JDK 21, kolejnego LTSa. To co tw\u00f3rcy chc\u0105 teraz osi\u0105gn\u0105\u0107, to zdobycie opinii spo\u0142eczno\u015bci w celu doprecyzowania docelowe API.&nbsp;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889f16272a.gif\" alt=\"\"\/><figcaption>Ja na pewno si\u0119 pobawie. Mam nadzieje, \u017ce b\u0119dziecie mi towarzyszy\u0107 \ud83d\ude09<\/figcaption><\/figure><\/div>\n\n\n<h2 id=\"bonus-nowy-wyglad-intellij-idea\" data-num=4>Bonus: Nowy wygl\u0105d Intellij Idea<\/h2>\n\n\n\n<p>A na koniec drobnica z kategorii \u201cplotki i ploteczki\u201d.<\/p>\n\n\n\n<p>Na backlog Intellij Idea trafi\u0142 naprawd\u0119 spory redesign, wi\u0105\u017c\u0105cy si\u0119 z od\u015bwie\u017ceniem ca\u0142ego edytora<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889f2bcf7e.png\" alt=\"\" width=\"800\" height=\"293\"\/><\/figure><\/div>\n\n\n<p>Wiem, \u017ce to jest news pokroju \u201cnowy design facebooka\u201d, ale jako, \u017ce zmian jest sporo, postanowi\u0142em si\u0119 z Wami podzieli\u0107. Wi\u0119cej szczeg\u00f3\u0142\u00f3w i wygl\u0105d konkretnych komponent\u00f3w znajdziecie <a href=\"https:\/\/youtrack.jetbrains.com\/articles\/IDEA-A-156\/Main-changes-and-known-issues\">tutaj<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>No, dzisiejszy tydzie\u0144 mamy ju\u017c bardziej konkretne tematy &#8211; nowy Spring, nowy-stary projekt w ramach JDK, a tak\u017ce (naprawd\u0119) d\u0142ugo oczekiwany JEP w inkubacji. <\/p>\n","protected":false},"author":10,"featured_media":8112,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[259],"tags":[],"class_list":["post-9966","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-jvm-pl"],"acf":{"estimated_reading_time":"6","feature_image_blog":{"ID":8114,"id":8114,"title":"Lucas_van_Leyden_009","filename":"Lucas_van_Leyden_009.jpeg","filesize":198578,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009.jpeg","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/lucas_van_leyden_009-2\/","alt":"","author":"10","description":"","caption":"","name":"lucas_van_leyden_009-2","status":"inherit","uploaded_to":9966,"date":"2022-05-24 12:43:35","modified":"2022-05-24 12:43:35","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/vived.io\/wp-includes\/images\/media\/default.png","width":1255,"height":959,"sizes":{"thumbnail":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009-150x150.jpeg","thumbnail-width":150,"thumbnail-height":150,"medium":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009-300x229.jpeg","medium-width":300,"medium-height":229,"medium_large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009-768x587.jpeg","medium_large-width":768,"medium_large-height":587,"large":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009-1024x782.jpeg","large-width":1024,"large-height":782,"1536x1536":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009.jpeg","1536x1536-width":1255,"1536x1536-height":959,"2048x2048":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009.jpeg","2048x2048-width":1255,"2048x2048-height":959,"gform-image-choice-sm":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009.jpeg","gform-image-choice-sm-width":300,"gform-image-choice-sm-height":229,"gform-image-choice-md":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009.jpeg","gform-image-choice-md-width":400,"gform-image-choice-md-height":306,"gform-image-choice-lg":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/Lucas_van_Leyden_009.jpeg","gform-image-choice-lg-width":600,"gform-image-choice-lg-height":458}},"weekly_summary":true,"push_notification_image":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png","feature_image_visible":true},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>JVM Tuesday vol. 88 - Spring Boot, Leyden, Structured Concurrency - 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-89-spring-boot-leyden-structured-concurrency\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"JVM Tuesday vol. 88 - Spring Boot, Leyden, Structured Concurrency - Vived\" \/>\n<meta property=\"og:description\" content=\"No, dzisiejszy tydzie\u0144 mamy ju\u017c bardziej konkretne tematy - nowy Spring, nowy-stary projekt w ramach JDK, a tak\u017ce (naprawd\u0119) d\u0142ugo oczekiwany JEP w inkubacji.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2022-05-24T12:43:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:10:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Artur Skowro\u0144ski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"JVM Tuesday vol. 88 &#8211; Spring Boot, Leyden, Structured Concurrency\",\"datePublished\":\"2022-05-24T12:43:49+00:00\",\"dateModified\":\"2022-09-19T11:10:38+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/\"},\"wordCount\":1226,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/\",\"name\":\"JVM Tuesday vol. 88 - Spring Boot, Leyden, Structured Concurrency - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png\",\"datePublished\":\"2022-05-24T12:43:49+00:00\",\"dateModified\":\"2022-09-19T11:10:38+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png\",\"width\":1200,\"height\":628},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"JVM Tuesday vol. 88 &#8211; Spring Boot, Leyden, Structured Concurrency\"}]},{\"@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. 88 - Spring Boot, Leyden, Structured Concurrency - 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-89-spring-boot-leyden-structured-concurrency\/","og_locale":"pl_PL","og_type":"article","og_title":"JVM Tuesday vol. 88 - Spring Boot, Leyden, Structured Concurrency - Vived","og_description":"No, dzisiejszy tydzie\u0144 mamy ju\u017c bardziej konkretne tematy - nowy Spring, nowy-stary projekt w ramach JDK, a tak\u017ce (naprawd\u0119) d\u0142ugo oczekiwany JEP w inkubacji.","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/","og_site_name":"Vived","article_published_time":"2022-05-24T12:43:49+00:00","article_modified_time":"2022-09-19T11:10:38+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png","type":"image\/png"}],"author":"Artur Skowro\u0144ski","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"JVM Tuesday vol. 88 &#8211; Spring Boot, Leyden, Structured Concurrency","datePublished":"2022-05-24T12:43:49+00:00","dateModified":"2022-09-19T11:10:38+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/"},"wordCount":1226,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png","articleSection":["JVM"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/","name":"JVM Tuesday vol. 88 - Spring Boot, Leyden, Structured Concurrency - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png","datePublished":"2022-05-24T12:43:49+00:00","dateModified":"2022-09-19T11:10:38+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2022\/05\/JVM.png","width":1200,"height":628},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-89-spring-boot-leyden-structured-concurrency\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"JVM Tuesday vol. 88 &#8211; Spring Boot, Leyden, Structured Concurrency"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3","name":"Artur Skowro\u0144ski","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/29055786486c8b9dc1507f2744221c5bdb8d7ef6e6217ced0326dd3296aea6ed?s=96&d=mm&r=g","caption":"Artur Skowro\u0144ski"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. Spring Boot 2.7 wydany<\/h2>\n","innerContent":["\n<h2>1. Spring Boot 2.7 wydany<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Zgodnie ze <a href=\"https:\/\/calendar.spring.io\/\">springowym kalendarzem<\/a>, w zesz\u0142ym tygodniu mieli\u015bmy premier\u0119 nowego Spring Boota <a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-boot-2-7-0-available-now\">w wersji 2.7<\/a>, kt\u00f3remu towarzyszy\u0142o wydanie te\u017c nowych wersji kilku innych springowych projekt\u00f3w. Dlatego te\u017c dzisiejsze wydanie zaczniemy w\u0142a\u015bnie od przygl\u0105dania si\u0119, co nowego przynosi ostatnie przed Spring Boot 3.0 wydanie linii 2.x.<\/p>\n","innerContent":["\n<p>Zgodnie ze <a href=\"https:\/\/calendar.spring.io\/\">springowym kalendarzem<\/a>, w zesz\u0142ym tygodniu mieli\u015bmy premier\u0119 nowego Spring Boota <a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-boot-2-7-0-available-now\">w wersji 2.7<\/a>, kt\u00f3remu towarzyszy\u0142o wydanie te\u017c nowych wersji kilku innych springowych projekt\u00f3w. Dlatego te\u017c dzisiejsze wydanie zaczniemy w\u0142a\u015bnie od przygl\u0105dania si\u0119, co nowego przynosi ostatnie przed Spring Boot 3.0 wydanie linii 2.x.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W \u015brodku jest za\u015b i du\u017co, i niedu\u017co. Pewnie, takie rzeczy jak wsparcie zdobywaj\u0105cego coraz wi\u0119ksz\u0105 popularno\u015b\u0107 Cache2k czy \u0142atwiejsza rejestracja Jacksonowych Mixin\u00f3w to ca\u0142kiem interesuj\u0105ce dodatki, podobnie jak natywne wsparcie Podmana, alternatywy dla Dockera (tej lepszej alternatywy - w ko\u0144cu z \ud83e\uddad zamiast \ud83d\udc33&nbsp; w logu). Nie da si\u0119 jednak ukry\u0107, \u017ce wyra\u017anie jest to cisza przed burz\u0105 i wi\u0119ksze zmiany dostaniemy dopiero na jesieni, wraz z premier\u0105 \u201ctr\u00f3jeczki\u201d. Tego wra\u017cenia nie zmyje raczej ostatnia z du\u017cych nowo\u015bci w wersji 2.7, czyli AutoConfiguracja i metryki dla Spring for GraphQL.<\/p>\n","innerContent":["\n<p>W \u015brodku jest za\u015b i du\u017co, i niedu\u017co. Pewnie, takie rzeczy jak wsparcie zdobywaj\u0105cego coraz wi\u0119ksz\u0105 popularno\u015b\u0107 Cache2k czy \u0142atwiejsza rejestracja Jacksonowych Mixin\u00f3w to ca\u0142kiem interesuj\u0105ce dodatki, podobnie jak natywne wsparcie Podmana, alternatywy dla Dockera (tej lepszej alternatywy - w ko\u0144cu z \ud83e\uddad zamiast \ud83d\udc33&nbsp; w logu). Nie da si\u0119 jednak ukry\u0107, \u017ce wyra\u017anie jest to cisza przed burz\u0105 i wi\u0119ksze zmiany dostaniemy dopiero na jesieni, wraz z premier\u0105 \u201ctr\u00f3jeczki\u201d. Tego wra\u017cenia nie zmyje raczej ostatnia z du\u017cych nowo\u015bci w wersji 2.7, czyli AutoConfiguracja i metryki dla Spring for GraphQL.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":300,"height":710},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889e63fd54.png\" alt=\"\" width=\"300\" height=\"710\"\/><figcaption>I tak jest troch\u0119 lepiej ni\u017c ostatnio \ud83d\ude09<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889e63fd54.png\" alt=\"\" width=\"300\" height=\"710\"\/><figcaption>I tak jest troch\u0119 lepiej ni\u017c ostatnio \ud83d\ude09<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z tym ostatnim zwi\u0105zana jest te\u017c najwi\u0119ksza z towarzysz\u0105cych nowemu Spring Bootowi premier - <a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-for-graphql-1-0-release\">Spring for GraphQL w stabilnej wersji 1.0<\/a>. W tym dzieje si\u0119 znacznie wi\u0119cej ni\u017c w \u201cg\u0142\u00f3wnym\u201d wydaniu.&nbsp;<\/p>\n","innerContent":["\n<p>Z tym ostatnim zwi\u0105zana jest te\u017c najwi\u0119ksza z towarzysz\u0105cych nowemu Spring Bootowi premier - <a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-for-graphql-1-0-release\">Spring for GraphQL w stabilnej wersji 1.0<\/a>. W tym dzieje si\u0119 znacznie wi\u0119cej ni\u017c w \u201cg\u0142\u00f3wnym\u201d wydaniu.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li>Znaczenie rozszerzono ilo\u015b\u0107 dost\u0119pnych dla u\u017cytkownika anotacji&nbsp;<\/li><li>ulepszono walidacje parametr\u00f3w<\/li><li>wprowadzono wsparcie batchowych zapyta\u0144 i interceptor\u00f3w<\/li><li>obs\u0142uga QueryDSL&nbsp;<\/li><li>Klient HTTP, WebSocket\u00f3w i RSocket\u00f3w<\/li><\/ul>\n","innerContent":["\n<ul><li>Znaczenie rozszerzono ilo\u015b\u0107 dost\u0119pnych dla u\u017cytkownika anotacji&nbsp;<\/li><li>ulepszono walidacje parametr\u00f3w<\/li><li>wprowadzono wsparcie batchowych zapyta\u0144 i interceptor\u00f3w<\/li><li>obs\u0142uga QueryDSL&nbsp;<\/li><li>Klient HTTP, WebSocket\u00f3w i RSocket\u00f3w<\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>a to i tak nie wszystko. Spring for GraphQL 1.0 to wed\u0142ug mnie najciekawsza nowinka od czasu ukazania si\u0119 pierwszego preview Spring Native.&nbsp;<\/p>\n","innerContent":["\n<p>a to i tak nie wszystko. Spring for GraphQL 1.0 to wed\u0142ug mnie najciekawsza nowinka od czasu ukazania si\u0119 pierwszego preview Spring Native.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889e82a5cc.gif\" alt=\"\"\/><figcaption>Podobnie pewnie do niego niszowa, ale licz\u0119, \u017ce obie wschodz\u0105ce gwiazdy springowego \u015bwiata przebij\u0105 si\u0119 do masowej \u015bwiadomo\u015bci.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889e82a5cc.gif\" alt=\"\"\/><figcaption>Podobnie pewnie do niego niszowa, ale licz\u0119, \u017ce obie wschodz\u0105ce gwiazdy springowego \u015bwiata przebij\u0105 si\u0119 do masowej \u015bwiadomo\u015bci.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co poza tym towarzyszy nowemu Springowi?&nbsp;<\/p>\n","innerContent":["\n<p>Co poza tym towarzyszy nowemu Springowi?&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/github.com\/spring-projects\/spring-security\/releases\/tag\/5.7.1\">Spring Security w wersji 5.7<\/a> wprowadza kilka nowo\u015bci do obs\u0142ugi mechanizm\u00f3w OAuth i SAML, udost\u0119pnia te\u017c <em>RequestAttributeSecurityContextRepository <\/em>i <em>SecurityContextHolderFilter<\/em>, u\u0142atwiaj\u0105ce prace z <em>SecurityContext<\/em>. Wprowadzono te\u017c specjalny DSL do obs\u0142ugi nag\u0142\u00f3wk\u00f3w CORS<\/li><li><a href=\"https:\/\/spring.io\/blog\/2022\/05\/13\/spring-data-2021-2-and-2022-0-m4-released\">Spring Data w wersji 2021.2<\/a> przynosi jeszcze wi\u0119ksze mo\u017cliwo\u015bci zdefiniowania ClassLoadera, kt\u00f3rego chemy u\u017cywa\u0107, wsparcie dla konwerter\u00f3w warto\u015bci opartych o konkretne pola w klasie, nowe mo\u017cliwo\u015bci dla projekcji encji, a tak\u017ce wi\u0119ksze i mniejsze zmiany w zasadzie w ka\u017cdym z provider\u00f3w do konkretnych baz danych.<\/li><li><a href=\"https:\/\/spring.io\/projects\/spring-ldap\">Spring LDAP w wersji 2.4.0<\/a> doczeka\u0142 si\u0119 repakietyzacji, kt\u00f3ra u\u0142atwia stosowanie go wraz z systemem modu\u0142\u00f3w<\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/github.com\/spring-projects\/spring-security\/releases\/tag\/5.7.1\">Spring Security w wersji 5.7<\/a> wprowadza kilka nowo\u015bci do obs\u0142ugi mechanizm\u00f3w OAuth i SAML, udost\u0119pnia te\u017c <em>RequestAttributeSecurityContextRepository <\/em>i <em>SecurityContextHolderFilter<\/em>, u\u0142atwiaj\u0105ce prace z <em>SecurityContext<\/em>. Wprowadzono te\u017c specjalny DSL do obs\u0142ugi nag\u0142\u00f3wk\u00f3w CORS<\/li><li><a href=\"https:\/\/spring.io\/blog\/2022\/05\/13\/spring-data-2021-2-and-2022-0-m4-released\">Spring Data w wersji 2021.2<\/a> przynosi jeszcze wi\u0119ksze mo\u017cliwo\u015bci zdefiniowania ClassLoadera, kt\u00f3rego chemy u\u017cywa\u0107, wsparcie dla konwerter\u00f3w warto\u015bci opartych o konkretne pola w klasie, nowe mo\u017cliwo\u015bci dla projekcji encji, a tak\u017ce wi\u0119ksze i mniejsze zmiany w zasadzie w ka\u017cdym z provider\u00f3w do konkretnych baz danych.<\/li><li><a href=\"https:\/\/spring.io\/projects\/spring-ldap\">Spring LDAP w wersji 2.4.0<\/a> doczeka\u0142 si\u0119 repakietyzacji, kt\u00f3ra u\u0142atwia stosowanie go wraz z systemem modu\u0142\u00f3w<\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Drobiazgi w postaciu podbicia zale\u017cno\u015bci i korekcji b\u0142\u0119d\u00f3w otrzyma\u0142o te\u017c&nbsp;<a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-boot-2-7-0-available-now\">Spring Session, Spring Batch, Spring Hateoas<\/a>.<\/p>\n","innerContent":["\n<p>Drobiazgi w postaciu podbicia zale\u017cno\u015bci i korekcji b\u0142\u0119d\u00f3w otrzyma\u0142o te\u017c&nbsp;<a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-boot-2-7-0-available-now\">Spring Session, Spring Batch, Spring Hateoas<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889e96de7b.png\" alt=\"\"\/><figcaption>Opr\u00f3cz powy\u017cszych, pojawi\u0142o si\u0119 te\u017c kilka mileston\u00f3w przysz\u0142ych wyda\u0144, ale tymi zajmiemy si\u0119 pewnie bli\u017cej docelowych premier.&nbsp;<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889e96de7b.png\" alt=\"\"\/><figcaption>Opr\u00f3cz powy\u017cszych, pojawi\u0142o si\u0119 te\u017c kilka mileston\u00f3w przysz\u0142ych wyda\u0144, ale tymi zajmiemy si\u0119 pewnie bli\u017cej docelowych premier.&nbsp;<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-boot-2-7-0-available-now\">Spring Boot 2.7.0 available now<\/a><\/li><li><a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-for-graphql-1-0-release\">Spring for GraphQL 1.0 Release<\/a><\/li><li><a href=\"https:\/\/spring.io\/projects\/spring-ldap\">Spring LDAP 2.40<\/a><\/li><li><a href=\"https:\/\/github.com\/spring-projects\/spring-security\/releases\/tag\/5.7.1\">Spring Security 5.7.1<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-boot-2-7-0-available-now\">Spring Boot 2.7.0 available now<\/a><\/li><li><a href=\"https:\/\/spring.io\/blog\/2022\/05\/19\/spring-for-graphql-1-0-release\">Spring for GraphQL 1.0 Release<\/a><\/li><li><a href=\"https:\/\/spring.io\/projects\/spring-ldap\">Spring LDAP 2.40<\/a><\/li><li><a href=\"https:\/\/github.com\/spring-projects\/spring-security\/releases\/tag\/5.7.1\">Spring Security 5.7.1<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Zaproszenie do dyskusji nad Projektem Leyden<\/h2>\n","innerContent":["\n<h2>2. Zaproszenie do dyskusji nad Projektem Leyden<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ale si\u0119 wszyscy wzi\u0119li za wydajno\u015b\u0107 JVMa. Dopiero co w kwietniu du\u017cy update dosta\u0142 Project CRaC, tydzie\u0144 temu opisywali\u015bmy Project Liliput, a teraz na <a href=\"https:\/\/openjdk.java.net\/projects\/leyden\/notes\/01-beginnings\">warsztat wr\u00f3ci\u0142 Project Leyden<\/a>, o kt\u00f3rym nie s\u0142ysza\u0142em chyba od dobrego roku.<\/p>\n","innerContent":["\n<p>Ale si\u0119 wszyscy wzi\u0119li za wydajno\u015b\u0107 JVMa. Dopiero co w kwietniu du\u017cy update dosta\u0142 Project CRaC, tydzie\u0144 temu opisywali\u015bmy Project Liliput, a teraz na <a href=\"https:\/\/openjdk.java.net\/projects\/leyden\/notes\/01-beginnings\">warsztat wr\u00f3ci\u0142 Project Leyden<\/a>, o kt\u00f3rym nie s\u0142ysza\u0142em chyba od dobrego roku.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":600,"height":438},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ea29b5d.png\" alt=\"\" width=\"600\" height=\"438\"\/><figcaption>Vived bawi i uczy - Lucas von Leyden to niderlandzki malarz z XVI wieku<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ea29b5d.png\" alt=\"\" width=\"600\" height=\"438\"\/><figcaption>Vived bawi i uczy - Lucas von Leyden to niderlandzki malarz z XVI wieku<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Czym jest Leyden? Jako koncept m\u00f3wimy tutaj o inicjatywie do\u015b\u0107 zbli\u017conej do GraalVM i zawiera z ni\u0105 mas\u0119 punkt\u00f3w wsp\u00f3lnych. Ma za zadanie stworzenie specyfikacji Statycznych Obraz\u00f3w. Obraz statyczny jest samodzielnym programem, kt\u00f3ry nie mo\u017ce \u0142adowa\u0107 \u017cadnych zewn\u0119trznych byt\u00f3w na classpath, ani generowa\u0107 nowego bajtkodu w runtime. Jest to bardzo du\u017ce ograniczenie w stosunku do zwyk\u0142ych aplikacji javowych, co dostajemy wi\u0119c w zamian? Te dwa ograniczenia, kt\u00f3rych wynikiem jest \u201czamro\u017cenie\u201d zbioru klas w docelowej aplikacji przez ca\u0142y jej cykl \u017cycia, sprawiaj\u0105, \u017ce ju\u017c na poziomie kompilacji (w ramach procesu tak zwanej kompilacji AoT (Ahead-of-Time)&nbsp; mo\u017cna wywali\u0107 wszystko co niepotrzebne, zmniejszaj\u0105c w ten spos\u00f3b zar\u00f3wno rozmiar obrazu, jak i czas jego uruchamiania.<\/p>\n","innerContent":["\n<p>Czym jest Leyden? Jako koncept m\u00f3wimy tutaj o inicjatywie do\u015b\u0107 zbli\u017conej do GraalVM i zawiera z ni\u0105 mas\u0119 punkt\u00f3w wsp\u00f3lnych. Ma za zadanie stworzenie specyfikacji Statycznych Obraz\u00f3w. Obraz statyczny jest samodzielnym programem, kt\u00f3ry nie mo\u017ce \u0142adowa\u0107 \u017cadnych zewn\u0119trznych byt\u00f3w na classpath, ani generowa\u0107 nowego bajtkodu w runtime. Jest to bardzo du\u017ce ograniczenie w stosunku do zwyk\u0142ych aplikacji javowych, co dostajemy wi\u0119c w zamian? Te dwa ograniczenia, kt\u00f3rych wynikiem jest \u201czamro\u017cenie\u201d zbioru klas w docelowej aplikacji przez ca\u0142y jej cykl \u017cycia, sprawiaj\u0105, \u017ce ju\u017c na poziomie kompilacji (w ramach procesu tak zwanej kompilacji AoT (Ahead-of-Time)&nbsp; mo\u017cna wywali\u0107 wszystko co niepotrzebne, zmniejszaj\u0105c w ten spos\u00f3b zar\u00f3wno rozmiar obrazu, jak i czas jego uruchamiania.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Teraz, prawie dwa lata od oryginalnego Call-For-Discussion i zebrania feedbacku, tw\u00f3rcy bior\u0105 si\u0119 za prac\u0119 nad inicjatyw\u0105 w oparciu o wygenerowane przez spo\u0142eczno\u015b\u0107 przypadki u\u017cycia. Ju\u017c teraz jednak m\u00f3wi si\u0119, \u017ce jednym z implementator\u00f3w specyfikacji m\u00f3g\u0142by by\u0107 w\u0142a\u015bnie wspomniany ju\u017c w tej sekcji GraalVM.&nbsp;<\/p>\n","innerContent":["\n<p>Teraz, prawie dwa lata od oryginalnego Call-For-Discussion i zebrania feedbacku, tw\u00f3rcy bior\u0105 si\u0119 za prac\u0119 nad inicjatyw\u0105 w oparciu o wygenerowane przez spo\u0142eczno\u015b\u0107 przypadki u\u017cycia. Ju\u017c teraz jednak m\u00f3wi si\u0119, \u017ce jednym z implementator\u00f3w specyfikacji m\u00f3g\u0142by by\u0107 w\u0142a\u015bnie wspomniany ju\u017c w tej sekcji GraalVM.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ed91167.png\" alt=\"\"\/><figcaption>Po dw\u00f3ch latach Padnemii, Java te\u017c ma do zrzucenia pewnie wi\u0119cej ni\u017c w 2020<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ed91167.png\" alt=\"\"\/><figcaption>Po dw\u00f3ch latach Padnemii, Java te\u017c ma do zrzucenia pewnie wi\u0119cej ni\u017c w 2020<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[],"innerHTML":"\n<ul><li><a href=\"https:\/\/openjdk.java.net\/projects\/leyden\/notes\/01-beginnings\">Project Leyden: Beginnings<\/a><\/li><\/ul>\n","innerContent":["\n<ul><li><a href=\"https:\/\/openjdk.java.net\/projects\/leyden\/notes\/01-beginnings\">Project Leyden: Beginnings<\/a><\/li><\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Structured Concurrency w Inkubacji<\/h2>\n","innerContent":["\n<h2>3. Structured Concurrency w Inkubacji<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na sam koniec feature, kt\u00f3ry w\u0142a\u015bnie trafi\u0142 do inkubacji, a b\u0119d\u0105cy cz\u0119\u015bci\u0105 Looma i stanowi\u0105cy naturalne uzupe\u0142nienie Wirtualnych W\u0105tk\u00f3w\u2026 d\u0142ugo oczekiwana Strukturalna Wsp\u00f3\u0142bie\u017cno\u015b\u0107.<\/p>\n","innerContent":["\n<p>A na sam koniec feature, kt\u00f3ry w\u0142a\u015bnie trafi\u0142 do inkubacji, a b\u0119d\u0105cy cz\u0119\u015bci\u0105 Looma i stanowi\u0105cy naturalne uzupe\u0142nienie Wirtualnych W\u0105tk\u00f3w\u2026 d\u0142ugo oczekiwana Strukturalna Wsp\u00f3\u0142bie\u017cno\u015b\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ee52ecc.gif\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ee52ecc.gif\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Czym jest strukturalna wsp\u00f3\u0142bie\u017cno\u015b\u0107? Je\u015bli kto\u015b nie chce pr\u00f3bowa\u0107 dokopywa\u0107 si\u0119 do jakich\u015b zakurzonych papier\u00f3w z lat 60-tych (bo tam mo\u017cna znale\u017a\u0107 wszystko) jej korzeni nale\u017cy doszukiwa\u0107 si\u0119 po\u015bcie blogowym \u201c<a href=\"https:\/\/250bpm.com\/blog:71\/\">Structured Concurrency<\/a>\u201d z 2016 roku, napisanym przez Martina S\u00fastrika - tw\u00f3rcy ZeroMQ. To w\u0142a\u015bnie w nim zaprezentowa\u0142 on koncepcje enkapsulowania wsp\u00f3\u0142bie\u017cnych w\u0105tk\u00f3w wykonawczych za pomoc\u0105 blok\u00f3w kodu o jasnych miejscach startu i zako\u0144czenia, kt\u00f3re gwarantowa\u0142yby, \u017ce wszystkie w\u0105tki ko\u0144cz\u0105 prac\u0119 przed wyj\u015bciem z danego bloku. Tego typu podej\u015bcie w znacznym stopniu u\u0142atwia rozumowanie na temat kodu, a r\u00f3wnie\u017c obs\u0142ug\u0119 b\u0142\u0119d\u00f3w.<\/p>\n","innerContent":["\n<p>Czym jest strukturalna wsp\u00f3\u0142bie\u017cno\u015b\u0107? Je\u015bli kto\u015b nie chce pr\u00f3bowa\u0107 dokopywa\u0107 si\u0119 do jakich\u015b zakurzonych papier\u00f3w z lat 60-tych (bo tam mo\u017cna znale\u017a\u0107 wszystko) jej korzeni nale\u017cy doszukiwa\u0107 si\u0119 po\u015bcie blogowym \u201c<a href=\"https:\/\/250bpm.com\/blog:71\/\">Structured Concurrency<\/a>\u201d z 2016 roku, napisanym przez Martina S\u00fastrika - tw\u00f3rcy ZeroMQ. To w\u0142a\u015bnie w nim zaprezentowa\u0142 on koncepcje enkapsulowania wsp\u00f3\u0142bie\u017cnych w\u0105tk\u00f3w wykonawczych za pomoc\u0105 blok\u00f3w kodu o jasnych miejscach startu i zako\u0144czenia, kt\u00f3re gwarantowa\u0142yby, \u017ce wszystkie w\u0105tki ko\u0144cz\u0105 prac\u0119 przed wyj\u015bciem z danego bloku. Tego typu podej\u015bcie w znacznym stopniu u\u0142atwia rozumowanie na temat kodu, a r\u00f3wnie\u017c obs\u0142ug\u0119 b\u0142\u0119d\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Idea pewnie nigdy nie zdoby\u0142aby a\u017c takiej popularno\u015bci gdyby nie Roman Elizarov, architekt kotlinowych korutyn, kt\u00f3ry postanowi\u0142 wykorzysta\u0107 j\u0105 w praktyce przy projektowaniu mechanizmu. Efekty okaza\u0142y si\u0119 by\u0107 na tyle dobre, \u017ce w ca\u0142ym JVM-ie nast\u0105pi\u0142a spora zmiana w my\u015bleniu i - przyk\u0142adowo - oryginalna wersja projektu Loom posz\u0142a w zasadzie do kosza, a ostateczny wariant, o kt\u00f3rym pisali\u015bmy dwa tygodnie temu, to ju\u017c rozwi\u0105zanie w pe\u0142ni ze Strukturaln\u0105 Wsp\u00f3\u0142bie\u017cno\u015bci\u0105 kompatybilne.<\/p>\n","innerContent":["\n<p>Idea pewnie nigdy nie zdoby\u0142aby a\u017c takiej popularno\u015bci gdyby nie Roman Elizarov, architekt kotlinowych korutyn, kt\u00f3ry postanowi\u0142 wykorzysta\u0107 j\u0105 w praktyce przy projektowaniu mechanizmu. Efekty okaza\u0142y si\u0119 by\u0107 na tyle dobre, \u017ce w ca\u0142ym JVM-ie nast\u0105pi\u0142a spora zmiana w my\u015bleniu i - przyk\u0142adowo - oryginalna wersja projektu Loom posz\u0142a w zasadzie do kosza, a ostateczny wariant, o kt\u00f3rym pisali\u015bmy dwa tygodnie temu, to ju\u017c rozwi\u0105zanie w pe\u0142ni ze Strukturaln\u0105 Wsp\u00f3\u0142bie\u017cno\u015bci\u0105 kompatybilne.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ef1a154.png\" alt=\"\"\/><figcaption>BTW: Moim zdaniem to w\u0142a\u015bnie <a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\">talk Elizarova<\/a> jest najlepszym miejscem na szersze zrozumienie tematu strukturalnej wsp\u00f3\u0142bie\u017cno\u015bci.<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889ef1a154.png\" alt=\"\"\/><figcaption>BTW: Moim zdaniem to w\u0142a\u015bnie <a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\">talk Elizarova<\/a> jest najlepszym miejscem na szersze zrozumienie tematu strukturalnej wsp\u00f3\u0142bie\u017cno\u015bci.<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\"><\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=Mj5P47F6nJg\"><\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><\/p>\n","innerContent":["\n<p><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi to, o czym pisa\u0142em kojarzy Wam si\u0119 z wprowadzonym w Javie 1.7 try-with-resources to macie bardzo dobre skojarzenia. W\u0142a\u015bnie na tej znajomej programistom Javy konstrukcji projektanci Looma zdecydowali si\u0119 oprze\u0107 swoj\u0105 wersj\u0119 strukturalnej wsp\u00f3\u0142bie\u017cno\u015bci:<\/p>\n","innerContent":["\n<p>Je\u017celi to, o czym pisa\u0142em kojarzy Wam si\u0119 z wprowadzonym w Javie 1.7 try-with-resources to macie bardzo dobre skojarzenia. W\u0142a\u015bnie na tej znajomej programistom Javy konstrukcji projektanci Looma zdecydowali si\u0119 oprze\u0107 swoj\u0105 wersj\u0119 strukturalnej wsp\u00f3\u0142bie\u017cno\u015bci:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/code","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-code\"><code>Response handle() throws ExecutionException, InterruptedException {\n    try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {\n        Future&lt;String&gt;  user  = scope.fork(() -&gt; findUser()); \n        Future&lt;Integer&gt; order = scope.fork(() -&gt; fetchOrder());\n\n        scope.join();          \/\/ Join both forks\n        scope.throwIfFailed(); \/\/ ... and propagate errors\n\n        \/\/ Here, both forks have succeeded, so compose their results\n        return new Response(user.resultNow(), order.resultNow());\n    }\n}<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-code\"><code>Response handle() throws ExecutionException, InterruptedException {\n    try (var scope = new StructuredTaskScope.ShutdownOnFailure()) {\n        Future&lt;String&gt;  user  = scope.fork(() -&gt; findUser()); \n        Future&lt;Integer&gt; order = scope.fork(() -&gt; fetchOrder());\n\n        scope.join();          \/\/ Join both forks\n        scope.throwIfFailed(); \/\/ ... and propagate errors\n\n        \/\/ Here, both forks have succeeded, so compose their results\n        return new Response(user.resultNow(), order.resultNow());\n    }\n}<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W powy\u017cszym przyk\u0142adzie blok try automatycznie \u201cposprz\u0105ta\u201d wszystkie stworzone w nim w\u0105tki w wypadku jakiegokolwiek problemu. Jasno sprecyzowany jest te\u017c cykl \u017cycia ca\u0142o\u015bci, wygodnie zbiera si\u0119 te\u017c rezultaty, poniewa\u017c ca\u0142o\u015b\u0107 zachowuje si\u0119 w zasadzie jak kod synchroniczny.&nbsp;<\/p>\n","innerContent":["\n<p>W powy\u017cszym przyk\u0142adzie blok try automatycznie \u201cposprz\u0105ta\u201d wszystkie stworzone w nim w\u0105tki w wypadku jakiegokolwiek problemu. Jasno sprecyzowany jest te\u017c cykl \u017cycia ca\u0142o\u015bci, wygodnie zbiera si\u0119 te\u017c rezultaty, poniewa\u017c ca\u0142o\u015b\u0107 zachowuje si\u0119 w zasadzie jak kod synchroniczny.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W odr\u00f3\u017cnieniu od samych wirtualnych w\u0105tk\u00f3w, b\u0119d\u0105cych obecnie jako Preview, <a href=\"https:\/\/openjdk.java.net\/jeps\/428\">JEP 428: Structured Concurrency<\/a> znajduje si\u0119 w inkubacji i raczej nie trafi do JDK 19, a tym bardziej w wersji stabilnej do JDK 21, kolejnego LTSa. To co tw\u00f3rcy chc\u0105 teraz osi\u0105gn\u0105\u0107, to zdobycie opinii spo\u0142eczno\u015bci w celu doprecyzowania docelowe API.&nbsp;<\/p>\n","innerContent":["\n<p>W odr\u00f3\u017cnieniu od samych wirtualnych w\u0105tk\u00f3w, b\u0119d\u0105cych obecnie jako Preview, <a href=\"https:\/\/openjdk.java.net\/jeps\/428\">JEP 428: Structured Concurrency<\/a> znajduje si\u0119 w inkubacji i raczej nie trafi do JDK 19, a tym bardziej w wersji stabilnej do JDK 21, kolejnego LTSa. To co tw\u00f3rcy chc\u0105 teraz osi\u0105gn\u0105\u0107, to zdobycie opinii spo\u0142eczno\u015bci w celu doprecyzowania docelowe API.&nbsp;<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center"},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889f16272a.gif\" alt=\"\"\/><figcaption>Ja na pewno si\u0119 pobawie. Mam nadzieje, \u017ce b\u0119dziecie mi towarzyszy\u0107 \ud83d\ude09<\/figcaption><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889f16272a.gif\" alt=\"\"\/><figcaption>Ja na pewno si\u0119 pobawie. Mam nadzieje, \u017ce b\u0119dziecie mi towarzyszy\u0107 \ud83d\ude09<\/figcaption><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>Bonus: Nowy wygl\u0105d Intellij Idea<\/h2>\n","innerContent":["\n<h2>Bonus: Nowy wygl\u0105d Intellij Idea<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na koniec drobnica z kategorii \u201cplotki i ploteczki\u201d.<\/p>\n","innerContent":["\n<p>A na koniec drobnica z kategorii \u201cplotki i ploteczki\u201d.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na backlog Intellij Idea trafi\u0142 naprawd\u0119 spory redesign, wi\u0105\u017c\u0105cy si\u0119 z od\u015bwie\u017ceniem ca\u0142ego edytora<\/p>\n","innerContent":["\n<p>Na backlog Intellij Idea trafi\u0142 naprawd\u0119 spory redesign, wi\u0105\u017c\u0105cy si\u0119 z od\u015bwie\u017ceniem ca\u0142ego edytora<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","width":800,"height":293},"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889f2bcf7e.png\" alt=\"\" width=\"800\" height=\"293\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image aligncenter is-resized\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2022\/06\/img_62a889f2bcf7e.png\" alt=\"\" width=\"800\" height=\"293\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Wiem, \u017ce to jest news pokroju \u201cnowy design facebooka\u201d, ale jako, \u017ce zmian jest sporo, postanowi\u0142em si\u0119 z Wami podzieli\u0107. Wi\u0119cej szczeg\u00f3\u0142\u00f3w i wygl\u0105d konkretnych komponent\u00f3w znajdziecie <a href=\"https:\/\/youtrack.jetbrains.com\/articles\/IDEA-A-156\/Main-changes-and-known-issues\">tutaj<\/a>.<\/p>\n","innerContent":["\n<p>Wiem, \u017ce to jest news pokroju \u201cnowy design facebooka\u201d, ale jako, \u017ce zmian jest sporo, postanowi\u0142em si\u0119 z Wami podzieli\u0107. Wi\u0119cej szczeg\u00f3\u0142\u00f3w i wygl\u0105d konkretnych komponent\u00f3w znajdziecie <a href=\"https:\/\/youtrack.jetbrains.com\/articles\/IDEA-A-156\/Main-changes-and-known-issues\">tutaj<\/a>.<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9966","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=9966"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9966\/revisions"}],"predecessor-version":[{"id":10492,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/9966\/revisions\/10492"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/8112"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=9966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=9966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=9966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}