{"id":10171,"date":"2021-03-09T09:06:21","date_gmt":"2021-03-09T08:06:21","guid":{"rendered":"https:\/\/vived.io\/jvm-tuesday-vol-28\/"},"modified":"2023-01-17T14:48:49","modified_gmt":"2023-01-17T13:48:49","slug":"jvm-tuesday-vol-28","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/","title":{"rendered":"Reaktywna Java w 2021 &#8211; JVM Tuesday vol. 28"},"content":{"rendered":"\n<p>Cze\u015b\u0107 wszystkim, poprzedni tydzie\u0144 by\u0142 bardzo ma\u0142o \u201cnewsop\u0119dny\u201d. W zwi\u0105zku z tym postanowi\u0142em spe\u0142ni\u0107 swoje ma\u0142e marzenie i przygotowa\u0107 robocz\u0105 wersj\u0119 czego\u015b, co w przysz\u0142o\u015bci chcia\u0142bym zmieni\u0107 na <strong>State of Java Reactivity 2021 <\/strong>\u2013 przegl\u0105d tego, jak bardzo \u201creaktywne\u201d s\u0105 poszczeg\u00f3lne Javowe rozwi\u0105zania pod koniec pierwszego kwarta\u0142u roku 2021.<\/p>\n\n\n\n<p>Ca\u0142o\u015b\u0107 to bardziej \u201clisticle\u201d ni\u017c dog\u0142\u0119bna analiza \u2013 w sam raz do poczytania do kawki (albo do paru kawek \u2013 ca\u0142o\u015b\u0107 jest jednak do\u015b\u0107 d\u0142uga). Moim celem by\u0142o jak najszersze przedstawienie tematu, z du\u017c\u0105 ilo\u015bci\u0105 materia\u0142\u00f3w dodatkowych, kt\u00f3re ka\u017cdy b\u0119dzie m\u00f3g\u0142 przeczyta\u0107 w wypadku, gdy b\u0119dzie chcia\u0142 sobie poszerzy\u0107 wiedz\u0119 o poszczeg\u00f3lnych zagadnieniach.<\/p>\n\n\n\n<p>Co jest out-of-scope:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Korutyny oraz Project Loom. Tekst i tak wyszed\u0142 bardzo przekrojowy, do\u0142o\u017cenie tej dw\u00f3jki tylko skomplikowa\u0142oby i tak ju\u017c szeroki obraz ca\u0142o\u015bci.<\/li>\n\n\n\n<li>Inne j\u0119zyki ni\u017c Java. Postanowi\u0142em si\u0119 w tym przegl\u0105dzie ograniczy\u0107 wy\u0142\u0105cznie do Javy i jej ekosystemu. Wi\u0119kszo\u015b\u0107 z zaprezentowanych rozwi\u0105za\u0144 z powodzeniem u\u017cy\u0107 mo\u017cna w innych j\u0119zykach JVMowych \u2013 maj\u0105 tam swoje odpowiedniki.<\/li>\n<\/ul>\n\n\n\n<p>A, i zak\u0142adam, \u017ce wiecie, czym programowanie reaktywne jest, a fundacje <a href=\"http:\/\/reactivex.io\/\">ReactiveX<\/a> macie w swoich zak\u0142adkach \u2013 nie miejsce tu i czas, \u017ceby t\u0142umaczy\u0107, z czym ten ca\u0142y trend si\u0119 je. Je\u015bli potrzebujecie od\u015bwie\u017cy\u0107 sobie te zagadnienia, to moim ulubionym wprowadzeniem w temat jest chyba <a href=\"https:\/\/spring.io\/blog\/2016\/06\/07\/notes-on-reactive-programming-part-i-the-reactive-landscape\">\u201cNotes on Reactive Programming\u201d z blogu spring.io<\/a>.<\/p>\n\n\n\n<p>No to lecim<\/p>\n\n\n\n<h2 id=\"podstawy\" data-num=1>Podstawy<\/h2>\n\n\n\n<p>Pierwsz\u0105 rzecz\u0105, od kt\u00f3rej sprawdzenia zacz\u0105\u0142em, to zagl\u0105dni\u0119cie do korzeni tematu i sprawdzenie, na ile aktualna jest moja wiedza na temat <a href=\"https:\/\/www.reactivemanifesto.org\/\">Reactive Manifesto<\/a>. Okaza\u0142o si\u0119, \u017ce akurat ten trzyma si\u0119 w swojej drugiej, wydanej w 2014 roku wersji.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Oczywi\u015bcie, nie oznacza to, \u017ce <a href=\"https:\/\/www.reactive.foundation\/\">Reactive Foundation<\/a> spocz\u0119\u0142o na laurach \u2013 ko\u0144c\u00f3wk\u0105 zesz\u0142ego roku ukaza\u0142o si\u0119 niejako \u201crozszerzenie\u201d ca\u0142ego Manifestu \u2013 publikacja <a href=\"https:\/\/principles.reactive.foundation\/\">Reactive Principles<\/a>. Jest to arcyciekawy dokument, <a href=\"https:\/\/principles.reactive.foundation\/cloud-native\/index.html\">m.in. \u017ceni\u0105cy systemy reaktywn\u0119 z ich niejako dzisiejszym rozwini\u0119ciem &#8211; Cloud Native.<\/a> Rozszerza tak\u017ce oryginalne cztery cechy <a href=\"https:\/\/principles.reactive.foundation\/principles\/index.html\">o zestaw o\u015bmiu pryncypi\u00f3w<\/a>, kt\u00f3rych celem jest doprecyzowanie, jak takie systemy w praktyce pisa\u0107.<\/p>\n\n\n\n<p>Opr\u00f3cz pisania przewodnik\u00f3w i manifest\u00f3w, Reactive Foundation opiekuje si\u0119 te\u017c r\u00f3\u017cnorakimi projektami. O dw\u00f3ch z nich (RSocket i R2DB) wspomn\u0119 w dalszej cz\u0119\u015bci, na razie za\u015b sp\u00f3jrzmy, jak aktualnie prezentuje si\u0119 trzeci \u2013 Reactive Streams.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.reactive-streams.org\/\">Reactive Streams<\/a> to inicjatywa, kt\u00f3ra w okolicach premiery JDK 9 by\u0142a jednym z najbardziej gor\u0105cych temat\u00f3w spo\u0142eczno\u015bci. Jej cel by\u0142 szczytny \u2013 mia\u0142a ustandaryzowa\u0107 API projekt\u00f3w korzystaj\u0105cych z koncept\u00f3w reaktywnych, umo\u017cliwiaj\u0105c ich wzajemn\u0105 kompatybilno\u015b\u0107. Wed\u0142ug mnie sukces jest po\u0142owiczny. O ile rzeczywi\u015bcie opublikowane przez Reactive Streams interfejsy sta\u0142y si\u0119 z\u0142otym standardem implementowanym przez wszystkie biblioteki, o tyle ju\u017c kompatybilno\u015bci mo\u017cna mie\u0107 troch\u0119 do zarzucenia \u2013 do zapewnienia kompatybilno\u015bci RxJavy i Reactora <a href=\"https:\/\/projectreactor.io\/docs\/adapter\/release\/api\/reactor\/adapter\/rxjava\/RxJava2Adapter.html\">niezb\u0119dny jest dodatkowy adapter<\/a>.<\/p>\n\n\n\n<p>Najnowsza wersja standardu to edycja <a href=\"https:\/\/github.com\/reactive-streams\/reactive-streams-jvm\">1.0.3<\/a>, wydana pod koniec roku 2019. W stosunku do poprzedniczek zawiera jedynie poprawki b\u0142\u0119d\u00f3w.<\/p>\n\n\n\n<p>No, to maj\u0105c za sob\u0105 podstawy podstaw, pora przej\u015b\u0107 do \u201cmi\u0119ska\u201d. Nasz nast\u0119pny przystanek to biblioteki.<\/p>\n\n\n\n<h2 id=\"biblioteki\" data-num=2>Biblioteki<\/h2>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd052392.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"rxjava\"><a href=\"https:\/\/github.com\/ReactiveX\/RxJava\">RxJava<\/a><\/h3>\n\n\n\n<p>To w\u0142a\u015bnie RxJava od Netfliksa przetar\u0142a szlaki innym projektom zwi\u0105zanym z reaktywnym programowaniem. Jej oryginalna wersja powsta\u0142a jeszcze w czasach, gdy nikt nawet nie planowa\u0142 Reaktywnych Strumieni, i dopiero wydanie 2.0 wprowadzi\u0142o zgodno\u015b\u0107 z tym standardem. Sprawi\u0142o to, \u017ce migracja mi\u0119dzy wersja 1.0 i 2.0 by\u0142a straszliwie czasoch\u0142onna i kosztowa\u0142a mas\u0119 pracy (been there, done that, still hurts ).<\/p>\n\n\n\n<p>Aktualna wersja biblioteki to 3.0.11, kt\u00f3ra ukaza\u0142a si\u0119 w zesz\u0142y pi\u0105tek (i by\u0142a de facto jednym z motywator\u00f3w dzisiejszego wydania naszego newslettera), reprezentuj\u0105c ju\u017c trzeciego \u201cmajora\u201d biblioteki. Jest to wydanie niezwykle istotne, poniewa\u017c wraz z nim sw\u00f3j \u017cywot zako\u0144czy\u0142a ga\u0142\u0105\u017a 2.x, przez co rekomendowane jest podbicie si\u0119 do nowego wydania. Mimo <a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0\">bardzo d\u0142ugiej listy zmian<\/a> mi\u0119dzy 2.x a 3.x, migracja jest tym razem du\u017co przyjemniejsza. G\u0142\u00f3wna zmiana jak\u0105 przynosi 3.x to podbicie minimalnej wersji Javy do 8, przez co tw\u00f3rcy mogli zapewni\u0107 kompatybilno\u015b\u0107 np. ze Stream API czy javowymi Optionalami.<\/p>\n\n\n\n<p>Je\u017celi chcecie by\u0107 bardzo na bie\u017c\u0105co z rozwojem projektu, mo\u017cecie przy\u0142\u0105czy\u0107 si\u0119 do oficjalnej <a href=\"https:\/\/groups.google.com\/g\/rxjava\">grupy mailingowej<\/a>, aczkolwiek nie jest ona zbyt \u017cywa.<\/p>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/RxJava\">Oficjalne konto Twitterowe<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd0cb37a.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"reactor\"><a href=\"https:\/\/github.com\/reactor\">Reactor<\/a><\/h3>\n\n\n\n<p>Je\u017celi chodzi o pretendent\u00f3w do \u201ctronu\u201d, to g\u0142\u00f3wnym konkurentem dla rozwi\u0105zania Netfliksa jest Reactor. Rozwijana przez Pivotala biblioteka, kt\u00f3rej niew\u0105tpliw\u0105 zalet\u0105 jest to, \u017ce stanowi reaktywny trzon Springa, od lat stanowi\u0105cego \u201cdomy\u015blne\u201d rozwi\u0105zanie, je\u015bli chodzi o pisanie aplikacji webowych w Javie.<br>Ze wzgl\u0119du na t\u0105 swoist\u0105 symbioz\u0119, Reactor obr\u00f3s\u0142 w mas\u0119 connector\u00f3w do wszelkich popularnych technologii. Posiada gotowe wsparcie min. <a href=\"https:\/\/github.com\/reactor\/reactor-netty\">Netty\u2019ego<\/a>, <a href=\"https:\/\/github.com\/reactor\/reactor-kafka\">Kafki<\/a> czy <a href=\"https:\/\/github.com\/reactor\/reactor-rabbitmq\">RabbitMQ<\/a>. Projekty te s\u0105 r\u00f3wnie\u017c bardzo dynamicznie rozwijane \u2013 np. ostatni commit do <a href=\"https:\/\/github.com\/reactor\/reactor-kafka\">reactor-kafka<\/a> zosta\u0142 zmergowany w pi\u0105tek.<\/p>\n\n\n\n<p>Z informacji praktycznych \u2013 model dzia\u0142ania Reactora jest nieco prostszy ni\u017c ten RxJavy. Efektem tego jest jego mniejsza elastyczno\u015b\u0107, ale z drugiej strony pr\u00f3g wej\u015bcia jest znacz\u0105co mniejszy.<\/p>\n\n\n\n<p>Je\u017celi potrzebujesz zdecydowa\u0107 mi\u0119dzy u\u017cyciem RxJavy, a Reactorem, pomocny mo\u017ce by\u0107 artyku\u0142 <a href=\"https:\/\/www.nurkiewicz.com\/2019\/02\/rxjava-vs-reactor.html\">Tomka Nurkiewicza<\/a>. Co prawda pochodzi z 2019 roku, w zwi\u0105zku z czym niekt\u00f3re z jego tez ju\u017c si\u0119 zestarza\u0142y (jak wspomnia\u0142em w kontek\u015bcie RxJavy, ta te\u017c porzuci\u0142a ju\u017c wsparcie dla Javy 6, co nie stanowi ju\u017c dzi\u015b problemu nawet przy programowaniu na Andr<br>oida). Sam tekst pozostaje jednak jedn\u0105 z lepszych analiz por\u00f3wnawczych w internecie. <a href=\"https:\/\/twitter.com\/tnurkiewicz\">@tnurkiewicz<\/a> \u2013 mo\u017ce czas na aktualizacje?<\/p>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/ProjectReactor\">Oficjalne konto Twitterowe<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd124721.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"rsocket-io\"><a href=\"https:\/\/rsocket.io\/\">RSocket.io<\/a><\/h3>\n\n\n\n<p>No i dochodzimy do pierwszego z dw\u00f3ch obiecanych projekt\u00f3w wspieranych przez Reactive Foundation. W odr\u00f3\u017cnieniu od poprzednik\u00f3w, mimo i\u017c RSockets r\u00f3wnie\u017c implementuje standard Reactive Streams, nie jest to \u201cgeneryczna\u201d biblioteka do obs\u0142ugi reaktywno\u015bci w aplikacji, a gotowa implementacja protoko\u0142u binarnego, b\u0119d\u0105cego alternatyw\u0105 dla HTTP czy gRPC. RSockets zreszt\u0105 w \u201cbebechach\u201d u\u017cywa Reactora (co jeszcze bardziej pokazuje elastyczno\u015b\u0107 rozwi\u0105zania Pivotala). RSocket posiada bardzo dobrze napisan\u0105 dokumentacje \u2013 szczeg\u00f3lnie ciekawe s\u0105 fragmenty, <a href=\"https:\/\/rsocket.io\/docs\/motivations\/\">gdzie jego tw\u00f3rcy wy\u0142uszczaj\u0105 powody jego stworzenia<\/a> (bardzo polecam).<\/p>\n\n\n\n<p>Je\u017celi chcecie dowiedzie\u0107 si\u0119 jak RSocket prezentuje si\u0119 w kontra\u015bcie do g\u0142\u00f3wnego konkurenta, gRPC, bardzo polecam <a href=\"https:\/\/medium.com\/netifi\/differences-between-grpc-and-rsocket-e736c954e60\">ten<\/a> artyku\u0142. RSocket jest te\u017c jednym z ulubionych temat\u00f3w Josha Longa (Developer Advocate Springa), i to te\u017c <a href=\"https:\/\/spring.io\/blog\/2021\/01\/18\/ymnnalft-easy-rpc-with-rsocket\">jego teksty<\/a> mog\u0119 najbardziej poleci\u0107 jako wprowadzenie do tematu. RSocket posiada zreszt\u0105 oficjalny initializer do Springa (spring-boot-starter-rsocket), co sprawia \u017ce integracja tych dw\u00f3ch projekt\u00f3w ze sob\u0105 jest trywialna.<\/p>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/RSocketIO\">Oficjalne konto Twitterowe<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd171ec6.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"jakarta-ee-api-jax-rs-mutiny\">Jakarta EE API &#8211; JAX-RS &amp; Mutiny<\/h3>\n\n\n\n<p>A na koniec sekcji bibliotek zostawi\u0142em sobie moje Guilty Pleasure \u2013 Jakarte EE. Ot\u00f3\u017c jedna z jej g\u0142\u00f3wnych specyfikacji, JAX-RS r\u00f3wnie\u017c wraz z <a href=\"https:\/\/docs.jboss.org\/resteasy\/docs\/3.6.2.Final\/userguide\/html\/Reactive.html\">wersj\u0105 2.1<\/a> (czyli ju\u017c w 2017 roku), doczeka\u0142a si\u0119 wsparcia dla Reactive Streams. Najpopularniejsz\u0105 (i po prawdzie jedn\u0105 z niewielu) implementacji standardu jest RESTEasy, kt\u00f3ry to w internalach opiera si\u0119 na RxJavie.<\/p>\n\n\n\n<p>JAX-RS podobne jest w swoim dzia\u0142aniu do WebFluxa (kt\u00f3rym to zajmiemy si\u0119 za moment), ukrywaj\u0105c tak naprawd\u0119 ca\u0142\u0105 reaktywno\u015b\u0107 poprzez swoje deklaratywne API, przez co na pierwszy rzut oka trudno jest zauwa\u017cy\u0107, \u017ce korzysta si\u0119 z tego paradygmatu. Na pewno jest to bardzo ciekawa opcja dla os\u00f3b pisz\u0105cych w nowoczesnej Javie\/Jakarcie EE \u2013 minimalna edycja standardu to wersja 8.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd21b3ef.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Dodatkowo, ma\u0142o kto wie o istnieniu <a href=\"https:\/\/smallrye.io\/smallrye-mutiny\/\">Smallrye Mutiny<\/a>. Jest to \u015bwie\u017cutki, zapocz\u0105tkowany pod koniec 2019 roku projekt, kt\u00f3rego celem jest stworzenie wolnej, ustandaryzowanej implementacji Reactive Streams na potrzeby Jakarty EE, niezale\u017cnej od Netfliksa czy Pivotala. Mimo m\u0142odego wieku, projekt ten osi\u0105ga pewne sukcesy, stanowi\u0105c aktualnie budulec zar\u00f3wno Vert.x, jak i Quarkusa.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd27f7bd.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"akka-streams\">Akka-Streams<\/h3>\n\n\n\n<p>Na koniec ma\u0142a niespodzianka. Podejrzewam, \u017ce wi\u0119kszo\u015bci z Was Akka-Streams kojarzy si\u0119 ze Scal\u0105. Jest to opinia, kt\u00f3r\u0105 Lightbend (tw\u00f3rcy Akki), bardzo staraj\u0105 si\u0119 zmieni\u0107. Podobnie zreszt\u0105 jak to, \u017ce w 2021 ma\u0142o kto jeszcze kojarzy model aktorowy z programowaniem reaktywnym, mimo \u017ce idealnie wpisuje si\u0119 on w oryginalne Reactive Manifesto. Faktem pozostaje jednak \u017ce Akka-Streams, kt\u00f3ra wraz z RxJav\u0105 trendowi reaktywnemu przodowa\u0142a w jego pocz\u0105tkowych latach, nigdy mocno nie przebi\u0142a si\u0119 do \u015bwiadomo\u015bci. Przynajmniej firm, kt\u00f3re ju\u017c wcze\u015bniej nie by\u0142y zaanga\u017cowane w kr\u00f3low\u0105 JVMowego programowania funkcyjnego &#8211; mimo faktu, \u017ce od bardzo dawna <a href=\"https:\/\/doc.akka.io\/docs\/akka\/current\/typed\/guide\/introduction.html?language=java&amp;_ga=2.257194569.351556834.1615272173-1021721573.1615272173\">Akka posiada swoje Javowe API<\/a>.<\/p>\n\n\n\n<p>Przyznam, \u017ce zrobi\u0142em ma\u0142y przegl\u0105d i bardzo trudno znale\u017a\u0107 w internecie jakie\u015b du\u017ce przypadki u\u017cycia tego projektu poza partnerami Lightbend. Ze wzgl\u0119du na to ci\u0119\u017cko te\u017c z odpowiedni\u0105 doz\u0105 uczciwo\u015bci por\u00f3wna\u0107 go z innymi dost\u0119pnymi na rynku rozwi\u0105zaniami. Zdecydowanie nie mog\u0119 nazwa\u0107 uczciwym <a href=\"http:\/\/akarnokd.blogspot.com\/2015\/10\/comparison-of-reactive-streams.html\">por\u00f3wnania z 2015 roku, kt\u00f3re od tamtej pory kr\u0105\u017cy po sieci i robi rozwi\u0105zaniu bardzo z\u0142\u0105 opinie.<\/a><\/p>\n\n\n\n<p>Je\u017celi mia\u0142bym wskaza\u0107 jak\u0105\u015b du\u017c\u0105 zalet\u0119 Akki, jest ni\u0105 z pewno\u015bci\u0105 <a href=\"https:\/\/github.com\/akkadotnet\/Alpakka\">Alpakka<\/a> &#8211; zbi\u00f3r wszelkiej ma\u015bci connector\u00f3w do takich zewn\u0119trznych system\u00f3w jak Kafka, Azure Queues, czy RabbitMQ. Pod tym wzgl\u0119dem, rozwi\u0105zanie Lightbendu zbli\u017cone jest nieco do tego, co oferuje Springowy Reactor.<\/p>\n\n\n\n<p>Cykl \u017cycia Akki-Stream zwi\u0105zany jest bardzo z oryginaln\u0105 Akk\u0105 i nowe edycje wersji opartej na reaktywnych strumieniach dostajemy w komplecie z \u201cg\u0142\u00f3wnym\u201d wydaniem. Najnowsza \u201cdu\u017ca\u201d wersja, <a href=\"https:\/\/akka.io\/blog\/news\/2019\/12\/12\/akka-26-intro\">Akka 2.6<\/a>, opublikowana zosta\u0142a w grudniu 2019 i przynios\u0142a du\u017cy refactor API, mi\u0119dzy innymi tego g\u0142\u00f3wnego, aktorowego.<\/p>\n\n\n\n<h2 id=\"frameworki\" data-num=3>Frameworki<\/h2>\n\n\n\n<p>Teraz, maj\u0105c najciekawsze biblioteki za sob\u0105, czas wej\u015b\u0107 poziom wy\u017cej i przej\u015b\u0107 do framework\u00f3w.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd2d89f1.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"vert-x\">Vert.x<\/h3>\n\n\n\n<p>Pozwol\u0119 sobie zacz\u0105\u0107 od frameworku bardzo bliskiego memu sercu, bo to w\u0142a\u015bnie jego trzecie wydanie nauczy\u0142o mnie najwi\u0119cej w temacie programowania reaktywnego. Vert.x wybi\u0142 si\u0119 na popularno\u015bci Node.js w czasach, gdy wszystkim wydawa\u0142o si\u0119, \u017ce Event-Loop b\u0119dzie \u201cz\u0142otym standardem\u201d, je\u015bli chodzi o programowanie asynchroniczne. Jego gwiazda od tamtych czas\u00f3w nieco ju\u017c przygas\u0142a. Mimo wszystko, ze wzgl\u0119du na bardzo \u201cniskopoziomowy\u201d spos\u00f3b pisania, dalej pozostaje on bardzo ciekawym rozwi\u0105zaniem dla tych, kt\u00f3rzy wymagaj\u0105 od swoich aplikacji maksymalnego poziomu wydajno\u015bci. Rozwi\u0105zanie oparte jest na nieblokuj\u0105cym serwerze Netty, a dzi\u0119ki swojemu unikalnemu systemowi \u201cwierzcho\u0142k\u00f3w\u201d cechuje si\u0119 pot\u0119\u017cn\u0105 elastyczno\u015bci\u0105.<\/p>\n\n\n\n<p>W grudniu zesz\u0142ego roku ukaza\u0142a si\u0119 <a href=\"https:\/\/vertx.io\/blog\/whats-new-in-vert-x-4\/\">czwarta edycja<\/a> tego frameworku. Je\u015bli chodzi o zmiany w kontek\u015bcie reaktywno\u015bci jako takiej, przynosi on klient\u00f3w zar\u00f3wno do <a href=\"https:\/\/vertx.io\/docs\/vertx-redis-client\/java\/\">Redisa<\/a>, jak i <a href=\"https:\/\/github.com\/eclipse-vertx\/vertx-sql-client\">baz SQLowych<\/a> (np. Postgresowa implementacja opiera si\u0119 na publikowanym przez t\u0105 baz\u0119 interfejsie NOTIFY\/LISTEN).<\/p>\n\n\n\n<p>Reaktywne rozwi\u0105zania Vert.x opieraj\u0105 si\u0119 na RxJavie. Co<br>ciekawe, mimo tego, \u017ce jak wcze\u015bniej pisa\u0142em, wersja 2.x nie jest ju\u017c oficjalnie wspierana, ci\u0105gle to w\u0142a\u015bnie ona stanowi budulec dla rozwi\u0105za\u0144 w ramach Vert.x. Je\u017celi RxJava nie zostanie dostarczona, Vert.x u\u017cywa\u0142 b\u0119dzie wspomnianej biblioteki Mutiny.<\/p>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/vertx_project\">Oficjalne konto Twitterowe<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd336a95.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"spring-framework-boot\"><a href=\"https:\/\/spring.io\/\">Spring Framework \/ Boot<\/a><\/h3>\n\n\n\n<p>Z rozwi\u0105zania bardzo niszowego pora przej\u015b\u0107 na takie, kt\u00f3re kojarzy\u0107 b\u0119dzie zapewne ka\u017cdy programista Javy. Spring od lat kr\u00f3luje w\u015br\u00f3d Javowych framework\u00f3w i cho\u0107 powoli zaczyna mu si\u0119 rodzi\u0107 realna konkurencja, to jednak nic nie sugeruje tego, aby ktokolwiek mia\u0142 zdetronizowa\u0107 go w najbli\u017cszym czasie z pierwszego miejsca.<\/p>\n\n\n\n<p>Du\u017ca w tym zas\u0142uga tego, \u017ce cho\u0107 by\u0142 kr\u00f3tki okres, gdy Spring z\u0142apa\u0142 nieco zadyszki, to jednak wraz z mikroserwisow\u0105 rewolucj\u0105, trafi\u0142 on w dziesi\u0105tk\u0119 ze swoj\u0105 wersj\u0105 Spring Boot. To w\u0142a\u015bnie jego WebFlux wprowadzi\u0142 te\u017c reaktywno\u015b\u0107 \u201cpod strzechy\u201d. &nbsp;Pivotal w por\u0119 zauwa\u017cy\u0142 popularno\u015b\u0107 tego paradygmatu i uczyni\u0142 z niego \u201cfirst-citizena\u201d. Spring posiada te\u017c wsparcie dla reaktywnego po\u0142\u0105czenia z baz\u0105 danych za pomoc\u0105 projektu r2dbc, o kt\u00f3rym wspomn\u0119 pod koniec artyku\u0142u.<\/p>\n\n\n\n<p>Aktualnie wszyscy czekamy na wydanie Spring Boota w wersji 2.5 (prywatnie ju\u017c przebieram n\u00f3\u017ckami) \u2013 obecnie pojawi\u0142 si\u0119 jego <a href=\"https:\/\/spring.io\/blog\/2021\/01\/21\/spring-boot-2-5-0-m1-available-now\">pierwszy Milestone<\/a>. Aczkolwiek, jako \u017ce nie przynosi ono \u017cadnych wi\u0119kszych zmian w kontek\u015bcie reaktywno\u015bci, pozostaje de-facto poza zakresem tematycznym tego artyku\u0142u.<\/p>\n\n\n\n<p>A, i nie musz\u0119 chyba dodawa\u0107, \u017ce ca\u0142o\u015b\u0107 \u201czasilana\u201d jest Reactorem, prawda ?<\/p>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/vertx_project\">Oficjalne konto Twitterowe<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd3b6106.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"micronaut\"><a href=\"https:\/\/micronaut.io\/\">Micronaut<\/a><\/h3>\n\n\n\n<p>Kiedy wspomina\u0142em o tym, \u017ce Spring posiada godnych rywali, w g\u0142owie ko\u0142ata\u0142 mi w\u0142a\u015bnie m.in. Micronaut. Rozwi\u0105zanie od tw\u00f3rc\u00f3w \u015bwi\u0119tej pami\u0119ci Grails\u00f3w, stara si\u0119 gra\u0107 kart\u0105 bardzo podobnej, aczkolwiek \u201cl\u017cejszej\u201d alternatywy dla Springa. Jako jeden z pierwszych framework\u00f3w zwietrzy\u0142 on te\u017c okazj\u0119, jak\u0105 z pewno\u015bci\u0105 jest GraalVM. W ten spos\u00f3b umo\u015bci\u0142 si\u0119 na pozycji \u201ctego drugiego\u201d, mimo \u017ce czuje raczej za plecami oddech Quarkusa.<\/p>\n\n\n\n<p>Je\u017celi chodzi o swoje podej\u015bcie do reaktywno\u015bci, Micronaut jest niezwykle pojemny, a r\u00f3wnocze\u015bnie ma\u0142o wybredny \u2013 mo\u017cna go bowiem u\u017cywa\u0107 zar\u00f3wno z RxJav\u0105, jak i Reactorem. W kwestii po\u0142\u0105czenia do baz danych, u\u017cywa on wspomnianych ju\u017c klient\u00f3w napisanych na potrzeby Vert.x\u2019a.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd43b385.png\" alt=\"\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"quarkus\"><a href=\"https:\/\/quarkus.io\/guides\/getting-started-reactive\">Quarkus<\/a><\/h3>\n\n\n\n<p>Quarkus, kolejny z pretendent\u00f3w podgryzaj\u0105cych Springa, jest reprezentantem ci\u0105gle do\u015b\u0107 raczkuj\u0105cego nurtu nowoczesnych framework\u00f3w Jakarty EE. W tym gronie to w\u0142a\u015bnie on zdoby\u0142 najwi\u0119ksz\u0105 mi\u0142o\u015b\u0107 spo\u0142eczno\u015bci, a jego kolejne wydania obserwowane s\u0105 z du\u017cym zainteresowaniem. Rozwi\u0105zanie pozycjonuje si\u0119 jako bardzo GraalVMowe i bardzo Cloud Native.<\/p>\n\n\n\n<p>Chc\u0105c uchodzi\u0107 za nowoczesny JVMowy framework Javowy, bardzo ci\u0119\u017cko jest przej\u015b\u0107 oboj\u0119tnie obok ca\u0142ego reaktywnego trendu. Trzeba jednak przyzna\u0107, \u017ce Quarkus za\u0142apa\u0142 si\u0119 na ten poci\u0105g stosunkowo p\u00f3\u017ano. Dopiero w grudniu 2020 \u015bwiat obesz\u0142a wiadomo\u015b\u0107, \u017ce framework od Red Hata (ciekawym jest to, \u017ce swego czasu <a href=\"https:\/\/www.infoworld.com\/article\/2613356\/who-controls-vert-x--red-hat--vmware--or-neither-.html\">Red Hat zaanga\u017cowany by\u0142 te\u017c w rozw\u00f3j Vert.xa<\/a>) dostanie pe\u0142ne wsparcie dla wspomnianego ju\u017c <a href=\"https:\/\/quarkus.io\/blog\/resteasy-reactive\/\">JAX-RS 2.1, a co za tym idzie r\u00f3wnie\u017c reaktywnych kontroler\u00f3w<\/a>. Jest to jedyne z opisywanych przeze mnie dzisiaj rozwi\u0105za\u0144 implementuj\u0105cych ten standard. Dodatkowo, wszelkie inne reaktywne fragmenty <a href=\"https:\/\/quarkus.io\/guides\/getting-started-reactive\">Quarkusa u\u017cywaj\u0105 Mutiny<\/a> \u2013 jestem bardzo ciekaw, w jakim kierunku p\u00f3jdzie ta biblioteka, na pewno b\u0119d\u0119 obserwowa\u0107 jej rozw\u00f3j.<\/p>\n\n\n\n<p><a href=\"https:\/\/twitter.com\/QuarkusIO\">Oficjalne konto Twitterowe<\/a><\/p>\n\n\n\n<h2 id=\"bazy-danych\" data-num=4>Bazy Danych<\/h2>\n\n\n\n<p>Na koniec zostawi\u0142em sobie bazy danych. Przez d\u0142ugi czas, to w\u0142a\u015bnie one by\u0142y pi\u0119t\u0105 achillesow\u0105 wszelkich reaktywnych system\u00f3w pisanych w Javie. Spo\u0142eczno\u015b\u0107 d\u0142ugie lata czeka\u0142a, a\u017c Oracle w ko\u0144cu udost\u0119pni reaktywn\u0105 wersje JDBC, zwan\u0105 ADBA (Asynchronous Database Access). Projekt przeci\u0105ga\u0142 si\u0119, by ostatecznie pod koniec roku 2019 zosta\u0107 <a href=\"https:\/\/mail.openjdk.java.net\/pipermail\/jdbc-spec-discuss\/2019-September\/000529.html\">zupe\u0142nie wygaszony<\/a>. Bardzo interesuj\u0105ce s\u0105 powody \u2013 ot\u00f3\u017c Oracle stwierdzi\u0142o, \u017ce przysz\u0142o\u015b\u0107 Javy tkwi nie w asynchronicznym kodzie, a <a href=\"https:\/\/openjdk.java.net\/projects\/loom\/\">Projekcie Loom<\/a>, kt\u00f3ry ma przynie\u015b\u0107 do Javy zupe\u0142nie nowe API w\u0105tk\u00f3w, zwanych w\u0142\u00f3knami.<\/p>\n\n\n\n<p>Nie ma jednak tego z\u0142ego co by na dobre nie wysz\u0142o. Jako \u017ce Spring potrzebowa\u0142 wesprze\u0107 swojego WebFluxa jakim\u015b reaktywnym sterownikiem, stworzy\u0142 on projekt <a href=\"https:\/\/r2dbc.io\">R2DBC<\/a> \u2013 reaktywn\u0105 implementacj\u0119 sterownik\u00f3w do popularnych baz danych. Aktualnie jest on dost\u0119pny w wydaniu stabilnym i jest rekomendowany do u\u017cycia na produkcji. Ca\u0142o\u015b\u0107 zosta\u0142a r\u00f3wnie\u017c przekazana Reactive Foundation \u2013 jest to drugi obiecany na samym pocz\u0105tku projekt tej fundacji. R\u00f3wnocze\u015bnie, jak ju\u017c wspomnia\u0142em, ca\u0142y czas rozwijani s\u0105 klienci <a href=\"https:\/\/vertx.io\/docs\/#databases\">SQL tworzony na potrzeby Vert.xa<\/a>.<\/p>\n\n\n\n<p>Opisuj\u0105c reaktywne sterowniki do baz danych, nie mog\u0119 r\u00f3wnie\u017c nie wspomnie\u0107, o tym stworzonym na potrzeby MongoDB, jako \u017ce jest on dostarczony przez tw\u00f3rc\u00f3w bazy i w pe\u0142ni kompatybilny ze standardem <a href=\"https:\/\/docs.mongodb.com\/drivers\/reactive-streams\/\">Reactive Streams<\/a>.<\/p>\n\n\n\n<p>Na sam koniec mam dla was bomb\u0119 z wczoraj. Ot\u00f3\u017c ukaza\u0142a si\u0119 stabilna wersja <a href=\"https:\/\/in.relation.to\/2021\/03\/08\/hibernate-reactive-1\/\">reaktywnego Hibernate<\/a>. Tw\u00f3rcy chwal\u0105 si\u0119 jego wysok\u0105 kompatybilno\u015bci\u0105 z Quarkusem i Vert.xem (u\u017cywa pod spodem klient\u00f3w SQL tego ostatniego), a tak\u017ce bardzo wygodn\u0105 wsp\u00f3\u0142prac\u0105 z <a href=\"https:\/\/quarkus.io\/blog\/resteasy-reactive\/\">RESTEasy Reactive<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>I tym w\u0142a\u015bnie newsem zako\u0144czy\u0107 pragn\u0119 nasze \u201ckr\u00f3tkie\u201d podsumowanie, kt\u00f3re chyba zas\u0142uguje na nazw\u0119 \u201cState of Java Reactivity 2021\u201d. Podejrzewam, \u017ce jest troch\u0119 niekompletny (wystarczy spojrze\u0107 na przegl\u0105d <a href=\"https:\/\/state.reactive.foundation\/\">reaktywnych rozwi\u0105za\u0144<\/a>, kt\u00f3ry mo\u017cna znale\u017a\u0107 na stronie Reactive Foundation) &#8211; mo\u017ce chcieliby\u015bcie wersj\u0119 rozszerzon\u0105 tekstu? Je\u017celi si\u0119 Wam podoba\u0142o, serdecznie zapraszam do <a href=\"https:\/\/blog.vived.io\/#subscribe\">subskrypcji<\/a>, a tak\u017ce do u\u017cywania naszego <a href=\"https:\/\/blog.vived.io\/keep-up-czyli-o-tym-jak-byc-na-biezaco-bez-uczucia-przytloczenia-contentem\/\">Keep Upa<\/a>. Dzi\u0119ki niemu unikniecie w przysz\u0142o\u015bci takiego pot\u0119\u017cnego info-dumpu \u2013 na bie\u017c\u0105co b\u0119dziemy mogli informowa\u0107 Was o wszystkich wa\u017cnych nowinkach w Javie (i nie tylko).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cze\u015b\u0107 \ud83d\ude4b\u200d\u2642\ufe0f. Dzisiaj b\u0119dzie troch\u0119 mniej newsowo (i memicznie), poniewa\u017c postanowili\u015bmy po\u015bwi\u0119ci\u0107 nasz\u0105 now\u0105 edycje na przegl\u0105d tego jak w 2021 roku wygl\u0105da tworzenie aplikacji reaktywnych w Javie. Mamy nadzieje \u017ce b\u0119dzie to temat dla Was interesuj\u0105cy \ud83d\ude09<\/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-10171","post","type-post","status-publish","format-standard","hentry","category-jvm-pl"],"acf":{"weekly_summary":true,"estimated_reading_time":"13","feature_image_blog":false,"push_notification_image":false,"feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Reaktywna Java w 2021 - JVM Tuesday vol. 28 - 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-28\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Reaktywna Java w 2021 - JVM Tuesday vol. 28 - Vived\" \/>\n<meta property=\"og:description\" content=\"Cze\u015b\u0107 \ud83d\ude4b\u200d\u2642\ufe0f. Dzisiaj b\u0119dzie troch\u0119 mniej newsowo (i memicznie), poniewa\u017c postanowili\u015bmy po\u015bwi\u0119ci\u0107 nasz\u0105 now\u0105 edycje na przegl\u0105d tego jak w 2021 roku wygl\u0105da tworzenie aplikacji reaktywnych w Javie. Mamy nadzieje \u017ce b\u0119dzie to temat dla Was interesuj\u0105cy \ud83d\ude09\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-03-09T08:06:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-17T13:48:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.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-28\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/\"},\"author\":{\"name\":\"Artur Skowro\u0144ski\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3\"},\"headline\":\"Reaktywna Java w 2021 &#8211; JVM Tuesday vol. 28\",\"datePublished\":\"2021-03-09T08:06:21+00:00\",\"dateModified\":\"2023-01-17T13:48:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/\"},\"wordCount\":2759,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png\",\"articleSection\":[\"JVM\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/\",\"url\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/\",\"name\":\"Reaktywna Java w 2021 - JVM Tuesday vol. 28 - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png\",\"datePublished\":\"2021-03-09T08:06:21+00:00\",\"dateModified\":\"2023-01-17T13:48:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reaktywna Java w 2021 &#8211; JVM Tuesday vol. 28\"}]},{\"@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":"Reaktywna Java w 2021 - JVM Tuesday vol. 28 - 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-28\/","og_locale":"pl_PL","og_type":"article","og_title":"Reaktywna Java w 2021 - JVM Tuesday vol. 28 - Vived","og_description":"Cze\u015b\u0107 \ud83d\ude4b\u200d\u2642\ufe0f. Dzisiaj b\u0119dzie troch\u0119 mniej newsowo (i memicznie), poniewa\u017c postanowili\u015bmy po\u015bwi\u0119ci\u0107 nasz\u0105 now\u0105 edycje na przegl\u0105d tego jak w 2021 roku wygl\u0105da tworzenie aplikacji reaktywnych w Javie. Mamy nadzieje \u017ce b\u0119dzie to temat dla Was interesuj\u0105cy \ud83d\ude09","og_url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/","og_site_name":"Vived","article_published_time":"2021-03-09T08:06:21+00:00","article_modified_time":"2023-01-17T13:48:49+00:00","og_image":[{"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.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-28\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/"},"author":{"name":"Artur Skowro\u0144ski","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/0eb0878110cb27edfbfe46e841fe6db3"},"headline":"Reaktywna Java w 2021 &#8211; JVM Tuesday vol. 28","datePublished":"2021-03-09T08:06:21+00:00","dateModified":"2023-01-17T13:48:49+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/"},"wordCount":2759,"commentCount":0,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png","articleSection":["JVM"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/","url":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/","name":"Reaktywna Java w 2021 - JVM Tuesday vol. 28 - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png","datePublished":"2021-03-09T08:06:21+00:00","dateModified":"2023-01-17T13:48:49+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png"},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/jvm-tuesday-vol-28\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Reaktywna Java w 2021 &#8211; JVM Tuesday vol. 28"}]},{"@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\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Cze\u015b\u0107 wszystkim, poprzedni tydzie\u0144 by\u0142 bardzo ma\u0142o \u201cnewsop\u0119dny\u201d. W zwi\u0105zku z tym postanowi\u0142em spe\u0142ni\u0107 swoje ma\u0142e marzenie i przygotowa\u0107 robocz\u0105 wersj\u0119 czego\u015b, co w przysz\u0142o\u015bci chcia\u0142bym zmieni\u0107 na <strong>State of Java Reactivity 2021 <\/strong>\u2013 przegl\u0105d tego, jak bardzo \u201creaktywne\u201d s\u0105 poszczeg\u00f3lne Javowe rozwi\u0105zania pod koniec pierwszego kwarta\u0142u roku 2021.<\/p>\n","innerContent":["\n<p>Cze\u015b\u0107 wszystkim, poprzedni tydzie\u0144 by\u0142 bardzo ma\u0142o \u201cnewsop\u0119dny\u201d. W zwi\u0105zku z tym postanowi\u0142em spe\u0142ni\u0107 swoje ma\u0142e marzenie i przygotowa\u0107 robocz\u0105 wersj\u0119 czego\u015b, co w przysz\u0142o\u015bci chcia\u0142bym zmieni\u0107 na <strong>State of Java Reactivity 2021 <\/strong>\u2013 przegl\u0105d tego, jak bardzo \u201creaktywne\u201d s\u0105 poszczeg\u00f3lne Javowe rozwi\u0105zania pod koniec pierwszego kwarta\u0142u roku 2021.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ca\u0142o\u015b\u0107 to bardziej \u201clisticle\u201d ni\u017c dog\u0142\u0119bna analiza \u2013 w sam raz do poczytania do kawki (albo do paru kawek \u2013 ca\u0142o\u015b\u0107 jest jednak do\u015b\u0107 d\u0142uga). Moim celem by\u0142o jak najszersze przedstawienie tematu, z du\u017c\u0105 ilo\u015bci\u0105 materia\u0142\u00f3w dodatkowych, kt\u00f3re ka\u017cdy b\u0119dzie m\u00f3g\u0142 przeczyta\u0107 w wypadku, gdy b\u0119dzie chcia\u0142 sobie poszerzy\u0107 wiedz\u0119 o poszczeg\u00f3lnych zagadnieniach.<\/p>\n","innerContent":["\n<p>Ca\u0142o\u015b\u0107 to bardziej \u201clisticle\u201d ni\u017c dog\u0142\u0119bna analiza \u2013 w sam raz do poczytania do kawki (albo do paru kawek \u2013 ca\u0142o\u015b\u0107 jest jednak do\u015b\u0107 d\u0142uga). Moim celem by\u0142o jak najszersze przedstawienie tematu, z du\u017c\u0105 ilo\u015bci\u0105 materia\u0142\u00f3w dodatkowych, kt\u00f3re ka\u017cdy b\u0119dzie m\u00f3g\u0142 przeczyta\u0107 w wypadku, gdy b\u0119dzie chcia\u0142 sobie poszerzy\u0107 wiedz\u0119 o poszczeg\u00f3lnych zagadnieniach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Co jest out-of-scope:<\/p>\n","innerContent":["\n<p>Co jest out-of-scope:<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/list","attrs":[],"innerBlocks":[{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Korutyny oraz Project Loom. Tekst i tak wyszed\u0142 bardzo przekrojowy, do\u0142o\u017cenie tej dw\u00f3jki tylko skomplikowa\u0142oby i tak ju\u017c szeroki obraz ca\u0142o\u015bci.<\/li>\n","innerContent":["\n<li>Korutyny oraz Project Loom. Tekst i tak wyszed\u0142 bardzo przekrojowy, do\u0142o\u017cenie tej dw\u00f3jki tylko skomplikowa\u0142oby i tak ju\u017c szeroki obraz ca\u0142o\u015bci.<\/li>\n"]},{"blockName":"core\/list-item","attrs":[],"innerBlocks":[],"innerHTML":"\n<li>Inne j\u0119zyki ni\u017c Java. Postanowi\u0142em si\u0119 w tym przegl\u0105dzie ograniczy\u0107 wy\u0142\u0105cznie do Javy i jej ekosystemu. Wi\u0119kszo\u015b\u0107 z zaprezentowanych rozwi\u0105za\u0144 z powodzeniem u\u017cy\u0107 mo\u017cna w innych j\u0119zykach JVMowych \u2013 maj\u0105 tam swoje odpowiedniki.<\/li>\n","innerContent":["\n<li>Inne j\u0119zyki ni\u017c Java. Postanowi\u0142em si\u0119 w tym przegl\u0105dzie ograniczy\u0107 wy\u0142\u0105cznie do Javy i jej ekosystemu. Wi\u0119kszo\u015b\u0107 z zaprezentowanych rozwi\u0105za\u0144 z powodzeniem u\u017cy\u0107 mo\u017cna w innych j\u0119zykach JVMowych \u2013 maj\u0105 tam swoje odpowiedniki.<\/li>\n"]}],"innerHTML":"\n<ul>\n\n<\/ul>\n","innerContent":["\n<ul>",null,"\n\n",null,"<\/ul>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A, i zak\u0142adam, \u017ce wiecie, czym programowanie reaktywne jest, a fundacje <a href=\"http:\/\/reactivex.io\/\">ReactiveX<\/a> macie w swoich zak\u0142adkach \u2013 nie miejsce tu i czas, \u017ceby t\u0142umaczy\u0107, z czym ten ca\u0142y trend si\u0119 je. Je\u015bli potrzebujecie od\u015bwie\u017cy\u0107 sobie te zagadnienia, to moim ulubionym wprowadzeniem w temat jest chyba <a href=\"https:\/\/spring.io\/blog\/2016\/06\/07\/notes-on-reactive-programming-part-i-the-reactive-landscape\">\u201cNotes on Reactive Programming\u201d z blogu spring.io<\/a>.<\/p>\n","innerContent":["\n<p>A, i zak\u0142adam, \u017ce wiecie, czym programowanie reaktywne jest, a fundacje <a href=\"http:\/\/reactivex.io\/\">ReactiveX<\/a> macie w swoich zak\u0142adkach \u2013 nie miejsce tu i czas, \u017ceby t\u0142umaczy\u0107, z czym ten ca\u0142y trend si\u0119 je. Je\u015bli potrzebujecie od\u015bwie\u017cy\u0107 sobie te zagadnienia, to moim ulubionym wprowadzeniem w temat jest chyba <a href=\"https:\/\/spring.io\/blog\/2016\/06\/07\/notes-on-reactive-programming-part-i-the-reactive-landscape\">\u201cNotes on Reactive Programming\u201d z blogu spring.io<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No to lecim<\/p>\n","innerContent":["\n<p>No to lecim<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 id=\"podstawy\">Podstawy<\/h2>\n","innerContent":["\n<h2 id=\"podstawy\">Podstawy<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pierwsz\u0105 rzecz\u0105, od kt\u00f3rej sprawdzenia zacz\u0105\u0142em, to zagl\u0105dni\u0119cie do korzeni tematu i sprawdzenie, na ile aktualna jest moja wiedza na temat <a href=\"https:\/\/www.reactivemanifesto.org\/\">Reactive Manifesto<\/a>. Okaza\u0142o si\u0119, \u017ce akurat ten trzyma si\u0119 w swojej drugiej, wydanej w 2014 roku wersji.<\/p>\n","innerContent":["\n<p>Pierwsz\u0105 rzecz\u0105, od kt\u00f3rej sprawdzenia zacz\u0105\u0142em, to zagl\u0105dni\u0119cie do korzeni tematu i sprawdzenie, na ile aktualna jest moja wiedza na temat <a href=\"https:\/\/www.reactivemanifesto.org\/\">Reactive Manifesto<\/a>. Okaza\u0142o si\u0119, \u017ce akurat ten trzyma si\u0119 w swojej drugiej, wydanej w 2014 roku wersji.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bcf9624d.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Oczywi\u015bcie, nie oznacza to, \u017ce <a href=\"https:\/\/www.reactive.foundation\/\">Reactive Foundation<\/a> spocz\u0119\u0142o na laurach \u2013 ko\u0144c\u00f3wk\u0105 zesz\u0142ego roku ukaza\u0142o si\u0119 niejako \u201crozszerzenie\u201d ca\u0142ego Manifestu \u2013 publikacja <a href=\"https:\/\/principles.reactive.foundation\/\">Reactive Principles<\/a>. Jest to arcyciekawy dokument, <a href=\"https:\/\/principles.reactive.foundation\/cloud-native\/index.html\">m.in. \u017ceni\u0105cy systemy reaktywn\u0119 z ich niejako dzisiejszym rozwini\u0119ciem - Cloud Native.<\/a> Rozszerza tak\u017ce oryginalne cztery cechy <a href=\"https:\/\/principles.reactive.foundation\/principles\/index.html\">o zestaw o\u015bmiu pryncypi\u00f3w<\/a>, kt\u00f3rych celem jest doprecyzowanie, jak takie systemy w praktyce pisa\u0107.<\/p>\n","innerContent":["\n<p>Oczywi\u015bcie, nie oznacza to, \u017ce <a href=\"https:\/\/www.reactive.foundation\/\">Reactive Foundation<\/a> spocz\u0119\u0142o na laurach \u2013 ko\u0144c\u00f3wk\u0105 zesz\u0142ego roku ukaza\u0142o si\u0119 niejako \u201crozszerzenie\u201d ca\u0142ego Manifestu \u2013 publikacja <a href=\"https:\/\/principles.reactive.foundation\/\">Reactive Principles<\/a>. Jest to arcyciekawy dokument, <a href=\"https:\/\/principles.reactive.foundation\/cloud-native\/index.html\">m.in. \u017ceni\u0105cy systemy reaktywn\u0119 z ich niejako dzisiejszym rozwini\u0119ciem - Cloud Native.<\/a> Rozszerza tak\u017ce oryginalne cztery cechy <a href=\"https:\/\/principles.reactive.foundation\/principles\/index.html\">o zestaw o\u015bmiu pryncypi\u00f3w<\/a>, kt\u00f3rych celem jest doprecyzowanie, jak takie systemy w praktyce pisa\u0107.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Opr\u00f3cz pisania przewodnik\u00f3w i manifest\u00f3w, Reactive Foundation opiekuje si\u0119 te\u017c r\u00f3\u017cnorakimi projektami. O dw\u00f3ch z nich (RSocket i R2DB) wspomn\u0119 w dalszej cz\u0119\u015bci, na razie za\u015b sp\u00f3jrzmy, jak aktualnie prezentuje si\u0119 trzeci \u2013 Reactive Streams.<\/p>\n","innerContent":["\n<p>Opr\u00f3cz pisania przewodnik\u00f3w i manifest\u00f3w, Reactive Foundation opiekuje si\u0119 te\u017c r\u00f3\u017cnorakimi projektami. O dw\u00f3ch z nich (RSocket i R2DB) wspomn\u0119 w dalszej cz\u0119\u015bci, na razie za\u015b sp\u00f3jrzmy, jak aktualnie prezentuje si\u0119 trzeci \u2013 Reactive Streams.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/www.reactive-streams.org\/\">Reactive Streams<\/a> to inicjatywa, kt\u00f3ra w okolicach premiery JDK 9 by\u0142a jednym z najbardziej gor\u0105cych temat\u00f3w spo\u0142eczno\u015bci. Jej cel by\u0142 szczytny \u2013 mia\u0142a ustandaryzowa\u0107 API projekt\u00f3w korzystaj\u0105cych z koncept\u00f3w reaktywnych, umo\u017cliwiaj\u0105c ich wzajemn\u0105 kompatybilno\u015b\u0107. Wed\u0142ug mnie sukces jest po\u0142owiczny. O ile rzeczywi\u015bcie opublikowane przez Reactive Streams interfejsy sta\u0142y si\u0119 z\u0142otym standardem implementowanym przez wszystkie biblioteki, o tyle ju\u017c kompatybilno\u015bci mo\u017cna mie\u0107 troch\u0119 do zarzucenia \u2013 do zapewnienia kompatybilno\u015bci RxJavy i Reactora <a href=\"https:\/\/projectreactor.io\/docs\/adapter\/release\/api\/reactor\/adapter\/rxjava\/RxJava2Adapter.html\">niezb\u0119dny jest dodatkowy adapter<\/a>.<\/p>\n","innerContent":["\n<p><a href=\"https:\/\/www.reactive-streams.org\/\">Reactive Streams<\/a> to inicjatywa, kt\u00f3ra w okolicach premiery JDK 9 by\u0142a jednym z najbardziej gor\u0105cych temat\u00f3w spo\u0142eczno\u015bci. Jej cel by\u0142 szczytny \u2013 mia\u0142a ustandaryzowa\u0107 API projekt\u00f3w korzystaj\u0105cych z koncept\u00f3w reaktywnych, umo\u017cliwiaj\u0105c ich wzajemn\u0105 kompatybilno\u015b\u0107. Wed\u0142ug mnie sukces jest po\u0142owiczny. O ile rzeczywi\u015bcie opublikowane przez Reactive Streams interfejsy sta\u0142y si\u0119 z\u0142otym standardem implementowanym przez wszystkie biblioteki, o tyle ju\u017c kompatybilno\u015bci mo\u017cna mie\u0107 troch\u0119 do zarzucenia \u2013 do zapewnienia kompatybilno\u015bci RxJavy i Reactora <a href=\"https:\/\/projectreactor.io\/docs\/adapter\/release\/api\/reactor\/adapter\/rxjava\/RxJava2Adapter.html\">niezb\u0119dny jest dodatkowy adapter<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Najnowsza wersja standardu to edycja <a href=\"https:\/\/github.com\/reactive-streams\/reactive-streams-jvm\">1.0.3<\/a>, wydana pod koniec roku 2019. W stosunku do poprzedniczek zawiera jedynie poprawki b\u0142\u0119d\u00f3w.<\/p>\n","innerContent":["\n<p>Najnowsza wersja standardu to edycja <a href=\"https:\/\/github.com\/reactive-streams\/reactive-streams-jvm\">1.0.3<\/a>, wydana pod koniec roku 2019. W stosunku do poprzedniczek zawiera jedynie poprawki b\u0142\u0119d\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No, to maj\u0105c za sob\u0105 podstawy podstaw, pora przej\u015b\u0107 do \u201cmi\u0119ska\u201d. Nasz nast\u0119pny przystanek to biblioteki.<\/p>\n","innerContent":["\n<p>No, to maj\u0105c za sob\u0105 podstawy podstaw, pora przej\u015b\u0107 do \u201cmi\u0119ska\u201d. Nasz nast\u0119pny przystanek to biblioteki.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 id=\"biblioteki\">Biblioteki<\/h2>\n","innerContent":["\n<h2 id=\"biblioteki\">Biblioteki<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd052392.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd052392.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 id=\"rxjava\"><a href=\"https:\/\/github.com\/ReactiveX\/RxJava\">RxJava<\/a><\/h3>\n","innerContent":["\n<h3 id=\"rxjava\"><a href=\"https:\/\/github.com\/ReactiveX\/RxJava\">RxJava<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>To w\u0142a\u015bnie RxJava od Netfliksa przetar\u0142a szlaki innym projektom zwi\u0105zanym z reaktywnym programowaniem. Jej oryginalna wersja powsta\u0142a jeszcze w czasach, gdy nikt nawet nie planowa\u0142 Reaktywnych Strumieni, i dopiero wydanie 2.0 wprowadzi\u0142o zgodno\u015b\u0107 z tym standardem. Sprawi\u0142o to, \u017ce migracja mi\u0119dzy wersja 1.0 i 2.0 by\u0142a straszliwie czasoch\u0142onna i kosztowa\u0142a mas\u0119 pracy (been there, done that, still hurts ).<\/p>\n","innerContent":["\n<p>To w\u0142a\u015bnie RxJava od Netfliksa przetar\u0142a szlaki innym projektom zwi\u0105zanym z reaktywnym programowaniem. Jej oryginalna wersja powsta\u0142a jeszcze w czasach, gdy nikt nawet nie planowa\u0142 Reaktywnych Strumieni, i dopiero wydanie 2.0 wprowadzi\u0142o zgodno\u015b\u0107 z tym standardem. Sprawi\u0142o to, \u017ce migracja mi\u0119dzy wersja 1.0 i 2.0 by\u0142a straszliwie czasoch\u0142onna i kosztowa\u0142a mas\u0119 pracy (been there, done that, still hurts ).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Aktualna wersja biblioteki to 3.0.11, kt\u00f3ra ukaza\u0142a si\u0119 w zesz\u0142y pi\u0105tek (i by\u0142a de facto jednym z motywator\u00f3w dzisiejszego wydania naszego newslettera), reprezentuj\u0105c ju\u017c trzeciego \u201cmajora\u201d biblioteki. Jest to wydanie niezwykle istotne, poniewa\u017c wraz z nim sw\u00f3j \u017cywot zako\u0144czy\u0142a ga\u0142\u0105\u017a 2.x, przez co rekomendowane jest podbicie si\u0119 do nowego wydania. Mimo <a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0\">bardzo d\u0142ugiej listy zmian<\/a> mi\u0119dzy 2.x a 3.x, migracja jest tym razem du\u017co przyjemniejsza. G\u0142\u00f3wna zmiana jak\u0105 przynosi 3.x to podbicie minimalnej wersji Javy do 8, przez co tw\u00f3rcy mogli zapewni\u0107 kompatybilno\u015b\u0107 np. ze Stream API czy javowymi Optionalami.<\/p>\n","innerContent":["\n<p>Aktualna wersja biblioteki to 3.0.11, kt\u00f3ra ukaza\u0142a si\u0119 w zesz\u0142y pi\u0105tek (i by\u0142a de facto jednym z motywator\u00f3w dzisiejszego wydania naszego newslettera), reprezentuj\u0105c ju\u017c trzeciego \u201cmajora\u201d biblioteki. Jest to wydanie niezwykle istotne, poniewa\u017c wraz z nim sw\u00f3j \u017cywot zako\u0144czy\u0142a ga\u0142\u0105\u017a 2.x, przez co rekomendowane jest podbicie si\u0119 do nowego wydania. Mimo <a href=\"https:\/\/github.com\/ReactiveX\/RxJava\/wiki\/What's-different-in-3.0\">bardzo d\u0142ugiej listy zmian<\/a> mi\u0119dzy 2.x a 3.x, migracja jest tym razem du\u017co przyjemniejsza. G\u0142\u00f3wna zmiana jak\u0105 przynosi 3.x to podbicie minimalnej wersji Javy do 8, przez co tw\u00f3rcy mogli zapewni\u0107 kompatybilno\u015b\u0107 np. ze Stream API czy javowymi Optionalami.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi chcecie by\u0107 bardzo na bie\u017c\u0105co z rozwojem projektu, mo\u017cecie przy\u0142\u0105czy\u0107 si\u0119 do oficjalnej <a href=\"https:\/\/groups.google.com\/g\/rxjava\">grupy mailingowej<\/a>, aczkolwiek nie jest ona zbyt \u017cywa.<\/p>\n","innerContent":["\n<p>Je\u017celi chcecie by\u0107 bardzo na bie\u017c\u0105co z rozwojem projektu, mo\u017cecie przy\u0142\u0105czy\u0107 si\u0119 do oficjalnej <a href=\"https:\/\/groups.google.com\/g\/rxjava\">grupy mailingowej<\/a>, aczkolwiek nie jest ona zbyt \u017cywa.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/twitter.com\/RxJava\">Oficjalne konto Twitterowe<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/twitter.com\/RxJava\">Oficjalne konto Twitterowe<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd0cb37a.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd0cb37a.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 id=\"reactor\"><a href=\"https:\/\/github.com\/reactor\">Reactor<\/a><\/h3>\n","innerContent":["\n<h3 id=\"reactor\"><a href=\"https:\/\/github.com\/reactor\">Reactor<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi chodzi o pretendent\u00f3w do \u201ctronu\u201d, to g\u0142\u00f3wnym konkurentem dla rozwi\u0105zania Netfliksa jest Reactor. Rozwijana przez Pivotala biblioteka, kt\u00f3rej niew\u0105tpliw\u0105 zalet\u0105 jest to, \u017ce stanowi reaktywny trzon Springa, od lat stanowi\u0105cego \u201cdomy\u015blne\u201d rozwi\u0105zanie, je\u015bli chodzi o pisanie aplikacji webowych w Javie.<br>Ze wzgl\u0119du na t\u0105 swoist\u0105 symbioz\u0119, Reactor obr\u00f3s\u0142 w mas\u0119 connector\u00f3w do wszelkich popularnych technologii. Posiada gotowe wsparcie min. <a href=\"https:\/\/github.com\/reactor\/reactor-netty\">Netty\u2019ego<\/a>, <a href=\"https:\/\/github.com\/reactor\/reactor-kafka\">Kafki<\/a> czy <a href=\"https:\/\/github.com\/reactor\/reactor-rabbitmq\">RabbitMQ<\/a>. Projekty te s\u0105 r\u00f3wnie\u017c bardzo dynamicznie rozwijane \u2013 np. ostatni commit do <a href=\"https:\/\/github.com\/reactor\/reactor-kafka\">reactor-kafka<\/a> zosta\u0142 zmergowany w pi\u0105tek.<\/p>\n","innerContent":["\n<p>Je\u017celi chodzi o pretendent\u00f3w do \u201ctronu\u201d, to g\u0142\u00f3wnym konkurentem dla rozwi\u0105zania Netfliksa jest Reactor. Rozwijana przez Pivotala biblioteka, kt\u00f3rej niew\u0105tpliw\u0105 zalet\u0105 jest to, \u017ce stanowi reaktywny trzon Springa, od lat stanowi\u0105cego \u201cdomy\u015blne\u201d rozwi\u0105zanie, je\u015bli chodzi o pisanie aplikacji webowych w Javie.<br>Ze wzgl\u0119du na t\u0105 swoist\u0105 symbioz\u0119, Reactor obr\u00f3s\u0142 w mas\u0119 connector\u00f3w do wszelkich popularnych technologii. Posiada gotowe wsparcie min. <a href=\"https:\/\/github.com\/reactor\/reactor-netty\">Netty\u2019ego<\/a>, <a href=\"https:\/\/github.com\/reactor\/reactor-kafka\">Kafki<\/a> czy <a href=\"https:\/\/github.com\/reactor\/reactor-rabbitmq\">RabbitMQ<\/a>. Projekty te s\u0105 r\u00f3wnie\u017c bardzo dynamicznie rozwijane \u2013 np. ostatni commit do <a href=\"https:\/\/github.com\/reactor\/reactor-kafka\">reactor-kafka<\/a> zosta\u0142 zmergowany w pi\u0105tek.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z informacji praktycznych \u2013 model dzia\u0142ania Reactora jest nieco prostszy ni\u017c ten RxJavy. Efektem tego jest jego mniejsza elastyczno\u015b\u0107, ale z drugiej strony pr\u00f3g wej\u015bcia jest znacz\u0105co mniejszy.<\/p>\n","innerContent":["\n<p>Z informacji praktycznych \u2013 model dzia\u0142ania Reactora jest nieco prostszy ni\u017c ten RxJavy. Efektem tego jest jego mniejsza elastyczno\u015b\u0107, ale z drugiej strony pr\u00f3g wej\u015bcia jest znacz\u0105co mniejszy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi potrzebujesz zdecydowa\u0107 mi\u0119dzy u\u017cyciem RxJavy, a Reactorem, pomocny mo\u017ce by\u0107 artyku\u0142 <a href=\"https:\/\/www.nurkiewicz.com\/2019\/02\/rxjava-vs-reactor.html\">Tomka Nurkiewicza<\/a>. Co prawda pochodzi z 2019 roku, w zwi\u0105zku z czym niekt\u00f3re z jego tez ju\u017c si\u0119 zestarza\u0142y (jak wspomnia\u0142em w kontek\u015bcie RxJavy, ta te\u017c porzuci\u0142a ju\u017c wsparcie dla Javy 6, co nie stanowi ju\u017c dzi\u015b problemu nawet przy programowaniu na Andr<br>oida). Sam tekst pozostaje jednak jedn\u0105 z lepszych analiz por\u00f3wnawczych w internecie. <a href=\"https:\/\/twitter.com\/tnurkiewicz\">@tnurkiewicz<\/a> \u2013 mo\u017ce czas na aktualizacje?<\/p>\n","innerContent":["\n<p>Je\u017celi potrzebujesz zdecydowa\u0107 mi\u0119dzy u\u017cyciem RxJavy, a Reactorem, pomocny mo\u017ce by\u0107 artyku\u0142 <a href=\"https:\/\/www.nurkiewicz.com\/2019\/02\/rxjava-vs-reactor.html\">Tomka Nurkiewicza<\/a>. Co prawda pochodzi z 2019 roku, w zwi\u0105zku z czym niekt\u00f3re z jego tez ju\u017c si\u0119 zestarza\u0142y (jak wspomnia\u0142em w kontek\u015bcie RxJavy, ta te\u017c porzuci\u0142a ju\u017c wsparcie dla Javy 6, co nie stanowi ju\u017c dzi\u015b problemu nawet przy programowaniu na Andr<br>oida). Sam tekst pozostaje jednak jedn\u0105 z lepszych analiz por\u00f3wnawczych w internecie. <a href=\"https:\/\/twitter.com\/tnurkiewicz\">@tnurkiewicz<\/a> \u2013 mo\u017ce czas na aktualizacje?<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/twitter.com\/ProjectReactor\">Oficjalne konto Twitterowe<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/twitter.com\/ProjectReactor\">Oficjalne konto Twitterowe<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd124721.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd124721.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 id=\"rsocket-io\"><a href=\"https:\/\/rsocket.io\/\">RSocket.io<\/a><\/h3>\n","innerContent":["\n<h3 id=\"rsocket-io\"><a href=\"https:\/\/rsocket.io\/\">RSocket.io<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>No i dochodzimy do pierwszego z dw\u00f3ch obiecanych projekt\u00f3w wspieranych przez Reactive Foundation. W odr\u00f3\u017cnieniu od poprzednik\u00f3w, mimo i\u017c RSockets r\u00f3wnie\u017c implementuje standard Reactive Streams, nie jest to \u201cgeneryczna\u201d biblioteka do obs\u0142ugi reaktywno\u015bci w aplikacji, a gotowa implementacja protoko\u0142u binarnego, b\u0119d\u0105cego alternatyw\u0105 dla HTTP czy gRPC. RSockets zreszt\u0105 w \u201cbebechach\u201d u\u017cywa Reactora (co jeszcze bardziej pokazuje elastyczno\u015b\u0107 rozwi\u0105zania Pivotala). RSocket posiada bardzo dobrze napisan\u0105 dokumentacje \u2013 szczeg\u00f3lnie ciekawe s\u0105 fragmenty, <a href=\"https:\/\/rsocket.io\/docs\/motivations\/\">gdzie jego tw\u00f3rcy wy\u0142uszczaj\u0105 powody jego stworzenia<\/a> (bardzo polecam).<\/p>\n","innerContent":["\n<p>No i dochodzimy do pierwszego z dw\u00f3ch obiecanych projekt\u00f3w wspieranych przez Reactive Foundation. W odr\u00f3\u017cnieniu od poprzednik\u00f3w, mimo i\u017c RSockets r\u00f3wnie\u017c implementuje standard Reactive Streams, nie jest to \u201cgeneryczna\u201d biblioteka do obs\u0142ugi reaktywno\u015bci w aplikacji, a gotowa implementacja protoko\u0142u binarnego, b\u0119d\u0105cego alternatyw\u0105 dla HTTP czy gRPC. RSockets zreszt\u0105 w \u201cbebechach\u201d u\u017cywa Reactora (co jeszcze bardziej pokazuje elastyczno\u015b\u0107 rozwi\u0105zania Pivotala). RSocket posiada bardzo dobrze napisan\u0105 dokumentacje \u2013 szczeg\u00f3lnie ciekawe s\u0105 fragmenty, <a href=\"https:\/\/rsocket.io\/docs\/motivations\/\">gdzie jego tw\u00f3rcy wy\u0142uszczaj\u0105 powody jego stworzenia<\/a> (bardzo polecam).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi chcecie dowiedzie\u0107 si\u0119 jak RSocket prezentuje si\u0119 w kontra\u015bcie do g\u0142\u00f3wnego konkurenta, gRPC, bardzo polecam <a href=\"https:\/\/medium.com\/netifi\/differences-between-grpc-and-rsocket-e736c954e60\">ten<\/a> artyku\u0142. RSocket jest te\u017c jednym z ulubionych temat\u00f3w Josha Longa (Developer Advocate Springa), i to te\u017c <a href=\"https:\/\/spring.io\/blog\/2021\/01\/18\/ymnnalft-easy-rpc-with-rsocket\">jego teksty<\/a> mog\u0119 najbardziej poleci\u0107 jako wprowadzenie do tematu. RSocket posiada zreszt\u0105 oficjalny initializer do Springa (spring-boot-starter-rsocket), co sprawia \u017ce integracja tych dw\u00f3ch projekt\u00f3w ze sob\u0105 jest trywialna.<\/p>\n","innerContent":["\n<p>Je\u017celi chcecie dowiedzie\u0107 si\u0119 jak RSocket prezentuje si\u0119 w kontra\u015bcie do g\u0142\u00f3wnego konkurenta, gRPC, bardzo polecam <a href=\"https:\/\/medium.com\/netifi\/differences-between-grpc-and-rsocket-e736c954e60\">ten<\/a> artyku\u0142. RSocket jest te\u017c jednym z ulubionych temat\u00f3w Josha Longa (Developer Advocate Springa), i to te\u017c <a href=\"https:\/\/spring.io\/blog\/2021\/01\/18\/ymnnalft-easy-rpc-with-rsocket\">jego teksty<\/a> mog\u0119 najbardziej poleci\u0107 jako wprowadzenie do tematu. RSocket posiada zreszt\u0105 oficjalny initializer do Springa (spring-boot-starter-rsocket), co sprawia \u017ce integracja tych dw\u00f3ch projekt\u00f3w ze sob\u0105 jest trywialna.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/twitter.com\/RSocketIO\">Oficjalne konto Twitterowe<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/twitter.com\/RSocketIO\">Oficjalne konto Twitterowe<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd171ec6.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd171ec6.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 id=\"jakarta-ee-api-jax-rs-mutiny\">Jakarta EE API - JAX-RS &amp; Mutiny<\/h3>\n","innerContent":["\n<h3 id=\"jakarta-ee-api-jax-rs-mutiny\">Jakarta EE API - JAX-RS &amp; Mutiny<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A na koniec sekcji bibliotek zostawi\u0142em sobie moje Guilty Pleasure \u2013 Jakarte EE. Ot\u00f3\u017c jedna z jej g\u0142\u00f3wnych specyfikacji, JAX-RS r\u00f3wnie\u017c wraz z <a href=\"https:\/\/docs.jboss.org\/resteasy\/docs\/3.6.2.Final\/userguide\/html\/Reactive.html\">wersj\u0105 2.1<\/a> (czyli ju\u017c w 2017 roku), doczeka\u0142a si\u0119 wsparcia dla Reactive Streams. Najpopularniejsz\u0105 (i po prawdzie jedn\u0105 z niewielu) implementacji standardu jest RESTEasy, kt\u00f3ry to w internalach opiera si\u0119 na RxJavie.<\/p>\n","innerContent":["\n<p>A na koniec sekcji bibliotek zostawi\u0142em sobie moje Guilty Pleasure \u2013 Jakarte EE. Ot\u00f3\u017c jedna z jej g\u0142\u00f3wnych specyfikacji, JAX-RS r\u00f3wnie\u017c wraz z <a href=\"https:\/\/docs.jboss.org\/resteasy\/docs\/3.6.2.Final\/userguide\/html\/Reactive.html\">wersj\u0105 2.1<\/a> (czyli ju\u017c w 2017 roku), doczeka\u0142a si\u0119 wsparcia dla Reactive Streams. Najpopularniejsz\u0105 (i po prawdzie jedn\u0105 z niewielu) implementacji standardu jest RESTEasy, kt\u00f3ry to w internalach opiera si\u0119 na RxJavie.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>JAX-RS podobne jest w swoim dzia\u0142aniu do WebFluxa (kt\u00f3rym to zajmiemy si\u0119 za moment), ukrywaj\u0105c tak naprawd\u0119 ca\u0142\u0105 reaktywno\u015b\u0107 poprzez swoje deklaratywne API, przez co na pierwszy rzut oka trudno jest zauwa\u017cy\u0107, \u017ce korzysta si\u0119 z tego paradygmatu. Na pewno jest to bardzo ciekawa opcja dla os\u00f3b pisz\u0105cych w nowoczesnej Javie\/Jakarcie EE \u2013 minimalna edycja standardu to wersja 8.<\/p>\n","innerContent":["\n<p>JAX-RS podobne jest w swoim dzia\u0142aniu do WebFluxa (kt\u00f3rym to zajmiemy si\u0119 za moment), ukrywaj\u0105c tak naprawd\u0119 ca\u0142\u0105 reaktywno\u015b\u0107 poprzez swoje deklaratywne API, przez co na pierwszy rzut oka trudno jest zauwa\u017cy\u0107, \u017ce korzysta si\u0119 z tego paradygmatu. Na pewno jest to bardzo ciekawa opcja dla os\u00f3b pisz\u0105cych w nowoczesnej Javie\/Jakarcie EE \u2013 minimalna edycja standardu to wersja 8.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd21b3ef.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd21b3ef.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Dodatkowo, ma\u0142o kto wie o istnieniu <a href=\"https:\/\/smallrye.io\/smallrye-mutiny\/\">Smallrye Mutiny<\/a>. Jest to \u015bwie\u017cutki, zapocz\u0105tkowany pod koniec 2019 roku projekt, kt\u00f3rego celem jest stworzenie wolnej, ustandaryzowanej implementacji Reactive Streams na potrzeby Jakarty EE, niezale\u017cnej od Netfliksa czy Pivotala. Mimo m\u0142odego wieku, projekt ten osi\u0105ga pewne sukcesy, stanowi\u0105c aktualnie budulec zar\u00f3wno Vert.x, jak i Quarkusa.<\/p>\n","innerContent":["\n<p>Dodatkowo, ma\u0142o kto wie o istnieniu <a href=\"https:\/\/smallrye.io\/smallrye-mutiny\/\">Smallrye Mutiny<\/a>. Jest to \u015bwie\u017cutki, zapocz\u0105tkowany pod koniec 2019 roku projekt, kt\u00f3rego celem jest stworzenie wolnej, ustandaryzowanej implementacji Reactive Streams na potrzeby Jakarty EE, niezale\u017cnej od Netfliksa czy Pivotala. Mimo m\u0142odego wieku, projekt ten osi\u0105ga pewne sukcesy, stanowi\u0105c aktualnie budulec zar\u00f3wno Vert.x, jak i Quarkusa.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd27f7bd.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd27f7bd.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 id=\"akka-streams\">Akka-Streams<\/h3>\n","innerContent":["\n<h3 id=\"akka-streams\">Akka-Streams<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na koniec ma\u0142a niespodzianka. Podejrzewam, \u017ce wi\u0119kszo\u015bci z Was Akka-Streams kojarzy si\u0119 ze Scal\u0105. Jest to opinia, kt\u00f3r\u0105 Lightbend (tw\u00f3rcy Akki), bardzo staraj\u0105 si\u0119 zmieni\u0107. Podobnie zreszt\u0105 jak to, \u017ce w 2021 ma\u0142o kto jeszcze kojarzy model aktorowy z programowaniem reaktywnym, mimo \u017ce idealnie wpisuje si\u0119 on w oryginalne Reactive Manifesto. Faktem pozostaje jednak \u017ce Akka-Streams, kt\u00f3ra wraz z RxJav\u0105 trendowi reaktywnemu przodowa\u0142a w jego pocz\u0105tkowych latach, nigdy mocno nie przebi\u0142a si\u0119 do \u015bwiadomo\u015bci. Przynajmniej firm, kt\u00f3re ju\u017c wcze\u015bniej nie by\u0142y zaanga\u017cowane w kr\u00f3low\u0105 JVMowego programowania funkcyjnego - mimo faktu, \u017ce od bardzo dawna <a href=\"https:\/\/doc.akka.io\/docs\/akka\/current\/typed\/guide\/introduction.html?language=java&amp;_ga=2.257194569.351556834.1615272173-1021721573.1615272173\">Akka posiada swoje Javowe API<\/a>.<\/p>\n","innerContent":["\n<p>Na koniec ma\u0142a niespodzianka. Podejrzewam, \u017ce wi\u0119kszo\u015bci z Was Akka-Streams kojarzy si\u0119 ze Scal\u0105. Jest to opinia, kt\u00f3r\u0105 Lightbend (tw\u00f3rcy Akki), bardzo staraj\u0105 si\u0119 zmieni\u0107. Podobnie zreszt\u0105 jak to, \u017ce w 2021 ma\u0142o kto jeszcze kojarzy model aktorowy z programowaniem reaktywnym, mimo \u017ce idealnie wpisuje si\u0119 on w oryginalne Reactive Manifesto. Faktem pozostaje jednak \u017ce Akka-Streams, kt\u00f3ra wraz z RxJav\u0105 trendowi reaktywnemu przodowa\u0142a w jego pocz\u0105tkowych latach, nigdy mocno nie przebi\u0142a si\u0119 do \u015bwiadomo\u015bci. Przynajmniej firm, kt\u00f3re ju\u017c wcze\u015bniej nie by\u0142y zaanga\u017cowane w kr\u00f3low\u0105 JVMowego programowania funkcyjnego - mimo faktu, \u017ce od bardzo dawna <a href=\"https:\/\/doc.akka.io\/docs\/akka\/current\/typed\/guide\/introduction.html?language=java&amp;_ga=2.257194569.351556834.1615272173-1021721573.1615272173\">Akka posiada swoje Javowe API<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Przyznam, \u017ce zrobi\u0142em ma\u0142y przegl\u0105d i bardzo trudno znale\u017a\u0107 w internecie jakie\u015b du\u017ce przypadki u\u017cycia tego projektu poza partnerami Lightbend. Ze wzgl\u0119du na to ci\u0119\u017cko te\u017c z odpowiedni\u0105 doz\u0105 uczciwo\u015bci por\u00f3wna\u0107 go z innymi dost\u0119pnymi na rynku rozwi\u0105zaniami. Zdecydowanie nie mog\u0119 nazwa\u0107 uczciwym <a href=\"http:\/\/akarnokd.blogspot.com\/2015\/10\/comparison-of-reactive-streams.html\">por\u00f3wnania z 2015 roku, kt\u00f3re od tamtej pory kr\u0105\u017cy po sieci i robi rozwi\u0105zaniu bardzo z\u0142\u0105 opinie.<\/a><\/p>\n","innerContent":["\n<p>Przyznam, \u017ce zrobi\u0142em ma\u0142y przegl\u0105d i bardzo trudno znale\u017a\u0107 w internecie jakie\u015b du\u017ce przypadki u\u017cycia tego projektu poza partnerami Lightbend. Ze wzgl\u0119du na to ci\u0119\u017cko te\u017c z odpowiedni\u0105 doz\u0105 uczciwo\u015bci por\u00f3wna\u0107 go z innymi dost\u0119pnymi na rynku rozwi\u0105zaniami. Zdecydowanie nie mog\u0119 nazwa\u0107 uczciwym <a href=\"http:\/\/akarnokd.blogspot.com\/2015\/10\/comparison-of-reactive-streams.html\">por\u00f3wnania z 2015 roku, kt\u00f3re od tamtej pory kr\u0105\u017cy po sieci i robi rozwi\u0105zaniu bardzo z\u0142\u0105 opinie.<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi mia\u0142bym wskaza\u0107 jak\u0105\u015b du\u017c\u0105 zalet\u0119 Akki, jest ni\u0105 z pewno\u015bci\u0105 <a href=\"https:\/\/github.com\/akkadotnet\/Alpakka\">Alpakka<\/a> - zbi\u00f3r wszelkiej ma\u015bci connector\u00f3w do takich zewn\u0119trznych system\u00f3w jak Kafka, Azure Queues, czy RabbitMQ. Pod tym wzgl\u0119dem, rozwi\u0105zanie Lightbendu zbli\u017cone jest nieco do tego, co oferuje Springowy Reactor.<\/p>\n","innerContent":["\n<p>Je\u017celi mia\u0142bym wskaza\u0107 jak\u0105\u015b du\u017c\u0105 zalet\u0119 Akki, jest ni\u0105 z pewno\u015bci\u0105 <a href=\"https:\/\/github.com\/akkadotnet\/Alpakka\">Alpakka<\/a> - zbi\u00f3r wszelkiej ma\u015bci connector\u00f3w do takich zewn\u0119trznych system\u00f3w jak Kafka, Azure Queues, czy RabbitMQ. Pod tym wzgl\u0119dem, rozwi\u0105zanie Lightbendu zbli\u017cone jest nieco do tego, co oferuje Springowy Reactor.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Cykl \u017cycia Akki-Stream zwi\u0105zany jest bardzo z oryginaln\u0105 Akk\u0105 i nowe edycje wersji opartej na reaktywnych strumieniach dostajemy w komplecie z \u201cg\u0142\u00f3wnym\u201d wydaniem. Najnowsza \u201cdu\u017ca\u201d wersja, <a href=\"https:\/\/akka.io\/blog\/news\/2019\/12\/12\/akka-26-intro\">Akka 2.6<\/a>, opublikowana zosta\u0142a w grudniu 2019 i przynios\u0142a du\u017cy refactor API, mi\u0119dzy innymi tego g\u0142\u00f3wnego, aktorowego.<\/p>\n","innerContent":["\n<p>Cykl \u017cycia Akki-Stream zwi\u0105zany jest bardzo z oryginaln\u0105 Akk\u0105 i nowe edycje wersji opartej na reaktywnych strumieniach dostajemy w komplecie z \u201cg\u0142\u00f3wnym\u201d wydaniem. Najnowsza \u201cdu\u017ca\u201d wersja, <a href=\"https:\/\/akka.io\/blog\/news\/2019\/12\/12\/akka-26-intro\">Akka 2.6<\/a>, opublikowana zosta\u0142a w grudniu 2019 i przynios\u0142a du\u017cy refactor API, mi\u0119dzy innymi tego g\u0142\u00f3wnego, aktorowego.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 id=\"frameworki\">Frameworki<\/h2>\n","innerContent":["\n<h2 id=\"frameworki\">Frameworki<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Teraz, maj\u0105c najciekawsze biblioteki za sob\u0105, czas wej\u015b\u0107 poziom wy\u017cej i przej\u015b\u0107 do framework\u00f3w.<\/p>\n","innerContent":["\n<p>Teraz, maj\u0105c najciekawsze biblioteki za sob\u0105, czas wej\u015b\u0107 poziom wy\u017cej i przej\u015b\u0107 do framework\u00f3w.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd2d89f1.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd2d89f1.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 id=\"vert-x\">Vert.x<\/h3>\n","innerContent":["\n<h3 id=\"vert-x\">Vert.x<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Pozwol\u0119 sobie zacz\u0105\u0107 od frameworku bardzo bliskiego memu sercu, bo to w\u0142a\u015bnie jego trzecie wydanie nauczy\u0142o mnie najwi\u0119cej w temacie programowania reaktywnego. Vert.x wybi\u0142 si\u0119 na popularno\u015bci Node.js w czasach, gdy wszystkim wydawa\u0142o si\u0119, \u017ce Event-Loop b\u0119dzie \u201cz\u0142otym standardem\u201d, je\u015bli chodzi o programowanie asynchroniczne. Jego gwiazda od tamtych czas\u00f3w nieco ju\u017c przygas\u0142a. Mimo wszystko, ze wzgl\u0119du na bardzo \u201cniskopoziomowy\u201d spos\u00f3b pisania, dalej pozostaje on bardzo ciekawym rozwi\u0105zaniem dla tych, kt\u00f3rzy wymagaj\u0105 od swoich aplikacji maksymalnego poziomu wydajno\u015bci. Rozwi\u0105zanie oparte jest na nieblokuj\u0105cym serwerze Netty, a dzi\u0119ki swojemu unikalnemu systemowi \u201cwierzcho\u0142k\u00f3w\u201d cechuje si\u0119 pot\u0119\u017cn\u0105 elastyczno\u015bci\u0105.<\/p>\n","innerContent":["\n<p>Pozwol\u0119 sobie zacz\u0105\u0107 od frameworku bardzo bliskiego memu sercu, bo to w\u0142a\u015bnie jego trzecie wydanie nauczy\u0142o mnie najwi\u0119cej w temacie programowania reaktywnego. Vert.x wybi\u0142 si\u0119 na popularno\u015bci Node.js w czasach, gdy wszystkim wydawa\u0142o si\u0119, \u017ce Event-Loop b\u0119dzie \u201cz\u0142otym standardem\u201d, je\u015bli chodzi o programowanie asynchroniczne. Jego gwiazda od tamtych czas\u00f3w nieco ju\u017c przygas\u0142a. Mimo wszystko, ze wzgl\u0119du na bardzo \u201cniskopoziomowy\u201d spos\u00f3b pisania, dalej pozostaje on bardzo ciekawym rozwi\u0105zaniem dla tych, kt\u00f3rzy wymagaj\u0105 od swoich aplikacji maksymalnego poziomu wydajno\u015bci. Rozwi\u0105zanie oparte jest na nieblokuj\u0105cym serwerze Netty, a dzi\u0119ki swojemu unikalnemu systemowi \u201cwierzcho\u0142k\u00f3w\u201d cechuje si\u0119 pot\u0119\u017cn\u0105 elastyczno\u015bci\u0105.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>W grudniu zesz\u0142ego roku ukaza\u0142a si\u0119 <a href=\"https:\/\/vertx.io\/blog\/whats-new-in-vert-x-4\/\">czwarta edycja<\/a> tego frameworku. Je\u015bli chodzi o zmiany w kontek\u015bcie reaktywno\u015bci jako takiej, przynosi on klient\u00f3w zar\u00f3wno do <a href=\"https:\/\/vertx.io\/docs\/vertx-redis-client\/java\/\">Redisa<\/a>, jak i <a href=\"https:\/\/github.com\/eclipse-vertx\/vertx-sql-client\">baz SQLowych<\/a> (np. Postgresowa implementacja opiera si\u0119 na publikowanym przez t\u0105 baz\u0119 interfejsie NOTIFY\/LISTEN).<\/p>\n","innerContent":["\n<p>W grudniu zesz\u0142ego roku ukaza\u0142a si\u0119 <a href=\"https:\/\/vertx.io\/blog\/whats-new-in-vert-x-4\/\">czwarta edycja<\/a> tego frameworku. Je\u015bli chodzi o zmiany w kontek\u015bcie reaktywno\u015bci jako takiej, przynosi on klient\u00f3w zar\u00f3wno do <a href=\"https:\/\/vertx.io\/docs\/vertx-redis-client\/java\/\">Redisa<\/a>, jak i <a href=\"https:\/\/github.com\/eclipse-vertx\/vertx-sql-client\">baz SQLowych<\/a> (np. Postgresowa implementacja opiera si\u0119 na publikowanym przez t\u0105 baz\u0119 interfejsie NOTIFY\/LISTEN).<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Reaktywne rozwi\u0105zania Vert.x opieraj\u0105 si\u0119 na RxJavie. Co<br>ciekawe, mimo tego, \u017ce jak wcze\u015bniej pisa\u0142em, wersja 2.x nie jest ju\u017c oficjalnie wspierana, ci\u0105gle to w\u0142a\u015bnie ona stanowi budulec dla rozwi\u0105za\u0144 w ramach Vert.x. Je\u017celi RxJava nie zostanie dostarczona, Vert.x u\u017cywa\u0142 b\u0119dzie wspomnianej biblioteki Mutiny.<\/p>\n","innerContent":["\n<p>Reaktywne rozwi\u0105zania Vert.x opieraj\u0105 si\u0119 na RxJavie. Co<br>ciekawe, mimo tego, \u017ce jak wcze\u015bniej pisa\u0142em, wersja 2.x nie jest ju\u017c oficjalnie wspierana, ci\u0105gle to w\u0142a\u015bnie ona stanowi budulec dla rozwi\u0105za\u0144 w ramach Vert.x. Je\u017celi RxJava nie zostanie dostarczona, Vert.x u\u017cywa\u0142 b\u0119dzie wspomnianej biblioteki Mutiny.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/twitter.com\/vertx_project\">Oficjalne konto Twitterowe<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/twitter.com\/vertx_project\">Oficjalne konto Twitterowe<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd336a95.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd336a95.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 id=\"spring-framework-boot\"><a href=\"https:\/\/spring.io\/\">Spring Framework \/ Boot<\/a><\/h3>\n","innerContent":["\n<h3 id=\"spring-framework-boot\"><a href=\"https:\/\/spring.io\/\">Spring Framework \/ Boot<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Z rozwi\u0105zania bardzo niszowego pora przej\u015b\u0107 na takie, kt\u00f3re kojarzy\u0107 b\u0119dzie zapewne ka\u017cdy programista Javy. Spring od lat kr\u00f3luje w\u015br\u00f3d Javowych framework\u00f3w i cho\u0107 powoli zaczyna mu si\u0119 rodzi\u0107 realna konkurencja, to jednak nic nie sugeruje tego, aby ktokolwiek mia\u0142 zdetronizowa\u0107 go w najbli\u017cszym czasie z pierwszego miejsca.<\/p>\n","innerContent":["\n<p>Z rozwi\u0105zania bardzo niszowego pora przej\u015b\u0107 na takie, kt\u00f3re kojarzy\u0107 b\u0119dzie zapewne ka\u017cdy programista Javy. Spring od lat kr\u00f3luje w\u015br\u00f3d Javowych framework\u00f3w i cho\u0107 powoli zaczyna mu si\u0119 rodzi\u0107 realna konkurencja, to jednak nic nie sugeruje tego, aby ktokolwiek mia\u0142 zdetronizowa\u0107 go w najbli\u017cszym czasie z pierwszego miejsca.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Du\u017ca w tym zas\u0142uga tego, \u017ce cho\u0107 by\u0142 kr\u00f3tki okres, gdy Spring z\u0142apa\u0142 nieco zadyszki, to jednak wraz z mikroserwisow\u0105 rewolucj\u0105, trafi\u0142 on w dziesi\u0105tk\u0119 ze swoj\u0105 wersj\u0105 Spring Boot. To w\u0142a\u015bnie jego WebFlux wprowadzi\u0142 te\u017c reaktywno\u015b\u0107 \u201cpod strzechy\u201d. &nbsp;Pivotal w por\u0119 zauwa\u017cy\u0142 popularno\u015b\u0107 tego paradygmatu i uczyni\u0142 z niego \u201cfirst-citizena\u201d. Spring posiada te\u017c wsparcie dla reaktywnego po\u0142\u0105czenia z baz\u0105 danych za pomoc\u0105 projektu r2dbc, o kt\u00f3rym wspomn\u0119 pod koniec artyku\u0142u.<\/p>\n","innerContent":["\n<p>Du\u017ca w tym zas\u0142uga tego, \u017ce cho\u0107 by\u0142 kr\u00f3tki okres, gdy Spring z\u0142apa\u0142 nieco zadyszki, to jednak wraz z mikroserwisow\u0105 rewolucj\u0105, trafi\u0142 on w dziesi\u0105tk\u0119 ze swoj\u0105 wersj\u0105 Spring Boot. To w\u0142a\u015bnie jego WebFlux wprowadzi\u0142 te\u017c reaktywno\u015b\u0107 \u201cpod strzechy\u201d. &nbsp;Pivotal w por\u0119 zauwa\u017cy\u0142 popularno\u015b\u0107 tego paradygmatu i uczyni\u0142 z niego \u201cfirst-citizena\u201d. Spring posiada te\u017c wsparcie dla reaktywnego po\u0142\u0105czenia z baz\u0105 danych za pomoc\u0105 projektu r2dbc, o kt\u00f3rym wspomn\u0119 pod koniec artyku\u0142u.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Aktualnie wszyscy czekamy na wydanie Spring Boota w wersji 2.5 (prywatnie ju\u017c przebieram n\u00f3\u017ckami) \u2013 obecnie pojawi\u0142 si\u0119 jego <a href=\"https:\/\/spring.io\/blog\/2021\/01\/21\/spring-boot-2-5-0-m1-available-now\">pierwszy Milestone<\/a>. Aczkolwiek, jako \u017ce nie przynosi ono \u017cadnych wi\u0119kszych zmian w kontek\u015bcie reaktywno\u015bci, pozostaje de-facto poza zakresem tematycznym tego artyku\u0142u.<\/p>\n","innerContent":["\n<p>Aktualnie wszyscy czekamy na wydanie Spring Boota w wersji 2.5 (prywatnie ju\u017c przebieram n\u00f3\u017ckami) \u2013 obecnie pojawi\u0142 si\u0119 jego <a href=\"https:\/\/spring.io\/blog\/2021\/01\/21\/spring-boot-2-5-0-m1-available-now\">pierwszy Milestone<\/a>. Aczkolwiek, jako \u017ce nie przynosi ono \u017cadnych wi\u0119kszych zmian w kontek\u015bcie reaktywno\u015bci, pozostaje de-facto poza zakresem tematycznym tego artyku\u0142u.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>A, i nie musz\u0119 chyba dodawa\u0107, \u017ce ca\u0142o\u015b\u0107 \u201czasilana\u201d jest Reactorem, prawda ?<\/p>\n","innerContent":["\n<p>A, i nie musz\u0119 chyba dodawa\u0107, \u017ce ca\u0142o\u015b\u0107 \u201czasilana\u201d jest Reactorem, prawda ?<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/twitter.com\/vertx_project\">Oficjalne konto Twitterowe<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/twitter.com\/vertx_project\">Oficjalne konto Twitterowe<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd3b6106.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd3b6106.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 id=\"micronaut\"><a href=\"https:\/\/micronaut.io\/\">Micronaut<\/a><\/h3>\n","innerContent":["\n<h3 id=\"micronaut\"><a href=\"https:\/\/micronaut.io\/\">Micronaut<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Kiedy wspomina\u0142em o tym, \u017ce Spring posiada godnych rywali, w g\u0142owie ko\u0142ata\u0142 mi w\u0142a\u015bnie m.in. Micronaut. Rozwi\u0105zanie od tw\u00f3rc\u00f3w \u015bwi\u0119tej pami\u0119ci Grails\u00f3w, stara si\u0119 gra\u0107 kart\u0105 bardzo podobnej, aczkolwiek \u201cl\u017cejszej\u201d alternatywy dla Springa. Jako jeden z pierwszych framework\u00f3w zwietrzy\u0142 on te\u017c okazj\u0119, jak\u0105 z pewno\u015bci\u0105 jest GraalVM. W ten spos\u00f3b umo\u015bci\u0142 si\u0119 na pozycji \u201ctego drugiego\u201d, mimo \u017ce czuje raczej za plecami oddech Quarkusa.<\/p>\n","innerContent":["\n<p>Kiedy wspomina\u0142em o tym, \u017ce Spring posiada godnych rywali, w g\u0142owie ko\u0142ata\u0142 mi w\u0142a\u015bnie m.in. Micronaut. Rozwi\u0105zanie od tw\u00f3rc\u00f3w \u015bwi\u0119tej pami\u0119ci Grails\u00f3w, stara si\u0119 gra\u0107 kart\u0105 bardzo podobnej, aczkolwiek \u201cl\u017cejszej\u201d alternatywy dla Springa. Jako jeden z pierwszych framework\u00f3w zwietrzy\u0142 on te\u017c okazj\u0119, jak\u0105 z pewno\u015bci\u0105 jest GraalVM. W ten spos\u00f3b umo\u015bci\u0142 si\u0119 na pozycji \u201ctego drugiego\u201d, mimo \u017ce czuje raczej za plecami oddech Quarkusa.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u017celi chodzi o swoje podej\u015bcie do reaktywno\u015bci, Micronaut jest niezwykle pojemny, a r\u00f3wnocze\u015bnie ma\u0142o wybredny \u2013 mo\u017cna go bowiem u\u017cywa\u0107 zar\u00f3wno z RxJav\u0105, jak i Reactorem. W kwestii po\u0142\u0105czenia do baz danych, u\u017cywa on wspomnianych ju\u017c klient\u00f3w napisanych na potrzeby Vert.x\u2019a.<\/p>\n","innerContent":["\n<p>Je\u017celi chodzi o swoje podej\u015bcie do reaktywno\u015bci, Micronaut jest niezwykle pojemny, a r\u00f3wnocze\u015bnie ma\u0142o wybredny \u2013 mo\u017cna go bowiem u\u017cywa\u0107 zar\u00f3wno z RxJav\u0105, jak i Reactorem. W kwestii po\u0142\u0105czenia do baz danych, u\u017cywa on wspomnianych ju\u017c klient\u00f3w napisanych na potrzeby Vert.x\u2019a.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":[],"innerBlocks":[],"innerHTML":"\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd43b385.png\" alt=\"\"\/><\/figure>\n","innerContent":["\n<figure class=\"wp-block-image\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/08\/img_610d0bd43b385.png\" alt=\"\"\/><\/figure>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3 id=\"quarkus\"><a href=\"https:\/\/quarkus.io\/guides\/getting-started-reactive\">Quarkus<\/a><\/h3>\n","innerContent":["\n<h3 id=\"quarkus\"><a href=\"https:\/\/quarkus.io\/guides\/getting-started-reactive\">Quarkus<\/a><\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Quarkus, kolejny z pretendent\u00f3w podgryzaj\u0105cych Springa, jest reprezentantem ci\u0105gle do\u015b\u0107 raczkuj\u0105cego nurtu nowoczesnych framework\u00f3w Jakarty EE. W tym gronie to w\u0142a\u015bnie on zdoby\u0142 najwi\u0119ksz\u0105 mi\u0142o\u015b\u0107 spo\u0142eczno\u015bci, a jego kolejne wydania obserwowane s\u0105 z du\u017cym zainteresowaniem. Rozwi\u0105zanie pozycjonuje si\u0119 jako bardzo GraalVMowe i bardzo Cloud Native.<\/p>\n","innerContent":["\n<p>Quarkus, kolejny z pretendent\u00f3w podgryzaj\u0105cych Springa, jest reprezentantem ci\u0105gle do\u015b\u0107 raczkuj\u0105cego nurtu nowoczesnych framework\u00f3w Jakarty EE. W tym gronie to w\u0142a\u015bnie on zdoby\u0142 najwi\u0119ksz\u0105 mi\u0142o\u015b\u0107 spo\u0142eczno\u015bci, a jego kolejne wydania obserwowane s\u0105 z du\u017cym zainteresowaniem. Rozwi\u0105zanie pozycjonuje si\u0119 jako bardzo GraalVMowe i bardzo Cloud Native.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Chc\u0105c uchodzi\u0107 za nowoczesny JVMowy framework Javowy, bardzo ci\u0119\u017cko jest przej\u015b\u0107 oboj\u0119tnie obok ca\u0142ego reaktywnego trendu. Trzeba jednak przyzna\u0107, \u017ce Quarkus za\u0142apa\u0142 si\u0119 na ten poci\u0105g stosunkowo p\u00f3\u017ano. Dopiero w grudniu 2020 \u015bwiat obesz\u0142a wiadomo\u015b\u0107, \u017ce framework od Red Hata (ciekawym jest to, \u017ce swego czasu <a href=\"https:\/\/www.infoworld.com\/article\/2613356\/who-controls-vert-x--red-hat--vmware--or-neither-.html\">Red Hat zaanga\u017cowany by\u0142 te\u017c w rozw\u00f3j Vert.xa<\/a>) dostanie pe\u0142ne wsparcie dla wspomnianego ju\u017c <a href=\"https:\/\/quarkus.io\/blog\/resteasy-reactive\/\">JAX-RS 2.1, a co za tym idzie r\u00f3wnie\u017c reaktywnych kontroler\u00f3w<\/a>. Jest to jedyne z opisywanych przeze mnie dzisiaj rozwi\u0105za\u0144 implementuj\u0105cych ten standard. Dodatkowo, wszelkie inne reaktywne fragmenty <a href=\"https:\/\/quarkus.io\/guides\/getting-started-reactive\">Quarkusa u\u017cywaj\u0105 Mutiny<\/a> \u2013 jestem bardzo ciekaw, w jakim kierunku p\u00f3jdzie ta biblioteka, na pewno b\u0119d\u0119 obserwowa\u0107 jej rozw\u00f3j.<\/p>\n","innerContent":["\n<p>Chc\u0105c uchodzi\u0107 za nowoczesny JVMowy framework Javowy, bardzo ci\u0119\u017cko jest przej\u015b\u0107 oboj\u0119tnie obok ca\u0142ego reaktywnego trendu. Trzeba jednak przyzna\u0107, \u017ce Quarkus za\u0142apa\u0142 si\u0119 na ten poci\u0105g stosunkowo p\u00f3\u017ano. Dopiero w grudniu 2020 \u015bwiat obesz\u0142a wiadomo\u015b\u0107, \u017ce framework od Red Hata (ciekawym jest to, \u017ce swego czasu <a href=\"https:\/\/www.infoworld.com\/article\/2613356\/who-controls-vert-x--red-hat--vmware--or-neither-.html\">Red Hat zaanga\u017cowany by\u0142 te\u017c w rozw\u00f3j Vert.xa<\/a>) dostanie pe\u0142ne wsparcie dla wspomnianego ju\u017c <a href=\"https:\/\/quarkus.io\/blog\/resteasy-reactive\/\">JAX-RS 2.1, a co za tym idzie r\u00f3wnie\u017c reaktywnych kontroler\u00f3w<\/a>. Jest to jedyne z opisywanych przeze mnie dzisiaj rozwi\u0105za\u0144 implementuj\u0105cych ten standard. Dodatkowo, wszelkie inne reaktywne fragmenty <a href=\"https:\/\/quarkus.io\/guides\/getting-started-reactive\">Quarkusa u\u017cywaj\u0105 Mutiny<\/a> \u2013 jestem bardzo ciekaw, w jakim kierunku p\u00f3jdzie ta biblioteka, na pewno b\u0119d\u0119 obserwowa\u0107 jej rozw\u00f3j.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/twitter.com\/QuarkusIO\">Oficjalne konto Twitterowe<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/twitter.com\/QuarkusIO\">Oficjalne konto Twitterowe<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2 id=\"bazy-danych\">Bazy Danych<\/h2>\n","innerContent":["\n<h2 id=\"bazy-danych\">Bazy Danych<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na koniec zostawi\u0142em sobie bazy danych. Przez d\u0142ugi czas, to w\u0142a\u015bnie one by\u0142y pi\u0119t\u0105 achillesow\u0105 wszelkich reaktywnych system\u00f3w pisanych w Javie. Spo\u0142eczno\u015b\u0107 d\u0142ugie lata czeka\u0142a, a\u017c Oracle w ko\u0144cu udost\u0119pni reaktywn\u0105 wersje JDBC, zwan\u0105 ADBA (Asynchronous Database Access). Projekt przeci\u0105ga\u0142 si\u0119, by ostatecznie pod koniec roku 2019 zosta\u0107 <a href=\"https:\/\/mail.openjdk.java.net\/pipermail\/jdbc-spec-discuss\/2019-September\/000529.html\">zupe\u0142nie wygaszony<\/a>. Bardzo interesuj\u0105ce s\u0105 powody \u2013 ot\u00f3\u017c Oracle stwierdzi\u0142o, \u017ce przysz\u0142o\u015b\u0107 Javy tkwi nie w asynchronicznym kodzie, a <a href=\"https:\/\/openjdk.java.net\/projects\/loom\/\">Projekcie Loom<\/a>, kt\u00f3ry ma przynie\u015b\u0107 do Javy zupe\u0142nie nowe API w\u0105tk\u00f3w, zwanych w\u0142\u00f3knami.<\/p>\n","innerContent":["\n<p>Na koniec zostawi\u0142em sobie bazy danych. Przez d\u0142ugi czas, to w\u0142a\u015bnie one by\u0142y pi\u0119t\u0105 achillesow\u0105 wszelkich reaktywnych system\u00f3w pisanych w Javie. Spo\u0142eczno\u015b\u0107 d\u0142ugie lata czeka\u0142a, a\u017c Oracle w ko\u0144cu udost\u0119pni reaktywn\u0105 wersje JDBC, zwan\u0105 ADBA (Asynchronous Database Access). Projekt przeci\u0105ga\u0142 si\u0119, by ostatecznie pod koniec roku 2019 zosta\u0107 <a href=\"https:\/\/mail.openjdk.java.net\/pipermail\/jdbc-spec-discuss\/2019-September\/000529.html\">zupe\u0142nie wygaszony<\/a>. Bardzo interesuj\u0105ce s\u0105 powody \u2013 ot\u00f3\u017c Oracle stwierdzi\u0142o, \u017ce przysz\u0142o\u015b\u0107 Javy tkwi nie w asynchronicznym kodzie, a <a href=\"https:\/\/openjdk.java.net\/projects\/loom\/\">Projekcie Loom<\/a>, kt\u00f3ry ma przynie\u015b\u0107 do Javy zupe\u0142nie nowe API w\u0105tk\u00f3w, zwanych w\u0142\u00f3knami.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Nie ma jednak tego z\u0142ego co by na dobre nie wysz\u0142o. Jako \u017ce Spring potrzebowa\u0142 wesprze\u0107 swojego WebFluxa jakim\u015b reaktywnym sterownikiem, stworzy\u0142 on projekt <a href=\"https:\/\/r2dbc.io\">R2DBC<\/a> \u2013 reaktywn\u0105 implementacj\u0119 sterownik\u00f3w do popularnych baz danych. Aktualnie jest on dost\u0119pny w wydaniu stabilnym i jest rekomendowany do u\u017cycia na produkcji. Ca\u0142o\u015b\u0107 zosta\u0142a r\u00f3wnie\u017c przekazana Reactive Foundation \u2013 jest to drugi obiecany na samym pocz\u0105tku projekt tej fundacji. R\u00f3wnocze\u015bnie, jak ju\u017c wspomnia\u0142em, ca\u0142y czas rozwijani s\u0105 klienci <a href=\"https:\/\/vertx.io\/docs\/#databases\">SQL tworzony na potrzeby Vert.xa<\/a>.<\/p>\n","innerContent":["\n<p>Nie ma jednak tego z\u0142ego co by na dobre nie wysz\u0142o. Jako \u017ce Spring potrzebowa\u0142 wesprze\u0107 swojego WebFluxa jakim\u015b reaktywnym sterownikiem, stworzy\u0142 on projekt <a href=\"https:\/\/r2dbc.io\">R2DBC<\/a> \u2013 reaktywn\u0105 implementacj\u0119 sterownik\u00f3w do popularnych baz danych. Aktualnie jest on dost\u0119pny w wydaniu stabilnym i jest rekomendowany do u\u017cycia na produkcji. Ca\u0142o\u015b\u0107 zosta\u0142a r\u00f3wnie\u017c przekazana Reactive Foundation \u2013 jest to drugi obiecany na samym pocz\u0105tku projekt tej fundacji. R\u00f3wnocze\u015bnie, jak ju\u017c wspomnia\u0142em, ca\u0142y czas rozwijani s\u0105 klienci <a href=\"https:\/\/vertx.io\/docs\/#databases\">SQL tworzony na potrzeby Vert.xa<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Opisuj\u0105c reaktywne sterowniki do baz danych, nie mog\u0119 r\u00f3wnie\u017c nie wspomnie\u0107, o tym stworzonym na potrzeby MongoDB, jako \u017ce jest on dostarczony przez tw\u00f3rc\u00f3w bazy i w pe\u0142ni kompatybilny ze standardem <a href=\"https:\/\/docs.mongodb.com\/drivers\/reactive-streams\/\">Reactive Streams<\/a>.<\/p>\n","innerContent":["\n<p>Opisuj\u0105c reaktywne sterowniki do baz danych, nie mog\u0119 r\u00f3wnie\u017c nie wspomnie\u0107, o tym stworzonym na potrzeby MongoDB, jako \u017ce jest on dostarczony przez tw\u00f3rc\u00f3w bazy i w pe\u0142ni kompatybilny ze standardem <a href=\"https:\/\/docs.mongodb.com\/drivers\/reactive-streams\/\">Reactive Streams<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na sam koniec mam dla was bomb\u0119 z wczoraj. Ot\u00f3\u017c ukaza\u0142a si\u0119 stabilna wersja <a href=\"https:\/\/in.relation.to\/2021\/03\/08\/hibernate-reactive-1\/\">reaktywnego Hibernate<\/a>. Tw\u00f3rcy chwal\u0105 si\u0119 jego wysok\u0105 kompatybilno\u015bci\u0105 z Quarkusem i Vert.xem (u\u017cywa pod spodem klient\u00f3w SQL tego ostatniego), a tak\u017ce bardzo wygodn\u0105 wsp\u00f3\u0142prac\u0105 z <a href=\"https:\/\/quarkus.io\/blog\/resteasy-reactive\/\">RESTEasy Reactive<\/a>.<\/p>\n","innerContent":["\n<p>Na sam koniec mam dla was bomb\u0119 z wczoraj. Ot\u00f3\u017c ukaza\u0142a si\u0119 stabilna wersja <a href=\"https:\/\/in.relation.to\/2021\/03\/08\/hibernate-reactive-1\/\">reaktywnego Hibernate<\/a>. Tw\u00f3rcy chwal\u0105 si\u0119 jego wysok\u0105 kompatybilno\u015bci\u0105 z Quarkusem i Vert.xem (u\u017cywa pod spodem klient\u00f3w SQL tego ostatniego), a tak\u017ce bardzo wygodn\u0105 wsp\u00f3\u0142prac\u0105 z <a href=\"https:\/\/quarkus.io\/blog\/resteasy-reactive\/\">RESTEasy Reactive<\/a>.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/separator","attrs":[],"innerBlocks":[],"innerHTML":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","innerContent":["\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>I tym w\u0142a\u015bnie newsem zako\u0144czy\u0107 pragn\u0119 nasze \u201ckr\u00f3tkie\u201d podsumowanie, kt\u00f3re chyba zas\u0142uguje na nazw\u0119 \u201cState of Java Reactivity 2021\u201d. Podejrzewam, \u017ce jest troch\u0119 niekompletny (wystarczy spojrze\u0107 na przegl\u0105d <a href=\"https:\/\/state.reactive.foundation\/\">reaktywnych rozwi\u0105za\u0144<\/a>, kt\u00f3ry mo\u017cna znale\u017a\u0107 na stronie Reactive Foundation) - mo\u017ce chcieliby\u015bcie wersj\u0119 rozszerzon\u0105 tekstu? Je\u017celi si\u0119 Wam podoba\u0142o, serdecznie zapraszam do <a href=\"https:\/\/blog.vived.io\/#subscribe\">subskrypcji<\/a>, a tak\u017ce do u\u017cywania naszego <a href=\"https:\/\/blog.vived.io\/keep-up-czyli-o-tym-jak-byc-na-biezaco-bez-uczucia-przytloczenia-contentem\/\">Keep Upa<\/a>. Dzi\u0119ki niemu unikniecie w przysz\u0142o\u015bci takiego pot\u0119\u017cnego info-dumpu \u2013 na bie\u017c\u0105co b\u0119dziemy mogli informowa\u0107 Was o wszystkich wa\u017cnych nowinkach w Javie (i nie tylko).<\/p>\n","innerContent":["\n<p>I tym w\u0142a\u015bnie newsem zako\u0144czy\u0107 pragn\u0119 nasze \u201ckr\u00f3tkie\u201d podsumowanie, kt\u00f3re chyba zas\u0142uguje na nazw\u0119 \u201cState of Java Reactivity 2021\u201d. Podejrzewam, \u017ce jest troch\u0119 niekompletny (wystarczy spojrze\u0107 na przegl\u0105d <a href=\"https:\/\/state.reactive.foundation\/\">reaktywnych rozwi\u0105za\u0144<\/a>, kt\u00f3ry mo\u017cna znale\u017a\u0107 na stronie Reactive Foundation) - mo\u017ce chcieliby\u015bcie wersj\u0119 rozszerzon\u0105 tekstu? Je\u017celi si\u0119 Wam podoba\u0142o, serdecznie zapraszam do <a href=\"https:\/\/blog.vived.io\/#subscribe\">subskrypcji<\/a>, a tak\u017ce do u\u017cywania naszego <a href=\"https:\/\/blog.vived.io\/keep-up-czyli-o-tym-jak-byc-na-biezaco-bez-uczucia-przytloczenia-contentem\/\">Keep Upa<\/a>. Dzi\u0119ki niemu unikniecie w przysz\u0142o\u015bci takiego pot\u0119\u017cnego info-dumpu \u2013 na bie\u017c\u0105co b\u0119dziemy mogli informowa\u0107 Was o wszystkich wa\u017cnych nowinkach w Javie (i nie tylko).<\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10171","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=10171"}],"version-history":[{"count":2,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10171\/revisions"}],"predecessor-version":[{"id":13874,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10171\/revisions\/13874"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}