<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>petrovich</title><generator>teletype.in</generator><description><![CDATA[Software developer]]></description><link>https://teletype.in/@petrovwich?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/petrovwich?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/petrovwich?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sat, 11 Apr 2026 07:05:09 GMT</pubDate><lastBuildDate>Sat, 11 Apr 2026 07:05:09 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@petrovwich/JEDv50</guid><link>https://teletype.in/@petrovwich/JEDv50?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/JEDv50?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Java Ecosystem Digest #50</title><pubDate>Sun, 27 Aug 2023 20:14:06 GMT</pubDate><description><![CDATA[<img src="https://img4.teletype.in/files/35/8e/358ee9c3-fdbd-4941-9dc7-4cd0f2536843.jpeg"></img>Всем привет!]]></description><content:encoded><![CDATA[
  <p id="7CK4">Всем привет!</p>
  <p id="rBXE">Сегодня расскажу что произошло интересного в экосистеме java за период 11 по 25 августа 2023 года.</p>
  <p id="pljr">Погнали!</p>
  <h2 id="kY2m" data-align="center">Обновки</h2>
  <section style="background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="IEan">За свежими обновлениями вы сможете следить в чате, который ведет мой бот. Ссылка на вступление в канал <a href="https://t.me/+TiGJvZZ0FNgyYWI6" target="_blank">воть</a>.</p>
    <p id="7rAc">Оповещения о новых версиях приходят в реальном времени.</p>
  </section>
  <h2 id="5Jfy" data-align="center">Экосистема</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="lU6b"><a href="https://blog.jetbrains.com/idea/2023/08/intellij-idea-2023-2-1/" target="_blank">Вышла</a> Intellij IDEA2023.2.1. Исправили кучу багов.</p>
    <p id="12Df">Обновления в <a href="https://mail.openjdk.org/pipermail/valhalla-spec-observers/2023-August/002320.html" target="_blank">JEP401 Null-Restricted Value Object Storage (Preview)</a>. Ранее пропосал назывался Primitive Classes (Preview). </p>
    <p id="4Ctu">Первый <a href="https://mail.openjdk.org/pipermail/jdk-dev/2023-August/008059.html" target="_blank">релиз-кандидат</a> JDK 21. Базируется релиз-кандидат на <a href="https://github.com/openjdk/jdk/releases/tag/jdk-21%252B35" target="_blank">35 билде</a> JDK. </p>
    <p id="f2kz">Очень важная статья от лида проекта Valhalla John Rose <a href="https://cr.openjdk.org/~jrose/values/larval-values.html" target="_blank">Introduction: Q-descriptors and v-bytecodes</a>. Проект Valhalla в ближайших релизах jdk принесет нам value-типы, primitive object и еще кучу интересных изменений в системе типов.</p>
  </section>
  <h2 id="Dlvc" data-align="center">Статьи</h2>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="EV5x">
      <li id="92Gw"><a href="https://www.infoq.com/articles/federated-GraphQL-platform-Netflix/" target="_blank">Evolving the Federated GraphQL Platform at Netflix</a> [Kavitha Srinivasan, Ben Linders]</li>
      <li id="WKFu"><a href="https://dzone.com/articles/can-redis-be-used-as-a-relational-database" target="_blank">Can Redis Be Used as a Relational Database?</a> [Artem Artemev]</li>
      <li id="9ZHU"><a href="https://dzone.com/articles/my-final-take-on-gradle-vs-maven" target="_blank">My Final Take On Gradle (vs Maven)</a> [Nicolas Fränkel]</li>
      <li id="BYym"><a href="https://foojay.io/today/sealed-interfaces-and-pattern-matching-a-quick-dive-into-javas-modern-capabilities/" target="_blank">Sealed Interfaces and Pattern Matching: A Quick Dive into Java’s Modern Capabilities</a> [A N M Bazlur Rahman]</li>
      <li id="2vhQ"><a href="https://tschatzl.github.io/2023/08/04/jdk21-g1-parallel-gc-changes.html" target="_blank">JDK 21 G1/Parallel/Serial GC changes</a> [Thomas Schatzl]</li>
      <li id="9FaO"><a href="https://www.infoq.com/news/2023/08/semantic-kernel-java/" target="_blank">Semantic Kernel LLM Java SDK Now Available, Simplifying GenAI Integration</a> [Shaaf Syed]</li>
      <li id="65yL"><a href="https://cr.openjdk.org/~jrose/leyden/after-computed-constants.html" target="_blank">Using Computed Constants to Manage Static State in Leyden</a> [John Rose]</li>
      <li id="IzQ6"><a href="https://foojay.io/today/asyncgetcalltrace-reworked-frame-by-frame-with-an-iterative-touch/" target="_blank">AsyncGetCallTrace Reworked: Frame by Frame with an Iterative Touch!</a> [Johannes Bechberger]</li>
      <li id="c1wL"><a href="https://dzone.com/articles/do-not-stop-threads" target="_blank">Do Not Stop Threads!</a> [Peter Verhas]</li>
      <li id="HW6Y"><a href="https://vladmihalcea.com/jpa-bidirectional-sync-methods/" target="_blank">The best way to use JPA bidirectional sync methods</a> [Vlad Mihalcea]</li>
      <li id="IRmm"><a href="https://foojay.io/today/6-considerations-when-building-high-performance-java-microservices-with-eda/" target="_blank">6 Considerations when Building High-Performance Java Microservices with EDA</a> [Rob Austin]</li>
    </ol>
  </section>
  <p id="dOfB">P.S.: Подписывайтесь на <a href="https://t.me/javaminds" target="_blank">канал</a>, чтобы не пропустить самые свежие новости из мира Java.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@petrovwich/JEDv49</guid><link>https://teletype.in/@petrovwich/JEDv49?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/JEDv49?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Java Ecosystem Digest #49</title><pubDate>Sun, 13 Aug 2023 21:35:03 GMT</pubDate><description><![CDATA[<img src="https://img4.teletype.in/files/35/8e/358ee9c3-fdbd-4941-9dc7-4cd0f2536843.jpeg"></img>Всем привет!]]></description><content:encoded><![CDATA[
  <p id="7CK4">Всем привет!</p>
  <p id="rBXE">Сегодня расскажу что произошло интересного в экосистеме java за период 4 по 11 августа 2023 года.</p>
  <p id="pljr">Погнали!</p>
  <h2 id="kY2m" data-align="center">Обновки</h2>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="IEan">За свежими обновлениями вы сможете следить в чате, который ведет мой бот. Ссылка на вступление в канал <a href="https://t.me/+TiGJvZZ0FNgyYWI6" target="_blank">воть</a>.</p>
    <p id="7rAc">Оповещения о новых версиях приходят в реальном времени.</p>
  </section>
  <h2 id="5Jfy" data-align="center">Экосистема</h2>
  <section style="background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="lU6b"><a href="https://mail.openjdk.org/pipermail/quality-discuss/2023-July/001122.html" target="_blank">Анонс</a> важного изменения в процессинге аннотаций. В будущих версиях jdk процессинг аннотаций будет выключен по умолчанию и его необходимо будет включать руками.</p>
    <p id="bq4P">Вышел <a href="https://github.com/apache/maven/releases/tag/maven-3.9.4" target="_blank">maven</a> 3.9.4.  </p>
  </section>
  <h2 id="Dlvc" data-align="center">Статьи</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="EV5x">
      <li id="92Gw"><a href="https://www.infoq.com/news/2023/08/semantic-kernel-java" target="_blank">Java Joins the Ranks in Semantic Kernel SDK</a> [Shaaf Syed]</li>
      <li id="xyCL"><a href="https://foojay.io/today/the-inner-workings-of-safepoints/" target="_blank">The Inner Workings of Safepoints</a> [Johannes Bechberger]</li>
      <li id="VCqT"><a href="https://tschatzl.github.io/2023/08/04/jdk21-g1-parallel-gc-changes.html" target="_blank">JDK 21 G1/Parallel/Serial GC changes</a> [Thomas Schatzl]</li>
    </ol>
  </section>
  <p id="dOfB">P.S.: Подписывайтесь на <a href="https://t.me/javaminds" target="_blank">канал</a>, чтобы не пропустить самые свежие новости из мира Java.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@petrovwich/JEDv48</guid><link>https://teletype.in/@petrovwich/JEDv48?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/JEDv48?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Java Ecosystem Digest #48</title><pubDate>Sat, 05 Aug 2023 09:44:27 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/b1/cf/b1cf8806-83ae-41b4-99bb-462175f43ffe.png"></media:content><description><![CDATA[Всем привет!]]></description><content:encoded><![CDATA[
  <p id="7CK4">Всем привет!</p>
  <p id="rBXE">Сегодня расскажу что произошло интересного в экосистеме java за период с 28 июля  по 4 августа 2023 года.</p>
  <p id="pljr">Погнали!</p>
  <h2 id="kY2m" data-align="center">Обновки</h2>
  <section style="background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="IEan">За свежими обновлениями вы сможете следить в чате, который ведет мой бот. Ссылка на вступление в канал <a href="https://t.me/+TiGJvZZ0FNgyYWI6" target="_blank">воть</a>.</p>
    <p id="7rAc">Оповещения о новых версиях приходят в реальном времени.</p>
  </section>
  <h2 id="5Jfy" data-align="center">Экосистема</h2>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="lU6b">Новый черновик <a href="https://mail.openjdk.org/pipermail/panama-dev/2023-July/019510.html" target="_blank">JEP 8310626 Foreign Function &amp; Memory API</a>. Да, шестой по счету, но последний в этой серии. Больше не будет и JEP призван финализировать многолетние усилия по разработке FFM API.</p>
    <p id="jG0i">Еще один новый чернови JEP <a href="https://openjdk.org/jeps/8312611" target="_blank">8312611 Computed Constants</a>. Синглтоны на уровне языка. Да. Наконец-то на собеседованиях на тупой вопрос напишите мне потокобезопасный синглтон можно будет ткнуть носом в этот JEP.</p>
    <p id="DngS">Еще один, пожалуй самый интересный черновик JEP <a href="https://openjdk.org/jeps/8313278" target="_blank">8313278 Ahead of Time Compilation for the Java Virtual Machine</a>. Наработки из проекта GraalVM наконец-то начали переходить в JDK и становиться доступными всем.</p>
    <p id="J7x1">Ждем в 22-23 jdk все изменения.</p>
    <p id="24Ym">Протокол OpenTelemetry (OTLP) <a href="https://www.infoq.com/news/2023/08/otlp-version-one-released/" target="_blank">подрос</a> до версии 1.0.0. Это как метрики Prometheus, только стандарт.</p>
  </section>
  <h2 id="Dlvc" data-align="center">Статьи</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="EV5x">
      <li id="92Gw"><a href="https://dzone.com/articles/reliable-microservices-data-exchange-with-streamin?edition=833394" target="_blank">Reliable Microservices Data Exchange With Streaming Database</a> [Bobur Umurzokov]</li>
      <li id="paBR"><a href="https://dzone.com/articles/back-to-the-future-server-side-web-pages-with-kotl" target="_blank">Back to the Future: Server-Side Web Pages With Kotlin (Pt. 1)</a> [Severn Everett]</li>
      <li id="HPed"><a href="https://blog.bytebytego.com/p/database-indexing-strategies-part" target="_blank">Database Indexing Strategies - Part 2</a> [Alex Xu]</li>
      <li id="gExd"><a href="https://vladmihalcea.com/jdbc-profiling-visualvm/" target="_blank">JDBC Profiling with VisualVM</a> [Vlad Mihalcea]</li>
      <li id="IcXk"><a href="https://openjdk.org/projects/leyden/notes/03-toward-condensers" target="_blank">Toward Condensers</a> [Brian Goetz, Mark Reinhold, &amp; Paul Sandoz]</li>
      <li id="UjT4"><a href="https://blog.jbrains.ca/permalink/the-trouble-with-readable-code" target="_blank">The Trouble With &#x27;Readable&#x27; Code</a> [blog.jbrains.ca]</li>
      <li id="lwxW"><a href="https://blog.frankel.ch/authentication-api-gateway/" target="_blank">System architecture: move authentication to the API Gateway</a> [Nicolas Fränkel]</li>
      <li id="LagP"><a href="https://blog.jbrains.ca/permalink/how-tdd-seems-to-go-against-agility" target="_blank">How TDD Seems To Go Against Agility</a> [blog.jbrains.ca]</li>
      <li id="2tX6"><a href="https://blog.thecodewhisperer.com/permalink/from-stubs-to-parsers" target="_blank">Refactoring Test Doubles: From Stubs to Parsing</a> [blog.thecodewhisperer.com]</li>
      <li id="318e"><a href="https://foojay.io/today/the-ikea-effect/" target="_blank">The IKEA Effect</a> [Peter Lawrey]</li>
    </ol>
  </section>
  <p id="dOfB">P.S.: Подписывайтесь на <a href="https://t.me/javaminds" target="_blank">канал</a>, чтобы не пропустить самые свежие новости из мира Java.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@petrovwich/JEDv47</guid><link>https://teletype.in/@petrovwich/JEDv47?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/JEDv47?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Java Ecosystem Digest #47</title><pubDate>Wed, 26 Jul 2023 08:20:44 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/b1/cf/b1cf8806-83ae-41b4-99bb-462175f43ffe.png"></media:content><description><![CDATA[Всем привет!]]></description><content:encoded><![CDATA[
  <p id="7CK4">Всем привет!</p>
  <p id="rBXE">Сегодня расскажу что произошло интересного в экосистеме java за период с 21 по 28 июля 2023 года.</p>
  <p id="pljr">Погнали!</p>
  <h2 id="kY2m" data-align="center">Обновки</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="IEan">За свежими обновлениями вы сможете следить в чате, который ведет мой бот. Ссылка на вступление в канал <a href="https://t.me/+TiGJvZZ0FNgyYWI6" target="_blank">воть</a>.</p>
    <p id="7rAc">Оповещения о новых версиях приходят в реальном времени.</p>
  </section>
  <h2 id="5Jfy" data-align="center">Экосистема</h2>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="XWWn"><a href="https://blog.jetbrains.com/idea/2023/07/intellij-idea-2023-1-5/" target="_blank">Вышла</a> IntelliJ IDEA 2023.1.5 и <a href="https://www.jetbrains.com/idea/whatsnew/" target="_blank">2023.2</a>. По изменениям - добавили AI Assistant, улучшили отображение профайлера, добавили интеграцию с GitLab, улучшения для нового UI (я как раз им и пользуюсь, несмотря на то что он в бете).</p>
    <p id="CMNZ">Вышли jdk <a href="https://www.jpcert.or.jp/english/at/2023/at230012.html" target="_blank">20.0.2, 17.0.8, 11.0.20, 8u381</a>.</p>
    <p id="p54Z">JDK 21 <a href="https://mail.openjdk.org/pipermail/jdk-dev/2023-July/008034.html" target="_blank">перешла</a> в фазу Rampdown Phase Two. </p>
    <p id="bdbM"><a href="https://developer.android.com/studio/releases" target="_blank">Вышла</a> Android Studio Giraffe. Базируется на основе IntelliJ 2022.3. </p>
  </section>
  <h2 id="Dlvc" data-align="center">Статьи</h2>
  <section style="background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="EV5x">
      <li id="92Gw"><a href="https://vladmihalcea.com/soft-delete-jpa-version/" target="_blank">Soft delete and JPA version property</a> [VladMihalcea]</li>
      <li id="fTn6"><a href="https://foojay.io/today/jdk-safari-how-to-find-hidden-tools-in-the-jdk/" target="_blank">JDK Safari: How To Find Hidden Tools in the JDK</a> [Thomas Darimont]</li>
      <li id="1Uyl"><a href="https://foojay.io/today/how-we-developed-the-eclipse-openj9-criu-support-for-fast-java-startup/" target="_blank">How We Developed the Eclipse OpenJ9 CRIU Support for Fast Java Startup</a> [Younes Manton]</li>
      <li id="n9MQ"><a href="https://foojay.io/today/when-speed-matters-real-time-stream-processing-with-hazelcast-and-redpanda/" target="_blank">When Speed Matters: Real-time Stream Processing with Hazelcast and Redpanda</a> [Dunith Danushka, Fawaz Ghali]</li>
      <li id="fqH6"><a href="https://martinfowler.com/articles/xapo-architecture-experience.html" target="_blank">Decentralizing the Practice of Architecture at Xapo Bank</a> [Anouska (&quot;Noush&quot;) Streets, Kamil Dziublinski, Andrew Harmel-Law]</li>
      <li id="daWj"><a href="https://blog.frankel.ch/apisix-without-etcd/" target="_blank">Apache APISIX without etcd</a> [Nicolas Fränkel]</li>
      <li id="VElO"><a href="https://foojay.io/today/building-for-failure-best-practices-for-easy-production-debugging/" target="_blank">Building for Failure: Best Practices for Easy Production Debugging</a> [Shai Almog]</li>
    </ol>
  </section>
  <p id="dOfB">P.S.: Подписывайтесь на <a href="https://t.me/javaminds" target="_blank">канал</a>, чтобы не пропустить самые свежие новости из мира Java.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@petrovwich/JEDv46</guid><link>https://teletype.in/@petrovwich/JEDv46?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/JEDv46?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Java Ecosystem Digest #46</title><pubDate>Wed, 19 Jul 2023 20:54:22 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/b1/cf/b1cf8806-83ae-41b4-99bb-462175f43ffe.png"></media:content><description><![CDATA[Всем привет!]]></description><content:encoded><![CDATA[
  <p id="7CK4">Всем привет!</p>
  <p id="rBXE">Сегодня расскажу что произошло интересного в экосистеме java за период с 14 по 21 июля 2023 года.</p>
  <p id="pljr">Погнали!</p>
  <h2 id="kY2m" data-align="center">Обновки</h2>
  <section style="background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="IEan">За свежими обновлениями вы сможете следить в чате, который ведет мой бот. Ссылка на вступление в канал <a href="https://t.me/+TiGJvZZ0FNgyYWI6" target="_blank">воть</a>.</p>
    <p id="7rAc">Оповещения о новых версиях приходят в реальном времени.</p>
  </section>
  <h2 id="5Jfy" data-align="center">Экосистема</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="XWWn">В экосистеме тихо. Крупные релизы отгремели на прошлой неделе, jdk 21 пилится, баги фиксятся.</p>
  </section>
  <h2 id="Dlvc" data-align="center">Статьи</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="xpTN">
      <li id="kLho"><a href="https://medium.com/@iamprovidence/backend-side-architecture-evolution-n-layered-ddd-hexagon-onion-clean-architecture-643d72444ce4" target="_blank">Backend side architecture evolution (N-layered, DDD, Hexagon, Onion, Clean Architecture)</a> [iamprovidence]</li>
      <li id="BuIi"><a href="https://nanosoft.co.za/blog/post/clean-architecture-entity-model" target="_blank">Clean Architecture: Entities and Models</a> [Paul Allies]</li>
      <li id="c4Bk"><a href="https://levelup.gitconnected.com/whats-wrong-with-openapi-771e67e2bf6f" target="_blank">What’s Wrong With OpenAPI?</a> [Konstantin Malyshev]</li>
      <li id="Kdwb"><a href="https://foojay.io/today/effective-coding-with-java-observability/" target="_blank">Effective Coding with Java Observability</a> [Roni Dover]</li>
      <li id="stNF"><a href="https://foojay.io/today/reactive-database-access-on-the-jvm/" target="_blank">Reactive Database Access on the JVM</a> [Nicolas Frankel]</li>
    </ol>
  </section>
  <p id="dOfB">P.S.: Подписывайтесь на <a href="https://t.me/javaminds" target="_blank">канал</a>, чтобы не пропустить самые свежие новости из мира Java.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@petrovwich/PcaT8DwiHzw</guid><link>https://teletype.in/@petrovwich/PcaT8DwiHzw?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/PcaT8DwiHzw?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Юнит тесты не нужны</title><pubDate>Sat, 15 Jul 2023 17:53:54 GMT</pubDate><description><![CDATA[<img src="https://img4.teletype.in/files/72/f5/72f54d0a-33ed-407f-9a6b-be1896577aa4.jpeg"></img>Провокационный заголовок, не правда ли? &quot;Как это не нужны? А как мы будем проверять корректность кода тогда?&quot; - спросите вы. Примерно также вопрошал недавно на собеседовании кандидат и приводил несколько весьма уместных и популярных аргументов за практику написания юнит тестов. Давайте я здесь их перечислю:]]></description><content:encoded><![CDATA[
  <nav>
    <ul>
      <li class="m_level_1"><a href="#URX1">Интро</a></li>
      <li class="m_level_1"><a href="#LVnh">Исторический экскурс</a></li>
      <li class="m_level_1"><a href="#diJu">Прожарка юнит тестирования</a></li>
      <li class="m_level_1"><a href="#8INB">Неочевидные бенефиты интеграционных тестов</a></li>
      <li class="m_level_1"><a href="#Juec">Когда юнит-тесты действительно нужны</a></li>
      <li class="m_level_1"><a href="#iAsu">Выводы</a></li>
    </ul>
  </nav>
  <h2 id="URX1" data-align="center">Интро</h2>
  <p id="11CN">Провокационный заголовок, не правда ли? &quot;Как это не нужны? А как мы будем проверять корректность кода тогда?&quot; - спросите вы. Примерно также вопрошал недавно на собеседовании кандидат и приводил несколько весьма уместных и популярных аргументов за практику написания юнит тестов. Давайте я здесь их перечислю:</p>
  <p id="NRFk">1. Мне, как разработчику добавляющему новую функциональность, необходимо провести проверку мною же написанного кода, поэтому я напишу юнит-тест на метод, который я написал</p>
  <p id="M360">2. Мне, как разработчику изменяющему существующую фнукциональность, всегда необходимо быть уверенным, что мое изменение в коде не изменит ранее работавший функционал, поэтому я напишу юнит тест на метод, который я изменил</p>
  <p id="ThqW">И для затравки вот еще несколько тезисов из <a href="https://dzone.com/articles/best-practices-for-writing-unit-tests-a-comprehens" target="_blank">статьи</a> которая несет бест практис в массы для юнит тестов.</p>
  <p id="LA6l">3. Юнит тесты спасают от регрессии</p>
  <p id="be9J">4. Юнит тесты служат источником документации</p>
  <p id="ZPBH">5. Юнит тесты помогают при рефакторинге</p>
  <p id="eBox">Теперь давайте разбираться что же с каждым из этих тезисов не так.</p>
  <h2 id="LVnh" data-align="center">Исторический экскурс</h2>
  <p id="64uf">Но для начала вспомним знаменитую пирамиду тестов. Она имеет сотни форм и вариаций, но автор, <strong>Mike Cohn</strong>, назвал ее <strong>Agile Testing Pyramid</strong> (или test automation pyramid) и выглядит она следующим образом:</p>
  <figure id="akQJ" class="m_original" data-caption-align="center">
    <img src="https://img4.teletype.in/files/72/f5/72f54d0a-33ed-407f-9a6b-be1896577aa4.jpeg" width="256" />
    <figcaption>Взято без разрешения с https://www.mountaingoatsoftware.com/</figcaption>
  </figure>
  <p id="RLsx">Основной тезис автора - комплексные (читай UI, интеграционные и сервисные) тесты писать сложно, дорого и долго, а у нас тут аджайл вообще-то, нам нужно хоп-хоп и в продакшен уже вчера. Нам просто некогда писать тесты и скрупулезно проверять результаты нашей работы, мы продуктовый бэклог разгребаем. Штош. Во-первых, это наглая ложь. Во-вторых, я в другом городе, что ты мне сделаешь. За мат извени.</p>
  <p id="O9i4">Из данного, безусловно ошибочного, тезиса и вытекает как сама пирамида тестирования, так и общее заблуждение - нужно писать как можно больше юнит тестов и как можно меньше комплексных интеграционных тестов.</p>
  <h2 id="diJu" data-align="center">Прожарка юнит тестирования</h2>
  <p id="wbxq">Теперь вернемся к тезисам и попробуем понять уже что с ними не так.</p>
  <blockquote id="Jdvi">Мне, как разработчику добавляющему новую функциональность, необходимо провести проверку мною же написанного кода, поэтому я напишу юнит-тест на метод, который я написал</blockquote>
  <p id="wbTd">В данном тезисе есть рациональное зерно - код нужно проверять, но причина проверки некорректная. Код нужно проверять не потому что я его написал и хочу обезопасить себя от самого же себя, но код нужно проверять на соответствие требованиям. Источник кода не я, а требования. Требования в виде ТЗ, сообщения в мессенджере, письма на почте. Корректность - это единственный критерий, который могут и должны проверять тесты. Юнит тесты ничего не знают о требованиях по своей природе. Юнит тесты оперируют слишком сильно изолированным контекстом, чтобы знать достаточно о том что они проверяют. Вы можете написать тесты отдельно на бизнес-логику, отдельно на веб слой, отдельно на слой хранения данных (хотя кто тестирует слой хранения данных, а?), но вы все равно не сможете гарантировать, что ваше приложение, при соединении все трех слоев, будет работать корректно. </p>
  <p id="LPdM">Интеграционные тесты - могут и делают это. Причем с меньшим объемом кода и затратами на поддержку на дистанции. Далее я покажу это на примерах.</p>
  <hr />
  <blockquote id="0GIs">Мне, как разработчику изменяющему существующую фнукциональность, всегда необходимо быть уверенным, что мое изменение в коде не изменит ранее работавший функционал, поэтому я напишу юнит тест на метод, который я изменил</blockquote>
  <p id="xzS1">Это мой любимый аргумент. Как будто мы живем в мире где прочие виды тестов не делают того же самого. Юнит тесты даже не решают этой проблемы. Вы поменяли логику и теперь будете уповать на то что сотни изолированных друг от друга тестов на выдуманных данных будут проверять то что будет работать в связке на реальных данных. Тестировать на реальных данных - нельзя. Тестировать в связке это уже не юнит тесты. В итоге я, поменяв строчку в одном месте в проекте, жду что через 10 вызывов моего метода есть тест, который и проверит то что я изменил. И знаете что? Он не проверит, потому что вы замокали вызов своего сервиса в других местах. И - изоляция. </p>
  <p id="TTvc">В интеграционных тестах такое исключено по определению. Вы поднимаете весь контекст и вкупе тестируете всю цепочку вызовов. Вы поменяли в одном месте и у вас упало в другом, вы обезопасили себя. Если хотите приближенных к реальности вызовов - выгружаете данные с прода, обфусцируете и работаете с ними. </p>
  <hr />
  <blockquote id="k2mQ">Юнит тесты спасают от регрессии</blockquote>
  <p id="mvlO">Не совсем понятно и никто не удосужится объяснить как. В юнит тестах не принято тестировать большой контекст, а регрессия возникает только на большом объеме кода и данных. Регрессия возможна на стыке сервисов, на цепочке вызовов. Юнит тесты тестируют только очевидные сценарии, о которых подумал разработчик, писавший тест. Зачастую, в погоне за процентом покрытия, юнит тестами покрывают также невозможные сценарии, которые никогда не происходят в реальном мире на реальных данных. Самый распространенный пример - при использовании скриптов миграции разработчик забыл добавить скрипт в список скриптов миграции. На локальном окружении все работает, потому что создание и обновление таблиц он настроил автоматически, без скриптов, а на тест, прод окружениях все сломалось.</p>
  <p id="mgTd">Интеграционные тесты же из-за их тяжеловесности сильно дисциплинируют разработчика и делают бесполезными пресловутые проценты покрытия, но проверяют такие сценарии, которые невозможно включить в процент покрытия. Интеграционные тесты спасают от регрессии на уровне одного сервиса. Чем больше тестов вы написали, тем быстрее вы увидите регрессию. У вас всегда есть очевидная метрика - время сборки с тестами. Если где-то у вас появилась регрессия после правок, вы это заметите еще на фазе сборки локально, на рабочей станции разработчика.</p>
  <hr />
  <blockquote id="Fjfk">Юнит тесты служат источником документации</blockquote>
  <p id="0hWm">WAT?! Нет, серьезно, я бы хотел увидеть человека, который по тестам может объянить хоть что-то в проекте. Ни один юнит тест не дает ответа с первого взгляда на него на следующие вопросы: почему тест заигнорен (если заигнорен), почему у него именно такие входные данные, почему он сломался именно сейчас, почему он работал ранее, почему он периодически падает, почему именно такие сравнения с ожидаемым результатом. А если тест не объясняет сам себя, то что, скажите мне на милость, этот несчастный тест сможет объяснить в проекте?</p>
  <p id="raxu">Интеграционные тесты могут и должны служить не документацией, но прямой отсылкой к документации. Например, я всегда пишу интеграционные тесты, отталкиваясь от бизнес-сценариев и уже название несет в себе ответ что подано на вход и что ожидается: testUpdateDocuments_shouldUpdateDocument, testUpdateDocuments_shouldReturnAccessError, testUpdateDocuments_shouldCreateNeDocument, testUpdateDocumentsWithEmptyBody_shouldReturnError. </p>
  <p id="jAyn">Каждый тест проверяет бизнес-сценарий, каждый тест принимает пачку данных, которые будут отправляться в боевом окружении, каждый тест складывает данные в базу / отправляет сообщение в очередь / пишет на диск и т.д. Все сайд-эффекты проверены. При наличии идентификатороф юзкейсов можно в название теста выносить идентификатор. testUseCase12.2_negative, testUseCase12.2_positive отсылают к спецификации, которая и должна быть истиной в последней инстанции на больших проектах с большим количеством команд.</p>
  <hr />
  <blockquote id="Yn9K">Юнит тесты помогают при рефакторинге</blockquote>
  <p id="wb9q">Нет, нет и еще раз нет. Чем больше юнит тестов вы написали, чем больше процент покрытия, тем больше вы цементируете ваш код и тем больше времени в будущем вы потратите на поддержку тестов. </p>
  <p id="KNGQ">Не код, но тесты вы будете менять очень часто. Потому что какие-то тесты будут постоянно падать. Вы поменяли одну строчку в коде, но упало 40 тестов? Удачи, дружище, теперь твоя задача понять что тестируют эти 40 тестов, почему они упали, действительно ли они упали из-за того что появился баг или просто нужно поправить сами тесты.</p>
  <p id="OExe">В случае интеграционных тестов их банально меньше. На порядок или два меньше. Если вы правите логику одного бизнес-сценария, то у вас упадут тесты только для этого бизнес-сценария. Потому что вы написали тесты опираясь на бизнес-сценарии. Остальные тесты успешно пройдут. С другой стороны, если вы не погружены в контекст и поменяв код, увидели, что упали тесты для больше чем одного сценария, а аналитик или заказчик об этом не сообщили, то это повод подсветить проблему - мы меняем в одном месте, а ломаются еще два других.</p>
  <h2 id="8INB" data-align="center">Неочевидные бенефиты интеграционных тестов</h2>
  <ol id="l709">
    <li id="czMs">Чем больше интеграционных тестов написано, тем реже вам потребуется запускать модули и проверять работу через Postman, Insomnia etc. Например, у меня на проекте локально модули запускаются мною только когда я хочу что-то проверить в связке нескольких сервисов. При выполнении правок в одном сервисе, я никогда его не запускаю и процент багов потрясающе мал - сильно меньше чем было до того как я начал писать только интеграцонные тесты.</li>
    <li id="oaRN">Вы учитесь думать не в терминах кода, а в терминах бизнеса. Бизнесу, как правило, плевать какие вы базы используете, как вы кэшируете и что за фреймворк у вас. Бизнесу важно открыть страницу и увидеть список товаров, например. Теперь когда вы будете разговаривать, то будете говорить на одном языке - на языке сценариев использования вашим приложением. </li>
    <li id="qlZO">Вы будете тратить сильно меньше времени на поддержку и написание тестов. Инфраструктура интеграционных тестов пишется один раз и далее эксплуатируется. У интеграционных тестов высокий процент переиспользования инфраструктурного кода. Интеграционных тестов банально сильно меньше чем юнит.</li>
  </ol>
  <h2 id="Juec" data-align="center">Когда юнит-тесты действительно нужны</h2>
  <p id="w86P">Бывает ограниченное число случаев, когда юнит тесты действительно нужны, а интеграционные построить очень сложно или вовсе невозможно. Вот те, которые мне известны:</p>
  <ul id="wb6r">
    <li id="rLXt">Вы разрабатываете библиотеку, в которой нет интеграций</li>
    <li id="icNb">Вам нужно что-то быстро проверить (как работает библиотечная функция, как будет вести себя функция на известных вам данных)</li>
  </ul>
  <h2 id="iAsu" data-align="center">Выводы</h2>
  <p id="R4lp">В качестве выводов скажу банальные вещи:</p>
  <ol id="KS8B">
    <li id="U2RS">Всегда включайте голову и перестаньте слепо следовать рекомендациям рандомных мужиков в интернете (даже моим)</li>
    <li id="XJPl">Применяйте инструменты и методологии на основе необходимости, но не рекомендаций (зачем вам 80% покрытия кода тестами, если и при 20% все отлично?)</li>
    <li id="r3S7">Всегда экономьте время: свое и команды. Думайте об экономии на дистанции в несколько лет.</li>
  </ol>
  <p id="qUgS"></p>
  <p id="eDmj">P.S.: Эта статья выросла из поста (<a href="https://t.me/javaminds/301" target="_blank">https://t.me/javaminds/301</a>) в моем телеграм-канале. Подписывайтесь, кстати, если еще нет.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@petrovwich/JEDv45</guid><link>https://teletype.in/@petrovwich/JEDv45?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/JEDv45?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Java Ecosystem Digest #45</title><pubDate>Sat, 08 Jul 2023 10:55:20 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/b1/cf/b1cf8806-83ae-41b4-99bb-462175f43ffe.png"></media:content><description><![CDATA[Всем привет!]]></description><content:encoded><![CDATA[
  <p id="7CK4">Всем привет!</p>
  <p id="rBXE">Сегодня расскажу что произошло интересного в экосистеме java за период с 7 по 14 июля 2023 года.</p>
  <p id="pljr">Погнали!</p>
  <h2 id="kY2m" data-align="center">Обновки</h2>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="IEan">Так как я человек ленивый и так получилось, что программированием зарабатываю себе на жизнь, то я решил автоматизировать получение информации о новых версиях библиотек и фреймворков. Отныне все обновления вы можете отслеживать в канале, который заботливо ведет мой бот. Ссылка на вступление в канал <a href="https://t.me/+TiGJvZZ0FNgyYWI6" target="_blank">воть</a>. </p>
    <p id="OCQ9">Каждый последующий дайджест я буду напоминать, что все обновления версий в канале.</p>
    <p id="7rAc">Оповещения о новых версиях приходят в реальном времени. </p>
  </section>
  <h2 id="5Jfy" data-align="center">Экосистема</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="vRRS"><a href="https://blog.jetbrains.com/idea/2023/07/intellij-idea-2023-1-4/" target="_blank">Вышла</a> Intellij IDEA 2023.1.4.</p>
    <p id="8f5s"><a href="https://blog.jetbrains.com/kotlin/2023/07/kotlin-1-9-0-released/" target="_blank">Вышел</a> Kotlin 1.9.0.</p>
    <p id="6VX4"><a href="https://www.agilejava.eu/2023/07/09/hashtag-jakarta-ee-184/" target="_blank">Большой</a> список плана обновлений по предстоящему в 1 квартале 2024 года релизу стандарта JakartaEE 11.</p>
    <p id="3gEC">Большой релиз в мире фреймворка Micronaut - <a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v4.0.0" target="_blank">вышла</a> мажорная версия 4.0.0 (теперь мне болезненно мигрировать на него бота).</p>
  </section>
  <h2 id="Dlvc" data-align="center">Статьи</h2>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="xpTN">
      <li id="kLho"><a href="https://blog.jetbrains.com/idea/2023/06/reactive-programming-made-easy/" target="_blank">Reactive Programming Made Easy</a> [Irina Maryasova]</li>
      <li id="MIVP"><a href="https://jpa-buddy.com/blog/dynamic-entity-graphs-in-spring-data-jpa/" target="_blank">Dynamic Entity Graphs in Spring Data JPA</a> [Andrey Belyaev]</li>
      <li id="ISo9"><a href="https://blog.frankel.ch/sticky-sessions-apache-apisix/1/" target="_blank">Sticky sessions with Apache APISIX</a> [Nicolas Fränkel]</li>
      <li id="PH2i"><a href="https://gradle.com/blog/how-gradle-cut-aws-storage-costs-by-75-percent-using-s3/" target="_blank">How Gradle cut AWS storage costs by 75% using S3</a> [Oliver White]</li>
      <li id="I9Wd"><a href="https://www.allthingsdistributed.com/2023/06/a-few-words-on-taking-notes.html" target="_blank">A few words on taking notes</a> [Werner Vogels]</li>
      <li id="Iuhe"><a href="https://advancedweb.hu/how-to-provide-information-about-the-backend-environment-to-frontend-clients/" target="_blank">How to provide information about the backend environment to frontend clients</a> [Tamás Sallai]</li>
      <li id="I2zf"><a href="https://foojay.io/today/how-to-optimise-cpu-performance-through-isolation-and-system-tuning/" target="_blank">How to Optimise CPU Performance Through Isolation and System Tuning</a> [Peter Lawrey]</li>
      <li id="kSp2"><a href="https://foojay.io/today/the-curious-case-of-different-runtimes-with-different-training-data-jit/" target="_blank">The Curious Case of Different Runtimes</a> [René Schwietzke]</li>
      <li id="udta"><a href="https://reflectoring.io/clean-code/" target="_blank">The Art of Writing Clean Code: A Key to Maintainable Software</a> [Gary Espinosa]</li>
      <li id="ZJCE"><a href="https://foojay.io/today/working-unfamiliar-codebase/" target="_blank">Working on An Unfamiliar Codebase</a> [Nicolas Frankel]</li>
      <li id="dCek"><a href="https://foojay.io/today/seven-reasons-you-should-not-ignore-flaky-tests/" target="_blank">Seven Reasons You Should Not Ignore Flaky Tests</a> [Trisha Gee]</li>
      <li id="Q375"><a href="https://blog.frankel.ch/reactive-database-access/" target="_blank">Reactive database access on the JVM</a> [Nicolas Fränkel]</li>
      <li id="qLDN"><a href="https://spring.io/blog/2023/07/05/active-health-check-strategies-with-spring-cloud-gateway" target="_blank">Active Health Check strategies with Spring Cloud Gateway</a> [Ignacio Lozano]</li>
      <li id="DbnW"><a href="https://www.infoq.com/news/2023/07/java-enhance-zgc/" target="_blank">Java Enhances Z Garbage Collector with Generational Capabilities</a> [A N M Bazlur Rahman]</li>
    </ol>
  </section>
  <p id="dOfB">P.S.: Подписывайтесь на <a href="https://t.me/javaminds" target="_blank">канал</a>, чтобы не пропустить самые свежие новости из мира Java.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@petrovwich/JEDv44</guid><link>https://teletype.in/@petrovwich/JEDv44?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/JEDv44?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Java Ecosystem Digest #44</title><pubDate>Wed, 28 Jun 2023 14:07:59 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/b1/cf/b1cf8806-83ae-41b4-99bb-462175f43ffe.png"></media:content><description><![CDATA[Всем привет!]]></description><content:encoded><![CDATA[
  <p id="7CK4">Всем привет!</p>
  <p id="rBXE">Сегодня расскажу что произошло интересного в экосистеме java за период с 23 по 7 июля 2023 года.</p>
  <p id="pljr">Погнали!</p>
  <h2 id="xaD2" data-align="center">Обновки</h2>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="86E5">
      <li id="AMHs">Apache Beam <a href="https://github.com/apache/beam/releases/tag/v2.49.0-RC1" target="_blank">2.49.0-RC1</a> </li>
      <li id="HgKx">Apache Camel <a href="https://github.com/apache/camel/releases/tag/camel-3.21.0" target="_blank">3.21.0</a>, <a href="https://github.com/apache/camel/releases/tag/camel-4.0.0-RC1" target="_blank">4.0.0-RC1</a> </li>
      <li id="gHMT">Apache Doris <a href="https://github.com/apache/doris/releases/tag/1.1.6-rc01" target="_blank">1.1.6-rc01</a>, <a href="https://github.com/apache/doris/releases/tag/1.2.6-rc01" target="_blank">1.2.6-rc01</a>, <a href="https://github.com/apache/doris/releases/tag/2.0-beta" target="_blank">2.0-beta</a> </li>
      <li id="zeXo">Eclipse Glassfish <a href="https://github.com/eclipse-ee4j/glassfish/releases/tag/7.0.6" target="_blank">7.0.6</a> </li>
      <li id="smhh">Elasticsearch <a href="https://github.com/elastic/elasticsearch/releases/tag/v7.17.11" target="_blank">7.17.11</a>, <a href="https://github.com/elastic/elasticsearch/releases/tag/v8.8.2" target="_blank">8.8.2</a> </li>
      <li id="4XKC">Failsafe <a href="https://github.com/failsafe-lib/failsafe/releases/tag/failsafe-parent-3.3.2" target="_blank">3.3.2</a> </li>
      <li id="TQf1">Gradle <a href="https://github.com/gradle/gradle/releases/tag/v7.6.2" target="_blank">7.6.2</a>, <a href="https://github.com/gradle/gradle/releases/tag/v8.2.0-RC3" target="_blank">8.2.0-RC3</a>, <a href="https://github.com/gradle/gradle/releases/tag/v8.2.0" target="_blank">8.2.0</a> </li>
      <li id="7myR">guava <a href="https://github.com/google/guava/releases/tag/v32.1.0" target="_blank">32.1.0</a>, <a href="https://github.com/google/guava/releases/tag/v32.1.1" target="_blank">32.1.1</a> </li>
      <li id="oLBg">jdk21 <a href="https://github.com/openjdk/jdk/releases/tag/jdk-21%252B29" target="_blank">build 29</a>, <a href="https://github.com/openjdk/jdk/releases/tag/jdk-21%252B30" target="_blank">build 30</a> </li>
      <li id="GKYb">jdk22 <a href="https://github.com/openjdk/jdk/releases/tag/jdk-22%252B4" target="_blank">build 4</a>, <a href="https://github.com/openjdk/jdk/releases/tag/jdk-22%252B5" target="_blank">build 5</a> </li>
      <li id="62PO">JHipster Lite <a href="https://github.com/jhipster/jhipster-lite/releases/tag/v0.36.0" target="_blank">0.36.0</a> </li>
      <li id="Y6ww">JobRunr <a href="https://github.com/jobrunr/jobrunr/releases/tag/v6.2.3" target="_blank">6.2.3</a> </li>
      <li id="bFFk">JReleaser <a href="https://github.com/jreleaser/jreleaser/releases/tag/v1.7.0" target="_blank">1.7.0</a> </li>
      <li id="aCU3">Hazelcast <a href="https://github.com/hazelcast/hazelcast/releases/tag/v5.0.5" target="_blank">5.0.5</a> </li>
      <li id="Hf0B">Helidon <a href="https://github.com/helidon-io/helidon/releases/tag/3.2.2" target="_blank">3.2.2</a> </li>
      <li id="28HN">Hibernate ORM <a href="https://github.com/hibernate/hibernate-orm/releases/tag/6.2.6" target="_blank">6.2.6</a> </li>
      <li id="RUYP">Hibernate types <a href="https://github.com/vladmihalcea/hypersistence-utils/releases/tag/hypersistence-utils-parent-3.5.1" target="_blank">3.5.1</a> </li>
      <li id="qc07">Kestra <a href="https://github.com/kestra-io/kestra/releases/tag/v0.10.0" target="_blank">0.10.0</a> </li>
      <li id="ocWG">Micronaut <a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v4.0.0-RC4" target="_blank">4.0.0-RC4</a>, <a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v4.0.0-RC5" target="_blank">4.0.0-RC5</a></li>
      <li id="WBql">MicroStream <a href="https://github.com/microstream-one/microstream/releases/tag/08.01.01-MS-GA" target="_blank">08.01.01</a> </li>
      <li id="YHXv">PostgreSQL <a href="https://github.com/postgres/postgres/releases/tag/REL_16_BETA2" target="_blank">16 BETA2</a> </li>
      <li id="IRc1">Quarkus <a href="https://github.com/quarkusio/quarkus/releases/tag/2.16.8.Final" target="_blank">2.16.8.Final</a>, <a href="https://github.com/quarkusio/quarkus/releases/tag/3.1.3.Final" target="_blank">3.1.3.Final</a>, <a href="https://github.com/quarkusio/quarkus/releases/tag/3.2.0.Final" target="_blank">3.2.0.Final</a> </li>
      <li id="2KAs">Resilience4j <a href="https://github.com/resilience4j/resilience4j/releases/tag/v2.1.0" target="_blank">2.1.0</a> </li>
      <li id="qMe2">Wildfly <a href="https://github.com/wildfly/wildfly/releases/tag/29.0.0.Beta1" target="_blank">29.0.0.Beta1</a> </li>
    </ol>
  </section>
  <h2 id="5Jfy" data-align="center">Экосистема</h2>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Bvwi">Спустя более чем 6 лет <a href="https://github.com/eclipse/jnosql/releases/tag/1.0.0" target="_blank">вышла</a> версия 1.0.0 библиотеки <a href="http://www.jnosql.org/" target="_blank">JNoSQL</a> реализации стандарта <a href="https://jakarta.ee/specifications/nosql/" target="_blank">Jakarta NoSQL</a>.</p>
    <p id="hOKh">Проект <a href="https://openjdk.org/projects/crac/" target="_blank">CRaC</a> постепенно обретает поддержку у фреймворков. Micronaut и Quarkus уже поддерживают эту технологию, а Spring как самый особенный у мамы начнет поддержку <a href="https://www.youtube.com/watch?v=IgmeFeTU1a4&t=2027s" target="_blank">в ноябре 2023 года</a>. Почитайте <a href="https://www.infoq.com/news/2023/06/crac-cracks-mainstream-adoption/" target="_blank">интервью</a> с техническим директором компании Azul - компании по факту затянувшей в jdk CRaC.</p>
    <p id="h8Lh">Заодно можете посмотреть видео с конференции <a href="https://www.youtube.com/watch?v=IgmeFeTU1a4&list=PLe6FX2SlkJdTlHjktJqUWaFtaRBOkZ8JZ" target="_blank">Spring I/O 2023</a>.</p>
    <p id="lG59">Вышел maven <a href="https://github.com/apache/maven/releases/tag/maven-3.9.3" target="_blank">3.9.3</a>.</p>
    <p id="Ewz5">Интересный <a href="https://cr.openjdk.org/~vklang/Gatherers.html" target="_blank">черновик</a> предложения для Stream API от Viktor Klang. Глядишь, спустя почти 10 лет после релиза в Stream API завезут расширяемость.</p>
  </section>
  <h2 id="Dlvc" data-align="center">Статьи</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="msBr">
      <li id="4gpR"><a href="https://infoq.com/articles/exploring-java-records" target="_blank">Exploring Java Records beyond Data Transfer Objects</a> [Otavio Santana]</li>
      <li id="UVrS"><a href="https://foojay.io/today/the-anatomy-of-a-jvm/" target="_blank">The Anatomy of a JVM</a> [Frank Delporte]</li>
      <li id="L2Fp"><a href="https://foojay.io/today/exploring-java-records-in-a-jakarta-ee-context/" target="_blank">Exploring Java Records In A Jakarta EE Context</a> [Jadon Ortlepp]</li>
      <li id="gFH8"><a href="https://blog.frankel.ch/spring-cloud-gateway-apache-apisix/" target="_blank">Evaluating Apache APISIX vs. Spring Cloud Gateway</a> [Nicolas Fränkel]</li>
      <li id="UArO"><a href="https://spring.io/blog/2023/06/19/spring-boot-31-connectiondetails-abstraction" target="_blank">Spring Boot 3.1&#x27;s ConnectionDetails abstraction</a> [Moritz Halbritter]</li>
      <li id="koxH"><a href="https://www.petrikainulainen.net/programming/testing/how-to-write-mockmvc-tests-without-objectmapper-part-one/" target="_blank">How to Write MockMvc Tests Without ObjectMapper, Part One - The Simplest Possible Solution</a> [Petri Kainulainen]</li>
      <li id="yDGG"><a href="https://inside.java/2023/06/20/optimizing-memory-utilization-zgc/" target="_blank">Optimizing Memory Utilization with Automated Heap Sizing in ZGC</a> [Marina Shimchenko]</li>
      <li id="AvIZ"><a href="https://foojay.io/today/exploring-java-21s-intriguing-additions-unveiling-new-features-part-1/" target="_blank">Exploring Java 21’s Intriguing Additions: Unveiling New Features (Part 1)</a> [A N M Bazlur Rahman]</li>
      <li id="dgpM"><a href="https://foojay.io/today/unique-identifiers-based-on-timestamps-in-distributed-applications/" target="_blank">Unique Identifiers Based on Timestamps in Distributed Applications</a> [Peter Lawrey]</li>
      <li id="HrHC"><a href="https://godwin-pinto.medium.com/what-is-the-right-structure-for-hexagonal-architecture-1e691721c246" target="_blank">What is the right structure? for Hexagonal Architecture</a> [Godwin Pinto]</li>
      <li id="hFNC"><a href="https://medium.com/coupang-engineering/our-backend-strategy-to-handle-massive-traffic-d30cd6cc4fb2" target="_blank">Our backend strategy to handle massive traffic</a> [Gogi (Du Hyeong) Kim, Key (Ki Hyeon) Kim]</li>
      <li id="USSq"><a href="https://medium.com/geekculture/system-design-design-a-rate-limiter-81d200c9d392" target="_blank">System Design — Design A Rate Limiter</a> [Rahul Kapoor]</li>
      <li id="EFIL"><a href="https://medium.com/@abhishekranjandev/concurrency-conundrum-in-booking-systems-2e53dc717e8c" target="_blank">Concurrency Conundrum in Booking Systems</a> [Abhishek Ranjan]</li>
      <li id="bd0H"><a href="https://medium.com/att-israel/will-modular-monolith-replace-microservices-architecture-a8356674e2ea" target="_blank">Will Modular Monolith Replace Microservices Architecture?</a> [Itiel Maayan]</li>
      <li id="q2zz"><a href="https://www.javaspecialists.eu/archive/Issue310-Garbage-Collection-and-P99-Latency.html" target="_blank">Garbage Collection and P99 Latency</a> [Kirk Pepperdine]</li>
    </ol>
  </section>
  <p id="dOfB">P.S.: Подписывайтесь на <a href="https://t.me/javaminds" target="_blank">канал</a>, чтобы не пропустить самые свежие новости из мира Java.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@petrovwich/JEDv43</guid><link>https://teletype.in/@petrovwich/JEDv43?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/JEDv43?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Java Ecosystem Digest #43</title><pubDate>Fri, 23 Jun 2023 08:35:10 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/b1/cf/b1cf8806-83ae-41b4-99bb-462175f43ffe.png"></media:content><description><![CDATA[Всем привет!]]></description><content:encoded><![CDATA[
  <p id="7CK4">Всем привет!</p>
  <p id="rBXE">Сегодня расскажу что произошло интересного в экосистеме java за период с 16 по 23 июня 2023 года.</p>
  <p id="pljr">Погнали!</p>
  <h2 id="xaD2" data-align="center">Обновки</h2>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="86E5">
      <li id="Odkc">Apache Johnzon <a href="https://github.com/apache/johnzon/releases/tag/v1.2.21" target="_blank">1.2.21</a> </li>
      <li id="MLqQ">Apache Spark <a href="https://github.com/apache/spark/releases/tag/v3.4.1" target="_blank">3.4.1</a>, <a href="https://github.com/apache/spark/releases/tag/v3.4.1-rc1" target="_blank">3.4.1-rc1</a> </li>
      <li id="0PYl">Hazelcast <a href="https://github.com/hazelcast/hazelcast/releases/tag/v5.1.7" target="_blank">5.1.7</a> </li>
      <li id="K2SR">Hibernate types <a href="https://github.com/vladmihalcea/hypersistence-utils/releases/tag/hypersistence-utils-parent-3.5.0" target="_blank">3.5.0</a> </li>
      <li id="E9MN">Hibernate Validator <a href="https://github.com/hibernate/hibernate-validator/releases/tag/8.0.1.Final" target="_blank">8.0.1.Final</a> </li>
      <li id="7VOQ">jdk21 <a href="https://github.com/openjdk/jdk/releases/tag/jdk-21%252B28" target="_blank">build 28</a> </li>
      <li id="9RcN">jdk22 <a href="https://github.com/openjdk/jdk/releases/tag/jdk-22%252B3" target="_blank">build 3</a> </li>
      <li id="GWWP">JHipster Lite <a href="https://github.com/jhipster/jhipster-lite/releases/tag/v0.35.0" target="_blank">0.35.0</a> </li>
      <li id="TaZl">JobRunr <a href="https://github.com/jobrunr/jobrunr/releases/tag/v6.2.2" target="_blank">6.2.2</a> </li>
      <li id="5JOB">Kestra <a href="https://github.com/kestra-io/kestra/releases/tag/v0.9.5" target="_blank">0.9.5</a> </li>
      <li id="Nlnq">Liquibase <a href="https://github.com/liquibase/liquibase/releases/tag/v4.23.0" target="_blank">4.23.0</a> </li>
      <li id="OCIU">Micronaut <a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v3.9.4" target="_blank">3.9.4</a>, <a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v4.0.0-RC2" target="_blank">4.0.0-RC2</a>, <a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v4.0.0-RC3" target="_blank">4.0.0-RC3</a> </li>
      <li id="Utoi">Quarkus <a href="https://github.com/quarkusio/quarkus/releases/tag/3.2.0.CR1" target="_blank">3.2.0.CR1</a> </li>
      <li id="pZ0b">Spring Boot <a href="https://github.com/spring-projects/spring-boot/releases/tag/v2.7.13" target="_blank">2.7.13</a>, <a href="https://github.com/spring-projects/spring-boot/releases/tag/v3.0.8" target="_blank">3.0.8</a>, <a href="https://github.com/spring-projects/spring-boot/releases/tag/v3.1.1" target="_blank">3.1.1</a>  </li>
    </ol>
  </section>
  <h2 id="5Jfy" data-align="center">Экосистема</h2>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Go0i">Вышла Intelliji IDEA 2023.1.3. Полный список изменений <a href="https://blog.jetbrains.com/idea/2023/06/intellij-idea-2023-1-3/" target="_blank">по ссылке</a>.</p>
    <p id="YzHJ"><a href="https://openjdk.org/jeps/404" target="_blank">JEP404 Generational Shenandoah (Experimental)</a> теперь официально <a href="https://mail.openjdk.org/pipermail/jdk-dev/2023-June/007959.html" target="_blank">убран</a> из состава jdk 21. </p>
    <p id="HvTf">Новый черновик JEP <a href="https://openjdk.org/jeps/8310260" target="_blank">8310260 Move the JDK to C17 and C++17</a>.</p>
    <p id="xBnv">У Oracle GraalVM <a href="https://medium.com/graalvm/a-new-graalvm-release-and-new-free-license-4aab483692f5" target="_blank">обновилась</a> лицензия. Будьте аккуратны и внимательно прочтите лицензию перед использованием в продакшене.</p>
    <p id="93qr">Версии <a href="https://www.mail-archive.com/announce@apache.org/msg08259.html" target="_blank">10.1.10</a> и <a href="https://www.mail-archive.com/announce@apache.org/msg08258.html" target="_blank">8.5.90</a> нашего любимого дефолтного контейнера сервлетов Apache Tomcat принесли поддержку jdk 21 и зеленых потоков.</p>
  </section>
  <h2 id="Dlvc" data-align="center">Статьи</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="msBr">
      <li id="4gpR"><a href="https://www.infoq.com/news/2023/06/discord-cassandra-scylladb" target="_blank">Discord Migrates Trillions of Messages from Cassandra to ScyllaDB</a> [Rafal Gancarz]</li>
      <li id="l0Bb"><a href="https://www.infoq.com/news/2023/06/scoped-values-java-21/" target="_blank">Enhancing Java Concurrency with Scoped Values in JDK 21 (Preview)</a> [Shaaf Syed]</li>
      <li id="dSdO"><a href="https://blog.devops.dev/how-to-reduce-jvm-docker-image-size-by-at-least-60-459ec87b95d8" target="_blank">How to reduce JVM docker image size by at least 60%</a> [Suman Maity]</li>
      <li id="T1gx"><a href="https://medium.com/@dimas.setyawan/spring-boot-3-1-%EF%B8%8F-docker-compose-28a6a53af657" target="_blank">Spring Boot 3.1 ⚔️ Docker Compose</a> [Dimas Adriyanto Setyawan]</li>
      <li id="i3vS"><a href="https://medium.com/@rayepps/business-logic-vs-everything-else-cb3faf591a6f" target="_blank">Business Logic vs Everything Else</a> [Ray Epps]</li>
      <li id="PYsH"><a href="https://medium.com/@anil.java.story/distributed-locks-in-spring-boot-microservice-environment-f11dad3cc378" target="_blank">Distributed Locks in Spring-boot Microservice Environment</a> [anil gola]</li>
      <li id="lWJc"><a href="https://ishan-aggarwal.medium.com/design-unique-id-generator-c350281382d3" target="_blank">Design Unique ID Generator</a> [Ishan Aggarwal]</li>
    </ol>
  </section>
  <p id="dOfB">P.S.: Подписывайтесь на <a href="https://t.me/javaminds" target="_blank">канал</a>, чтобы не пропустить самые свежие новости из мира Java.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@petrovwich/JEDv42</guid><link>https://teletype.in/@petrovwich/JEDv42?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich</link><comments>https://teletype.in/@petrovwich/JEDv42?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=petrovwich#comments</comments><dc:creator>petrovwich</dc:creator><title>Java Ecosystem Digest #42</title><pubDate>Tue, 13 Jun 2023 11:15:45 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/b1/cf/b1cf8806-83ae-41b4-99bb-462175f43ffe.png"></media:content><description><![CDATA[Всем привет!]]></description><content:encoded><![CDATA[
  <p id="7CK4">Всем привет!</p>
  <p id="rBXE">Сегодня расскажу что произошло интересного в экосистеме java за период с 9 по 16 июня 2023 года.</p>
  <p id="pljr">Погнали!</p>
  <h2 id="xaD2" data-align="center">Обновки</h2>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="WsN8">
      <li id="44nG">Apache Camel <a href="https://github.com/apache/camel/releases/tag/camel-3.14.9" target="_blank">3.14.9</a>, <a href="https://github.com/apache/camel/releases/tag/camel-3.18.8" target="_blank">3.18.8</a>, <a href="https://github.com/apache/camel/releases/tag/camel-3.20.6" target="_blank">3.20.6</a></li>
      <li id="sFau">Apache Doris <a href="https://github.com/apache/doris/releases/tag/1.2.5-rc01" target="_blank">1.2.5-rc01</a> </li>
      <li id="eDVA">Apache Kafka <a href="https://github.com/apache/kafka/releases/tag/3.5.0" target="_blank">3.5.0</a> </li>
      <li id="ujyz">Hazelcast <a href="https://github.com/hazelcast/hazelcast/releases/tag/v5.2.4" target="_blank">5.2.4</a> </li>
      <li id="iERb">Hibernate ORM <a href="https://github.com/hibernate/hibernate-orm/releases/tag/6.2.5" target="_blank">6.2.5</a> </li>
      <li id="dXHR">Hibernate types <a href="https://github.com/vladmihalcea/hypersistence-utils/releases/tag/hypersistence-utils-parent-3.4.3" target="_blank">3.4.3</a>, <a href="https://github.com/vladmihalcea/hypersistence-utils/releases/tag/hypersistence-utils-parent-3.4.4" target="_blank">3.4.4</a> </li>
      <li id="vAFO">jdk21 <a href="https://github.com/openjdk/jdk/releases/tag/jdk-21%252B27" target="_blank">build 27</a> </li>
      <li id="9NFs">jdk22 <a href="https://github.com/openjdk/jdk/releases/tag/jdk-22%252B2" target="_blank">build 2</a> </li>
      <li id="YsU6">JHipster Lite <a href="https://github.com/jhipster/jhipster-lite/releases/tag/v0.34.0" target="_blank">0.34.0</a> </li>
      <li id="Yyzx">Kestra <a href="https://github.com/kestra-io/kestra/releases/tag/v0.9.4" target="_blank">0.9.4</a> </li>
      <li id="347H">Micronaut <a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v4.0.0-RC1" target="_blank">4.0.0-RC1</a> </li>
      <li id="imQV">Project Reactor <a href="https://github.com/reactor/reactor/releases/tag/2020.0.33" target="_blank">2020.0.33</a>, <a href="https://github.com/reactor/reactor/releases/tag/2022.0.8" target="_blank">2022.0.8</a> </li>
      <li id="9pjm">Spring Framework <a href="https://github.com/spring-projects/spring-framework/releases/tag/v5.3.28" target="_blank">5.3.28</a>, <a href="https://github.com/spring-projects/spring-framework/releases/tag/v6.0.10" target="_blank">6.0.10</a>, <a href="https://github.com/spring-projects/spring-framework/releases/tag/v6.1.0-M1" target="_blank">6.1.0-M1</a> </li>
      <li id="mbKV">Quarkus <a href="https://github.com/quarkusio/quarkus/releases/tag/3.1.2.Final" target="_blank">3.1.2.Final</a> </li>
      <li id="rMW0">Wildfly <a href="https://github.com/wildfly/wildfly/releases/tag/29.0.0.Alpha1" target="_blank">29.0.0.Alpha1</a> </li>
    </ol>
  </section>
  <h2 id="5Jfy" data-align="center">Экосистема</h2>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Go0i">Несмотря на то что я вынес это в статьи, <a href="https://mail.openjdk.org/pipermail/valhalla-spec-observers/2023-May/002243.html" target="_blank">документ</a> требует отдельного упоминания. Brian Goetz в email-рассылке отправил письмо с видением null-safety и value-типов. Весьма и весьма занимательное чтиво. </p>
  </section>
  <h2 id="Dlvc" data-align="center">Статьи</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ol id="iwwt">
      <li id="Umjo"><a href="https://mail.openjdk.org/pipermail/valhalla-spec-observers/2023-May/002243.html" target="_blank">Design document on nullability and value types</a> [Brian Goetz]</li>
      <li id="Ba9L"><a href="https://mostlynerdless.de/blog/2023/06/02/class-loader-hierarchies/" target="_blank">Class Loader Hierarchies</a> [Johannes Bechberger]</li>
      <li id="ow2m"><a href="https://foojay.io/today/java-is-very-fast/" target="_blank">Java is Very Fast, If You Don’t Create Many Objects</a> [Peter Lawrey]</li>
      <li id="L1ZO"><a href="https://www.infoq.com/news/2023/06/structured-concurrency-jdk-21" target="_blank">Structured Concurrency in JDK 21: A Leap Forward in Concurrent Programming</a> [A N M Bazlur Rahman]</li>
      <li id="vMUM"><a href="https://4comprehension.com/nulls-against-collectors/" target="_blank">Nulls Against Collectors</a> [Grzegorz Piwowarek]</li>
    </ol>
  </section>
  <p id="bANB"></p>
  <p id="dOfB">P.S.: Подписывайтесь на <a href="https://t.me/javaminds" target="_blank">канал</a>, чтобы не пропустить самые свежие новости из мира Java.</p>

]]></content:encoded></item></channel></rss>