Wybór języka

Java

Spoiler alert: this is a “from zero to hero” session. Assuming you’re familiar with programming (hopefully in Java), after this session you should be able to explain why Testcontainers are needed, simple and powerful 😉

The pyramids in Egypt were built in ancient times. We still admire them today, appreciating the craftsmanship and hard work of their builders. However, do we build houses from giant stone blocks today? Not likely, current times bring other needs and offer other technologies.

Minęło kolejne pół roku, pora na wdrożenie kolejnej wersji Javy™ na produkcji. Tym razem na pewno, bo to w końcu LTS. ;-)

Zdaniem wielu “Java jest wolna”. Okazuje się, że rozwój Javy jest tak “wolny”, że kolejne wydania nie są tylko podbiciem wersji, bo mogą znacząco zmieniać reguły gry. To dobry powód na kolejny deep dive w Javie. Będzie mowa o:

  • Virtual Threads,
  • Pattern Matching for switch,
  • Record Patterns,
  • Structured Concurrency,
  • String Templates,
  • korzystaniu z rzeczy natywnych,
  • co wyleciało i wyleci,
  • i innych.

Dużo rzeczy pokazane w kodzie, nie tylko na slajdach.

Pozwólcie mi rozpocząć ten wpis od suchara.

Uproszczony model atomu

Jedzie sobie elektron na motorze. Nagle zatrzymuje go policjant i mówi:

“Musiałem Pana zatrzymać, bo przekroczył Pan znacznie prędkość, jadąc dokładnie 178 i pół kilometra na godzinę.”

“No WIELKIE DZIĘKI, panie policjancie. To teraz kompletnie nie wiem, gdzie jestem!”

Niektóre suchary są niesamowicie słabe, więc nie martw się, jeśli ten Cię nie rozbawił. Ten sprowadza się to do zasady nieoznaczoności. W niezwykle uproszczonym ujęciu: niektóre rzeczy we wszechświecie nie mogą być obserwowane we wszystkich swoich aspektach. Jeśli masz jabłko, możesz zmierzyć jego masę, objętość, rozmiar (i jeśli spadnie Ci na głowę) prędkość, wszystko jednocześnie. Bez wpływu na samo jabłko. Jednak jeśli interesują Cię elektrony, im dokładniej znasz ich prędkość, tym mniej wiesz o ich położeniu, i odwrotnie, stąd chmura elektronowa. (Do licha, czy rzeczy atomowe przestaną mnie ścigać? 😅)

Minęło kolejne pół roku, pora na wdrożenie kolejnej wersji Javy™ na produkcji. Tym razem na pewno, bo to w końcu LTS. ;-)

Zdaniem wielu “Java jest wolna”. Okazuje się, że rozwój Javy jest tak “wolny”, że kolejne wydania nie są tylko podbiciem wersji, bo mogą znacząco zmieniać reguły gry. To dobry powód na kolejny deep dive w Javie. Będzie mowa o:

  • Pattern Matching for switch,
  • Record Patterns,
  • Virtual Threads,
  • korzystanie z rzeczy natywnych,
  • co wyleciało i wyleci,
  • i innych.

Dużo rzeczy pokazane w kodzie, nie tylko na slajdach.

Niektórzy ludzie narzekają, że nie wykonują testów integracyjnych “ponieważ zajmują za dużo czasu”. Dobrze, interakcja z rzeczywistymi zależnościami czasami nie może być skrócona, ale z pewnością istnieją sposoby na szybsze uruchamianie baz danych, brokerów wiadomości i innych, jeśli używasz do tego Testcontainers.

W tym wpisie będę używał języka Java. Jednakże, ponieważ Testcontainers jest (z pewnego punktu widzenia) wygodnym sposobem na współpracę z kontenerami zgodnymi z Dockerem przy użyciu języka programowania, który znasz, to samo podejście można zastosować również do innych technologii. Jestem pewien, że po zrozumieniu idei można ją przetłumaczyć na Go lub C#.

Piramidy w Egipcie zostały zbudowane w starożytności. Do dziś je podziwiamy, doceniając rzemiosło i ciężką pracę ich budowniczych. Jednak czy budujemy dzisiaj domy z olbrzymich bloków kamieni? Niewątpliwie nie, obecne czasy przynoszą inne potrzeby i oferują inne technologie.

Piramidy testowania zostały również zbudowane jakiś czas temu. Podziwiamy projekty dziedzictwa z bogatym zestawem testów, ale czy tworzymy dzisiaj projekty w taki sam sposób jak 10-15-20 lat temu? Jeśli nie, dlaczego wciąż chcemy je testować w ten sam sposób?

Podczas moich szkoleń i wykładów padają pytania “ale jak ty tak szybko przełączasz Javę?” albo nawet “to da się mieć kilka wersji Javy równocześnie na komputerze?!” Jeszcze jak!

Sposób jest bardzo prosty: wykorzystać SDKMAN! Korzystam z niego niemal każdego dnia, przydaje się nie tylko w czasie prelekcji o najnowszych wersjach Javy, ale w zwykłej codziennej pracy, gdy trzeba sprawdzić “jak to działa na innej wersji”.

Poniższy minikurs powstał jakiś czas temu m.in. jako tzw. prework przed szkoleniem z najnowszej Javy.

Podczas moich szkoleń i wykładów padają pytania “ale jak ty tak szybko przełączasz Javę?” albo nawet “to da się mieć kilka wersji Javy równocześnie na komputerze?!” Jeszcze jak!

Sposób jest bardzo prosty: wykorzystać SDKMAN! Korzystam z niego niemal każdego dnia, przydaje się nie tylko w czasie prelekcji o najnowszych wersjach Javy, ale w zwykłej codziennej pracy, gdy trzeba sprawdzić “jak to działa na innej wersji”.

Poniższy minikurs powstał jakiś czas temu m.in. jako tzw. prework przed szkoleniem z najnowszej Javy.

W poprzednim wpisie testowaliśmy, czy Wątki Wirtualne Javy nie są używane w sposób, który powoduje ich przyszpilenie/przypięcie (ang. pinning). Chcemy bowiem (i aczkolwiek!), aby nasze Wątki Platformowe (szczególnie te w puli ForkJoin Sp. z o.o.) stale obsługiwały coraz więcej nowych Wątków Wirtualnych, zamiast “nie wyłączać silnika”, podczas gdy VTs są przyszpilone. (Przynajmniej tak długo, jak nie możemy dostarczyć własnych pul wątków do przenoszenia WW).
Spoiler alert: będziemy korzystać z Testcontainers oraz Toxiproxy!

Fun will now commence

Niestety, tłumacz aktualnie jest mocno zarobiony i na razie nie da rady przetłumaczyć tego wpisu. Całość dostępna po angielsku.

Jak włączyć Wątki Wirtualne?

W czasie moich wykładów, gdzie omawiana jest Java 19 (i gdzie obowiązkowo pojawia się sekcja dotycząca Wątków Wirtualnych), padało pytanie: jak włączyć wątki wirtualne na JVM przynajmniej kilka razy.

Niestety, tłumacz aktualnie jest mocno zarobiony i na razie nie da rady przetłumaczyć tego wpisu. Całość dostępna po angielsku.

You shall not pin Virtual Threads!