<script data-pm-proxy="intercept"></script><?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Programando En Java]]></title><description><![CDATA[¡Aprende o mejora tu #JAVA!]]></description><link>https://programandoenjava.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Aw_2!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F806d6e06-6de7-45f4-9c69-66e050a6f24b_512x512.png</url><title>Programando En Java</title><link>https://programandoenjava.substack.com</link></image><generator>Substack</generator><lastBuildDate>Thu, 03 Sep 2026 17:56:50 GMT</lastBuildDate><atom:link href="/__u/programandoenjava.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Ricardo Romero Benitez]]></copyright><language><![CDATA[es]]></language><webMaster><![CDATA[programandoenjava@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[programandoenjava@substack.com]]></itunes:email><itunes:name><![CDATA[Programando En Java]]></itunes:name></itunes:owner><itunes:author><![CDATA[Programando En Java]]></itunes:author><googleplay:owner><![CDATA[programandoenjava@substack.com]]></googleplay:owner><googleplay:email><![CDATA[programandoenjava@substack.com]]></googleplay:email><googleplay:author><![CDATA[Programando En Java]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Newsletter Java: Novedades de la Semana 4 - Agosto 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-9bf</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-9bf</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 28 Aug 2026 12:21:50 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/Kba7rq6KufA" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido/a a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h1>&#127909; Curso de Spring AI (+2 horas)</h1><div id="youtube2-Kba7rq6KufA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;Kba7rq6KufA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/Kba7rq6KufA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong><span>&#128293; </span>EDICI&#211;N 2: <span>Convi&#233;rtete en </span>AI Engineer<span> con JAVA</span></strong></h2><p>&#128680;El mercado ya ha cambiado.</p><p><span>Los developers que saben integrar IA en sistemas est&#225;n subiendo de nivel.</span><br><span>El resto&#8230; se est&#225; quedando fuera de los proyectos importantes.</span></p><p>Y no, no necesitas aprender Python.</p><p><span>Necesitas saber hacer esto con </span><strong>Java + Spring AI</strong><span>.</span></p><p><span>He creado este </span><strong>M&#225;ster de AI Engineering con Java</strong><span> para que puedas:</span></p><ul><li><p>Construir sistemas de IA para producci&#243;n</p></li><li><p>Integrarlos en Spring Boot</p></li><li><p><span>Posicionarte en un perfil con </span><strong>menos competencia y m&#225;s salario &#8252;&#65039;</strong></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;text&quot;:&quot;INSCRIBIRSE EN EL CURSO GRATUITO&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring"><span>INSCRIBIRSE EN EL CURSO GRATUITO</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2-qZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:213090,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programandoenjava.substack.com/i/193053437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;text&quot;:&quot;INSCRIBIRSE EN EL CURSO GRATUITO&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring"><span>INSCRIBIRSE EN EL CURSO GRATUITO</span></a></p><div><hr></div><h1><strong>&#128230; Novedades en Librer&#237;as y Frameworks</strong></h1><div><hr></div><h3>&#128640; Spring Boot 4.2.0-M1</h3><p>La primera milestone de <strong>Spring Boot 4.2</strong> ya est&#225; disponible.</p><p>Principales novedades:</p><ul><li><p>Soporte para <strong>AMQP 1.0</strong>.</p></li><li><p>Integraci&#243;n con caracter&#237;sticas espec&#237;ficas de RabbitMQ.</p></li><li><p>Nuevo soporte para <strong>Image-Based Build Cache</strong> con Buildpacks.</p></li><li><p>Mejoras, correcciones y actualizaciones de dependencias.</p></li><li><p>Mejor coordinaci&#243;n del apagado graceful de Jetty mediante <code>GracefulHandler</code>.</p></li></ul><p><strong>Impacto:</strong> todav&#237;a no es una versi&#243;n para producci&#243;n, pero merece la pena empezar a probarla en proyectos de laboratorio. Especialmente si trabajas con mensajer&#237;a o est&#225;s evaluando la pr&#243;xima generaci&#243;n de Spring Boot. <a href="https://spring.io/blog/2026/08/20/spring-boot-4-2-0-M1-available-now/?utm_source=chatgpt.com">Home</a></p><p>&#128073; <a href="https://spring.io/blog/2026/08/20/spring-boot-4-2-0-M1-available-now/">Release oficial de Spring Boot 4.2.0-M1</a></p><div><hr></div><h3>&#128295; Spring Boot 4.1.1</h3><p>Spring Boot 4.1 recibe su primera actualizaci&#243;n de mantenimiento:</p><ul><li><p><strong>98 correcciones</strong>.</p></li><li><p>Mejoras de documentaci&#243;n.</p></li><li><p>Actualizaciones de dependencias.</p></li><li><p>Correcciones de bugs.</p></li></ul><p>Si ya est&#225;s utilizando Spring Boot 4.1, esta es una actualizaci&#243;n bastante m&#225;s interesante que saltar directamente a una milestone. <a href="https://spring.io/blog/2026/08/20/spring-boot-4-1-1-available-now/?utm_source=chatgpt.com">Home</a></p><p>&#128073; <a href="https://spring.io/blog/2026/08/20/spring-boot-4-1-1-available-now/">Spring Boot 4.1.1</a></p><div><hr></div><h3>&#128737;&#65039; Spring Boot 4.0.8</h3><p>Tambi&#233;n se ha publicado Spring Boot <strong>4.0.8</strong>:</p><ul><li><p>77 correcciones.</p></li><li><p>Actualizaciones de dependencias.</p></li><li><p>Mejoras de documentaci&#243;n.</p></li></ul><p>Para aplicaciones en producci&#243;n sobre la rama 4.0, esta es la actualizaci&#243;n que tiene sentido aplicar antes de empezar a experimentar con 4.2. <a href="https://spring.io/blog/2026/08/20/spring-boot-4-0-8-available-now/?utm_source=chatgpt.com">Home</a></p><p>&#128073; <a href="https://spring.io/blog/2026/08/20/spring-boot-4-0-8-available-now/">Spring Boot 4.0.8</a></p><div><hr></div><h3>&#129504; Spring AI 2.0.1</h3><p>Spring AI contin&#250;a evolucionando r&#225;pidamente con la versi&#243;n <strong>2.0.1</strong>, apenas unas semanas despu&#233;s de la llegada de Spring AI 2.0 GA.</p><p>La actualizaci&#243;n forma parte del movimiento del proyecto hacia una API m&#225;s madura para construir aplicaciones con:</p><ul><li><p>Tool calling.</p></li><li><p>Agentes.</p></li><li><p>Memoria.</p></li><li><p>RAG.</p></li><li><p>Salidas estructuradas.</p></li><li><p>Integraciones con proveedores de modelos.</p></li></ul><p><strong>Impacto:</strong> si est&#225;s construyendo aplicaciones de IA en Java, la rama 2.0 deber&#237;a estar ya en tu radar. El ecosistema est&#225; dejando de ser experimental y empieza a parecer una pieza m&#225;s del stack Spring. <a href="https://spring.io/blog/2026/08/25/this-week-in-spring-august-25/?utm_source=chatgpt.com">Home</a></p><p>&#128073; <a href="https://spring.io/blog/2026/08/21/spring-ai-2-0-1-available-now/">Spring AI 2.0.1</a></p><div><hr></div><h3>&#128451;&#65039; Spring Data 2026.1.0-M1</h3><p>La nueva generaci&#243;n de Spring Data introduce inicialmente soporte para Redis JSON mediante:</p><pre><code><code>RedisJsonTemplate</code></code></pre><p>Adem&#225;s, llegan nuevas milestones para:</p><ul><li><p>Spring Data Commons 4.2.0-M1</p></li><li><p>Spring Data MongoDB 5.2.0-M1</p></li><li><p>Spring Data Elasticsearch 6.2.0-M1</p></li><li><p>Spring Data Neo4j 8.2.0-M1</p></li></ul><p><strong>Impacto:</strong> especialmente interesante para aplicaciones que utilizan Redis como algo m&#225;s que un simple cache distribuido. <a href="https://www.infoq.com/news/2026/08/spring-news-roundup-aug17-2026/?topicPageSponsorship=89868651-a995-4424-9884-ad8777ec5233">InfoQ</a></p><p>&#128073; <a href="https://spring.io/blog/2026/08/20/spring-data-2026-1-0-m1-2026-0-1-and-2025-1-7-released/">Spring Data 2026.1.0-M1</a></p><div><hr></div><h3>&#128272; Spring Security 7.2.0-M1</h3><p>La nueva milestone de Spring Security incorpora:</p><ul><li><p>Mejor detecci&#243;n autom&#225;tica de <code>CorsConfigurationSource</code>.</p></li><li><p>Soporte para <code>PreFlightRequestHandler</code> dentro del namespace XML <code>&lt;cors&gt;</code>.</p></li><li><p>Correcciones en el flujo de preautenticaci&#243;n de <code>OneTimeTokenAuthenticationProvider</code>.</p></li></ul><p>La actualizaci&#243;n tambi&#233;n forma parte de una oleada de correcciones de seguridad que afect&#243; a numerosos proyectos Spring esta semana. <a href="https://www.infoq.com/news/2026/08/spring-news-roundup-aug17-2026/?topicPageSponsorship=89868651-a995-4424-9884-ad8777ec5233">InfoQ</a></p><p>&#128073; <a href="https://spring.io/projects/spring-security">Spring Security</a></p><div><hr></div><h3>&#129513; Spring Modulith 2.2.0-M1</h3><p>Spring Modulith sigue modernizando su infraestructura:</p><ul><li><p>Compatible con Spring Boot 4.2.0-M1.</p></li><li><p>Compatible con Spring Framework 7.1.0-M1.</p></li><li><p>Modernizaci&#243;n del registro de auto-configuraciones.</p></li><li><p>Eliminaci&#243;n progresiva de la dependencia de <code>spring.factories</code>.</p></li><li><p>Mejoras en la integraci&#243;n con Namastack Outbox.</p></li></ul><p>Tambi&#233;n se han publicado las versiones de mantenimiento <strong>2.1.1, 2.0.8 y 1.4.13</strong>. <a href="https://spring.io/blog/2026/08/26/spring-modulith-2-2-m1-2-1-1-2-0-8-and-1-4-13-released/?utm_source=chatgpt.com">Home</a></p><p>&#128073; <a href="https://spring.io/blog/2026/08/26/spring-modulith-2-2-m1-2-1-1-2-0-8-and-1-4-13-released/">Spring Modulith</a></p><div><hr></div><h3>&#9881;&#65039; Spring Batch 6.1.0-M1</h3><p>La nueva milestone de Spring Batch actualiza buena parte de su stack:</p><ul><li><p>Spring Framework 7.1.0-M1.</p></li><li><p>Spring Integration 7.2.0-M1.</p></li><li><p>Spring AMQP 4.2.0-M1.</p></li><li><p>Spring Kafka 4.2.0-M1.</p></li><li><p>Spring Data 2026.1.0-M1.</p></li><li><p>Micrometer 1.18.0-M1.</p></li></ul><p>Tambi&#233;n se ha publicado <strong>Spring Batch 6.0.5</strong> como actualizaci&#243;n de mantenimiento. <a href="https://www.infoq.com/news/2026/08/spring-news-roundup-aug17-2026/?topicPageSponsorship=89868651-a995-4424-9884-ad8777ec5233">InfoQ</a></p><div><hr></div><h3>&#128232; Spring AMQP 4.2.0-M1</h3><p>Novedades destacadas:</p><ul><li><p>Nuevo <code>RoutingAmqpConnectionFactory</code>.</p></li><li><p>Nuevo <code>AbstractRoutingAmqpConnectionFactory</code>.</p></li><li><p>Nuevo <code>RestClientNodeLocator</code>.</p></li><li><p>Sustituci&#243;n progresiva de APIs basadas en <code>RestTemplate</code>.</p></li></ul><p>Adem&#225;s, se han solucionado vulnerabilidades relacionadas con compresi&#243;n de mensajes y exposici&#243;n de credenciales en excepciones. <a href="https://www.infoq.com/news/2026/08/spring-news-roundup-aug17-2026/?topicPageSponsorship=89868651-a995-4424-9884-ad8777ec5233">InfoQ</a></p><div><hr></div><h3>&#128232; Spring for Apache Kafka 4.2.0-M1</h3><p>Nueva milestone con mejoras principalmente orientadas a observabilidad.</p><p>Una de las novedades es la consistencia entre la observabilidad de consumidores batch y non-batch mediante <code>@KafkaListener</code>. <a href="https://www.infoq.com/news/2026/08/spring-news-roundup-aug17-2026/?topicPageSponsorship=89868651-a995-4424-9884-ad8777ec5233">InfoQ</a></p><div><hr></div><h1><strong>&#9749; Actualizaciones del JDK</strong></h1><h2><strong>JDK 27 alcanza RC1</strong></h2><p><strong>Tipo:</strong> Release Candidate 1<br><strong>Repositorio estabilizado:</strong> <a href="https://github.com/openjdk/jdk/tree/jdk27">https://github.com/openjdk/jdk/tree/jdk27</a><br><strong>Proceso de correcci&#243;n:</strong> <a href="https://openjdk.java.net/jeps/3#Fix-Request-Process">https://openjdk.java.net/jeps/3#Fix-Request-Process</a></p><p>Con RC1, el foco pasa de &#8220;nuevas features&#8221; a <strong>estabilidad quir&#250;rgica</strong>. Solo bugs serios o regresiones tienen cabida. El c&#243;digo fuente ya se bifurc&#243; al repositorio de estabilizaci&#243;n en junio, as&#237; que lo que vemos ahora es pr&#225;cticamente la l&#237;nea final.</p><h3><strong>Resumen t&#233;cnico de las novedades incluidas</strong></h3><ul><li><p><strong>JEP 523 &#8212; G1 como GC por defecto en todos los entornos</strong><br>Si no se especifica GC en la l&#237;nea de comandos, <strong>G1</strong> ser&#225; la elecci&#243;n autom&#225;tica de HotSpot.</p></li><li><p><strong>JEP 534 &#8212; Compact Object Headers por defecto</strong><br>El layout compacto de headers pasa de feature experimental a comportamiento por defecto.</p></li><li><p><strong>JEP 536 &#8212; JFR In-Process Data Redaction</strong><br>El JFR podr&#225; enmascarar datos sensibles antes de finalizar la grabaci&#243;n.</p></li><li><p><strong>JEP 527 &#8212; Post-Quantum Hybrid Key Exchange para TLS 1.3</strong><br>Mezcla compatibilidad actual con preparaci&#243;n para el mundo post-cu&#225;ntico.</p></li><li><p><strong>JEP 532 &#8212; Primitive Types en patterns, instanceof y switch</strong><br>M&#225;s cobertura de pattern matching con tipos primitivos.</p></li><li><p><strong>JEP 531 / 533 / 537 / 538</strong><br>Siguen evolucionando como preview/incubator para consolidarse en futuras releases.</p></li></ul><h3><strong>Impacto en proyectos existentes</strong></h3><ul><li><p>Puede haber <strong>cambios de comportamiento</strong> en rendimiento y GC si depend&#237;as de defaults hist&#243;ricos.</p></li><li><p>Frameworks y runtimes que inspeccionan memoria o headers pueden notar diferencias con <strong>Compact Object Headers</strong>.</p></li><li><p>Tooling de observabilidad deber&#225; adaptarse a los cambios de <strong>JFR redaction</strong> si consume eventos con datos sensibles.</p></li><li><p>Las features preview siguen requiriendo disciplina: <strong>no des por hecho compatibilidad estable</strong> sin probar en CI.</p></li></ul><h3><strong>Enlaces &#250;tiles</strong></h3><ul><li><p>JDK 27 project: <a href="https://openjdk.org/projects/jdk/27/">https://openjdk.org/projects/jdk/27/</a></p></li><li><p>Schedule: <a href="https://openjdk.org/projects/jdk/27/#Schedule">https://openjdk.org/projects/jdk/27/#Schedule</a></p></li><li><p>JDK source tree: <a href="https://github.com/openjdk/jdk/tree/jdk27">https://github.com/openjdk/jdk/tree/jdk27</a></p></li><li><p>OpenJDK mailing list: <a href="https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/">https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/</a></p></li></ul><div><hr></div><h1><strong>&#129514; Nuevas JEPs o Propuestas del ecosistema Java</strong></h1><h2><strong>JEP 540 &#8212; Simple JSON API (Incubator)</strong></h2><p><strong>Estado:</strong> Targeted para JDK 28<br><strong>Enlace:</strong> <a href="https://openjdk.org/jeps/540">https://openjdk.org/jeps/540</a></p><p>Una de las propuestas m&#225;s pragm&#225;ticas del roadmap: un <strong>API est&#225;ndar para parsear y generar JSON</strong> sin depender de librer&#237;as externas.</p><h3><strong>Qu&#233; resuelve</strong></h3><ul><li><p>Reduce la dependencia obligatoria de bibliotecas como Jackson o Gson para casos simples.</p></li><li><p>Aporta una API est&#225;ndar alineada con <strong>RFC 8259</strong>.</p></li><li><p>Supone la evoluci&#243;n y sustituci&#243;n del enfoque anterior de <strong>JEP 198</strong>, ya retirada.</p></li></ul><h3><strong>Impacto para desarrollo</strong></h3><ul><li><p>Ideal para herramientas, utilidades internas y servicios ligeros donde un parser JSON &#8220;suficiente&#8221; es m&#225;s valioso que un ecosistema gigantesco.</p></li><li><p>Puede simplificar m&#243;dulos peque&#241;os y aplicaciones con necesidades b&#225;sicas de serializaci&#243;n.</p></li><li><p>Para Spring Boot, no reemplaza autom&#225;ticamente a Jackson, pero s&#237; abre la puerta a integrar JSON simple en componentes concretos sin meter m&#225;s peso del necesario.</p></li></ul><h3><strong>Fase actual</strong></h3><p><strong>Incubator</strong><br>La idea est&#225; suficientemente madura como para entrar en el pipeline de JDK 28, pero todav&#237;a no es un contrato definitivo.</p><div><hr></div><h2><strong>JEP 539 &#8212; Strict Field Initialization in the JVM (Preview)</strong></h2><p><strong>Estado:</strong> Targeted para JDK 28<br><strong>Enlace:</strong> <a href="https://openjdk.org/jeps/539">https://openjdk.org/jeps/539</a></p><p>Esta JEP apunta a una vieja zona gris del lenguaje y la JVM: los campos que <strong>no deber&#237;an leerse antes de estar inicializados</strong>.</p><h3><strong>Qu&#233; introduce</strong></h3><ul><li><p>Campos estrictamente inicializados antes de ser le&#237;dos.</p></li><li><p>Evita que se observen valores por defecto como <code>0</code> o <code>null</code>.</p></li><li><p>Est&#225; pensada para compiladores que generen bytecode con esta sem&#225;ntica.</p></li></ul><h3><strong>Por qu&#233; importa</strong></h3><ul><li><p>Mejora garant&#237;as de seguridad y correcci&#243;n.</p></li><li><p>Hace m&#225;s expl&#237;cito el contrato de inicializaci&#243;n.</p></li><li><p>Puede reducir bugs sutiles que hoy sobreviven por defaults silenciosos.</p></li></ul><h3><strong>Fase actual</strong></h3><p><strong>Preview</strong></p><div><hr></div><h2><strong>JEP 401 &#8212; Value Objects (Preview)</strong></h2><p><strong>Estado:</strong> Targeted para JDK 28<br><strong>Enlace:</strong> <a href="https://openjdk.org/jeps/401">https://openjdk.org/jeps/401</a></p><p>Antes conocida como <em>Object Classes and Values</em>, esta propuesta empuja el lenguaje hacia una idea potente: <strong>objetos sin identidad</strong>.</p><h3><strong>Qu&#233; resuelve</strong></h3><ul><li><p>Permite modelar datos por valor real, no por identidad de referencia.</p></li><li><p>Solo contienen campos <code>final</code>.</p></li><li><p>Se distinguen &#250;nicamente por el valor de sus campos.</p></li></ul><h3><strong>Impacto real</strong></h3><ul><li><p>Puede cambiar c&#243;mo pensamos DTOs, tipos de dominio y estructuras inmutables de alto rendimiento.</p></li><li><p>Encaja con la obsesi&#243;n del ecosistema Java por reducir overhead sin sacrificar expresividad.</p></li><li><p>A medio plazo, esto puede influir en APIs, colecciones y dise&#241;os m&#225;s cercanos al mundo de los value types.</p></li></ul><h3><strong>Fase actual</strong></h3><p><strong>Preview</strong></p><div><hr></div><h2><strong>JEP 542 &#8212; PEM Encodings of Cryptographic Objects</strong></h2><p><strong>Estado:</strong> Proposed to Target para JDK 28<br><strong>Enlace:</strong> <a href="https://openjdk.org/jeps/542">https://openjdk.org/jeps/542</a></p><p>La versi&#243;n candidata a finalizaci&#243;n de la API PEM sigue avanzando.</p><h3><strong>Qu&#233; aporta</strong></h3><ul><li><p>Codificaci&#243;n y decodificaci&#243;n de:</p><ul><li><p>claves criptogr&#225;ficas</p></li><li><p>certificados</p></li><li><p>CRLs</p></li></ul></li><li><p>Soporte para interoperar con formatos binarios como:</p><ul><li><p><strong>PKCS #8</strong></p></li><li><p><strong>X.509</strong></p></li></ul></li></ul><h3><strong>Cambios relevantes</strong></h3><ul><li><p><code>PEM</code> pasa de record a clase regular para facilitar constructores con Base64.</p></li><li><p><code>DEREncodable</code> pasa a llamarse <strong>BinaryEncodable</strong>.</p></li></ul><h3><strong>Impacto pr&#225;ctico</strong></h3><ul><li><p>Menos fricci&#243;n para seguridad, tooling y automatizaci&#243;n criptogr&#225;fica.</p></li><li><p>Especialmente &#250;til en plataformas enterprise y backend donde certificados y llaves son parte del d&#237;a a d&#237;a, no un ap&#233;ndice.</p></li></ul><h3><strong>Fase actual</strong></h3><p><strong>Proposed to Target</strong></p><div><hr></div><h1><strong>&#127757; Comunidad y Ecosistema</strong></h1><p>A continuaci&#243;n tienes algunos de los eventos m&#225;s relevantes del ecosistema Java y JVM que se celebrar&#225;n durante los pr&#243;ximos meses.</p><div><hr></div><h2><strong>JavaZone</strong></h2><p>&#128467;&#65039; <strong>2&#8211;3 de septiembre de 2026</strong><br>&#128205; Oslo, Noruega</p><p>Uno de los eventos Java m&#225;s prestigiosos de Europa, organizado por la comunidad noruega de desarrolladores. Suele ofrecer contenido muy t&#233;cnico sobre JVM, arquitectura, cloud, IA y desarrollo backend.</p><p>&#127760; https://2026.javazone.no/</p><div><hr></div><h2><strong>IntelliJ IDEA Conf 2026</strong></h2><p>&#128467;&#65039; <strong>8&#8211;9 de septiembre de 2026</strong><br>&#127760; Evento online</p><p>La conferencia oficial organizada por JetBrains dedicada a IntelliJ IDEA, productividad, desarrollo Java, Kotlin y herramientas para desarrolladores.</p><p>&#127760; <a href="https://lp.jetbrains.com/intellij-idea-conf/">https://lp.jetbrains.com/intellij-idea-conf/</a></p><div><hr></div><h2><strong>Kansas City Developer Conference</strong></h2><p>&#128467;&#65039; <strong>9&#8211;11 de septiembre de 2026</strong><br>&#128205; Kansas City, Missouri (EE. UU.)</p><p>Evento multidisciplinar donde Java suele ocupar un papel destacado junto con arquitectura software, cloud, DevOps y desarrollo empresarial.</p><p>&#127760; https://www.kcdc.info/</p><div><hr></div><h2><strong>JC Conference Taiwan (JCConf)</strong></h2><p>&#128467;&#65039; <strong>11 de septiembre de 2026</strong><br>&#128205; Taip&#233;i, Taiw&#225;n</p><p>Conferencia centrada exclusivamente en Java y el ecosistema JVM, con ponencias t&#233;cnicas y casos reales de empresas asi&#225;ticas e internacionales.</p><p>&#127760; https://jcconf.tw/</p><div><hr></div><h2><strong>Devoxx Belgium</strong></h2><p>&#128467;&#65039; <strong>5&#8211;9 de octubre de 2026</strong><br>&#128205; Amberes, B&#233;lgica</p><p>Probablemente la conferencia Java m&#225;s importante del mundo. Durante cinco d&#237;as re&#250;ne a los principales expertos de Oracle, OpenJDK, Spring, Quarkus, Hibernate, Micronaut y muchas otras tecnolog&#237;as del ecosistema JVM.</p><p>&#127760; https://devoxx.be/</p><div><hr></div><h2><strong>dev2next</strong></h2><p>&#128467;&#65039; <strong>12&#8211;15 de octubre de 2026</strong><br>&#128205; Colorado Springs, EE. UU.</p><p>Conferencia para desarrolladores con un fuerte componente de arquitectura, cloud, Java moderno y desarrollo empresarial.</p><p>&#127760; https://www.dev2next.com/</p><div><hr></div><h2><strong>J on the Beach</strong></h2><p>&#128467;&#65039; <strong>29&#8211;30 de octubre de 2026</strong><br>&#128205; M&#225;laga, Espa&#241;a</p><p>Uno de los eventos tecnol&#243;gicos m&#225;s importantes de Espa&#241;a. Aunque naci&#243; alrededor de Java, actualmente cubre tambi&#233;n IA, arquitectura distribuida, cloud, big data y desarrollo de software moderno.</p><p>&#127760; https://jonthebeach.com/</p><div><hr></div><h2><strong>&#216;redev</strong></h2><p>&#128467;&#65039; <strong>4&#8211;6 de noviembre de 2026</strong><br>&#128205; Malm&#246;, Suecia</p><p>Conferencia internacional para desarrolladores donde Java contin&#250;a siendo una de las tecnolog&#237;as protagonistas junto con arquitectura, DevOps y cloud.</p><p>&#127760; https://oredev.org/</p><div><hr></div><h2><strong>JFall</strong></h2><p>&#128467;&#65039; <strong>11&#8211;12 de noviembre de 2026</strong><br>&#128205; Ede, Pa&#237;ses Bajos</p><p>Evento organizado por la comunidad Java neerlandesa con decenas de charlas t&#233;cnicas sobre JVM, Spring, Quarkus, rendimiento y buenas pr&#225;cticas.</p><p>&#127760; https://jfall.nl/</p><div><hr></div><h2><strong>IT-Tage</strong></h2><p>&#128467;&#65039; <strong>7&#8211;10 de diciembre de 2026</strong><br>&#128205; Fr&#225;ncfort, Alemania</p><p>Conferencia orientada al desarrollo de software empresarial donde Java tiene una presencia muy destacada junto con arquitectura, cloud y metodolog&#237;as &#225;giles.</p><p>&#127760; https://www.ittage.informatik-aktuell.de/</p><div><hr></div><h2><strong>Jfokus</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de febrero de 2027</strong><br>&#128205; Estocolmo, Suecia</p><p>Uno de los primeros grandes eventos Java del a&#241;o. Re&#250;ne a numerosos miembros del OpenJDK, expertos en JVM y referentes de Spring, Jakarta EE y arquitectura software.</p><p>&#127760; https://www.jfokus.se/</p><div><hr></div><h2><strong>JavaLand</strong></h2><p>&#128467;&#65039; <strong>2&#8211;4 de marzo de 2027</strong><br>&#128205; N&#252;rburg, Alemania</p><p>Una de las conferencias Java m&#225;s grandes de Europa, organizada por la Java User Group alemana. Tres d&#237;as repletos de contenido t&#233;cnico sobre todo el ecosistema Java.</p><p>&#127760;  https://www.javaland.eu/</p><div><hr></div><h2><strong>&#128161; Tip de la semana</strong></h2><h2><strong>Usa </strong><code>record</code><strong> para eventos de dominio simples en Spring, no clases infladas</strong></h2><p>Si tu evento solo transporta datos, un <code>record</code> te da inmutabilidad, menos ruido y mejor intenci&#243;n sem&#225;ntica. Menos boilerplate, m&#225;s se&#241;al.</p><pre><code><code>public record OrderPaidEvent(
    UUID orderId,
    BigDecimal amount,
    Instant paidAt
) {}
</code></code></pre><h3><strong>En Spring Boot</strong></h3><blockquote><p>Puedes publicarlo as&#237;:</p></blockquote><pre><code><code>@Service
public class PaymentService {

    private final ApplicationEventPublisher publisher;

    public PaymentService(ApplicationEventPublisher publisher) {
        this.publisher = publisher;
    }

    public void pay(UUID orderId, BigDecimal amount) {
        // l&#243;gica de pago...
        publisher.publishEvent(new OrderPaidEvent(orderId, amount, Instant.now()));
    }
}
</code></code></pre><h3><strong>Por qu&#233; merece la pena</strong></h3><ul><li><p>Evitas setters in&#250;tiles.</p></li><li><p>El contrato del evento queda expl&#237;cito.</p></li><li><p>Facilita testing y reduce errores de mutabilidad.</p></li></ul><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 3 - Agosto 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-e62</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-e62</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 21 Aug 2026 12:03:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/AXwP-UfmE6M" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido/a a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h1>&#127909; V&#237;deo de la semana</h1><div id="youtube2-AXwP-UfmE6M" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;AXwP-UfmE6M&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/AXwP-UfmE6M?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong><span>&#128293; </span>EDICI&#211;N 2: <span>Convi&#233;rtete en </span>AI Engineer<span> con JAVA</span></strong></h2><p>&#128680;El mercado ya ha cambiado.</p><p><span>Los developers que saben integrar IA en sistemas est&#225;n subiendo de nivel.</span><br><span>El resto&#8230; se est&#225; quedando fuera de los proyectos importantes.</span></p><p>Y no, no necesitas aprender Python.</p><p><span>Necesitas saber hacer esto con </span><strong>Java + Spring AI</strong><span>.</span></p><p><span>He creado este </span><strong>M&#225;ster de AI Engineering con Java</strong><span> para que puedas:</span></p><ul><li><p>Construir sistemas de IA para producci&#243;n</p></li><li><p>Integrarlos en Spring Boot</p></li><li><p><span>Posicionarte en un perfil con </span><strong>menos competencia y m&#225;s salario &#8252;&#65039;</strong></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;text&quot;:&quot;INSCRIBIRSE EN EL CURSO GRATUITO&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring"><span>INSCRIBIRSE EN EL CURSO GRATUITO</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2-qZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:213090,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programandoenjava.substack.com/i/193053437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;text&quot;:&quot;INSCRIBIRSE EN EL CURSO GRATUITO&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring"><span>INSCRIBIRSE EN EL CURSO GRATUITO</span></a></p><div><hr></div><h2>&#127464;&#127479;Charla en Pura Vida JUG Costa Rica</h2><p>Ma&#241;ana s&#225;bado 22 de Agosto de 2026, estar&#233; dando una peque&#241;a charla de forma online en el JUG de Pura Vida JUG , &#161;<a href="https://www.meetup.com/puravidajug/events/316067716/">reg&#237;strate, es gratis</a>!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.meetup.com/puravidajug/events/316067716/&quot;,&quot;text&quot;:&quot;REGISTRARSE GRATIS&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.meetup.com/puravidajug/events/316067716/"><span>REGISTRARSE GRATIS</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.meetup.com/puravidajug/events/316067716/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lGEE!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp 424w, /__u/substackcdn.com/image/fetch/$s_!lGEE!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp 848w, /__u/substackcdn.com/image/fetch/$s_!lGEE!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!lGEE!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lGEE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp" width="1440" height="1440" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1440,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:71042,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:&quot;https://www.meetup.com/puravidajug/events/316067716/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programandoenjava.substack.com/i/212126823?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!lGEE!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp 424w, /__u/substackcdn.com/image/fetch/$s_!lGEE!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp 848w, /__u/substackcdn.com/image/fetch/$s_!lGEE!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp 1272w, /__u/substackcdn.com/image/fetch/$s_!lGEE!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feca102aa-a4d9-456e-9192-0f29e480d21b_1440x1440.webp 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h3><strong>Open Liberty 26.0.0.8</strong></h3><p>Open Liberty entra en modo <strong>GA</strong> con una ronda de fixes y, sobre todo, con una limpieza seria de superficie de ataque. No es una release sexy; es una release que evita que tu madrugada se convierta en incidente.</p><blockquote><p><strong>Qu&#233; trae:</strong></p></blockquote><ul><li><p>Correcciones de bugs</p></li><li><p>Resoluci&#243;n de m&#250;ltiples CVEs con riesgo de <strong>denegaci&#243;n de servicio</strong></p></li><li><p>Ajustes relacionados con deserializaci&#243;n y consumo descontrolado de memoria/heap</p></li></ul><blockquote><p><strong>CVEs destacadas:</strong></p></blockquote><ul><li><p><a href="https://nvd.nist.gov/vuln/detail/CVE-2026-50645">CVE-2026-50645</a>: abuso de headers adjuntos en Apache CXF durante deserializaci&#243;n</p></li><li><p><a href="https://nvd.nist.gov/vuln/detail/CVE-2026-9171">CVE-2026-9171</a>: solicitudes maliciosas que fuerzan consumo innecesario de memoria</p></li><li><p><a href="https://nvd.nist.gov/vuln/detail/CVE-2026-15057">CVE-2026-15057</a>: asignaci&#243;n descontrolada de heap</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Si usas Open Liberty en producci&#243;n, esto es upgrade prioritario.</p></li><li><p>Menos exposici&#243;n a DoS por entradas manipuladas.</p></li><li><p>Mejor postura de seguridad sin tocar c&#243;digo de negocio.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong><br><a href="https://openliberty.io/blog/2026/08/11/26.0.0.8.html">https://openliberty.io/blog/2026/08/11/26.0.0.8.html</a></p></blockquote><div><hr></div><h3><strong>LangChain4j 1.19.0</strong></h3><blockquote><p>LangChain4j sigue madurando r&#225;pido, y esta versi&#243;n mete mejoras &#250;tiles para quienes est&#225;n integrando LLMs en aplicaciones Java con algo m&#225;s de seriedad que un demo de viernes.</p><p><strong>Qu&#233; trae:</strong></p></blockquote><ul><li><p>Nuevo <code>AnthropicBatchChatModel</code></p></li><li><p>Soporte para la <strong>Anthropic Message Batches API</strong></p></li><li><p>Mapeo de objetos <code>_meta</code> desde un servidor MCP dentro de <code>ToolExecutionResult.attributes()</code></p></li><li><p>Bug fixes, mejoras de documentaci&#243;n y upgrades de dependencias</p></li></ul><blockquote><p><strong>Por qu&#233; importa:</strong></p></blockquote><ul><li><p>El batch processing reduce fricci&#243;n y coste operativo cuando trabajas con alto volumen de prompts.</p></li><li><p>El soporte para <code>_meta</code> mejora la trazabilidad y el intercambio de contexto entre herramientas MCP y tu app.</p></li><li><p>M&#225;s &#250;til para arquitecturas agentic y pipelines de IA en Java sin inventarte tu propio pegamento.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Integraciones con Anthropic m&#225;s limpias.</p></li><li><p>Mejor encaje con ecosistemas MCP.</p></li><li><p>Menos c&#243;digo ad hoc para transportar metadata entre tool executions.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong><br><a href="https://github.com/langchain4j/langchain4j/releases/tag/1.19.0">https://github.com/langchain4j/langchain4j/releases/tag/1.19.0</a></p></blockquote><div><hr></div><h3><strong>Eclipse JNoSQL 1.1.16</strong></h3><blockquote><p>JNoSQL se pone al d&#237;a con soporte de datos y drivers, y eso siempre interesa cuando tu backend ya dej&#243; de ser &#8220;solo un PostgreSQL y listo&#8221;.</p><p><strong>Qu&#233; trae:</strong></p></blockquote><ul><li><p>Soporte para <strong>Valkey</strong></p></li><li><p>Mejoras en la integraci&#243;n con <strong>Oracle NoSQL</strong></p></li><li><p>Actualizaci&#243;n de drivers y dependencias para:</p><ul><li><p>MongoDB</p></li><li><p>DynamoDB</p></li><li><p>Couchbase</p></li><li><p>OrientDB</p></li><li><p>Elasticsearch</p></li></ul></li></ul><blockquote><p><strong>Por qu&#233; importa:</strong></p></blockquote><ul><li><p>Valkey entra como alternativa open source seria en el ecosistema key/value.</p></li><li><p>Las mejoras en drivers suelen traducirse en menos sorpresas en runtime.</p></li><li><p>En entornos multi-database, esto reduce el costo de mantenimiento.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>M&#225;s opciones para arquitecturas NoSQL.</p></li><li><p>Mejor compatibilidad con bases ya existentes.</p></li><li><p>Actualizaci&#243;n recomendable si dependes de drivers que cambian r&#225;pido.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong><br><a href="https://github.com/eclipse-jnosql/jnosql/releases/tag/1.1.16">https://github.com/eclipse-jnosql/jnosql/releases/tag/1.1.16</a></p></blockquote><div><hr></div><h3><strong>GraalVM Native Build Tools 1.1.9</strong></h3><blockquote><p>Si compilas nativo con GraalVM, esta versi&#243;n trae cambios de los que s&#237; se sienten en CI/CD y en tu dolor de cabeza diario.</p><p><strong>Qu&#233; trae:</strong></p></blockquote><ul><li><p>Salida de tests de repositorio m&#225;s concisa por defecto</p></li><li><p>Desacoplamiento de unit tests del m&#243;dulo <code>native-maven-plugin</code></p></li><li><p>Tareas de bootstrap remoto separadas</p></li><li><p><strong>Native Image layers</strong> pasan de experimental a modelo compartido con soporte de primera clase en Gradle y Maven</p></li></ul><blockquote><p><strong>Por qu&#233; importa:</strong></p></blockquote><ul><li><p>Menos ruido en pipelines.</p></li><li><p>Mejor modularidad en builds nativos.</p></li><li><p>La historia de &#8220;layers&#8221; deja de ser una rareza experimental y empieza a ser utilizable en serio.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Builds m&#225;s mantenibles.</p></li><li><p>Mejor experiencia en proyectos Spring Boot con im&#225;genes nativas.</p></li><li><p>Menos fricci&#243;n si mezclas Maven/Gradle y Native Image.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong><br><a href="https://github.com/graalvm/native-build-tools/releases/tag/1.1.9">https://github.com/graalvm/native-build-tools/releases/tag/1.1.9</a></p></blockquote><div><hr></div><h3><strong>GlassFish 9.0.0-M3</strong></h3><blockquote><p>GlassFish sigue empujando Jakarta EE 12 con un milestone que ya trae m&#250;sculo real. Aqu&#237; no hay humo: hay implementaci&#243;n de specs importantes.</p><p><strong>Qu&#233; trae:</strong></p></blockquote><ul><li><p>Implementaci&#243;n completa de:</p><ul><li><p>Jakarta Security 5.0-M2</p></li><li><p>Jakarta Faces 5.0-M5</p></li><li><p>Contexts and Dependency Injection 5.0-RC1</p></li></ul></li><li><p>Implementaci&#243;n parcial de Jakarta Servlet 6.2-M2</p></li><li><p>Soporte inicial para Jakarta Concurrency 3.2-M3</p></li><li><p>Soporte inicial de <code>@RolesAllowed</code> en endpoints REST integrados con Jakarta Security, incluyendo template paths</p></li></ul><blockquote><p><strong>Por qu&#233; importa:</strong></p></blockquote><ul><li><p>Jakarta EE 12 va dejando de ser &#8220;la pr&#243;xima gran cosa&#8221; y empieza a parecer una plataforma real.</p></li><li><p>La integraci&#243;n REST + Security + roles en template paths es un detalle peque&#241;o con impacto grande.</p></li><li><p>Buena se&#241;al para quienes siguen plataformas enterprise m&#225;s all&#225; del universo Spring.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>M&#225;s madurez para migraciones a Jakarta EE 12.</p></li><li><p>Mejor alineaci&#243;n entre seguridad y endpoints REST.</p></li><li><p>Se&#241;al clara de avance en specs cr&#237;ticas para el stack enterprise.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong><br><a href="https://github.com/eclipse-ee4j/glassfish/releases/tag/9.0.0-M3">https://github.com/eclipse-ee4j/glassfish/releases/tag/9.0.0-M3</a></p></blockquote><div><hr></div><h3><strong>Apache Groovy 6.0.0 Beta 2</strong></h3><blockquote><p>Groovy 6 sigue acerc&#225;ndose a una versi&#243;n que quiere ser m&#225;s compatible con el runtime moderno, incluyendo escenarios donde native image ya no es una rareza.</p><p><strong>Qu&#233; trae:</strong></p></blockquote><ul><li><p>Soporte para <strong>JEP 371 Hidden Classes</strong></p></li><li><p>Nuevo m&#233;todo <code>findingResults(Iterator)</code> en <code>DefaultGroovyMethods</code></p></li><li><p>Nueva interfaz <code>GeneratedDispatcher</code> para que Packed Closures funcionen al generar native images</p></li><li><p>Bug fixes y upgrades de dependencias</p></li></ul><blockquote><p><strong>Por qu&#233; importa:</strong></p></blockquote><ul><li><p>Hidden Classes encajan mejor con clases sint&#233;ticas de vida corta generadas en runtime.</p></li><li><p>Mejor soporte para native images en Groovy, que era justo uno de los puntos m&#225;s delicados.</p></li><li><p>El API nuevo ayuda a evitar <code>NullPointerException</code> de forma m&#225;s elegante.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Mejor comportamiento en runtimes din&#225;micos.</p></li><li><p>M&#225;s compatibilidad con GraalVM.</p></li><li><p>Interesante si tienes mezcla de Java + Groovy en servicios legacy o scripting interno.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong><br><a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12318123&amp;version=12357373">https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12318123&amp;version=12357373</a></p></blockquote><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><h3><strong>JDK 27 &#8212; Build 34</strong></h3><blockquote><p>La rama de <strong>JDK 27 EA</strong> sigue avanzando y esta semana el build vigente es el <strong>34</strong>.</p><p><strong>Qu&#233; incluye:</strong></p></blockquote><ul><li><p>Correcciones acumuladas respecto a builds anteriores</p></li><li><p>Ajustes de estabilidad en la l&#237;nea early-access</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Si validas compatibilidad futura, este es el tipo de build que quieres meter en tu pipeline de smoke tests.</p></li><li><p>&#218;til para detectar regresiones en librer&#237;as, tests y tooling antes de que la versi&#243;n sea m&#225;s seria.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong><br><a href="https://jdk.java.net/27/">https://jdk.java.net/27/</a><br>Notas de la release: <a href="https://jdk.java.net/27/release-notes">https://jdk.java.net/27/release-notes</a></p></blockquote><div><hr></div><h3><strong>JDK 28 &#8212; Build 11</strong></h3><p>JDK 28 tambi&#233;n sigue en modo early-access, ahora con el <strong>Build 11</strong> disponible.</p><blockquote><p><strong>Qu&#233; trae:</strong></p></blockquote><ul><li><p>Actualizaciones desde Build 10</p></li><li><p>Correcciones para varios issues cerrados en build 11</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Buen momento para empezar a observar comportamiento con APIs, herramientas y dependencias que suelen romperse antes de GA.</p></li><li><p>Si mantienes frameworks internos o librer&#237;as de bajo nivel, este tipo de builds ayudan a encontrar bordes raros antes de tiempo.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong><br><a href="https://jdk.java.net/28/">https://jdk.java.net/28/</a><br>Notas de la release: <a href="https://jdk.java.net/28/release-notes">https://jdk.java.net/28/release-notes</a></p></blockquote><div><hr></div><h2><strong>&#129514; Nuevas JEPs o Propuestas del Ecosistema Java</strong></h2><h3><strong>JEP 541 &#8212; Deprecate the macOS/x64 Port for Removal</strong></h3><p><strong>Estado:</strong> Proposed to Target for JDK 28<br><strong>Link:</strong> <a href="https://openjdk.org/jeps/541">https://openjdk.org/jeps/541</a></p><blockquote><p><strong>Qu&#233; propone:</strong></p></blockquote><ul><li><p>Deprecate the macOS/x64 port para futura eliminaci&#243;n</p></li><li><p>Reduce costo de mantenimiento en una arquitectura que Apple ya no soporta</p></li></ul><blockquote><p><strong>Problema que resuelve:</strong></p></blockquote><ul><li><p>OpenJDK est&#225; cargando soporte para un target cada vez menos relevante.</p></li><li><p>Mantener puertos muertos no da gloria; da deuda.</p></li></ul><blockquote><p><strong>C&#243;mo cambiar&#237;a el desarrollo:</strong></p></blockquote><ul><li><p>Menor foco en compatibilidad con macOS/x64 en futuras versiones.</p></li><li><p>Los equipos que a&#250;n lo tengan en su matriz de soporte deben empezar a planear salida.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Builds y QA tendr&#225;n que priorizar ARM64/macOS moderno.</p></li><li><p>Algunas organizaciones heredadas van a descubrir que &#8220;todav&#237;a funciona&#8221; no es una estrategia.</p></li></ul><div><hr></div><h3><strong>JEP 540 &#8212; Simple JSON API (Incubator)</strong></h3><p><strong>Estado:</strong> Proposed to Target for JDK 28<br><strong>Link:</strong> <a href="https://openjdk.org/jeps/540">https://openjdk.org/jeps/540</a></p><blockquote><p><strong>Qu&#233; propone:</strong></p></blockquote><ul><li><p>Una API est&#225;ndar y simple para parsear y generar JSON</p></li><li><p>Sin depender de librer&#237;as externas</p></li><li><p>Basada en <strong>RFC 8259</strong></p></li></ul><blockquote><p><strong>Problema que resuelve:</strong></p></blockquote><ul><li><p>JSON sigue siendo omnipresente, pero Java todav&#237;a depende de APIs de terceros para casi todo.</p></li><li><p>Esto unifica una necesidad b&#225;sica del ecosistema.</p></li></ul><blockquote><p><strong>C&#243;mo cambiar&#237;a el desarrollo:</strong></p></blockquote><ul><li><p>Menos dependencia para casos simples.</p></li><li><p>Menor fricci&#243;n en herramientas, utilidades internas y m&#243;dulos peque&#241;os.</p></li><li><p>Potencialmente menos &#8220;solo necesito leer este JSON&#8221; convertido en traer media biblioteca.</p></li></ul><blockquote><p><strong>Fase actual:</strong> Proposed to Target<br><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Puede simplificar mucho c&#243;digo de infraestructura.</p></li><li><p>Podr&#237;a competir en casos donde hoy usas Jackson para tareas m&#237;nimas.</p></li><li><p>Si madura bien, ser&#225; una pieza inc&#243;modamente &#250;til.</p></li></ul><blockquote><p><strong>Contexto adicional:</strong></p></blockquote><ul><li><p>Sustituye la antigua JEP 198, ahora cerrada y retirada.</p></li></ul><div><hr></div><h1><strong>&#127757; Comunidad y Ecosistema</strong></h1><p>A continuaci&#243;n tienes algunos de los eventos m&#225;s relevantes del ecosistema Java y JVM que se celebrar&#225;n durante los pr&#243;ximos meses.</p><h3><strong>JDK Embassy 2026</strong></h3><p>&#128467;&#65039; <strong>2026-08-07</strong><br>&#128205; On-site / virtual, global</p><p>Evento centrado en la evoluci&#243;n del ecosistema Java con foco en JDK, rendimiento, plataforma y tendencias de desarrollo. Esta semana cobra relevancia por el empuje de las abstracciones agentic y c&#243;mo encajan sobre la base de Java moderno.</p><p>Web: https://www.jdk.embassy</p><div><hr></div><h2><strong>JavaZone</strong></h2><p>&#128467;&#65039; <strong>2&#8211;3 de septiembre de 2026</strong><br>&#128205; Oslo, Noruega</p><p>Uno de los eventos Java m&#225;s prestigiosos de Europa, organizado por la comunidad noruega de desarrolladores. Suele ofrecer contenido muy t&#233;cnico sobre JVM, arquitectura, cloud, IA y desarrollo backend.</p><p>&#127760; https://2026.javazone.no/</p><div><hr></div><h2><strong>IntelliJ IDEA Conf 2026</strong></h2><p>&#128467;&#65039; <strong>8&#8211;9 de septiembre de 2026</strong><br>&#127760; Evento online</p><p>La conferencia oficial organizada por JetBrains dedicada a IntelliJ IDEA, productividad, desarrollo Java, Kotlin y herramientas para desarrolladores.</p><p>&#127760; <a href="https://lp.jetbrains.com/intellij-idea-conf/">https://lp.jetbrains.com/intellij-idea-conf/</a></p><div><hr></div><h2><strong>Kansas City Developer Conference</strong></h2><p>&#128467;&#65039; <strong>9&#8211;11 de septiembre de 2026</strong><br>&#128205; Kansas City, Missouri (EE. UU.)</p><p>Evento multidisciplinar donde Java suele ocupar un papel destacado junto con arquitectura software, cloud, DevOps y desarrollo empresarial.</p><p>&#127760; https://www.kcdc.info/</p><div><hr></div><h2><strong>JC Conference Taiwan (JCConf)</strong></h2><p>&#128467;&#65039; <strong>11 de septiembre de 2026</strong><br>&#128205; Taip&#233;i, Taiw&#225;n</p><p>Conferencia centrada exclusivamente en Java y el ecosistema JVM, con ponencias t&#233;cnicas y casos reales de empresas asi&#225;ticas e internacionales.</p><p>&#127760; https://jcconf.tw/</p><div><hr></div><h2><strong>Devoxx Belgium</strong></h2><p>&#128467;&#65039; <strong>5&#8211;9 de octubre de 2026</strong><br>&#128205; Amberes, B&#233;lgica</p><p>Probablemente la conferencia Java m&#225;s importante del mundo. Durante cinco d&#237;as re&#250;ne a los principales expertos de Oracle, OpenJDK, Spring, Quarkus, Hibernate, Micronaut y muchas otras tecnolog&#237;as del ecosistema JVM.</p><p>&#127760; https://devoxx.be/</p><div><hr></div><h2><strong>dev2next</strong></h2><p>&#128467;&#65039; <strong>12&#8211;15 de octubre de 2026</strong><br>&#128205; Colorado Springs, EE. UU.</p><p>Conferencia para desarrolladores con un fuerte componente de arquitectura, cloud, Java moderno y desarrollo empresarial.</p><p>&#127760; https://www.dev2next.com/</p><div><hr></div><h2><strong>J on the Beach</strong></h2><p>&#128467;&#65039; <strong>29&#8211;30 de octubre de 2026</strong><br>&#128205; M&#225;laga, Espa&#241;a</p><p>Uno de los eventos tecnol&#243;gicos m&#225;s importantes de Espa&#241;a. Aunque naci&#243; alrededor de Java, actualmente cubre tambi&#233;n IA, arquitectura distribuida, cloud, big data y desarrollo de software moderno.</p><p>&#127760; https://jonthebeach.com/</p><div><hr></div><h2><strong>&#216;redev</strong></h2><p>&#128467;&#65039; <strong>4&#8211;6 de noviembre de 2026</strong><br>&#128205; Malm&#246;, Suecia</p><p>Conferencia internacional para desarrolladores donde Java contin&#250;a siendo una de las tecnolog&#237;as protagonistas junto con arquitectura, DevOps y cloud.</p><p>&#127760; https://oredev.org/</p><div><hr></div><h2><strong>JFall</strong></h2><p>&#128467;&#65039; <strong>11&#8211;12 de noviembre de 2026</strong><br>&#128205; Ede, Pa&#237;ses Bajos</p><p>Evento organizado por la comunidad Java neerlandesa con decenas de charlas t&#233;cnicas sobre JVM, Spring, Quarkus, rendimiento y buenas pr&#225;cticas.</p><p>&#127760; https://jfall.nl/</p><div><hr></div><h2><strong>IT-Tage</strong></h2><p>&#128467;&#65039; <strong>7&#8211;10 de diciembre de 2026</strong><br>&#128205; Fr&#225;ncfort, Alemania</p><p>Conferencia orientada al desarrollo de software empresarial donde Java tiene una presencia muy destacada junto con arquitectura, cloud y metodolog&#237;as &#225;giles.</p><p>&#127760; https://www.ittage.informatik-aktuell.de/</p><div><hr></div><h2><strong>Jfokus</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de febrero de 2027</strong><br>&#128205; Estocolmo, Suecia</p><p>Uno de los primeros grandes eventos Java del a&#241;o. Re&#250;ne a numerosos miembros del OpenJDK, expertos en JVM y referentes de Spring, Jakarta EE y arquitectura software.</p><p>&#127760; https://www.jfokus.se/</p><div><hr></div><h2><strong>JavaLand</strong></h2><p>&#128467;&#65039; <strong>2&#8211;4 de marzo de 2027</strong><br>&#128205; N&#252;rburg, Alemania</p><p>Una de las conferencias Java m&#225;s grandes de Europa, organizada por la Java User Group alemana. Tres d&#237;as repletos de contenido t&#233;cnico sobre todo el ecosistema Java.</p><p>&#127760;  https://www.javaland.eu/</p><div><hr></div><h2><strong>&#128161; Tip de la semana</strong></h2><h3><strong>Usa </strong><code>computeIfAbsent</code><strong> para eliminar l&#243;gica repetitiva de inicializaci&#243;n</strong></h3><p>Si sigues escribiendo <code>if (map.containsKey(...))</code> seguido de <code>put(...)</code>, est&#225;s pagando con complejidad innecesaria algo que Java ya resuelve mejor.</p><pre><code><code>Map&lt;String, List&lt;String&gt;&gt; tagsByUser = new HashMap&lt;&gt;();

tagsByUser.computeIfAbsent("ricardo", k -&gt; new ArrayList&lt;&gt;())
          .add("java");
</code></code></pre><blockquote><p><strong>Por qu&#233; importa:</strong></p></blockquote><ul><li><p>Evita checks duplicados</p></li><li><p>Reduce c&#243;digo boilerplate</p></li><li><p>Hace m&#225;s clara la intenci&#243;n: &#8220;si no existe, cr&#233;alo&#8221;</p></li></ul><blockquote><p><strong>En Spring Boot sirve especialmente para:</strong></p></blockquote><ul><li><p>Agregaci&#243;n de m&#233;tricas</p></li><li><p>Construcci&#243;n de estructuras temporales</p></li><li><p>Caches simples en memoria</p></li><li><p></p></li></ul><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 2 - Agosto 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-792</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-792</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 14 Aug 2026 12:03:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/K3-aoC7FTR4" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido/a a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h1>&#127909; V&#237;deo de la semana: Oracle NO QUIERE que USES la IA Por Esto...</h1><div id="youtube2-K3-aoC7FTR4" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;K3-aoC7FTR4&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/K3-aoC7FTR4?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong><span>&#128293; </span>EDICI&#211;N 2: <span>Convi&#233;rtete en </span>AI Engineer<span> con JAVA</span></strong></h2><p>&#128680;El mercado ya ha cambiado.</p><p><span>Los developers que saben integrar IA en sistemas est&#225;n subiendo de nivel.</span><br><span>El resto&#8230; se est&#225; quedando fuera de los proyectos importantes.</span></p><p>Y no, no necesitas aprender Python.</p><p><span>Necesitas saber hacer esto con </span><strong>Java + Spring AI</strong><span>.</span></p><p><span>He creado este </span><strong>M&#225;ster de AI Engineering con Java</strong><span> para que puedas:</span></p><ul><li><p>Construir sistemas de IA para producci&#243;n</p></li><li><p>Integrarlos en Spring Boot</p></li><li><p><span>Posicionarte en un perfil con </span><strong>menos competencia y m&#225;s salario &#8252;&#65039;</strong></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;text&quot;:&quot;INSCRIBIRSE EN EL CURSO GRATUITO&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring"><span>INSCRIBIRSE EN EL CURSO GRATUITO</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2-qZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:213090,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programandoenjava.substack.com/i/193053437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;text&quot;:&quot;INSCRIBIRSE EN EL CURSO GRATUITO&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring"><span>INSCRIBIRSE EN EL CURSO GRATUITO</span></a></p><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h3><strong>Apache Camel 4.22.0 &#128640;</strong></h3><p>Apache Camel sigue empujando fuerte la integraci&#243;n entre sistemas, y en esta versi&#243;n mete de lleno el juego de la IA en el runtime de integraci&#243;n.</p><blockquote><p><strong>Qu&#233; trae</strong></p></blockquote><ul><li><p>Nuevo <code>camel-ai-tool</code>, pensado para que cualquier framework de IA pueda descubrir y usar herramientas expuestas por Camel.</p></li><li><p>Nuevo <code>camel-mcp-server</code>, que permite convertir rutas Camel en herramientas MCP accesibles por clientes compatibles.</p></li><li><p>Enfoque claro en hacer que la integraci&#243;n no solo mueva datos, sino tambi&#233;n capacidades reutilizables para agentes.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Camel deja de ser solo &#8220;pegamento&#8221; entre sistemas y empieza a actuar como una capa de capacidades para agentes y asistentes.</p></li><li><p>Si trabajas con APIs internas, workflows o automatizaciones, esto abre una v&#237;a bastante seria para exponer l&#243;gica de negocio como herramientas consumibles por IA.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Puedes reutilizar rutas existentes como tools sin reescribir tu backend.</p></li><li><p>Encaja bien en arquitecturas Spring Boot donde Camel ya act&#250;a como backbone de integraci&#243;n.</p></li><li><p>Si est&#225;s explorando agentic systems, esta versi&#243;n te da una base m&#225;s limpia para exponer acciones del dominio.</p></li></ul><blockquote><p><strong>Enlace oficial</strong></p></blockquote><ul><li><p>Blog: <a href="https://camel.apache.org/blog/2026/08/camel-ai-tools-mcp-422/">https://camel.apache.org/blog/2026/08/camel-ai-tools-mcp-422/</a></p></li><li><p>Proyecto: </p></li></ul><p>https://camel.apache.org/</p><div><hr></div><h3><strong>Gradle 9.7.0 &#9881;&#65039;</strong></h3><p>Gradle sigue apretando el acelerador en rendimiento, reproducibilidad y seguridad del build. No es glamour: es lo que evita que tus pipelines se vuelvan una granja de latencia.</p><blockquote><p><strong>Qu&#233; cambia</strong></p></blockquote><ul><li><p><strong>Isolated Projects</strong> pasa de experimental a <strong>incubating</strong>.</p></li><li><p>Mejoras en <strong>Configuration Cache</strong> para reutilizar el resultado de la fase de configuraci&#243;n.</p></li><li><p>Avances en la parte de <strong>seguridad e infraestructura</strong>:</p><ul><li><p>documentaci&#243;n m&#225;s clara de claves PGP confiables</p></li><li><p>rotaci&#243;n de claves de firma m&#225;s f&#225;cil de descubrir</p></li></ul></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Menos tiempo de configuraci&#243;n = builds m&#225;s r&#225;pidos, especialmente en monorepos o proyectos grandes.</p></li><li><p>El endurecimiento de la cadena de firma no es un detalle menor: cada vez pesa m&#225;s en entornos con supply-chain security seria.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Si tu build est&#225; lleno de tareas mal declaradas o plugins poco limpios, el Configuration Cache te lo va a recordar con dolor.</p></li><li><p>Ideal para equipos que ya sufren con CI lento y quieren recortar minutos sin magia negra.</p></li><li><p>&#218;til para proyectos Spring Boot con pipelines pesados, m&#250;ltiples m&#243;dulos y validaciones repetitivas.</p></li></ul><blockquote><p><strong>Enlace oficial</strong></p></blockquote><ul><li><p>Release notes: <a href="https://docs.gradle.org/9.7.0/release-notes.html">https://docs.gradle.org/9.7.0/release-notes.html</a></p></li><li><p>GitHub: <a href="https://github.com/gradle/gradle/releases/tag/v9.7.0">https://github.com/gradle/gradle/releases/tag/v9.7.0</a></p></li></ul><div><hr></div><h3><strong>GlassFish 8.0.4 &#128737;&#65039;</strong></h3><p>GlassFish publica una release de mantenimiento con contenido mucho m&#225;s relevante de lo que suena a primera vista: fixes, mejoras de depuraci&#243;n y, sobre todo, correcciones de seguridad.</p><blockquote><p><strong>Qu&#233; incluye</strong></p></blockquote><ul><li><p>Correcciones de errores</p></li><li><p>Mejoras de documentaci&#243;n</p></li><li><p>Actualizaci&#243;n de dependencias</p></li><li><p>Mejoras en:</p><ul><li><p><code>AutoDeployer</code></p></li><li><p><code>FileArchive</code></p></li></ul></li><li><p>Protecci&#243;n adicional para evitar que archivos escapen del archivo de despliegue</p></li><li><p>Mejor diagn&#243;stico para <strong>JNDI lookups</strong> no resueltos en <code>&lt;ejb-ref&gt;</code></p></li></ul><blockquote><p><strong>Seguridad</strong></p></blockquote><ul><li><p>Corrige <strong>CVE-2026-59889</strong></p></li><li><p>Corrige <strong>CVE-2026-54515</strong></p></li><li><p>Corrige <strong>CVE-2026-12605</strong>, la m&#225;s seria:</p><ul><li><p>un atacante podr&#237;a lograr takeover completo y no autenticado del dominio mientras el token siga vigente</p></li><li><p>el vector pasa por una fuga de <code>gfresttoken</code> desde <code>DownloadServlet</code> si el atacante ya est&#225; autenticado en el Admin Console</p></li></ul></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Este tipo de release no es &#8220;otro mantenimiento m&#225;s&#8221;: es la diferencia entre seguir operando y regalar acceso.</p></li><li><p>Si tienes despliegues en Jakarta EE sobre GlassFish, actualizar aqu&#237; no es opcional.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>M&#225;s robustez en despliegue de artefactos</p></li><li><p>Menor superficie para path traversal / archive escape</p></li><li><p>Mejor trazabilidad cuando fallan referencias EJB/JNDI</p></li><li><p>Riesgo reducido frente a vulnerabilidades ya publicadas</p></li></ul><blockquote><p><strong>Enlace oficial</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/eclipse-ee4j/glassfish/releases/tag/8.0.4">https://github.com/eclipse-ee4j/glassfish/releases/tag/8.0.4</a></p></li><li><p>Proyecto: </p></li></ul><p>https://glassfish.org/</p><div><hr></div><h3><strong>A2A Java SDK 1.2.0 &#129302;</strong></h3><p>La evoluci&#243;n del SDK Java para <strong>Agent2Agent Protocol</strong> sigue afin&#225;ndose, y esta versi&#243;n apunta directamente a casos reales de integraci&#243;n con agentes.</p><blockquote><p><strong>Qu&#233; trae</strong></p></blockquote><ul><li><p>Correcciones de bugs</p></li><li><p>Actualizaciones de dependencias</p></li><li><p>Soporte para que integraciones <strong>no-CDI</strong> reutilicen flujos de autorizaci&#243;n existentes</p></li><li><p>Nueva interfaz <code>TaskStreamLifecycleHook</code></p></li><li><p>Capacidad para observar eventos del ciclo de vida de streams de tareas</p></li><li><p>Cierre bajo demanda de instancias de <code>ChildQueue</code> mediante <code>StreamCloseHandle</code></p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>El SDK deja de ser solo una implementaci&#243;n de protocolo y empieza a ofrecer hooks &#250;tiles para operar agentes con control fino.</p></li><li><p>Reutilizar autorizaci&#243;n existente en entornos no-CDI evita duplicar l&#243;gica de seguridad, que suele ser una forma elegante de meter deuda.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Mejor integraci&#243;n con aplicaciones Java/Spring que no usan CDI</p></li><li><p>M&#225;s control sobre streams y tareas en sistemas agentic</p></li><li><p>M&#225;s f&#225;cil instrumentar observabilidad y cierre de flujos desde el backend</p></li></ul><blockquote><p><strong>Enlace oficial</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/a2aproject/a2a-java/releases/tag/v1.2.0.Final">https://github.com/a2aproject/a2a-java/releases/tag/v1.2.0.Final</a></p></li><li><p>Blog: <a href="https://quarkus.io/blog/a2a-java-sdk-1-0-0-final-released/">https://quarkus.io/blog/a2a-java-sdk-1-0-0-final-released/</a></p></li><li><p>Proyecto: <a href="https://github.com/a2aproject/a2a-java/blob/main/README.md">https://github.com/a2aproject/a2a-java/blob/main/README.md</a></p></li></ul><div><hr></div><h3><strong>Apache Grails 8.0.0-M5 &#129521;</strong></h3><p>Grails sigue acerc&#225;ndose a su pr&#243;xima gran versi&#243;n con un milestone que mete limpieza interna y ajustes de comportamiento.</p><blockquote><p><strong>Qu&#233; cambia</strong></p></blockquote><ul><li><p>Refactor de <code>GlobalGrailsClassInjectorTransformation</code></p><ul><li><p>extrae helpers</p></li><li><p>flujo m&#225;s claro</p></li><li><p>mejor manejo de <code>plugin.xml</code></p></li><li><p>comportamiento mejor definido para <strong>isolated-build</strong></p></li></ul></li><li><p><code>deepSanitize()</code> en <code>GrailsUtil</code> ahora reconoce valores de:</p><ul><li><p><code>grails.logging.stackTraceFiltererClass</code></p></li><li><p><code>grails.exceptionresolver.logFullStackTraceOnFilter</code></p></li></ul></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Menos magia impl&#237;cita, m&#225;s control del runtime. Bien.</p></li><li><p>El soporte mejorado para isolated build es una pista clara de que el ecosistema sigue adapt&#225;ndose a builds modernos y entornos m&#225;s estrictos.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Mejores diagn&#243;sticos y menos sorpresas en logging/stack traces</p></li><li><p>Menos fricci&#243;n al trabajar con plugins y build isolation</p></li><li><p>M&#225;s previsibilidad para apps grandes en mantenimiento o modernizaci&#243;n</p></li></ul><blockquote><p><strong>Enlace oficial</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/apache/grails-core/releases/tag/v8.0.0-M5">https://github.com/apache/grails-core/releases/tag/v8.0.0-M5</a></p></li><li><p>Proyecto: </p></li></ul><p>https://grails.apache.org/</p><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><h3><strong>JDK 27 EA Build 34 &#9749;</strong></h3><p>La rama temprana de Java 27 sigue avanzando con una nueva build disponible.</p><blockquote><p><strong>Versi&#243;n</strong></p></blockquote><ul><li><p><strong>JDK 27 Early-Access Build 34</strong></p></li><li><p>Publicada esta semana</p></li></ul><blockquote><p><strong>Qu&#233; incluye</strong></p></blockquote><ul><li><p>Correcciones y fixes acumulados desde Build 33</p></li><li><p>Ajustes sobre distintos issues registrados en JBS</p></li><li><p>Release notes actualizadas</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>&#218;til para validar compatibilidad temprana de librer&#237;as, frameworks y herramientas de build</p></li><li><p>Si mantienes infraestructura cr&#237;tica, conviene probar builds EA antes de que la versi&#243;n entre en fase RC real</p></li></ul><blockquote><p><strong>Detalle importante</strong></p></blockquote><ul><li><p>Mark Reinhold anunci&#243; el retraso del primer <strong>release candidate</strong> de JDK 27:</p><ul><li><p>fecha original: <strong>6 de agosto de 2026</strong></p></li><li><p>nueva fecha: <strong>20 de agosto de 2026</strong></p></li></ul></li><li><p>El cambio se alinea con el pr&#243;ximo <strong>CPU</strong> de seguridad del <strong>18 de agosto de 2026</strong></p></li></ul><blockquote><p><strong>Qu&#233; implica</strong></p></blockquote><ul><li><p>Menos tiempo de feedback para RC builds</p></li><li><p>M&#225;s presi&#243;n sobre el periodo de estabilizaci&#243;n final</p></li><li><p>Se&#241;al clara de que el calendario de seguridad ya est&#225; influyendo en el ritmo del release train</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>EA builds JDK 27: <a href="https://jdk.java.net/27/">https://jdk.java.net/27/</a></p></li><li><p>Release notes: <a href="https://jdk.java.net/27/release-notes">https://jdk.java.net/27/release-notes</a></p></li><li><p>Anuncio: <a href="https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/EYKJPUAZ4BX4DXD7H4C5ETWJFNQZBFO5/">https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/EYKJPUAZ4BX4DXD7H4C5ETWJFNQZBFO5/</a></p></li><li><p>Build 34: <a href="https://github.com/openjdk/jdk/releases/tag/jdk-27%2B34">https://github.com/openjdk/jdk/releases/tag/jdk-27%2B34</a></p></li></ul><div><hr></div><h3><strong>JDK 28 EA Build 10 &#128300;</strong></h3><p>JDK 28 tambi&#233;n recibi&#243; una nueva build temprana.</p><blockquote><p><strong>Versi&#243;n</strong></p></blockquote><ul><li><p><strong>JDK 28 Early-Access Build 10</strong></p></li></ul><blockquote><p><strong>Qu&#233; aporta</strong></p></blockquote><ul><li><p>Correcciones y mejoras desde Build 9</p></li><li><p>Actualizaci&#243;n del estado de la l&#237;nea EA</p></li><li><p>Release notes disponibles con el detalle t&#233;cnico</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Para equipos que hacen validaci&#243;n de compatibilidad por adelantado, es una se&#241;al de continuidad en la rama 28</p></li><li><p>Conviene seguir la evoluci&#243;n si dependes de features del JDK o de comportamiento del GC en producci&#243;n</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>EA builds JDK 28: <a href="https://jdk.java.net/28/">https://jdk.java.net/28/</a></p></li><li><p>Release notes: <a href="https://jdk.java.net/28/release-notes">https://jdk.java.net/28/release-notes</a></p></li><li><p>Build 10: <a href="https://github.com/openjdk/jdk/releases/tag/jdk-28%2B10">https://github.com/openjdk/jdk/releases/tag/jdk-28%2B10</a></p></li></ul><div><hr></div><h2><strong>&#129514; Nuevas JEPs o propuestas del ecosistema Java</strong></h2><h3><strong>JEP 535: Shenandoah GC: Generational Mode by Default &#129504;</strong></h3><p>La propuesta m&#225;s importante de la semana en OpenJDK viene con una direcci&#243;n muy clara: hacer que <strong>Shenandoah</strong> use <strong>modo generacional por defecto</strong>.</p><blockquote><p><strong>Estado</strong></p></blockquote><ul><li><p>Pas&#243; de <strong>Proposed to Target</strong> a <strong>Targeted</strong></p></li><li><p>Objetivo: <strong>JDK 28</strong></p></li></ul><blockquote><p><strong>Qu&#233; propone</strong></p></blockquote><ul><li><p>Designar <strong>Shenandoah GC</strong> en modo generacional como el comportamiento por defecto</p></li><li><p>Marcar el modo no generacional como <strong>deprecated</strong>, con intenci&#243;n de eliminarlo en una futura versi&#243;n</p></li></ul><blockquote><p><strong>Problema que resuelve</strong></p></blockquote><ul><li><p>Mejora la eficiencia del GC para cargas modernas con mucha asignaci&#243;n</p></li><li><p>Reduce el coste de recolectar objetos j&#243;venes frente a estrategias m&#225;s generales</p></li><li><p>Empuja a Shenandoah hacia un perfil m&#225;s s&#243;lido para apps con latencia sensible</p></li></ul><blockquote><p><strong>C&#243;mo cambia el desarrollo</strong></p></blockquote><ul><li><p>Los equipos que usan Shenandoah van a ver un comportamiento m&#225;s alineado con workloads reales de producci&#243;n</p></li><li><p>Menos necesidad de pelear contra pausas largas en escenarios de alta presi&#243;n de memoria</p></li><li><p>Si mantienes configuraciones custom del GC, toca revisar supuestos viejos antes de que queden obsoletos</p></li></ul><blockquote><p><strong>Impacto en proyectos existentes</strong></p></blockquote><ul><li><p>Positivo para sistemas con baja tolerancia a pausas</p></li><li><p>Importante para servicios de alto throughput y baja latencia</p></li><li><p>Puede requerir validaci&#243;n de tuning y observabilidad de GC en entornos cr&#237;ticos</p></li></ul><blockquote><p><strong>Enlace oficial</strong></p></blockquote><ul><li><p>JEP 535: <a href="https://openjdk.org/jeps/535">https://openjdk.org/jeps/535</a></p></li><li><p>Mailing list: <a href="https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/WCXBMQ2AIKRK5R4DV6LFML5L4KHMXZSM/">https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/WCXBMQ2AIKRK5R4DV6LFML5L4KHMXZSM/</a></p></li></ul><div><hr></div><h2><strong>&#128736;&#65039; Herramientas y utilidades para developers</strong></h2><h3><strong>TeamCity y el parche de emergencia para CVE-2026-63077 &#128293;</strong></h3><p>JetBrains public&#243; m&#225;s orientaci&#243;n sobre una vulnerabilidad que no admite postureo: si tu TeamCity est&#225; expuesto y no parcheado, el problema es real.</p><blockquote><p><strong>Qu&#233; hace</strong></p></blockquote><ul><li><p>Corrige <strong>CVE-2026-63077</strong></p></li><li><p>Evita que un atacante con acceso HTTP(S) pueda:</p><ul><li><p>saltarse autenticaci&#243;n</p></li><li><p>ejecutar comandos arbitrarios en el sistema operativo</p></li></ul></li></ul><blockquote><p><strong>Novedades / estado</strong></p></blockquote><ul><li><p>Se reporta explotaci&#243;n activa y tambi&#233;n intentos de explotaci&#243;n</p></li><li><p>Versiones recomendadas:</p><ul><li><p><strong>2025.11.7</strong></p></li><li><p><strong>2026.1.3</strong></p></li></ul></li><li><p>Si no puedes actualizar, existe un <strong>security patch plugin</strong> para TeamCity 2017.1+</p></li></ul><blockquote><p><strong>Uso en proyectos Java/Spring</strong></p></blockquote><ul><li><p>Si tu CI/CD est&#225; montado sobre TeamCity, esto afecta directamente:</p><ul><li><p>pipelines</p></li><li><p>credenciales</p></li><li><p>artefactos</p></li><li><p>agentes de build</p></li></ul></li><li><p>Un servidor CI comprometido es una puerta lateral a todo tu ecosistema de desarrollo</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Update de seguridad: <a href="https://blog.jetbrains.com/teamcity/2026/08/cve-2026-63077-update/">https://blog.jetbrains.com/teamcity/2026/08/cve-2026-63077-update/</a></p></li><li><p>Disclosure original: <a href="https://blog.jetbrains.com/teamcity/2026/07/cve-2026-63077/">https://blog.jetbrains.com/teamcity/2026/07/cve-2026-63077/</a></p></li></ul><div><hr></div><h1><strong>&#127757; Comunidad y Ecosistema</strong></h1><p>A continuaci&#243;n tienes algunos de los eventos m&#225;s relevantes del ecosistema Java y JVM que se celebrar&#225;n durante los pr&#243;ximos meses.</p><h3><strong>JDK Embassy 2026</strong></h3><p>&#128467;&#65039; <strong>2026-08-07</strong><br>&#128205; On-site / virtual, global</p><p>Evento centrado en la evoluci&#243;n del ecosistema Java con foco en JDK, rendimiento, plataforma y tendencias de desarrollo. Esta semana cobra relevancia por el empuje de las abstracciones agentic y c&#243;mo encajan sobre la base de Java moderno.</p><p>Web: https://www.jdk.embassy</p><div><hr></div><h2><strong>JavaZone</strong></h2><p>&#128467;&#65039; <strong>2&#8211;3 de septiembre de 2026</strong><br>&#128205; Oslo, Noruega</p><p>Uno de los eventos Java m&#225;s prestigiosos de Europa, organizado por la comunidad noruega de desarrolladores. Suele ofrecer contenido muy t&#233;cnico sobre JVM, arquitectura, cloud, IA y desarrollo backend.</p><p>&#127760; https://2026.javazone.no/</p><div><hr></div><h2><strong>IntelliJ IDEA Conf 2026</strong></h2><p>&#128467;&#65039; <strong>8&#8211;9 de septiembre de 2026</strong><br>&#127760; Evento online</p><p>La conferencia oficial organizada por JetBrains dedicada a IntelliJ IDEA, productividad, desarrollo Java, Kotlin y herramientas para desarrolladores.</p><p>&#127760; <a href="https://lp.jetbrains.com/intellij-idea-conf/">https://lp.jetbrains.com/intellij-idea-conf/</a></p><div><hr></div><h2><strong>Kansas City Developer Conference</strong></h2><p>&#128467;&#65039; <strong>9&#8211;11 de septiembre de 2026</strong><br>&#128205; Kansas City, Missouri (EE. UU.)</p><p>Evento multidisciplinar donde Java suele ocupar un papel destacado junto con arquitectura software, cloud, DevOps y desarrollo empresarial.</p><p>&#127760; https://www.kcdc.info/</p><div><hr></div><h2><strong>JC Conference Taiwan (JCConf)</strong></h2><p>&#128467;&#65039; <strong>11 de septiembre de 2026</strong><br>&#128205; Taip&#233;i, Taiw&#225;n</p><p>Conferencia centrada exclusivamente en Java y el ecosistema JVM, con ponencias t&#233;cnicas y casos reales de empresas asi&#225;ticas e internacionales.</p><p>&#127760; https://jcconf.tw/</p><div><hr></div><h2><strong>Devoxx Belgium</strong></h2><p>&#128467;&#65039; <strong>5&#8211;9 de octubre de 2026</strong><br>&#128205; Amberes, B&#233;lgica</p><p>Probablemente la conferencia Java m&#225;s importante del mundo. Durante cinco d&#237;as re&#250;ne a los principales expertos de Oracle, OpenJDK, Spring, Quarkus, Hibernate, Micronaut y muchas otras tecnolog&#237;as del ecosistema JVM.</p><p>&#127760; https://devoxx.be/</p><div><hr></div><h2><strong>dev2next</strong></h2><p>&#128467;&#65039; <strong>12&#8211;15 de octubre de 2026</strong><br>&#128205; Colorado Springs, EE. UU.</p><p>Conferencia para desarrolladores con un fuerte componente de arquitectura, cloud, Java moderno y desarrollo empresarial.</p><p>&#127760; https://www.dev2next.com/</p><div><hr></div><h2><strong>J on the Beach</strong></h2><p>&#128467;&#65039; <strong>29&#8211;30 de octubre de 2026</strong><br>&#128205; M&#225;laga, Espa&#241;a</p><p>Uno de los eventos tecnol&#243;gicos m&#225;s importantes de Espa&#241;a. Aunque naci&#243; alrededor de Java, actualmente cubre tambi&#233;n IA, arquitectura distribuida, cloud, big data y desarrollo de software moderno.</p><p>&#127760; https://jonthebeach.com/</p><div><hr></div><h2><strong>&#216;redev</strong></h2><p>&#128467;&#65039; <strong>4&#8211;6 de noviembre de 2026</strong><br>&#128205; Malm&#246;, Suecia</p><p>Conferencia internacional para desarrolladores donde Java contin&#250;a siendo una de las tecnolog&#237;as protagonistas junto con arquitectura, DevOps y cloud.</p><p>&#127760; https://oredev.org/</p><div><hr></div><h2><strong>JFall</strong></h2><p>&#128467;&#65039; <strong>11&#8211;12 de noviembre de 2026</strong><br>&#128205; Ede, Pa&#237;ses Bajos</p><p>Evento organizado por la comunidad Java neerlandesa con decenas de charlas t&#233;cnicas sobre JVM, Spring, Quarkus, rendimiento y buenas pr&#225;cticas.</p><p>&#127760; https://jfall.nl/</p><div><hr></div><h2><strong>IT-Tage</strong></h2><p>&#128467;&#65039; <strong>7&#8211;10 de diciembre de 2026</strong><br>&#128205; Fr&#225;ncfort, Alemania</p><p>Conferencia orientada al desarrollo de software empresarial donde Java tiene una presencia muy destacada junto con arquitectura, cloud y metodolog&#237;as &#225;giles.</p><p>&#127760; https://www.ittage.informatik-aktuell.de/</p><div><hr></div><h2><strong>Jfokus</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de febrero de 2027</strong><br>&#128205; Estocolmo, Suecia</p><p>Uno de los primeros grandes eventos Java del a&#241;o. Re&#250;ne a numerosos miembros del OpenJDK, expertos en JVM y referentes de Spring, Jakarta EE y arquitectura software.</p><p>&#127760; https://www.jfokus.se/</p><div><hr></div><h2><strong>JavaLand</strong></h2><p>&#128467;&#65039; <strong>2&#8211;4 de marzo de 2027</strong><br>&#128205; N&#252;rburg, Alemania</p><p>Una de las conferencias Java m&#225;s grandes de Europa, organizada por la Java User Group alemana. Tres d&#237;as repletos de contenido t&#233;cnico sobre todo el ecosistema Java.</p><p>&#127760;  https://www.javaland.eu/</p><div><hr></div><h2><strong>&#128161; Tip de la semana (Java / Spring Boot)</strong></h2><h3><strong>Detecta campos no inicializados sin esperar al </strong><code>NullPointerException</code></h3><p>Si tienes modelos o DTOs donde un campo <strong>debe</strong> venir siempre informado, evita depender solo de validaci&#243;n tard&#237;a. En Spring Boot puedes combinar <strong>constructor binding</strong> con validaci&#243;n para forzar invariantes desde el borde de entrada.</p><pre><code><code>import jakarta.validation.constraints.NotBlank;

public record CreateUserRequest(
    @NotBlank String name,
    @NotBlank String email
) {}
</code></code></pre><blockquote><p>Y en el controller:</p></blockquote><pre><code><code>@PostMapping("/users")
public ResponseEntity&lt;Void&gt; create(@Valid @RequestBody CreateUserRequest request) {
    userService.create(request);
    return ResponseEntity.accepted().build();
}
</code></code></pre><blockquote><p><strong>Qu&#233; ganas:</strong></p></blockquote><ul><li><p>El contrato queda expl&#237;cito</p></li><li><p>Evitas estados parcialmente construidos</p></li><li><p>El fallo ocurre temprano, donde debe ocurrir</p></li></ul><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 1 - Agosto 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-d22</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-d22</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 07 Aug 2026 12:22:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/kDgpyRSpz5c" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido/a a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h1>&#127909; V&#237;deo de la semana: Usar <code>@Tool</code> en Spring AI</h1><div id="youtube2-kDgpyRSpz5c" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;kDgpyRSpz5c&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/kDgpyRSpz5c?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong><span>&#128293; </span>EDICI&#211;N 2: <span>Convi&#233;rtete en </span>AI Engineer<span> con JAVA</span></strong></h2><p>&#128680;El mercado ya ha cambiado.</p><p><span>Los developers que saben integrar IA en sistemas est&#225;n subiendo de nivel.</span><br><span>El resto&#8230; se est&#225; quedando fuera de los proyectos importantes.</span></p><p>Y no, no necesitas aprender Python.</p><p><span>Necesitas saber hacer esto con </span><strong>Java + Spring AI</strong><span>.</span></p><p><span>He creado este </span><strong>M&#225;ster de AI Engineering con Java</strong><span> para que puedas:</span></p><ul><li><p>Construir sistemas de IA para producci&#243;n</p></li><li><p>Integrarlos en Spring Boot</p></li><li><p><span>Posicionarte en un perfil con </span><strong>menos competencia y m&#225;s salario &#8252;&#65039;</strong></p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;text&quot;:&quot;INSCRIBIRSE EN EL CURSO GRATUITO&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring"><span>INSCRIBIRSE EN EL CURSO GRATUITO</span></a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2-qZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:213090,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programandoenjava.substack.com/i/193053437?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!2-qZ!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf92822-646d-4ce8-9e52-69b4e73a4a9d_1200x630.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring&quot;,&quot;text&quot;:&quot;INSCRIBIRSE EN EL CURSO GRATUITO&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.codeja.dev/masters/master-ai-engineer-java-langchain-spring"><span>INSCRIBIRSE EN EL CURSO GRATUITO</span></a></p><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h3><strong>Embabel 1.0.0 GA &#128640;</strong></h3><p>Embabel llega a <strong>1.0 GA</strong> y no viene a reemplazar Spring AI: viene a ponerle una capa de programaci&#243;n mucho m&#225;s declarativa para construir agentes en Java y Kotlin.</p><blockquote><p><strong>Qu&#233; trae</strong></p></blockquote><ul><li><p>Define agentes como <strong>objetos de dominio tipados</strong>: objetivos, acciones y condiciones.</p></li><li><p>Introduce <strong>planning en runtime</strong> con enfoque GOAP (<em>Goal-Oriented Action Planning</em>).</p></li><li><p>Permite que el agente <strong>recalcule la ruta</strong> si el entorno cambia: una herramienta falla, aparece nueva informaci&#243;n, o una acci&#243;n ya no es v&#225;lida.</p></li><li><p>Soporta <strong>Spring AI</strong> como base para modelos, embeddings y tools.</p></li><li><p>Admite m&#250;ltiples proveedores y despliegues:</p><ul><li><p>OpenAI</p></li><li><p>Anthropic</p></li><li><p>Gemini</p></li><li><p>Bedrock</p></li><li><p>Mistral</p></li><li><p>DeepSeek</p></li><li><p>Ollama</p></li><li><p>Docker</p></li><li><p>endpoints OpenAI-compatible como LM Studio</p></li></ul></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Evita el cl&#225;sico &#8220;spaghetti de prompts y tool calls&#8221; donde cada flujo acaba siendo un parche artesanal.</p></li><li><p>Reduce el acoplamiento entre la l&#243;gica del agente y el proveedor de LLM.</p></li><li><p>Permite mezclar <strong>modelos por acci&#243;n</strong>, algo muy &#250;til para optimizar coste, latencia y calidad.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Para equipos Spring Boot, Embabel empieza a parecerse a lo que Spring MVC hizo con los servlets: menos boilerplate, m&#225;s intenci&#243;n.</p></li><li><p>Si ya usas Spring AI, Embabel encaja como una capa superior para agentes con m&#225;s estructura y planificaci&#243;n.</p></li><li><p>Ideal para asistentes, workflows inteligentes y automatizaci&#243;n que no puede permitirse romperse ante la primera excepci&#243;n del modelo.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Anuncio de Rod Johnson: </p></li></ul><div class="twitter-embed" data-attrs="{&quot;url&quot;:&quot;https://x.com/springrod/status/2079032549226291505&quot;,&quot;full_text&quot;:&quot;Embabel 1.0.0 GA nearly ready...excited!\n\nIf you haven't yet tried its beautiful API, sophisticated planning and advanced agentic RAG, now's the time!\n\n<span class=\&quot;tweet-fake-link\&quot;>#embabel</span> <span class=\&quot;tweet-fake-link\&quot;>@springcentral</span> <span class=\&quot;tweet-fake-link\&quot;>@java</span> \n\n&quot;,&quot;username&quot;:&quot;springrod&quot;,&quot;name&quot;:&quot;Rod Johnson&quot;,&quot;profile_image_url&quot;:&quot;https://pbs.substack.com/profile_images/535226633003610112/rzTrIOcZ_normal.jpeg&quot;,&quot;date&quot;:&quot;2026-07-20T02:36:00.000Z&quot;,&quot;photos&quot;:[],&quot;quoted_tweet&quot;:{},&quot;reply_count&quot;:3,&quot;retweet_count&quot;:12,&quot;like_count&quot;:52,&quot;impression_count&quot;:3321,&quot;expanded_url&quot;:{&quot;url&quot;:&quot;https://github.com/embabel/embabel-agent&quot;,&quot;title&quot;:&quot;GitHub - embabel/embabel-agent: Agent framework for the JVM. Pronounced Em-BAY-bel /&#603;m&#712;be&#618;b&#601;l/&quot;,&quot;description&quot;:&quot;Agent framework for the JVM. Pronounced Em-BAY-bel /&#603;m&#712;be&#618;b&#601;l/ - embabel/embabel-agent&quot;,&quot;domain&quot;:&quot;github.com&quot;,&quot;image&quot;:&quot;https://pbs.substack.com/news_img/2085575932392386560/kuHqG9ri?format=jpg&amp;name=orig&quot;},&quot;video_url&quot;:null,&quot;video_preview_media_key&quot;:null,&quot;belowTheFold&quot;:true}" data-component-name="Twitter2ToDOM"></div><ul><li><p>README oficial: <a href="https://github.com/embabel/embabel-agent#readme">https://github.com/embabel/embabel-agent#readme</a></p></li><li><p>Overview: <a href="https://hub.embabel.com/overview">https://hub.embabel.com/overview</a></p></li><li><p>Referencia de LLMs: <a href="https://hub.embabel.com/reference/llms">https://hub.embabel.com/reference/llms</a></p></li></ul><h3><strong>LangGraph4j &#128257;</strong></h3><p>LangGraph4j sigue consolid&#225;ndose como la opci&#243;n Java para quienes prefieren workflows de agentes basados en grafos.</p><blockquote><p><strong>Qu&#233; hace</strong></p></blockquote><ul><li><p>Modela el flujo como un <strong>grafo dirigido</strong>.</p></li><li><p>Los nodos representan llamadas a LLM, tools o accesos a datos.</p></li><li><p>Las aristas definen el routing, est&#225;tico o condicional.</p></li><li><p>Comparte estado entre pasos de forma expl&#237;cita.</p></li></ul><blockquote><p><strong>Lo relevante</strong></p></blockquote><ul><li><p>Sigue siendo una base m&#225;s predecible cuando el flujo necesita trazabilidad fuerte.</p></li><li><p>Encaja mejor en escenarios donde quieres <strong>ver y controlar</strong> el grafo completo antes de ejecutar nada.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Si tu caso requiere orquestaci&#243;n determinista, LangGraph4j sigue siendo un enfoque s&#243;lido.</p></li><li><p>Frente a Embabel, la diferencia es clara: aqu&#237; el grafo lo dise&#241;as t&#250;; all&#237; el planner lo descubre en runtime.</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p><a href="https://github.com/langgraph4j/langgraph4j">https://github.com/langgraph4j/langgraph4j</a></p></li></ul><h3><strong>Akka Agentic Platform &#129504;</strong></h3><p>Akka empuja su propuesta agentic desde su fortaleza hist&#243;rica: <strong>el actor model</strong> y la resiliencia distribuida.</p><blockquote><p><strong>Qu&#233; aporta</strong></p></blockquote><ul><li><p>Cada agente corre como un <strong>actor aislado</strong>.</p></li><li><p>Estado y conversaci&#243;n se mantienen encapsulados.</p></li><li><p>Puede sobrevivir a fallos y reiniciarse sin reconstruir todo el sistema.</p></li><li><p>Pensado para distribuci&#243;n y escalado en cluster.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>En agentes de larga duraci&#243;n, la persistencia del estado y la tolerancia a fallos no son un lujo: son la diferencia entre producto y demo.</p></li><li><p>Akka apuesta por infraestructura s&#243;lida debajo del agente, no solo por la capa de prompts.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Muy interesante para sistemas multiagente en producci&#243;n, con necesidad real de alta disponibilidad.</p></li><li><p>Si tu prioridad es resiliencia y distribuci&#243;n, Akka ofrece una postura m&#225;s &#8220;infra&#8221; que &#8220;framework de desarrollo&#8221;.</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p><a href="https://akka.io/blog/announcing-akkas-agentic-ai-release">https://akka.io/blog/announcing-akkas-agentic-ai-release</a></p></li></ul><h3><strong>Koog de JetBrains &#129513;</strong></h3><p>Koog sigue diferenci&#225;ndose con una apuesta m&#225;s cercana a Kotlin y sus capacidades idiom&#225;ticas.</p><blockquote><p><strong>Qu&#233; hace</strong></p></blockquote><ul><li><p>Construye agentes apoy&#225;ndose en features del lenguaje.</p></li><li><p>Propone una experiencia m&#225;s natural para equipos Kotlin-first.</p></li><li><p>Busca que la estructura del agente viva m&#225;s en el c&#243;digo que en una capa externa de orquestaci&#243;n.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Es otra se&#241;al clara de que el ecosistema agentic en Java/Kotlin se est&#225; diversificando.</p></li><li><p>No hay una &#250;nica forma correcta de construir agentes; hay varias, y cada una apunta a una capa distinta del stack.</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>https://docs.koog.ai/</p></li></ul><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><p>No se han incluido actualizaciones concretas del JDK en la fuente de esta semana.</p><p>Aun as&#237;, el movimiento del ecosistema s&#237; deja una lectura &#250;til: <strong>la innovaci&#243;n ahora est&#225; ocurriendo muy fuerte en la capa de frameworks y runtime para agentes</strong>, mientras Java sigue siendo una plataforma muy seria para construir abstracciones de alto nivel sin renunciar a tipado, modularidad y despliegue estable.</p><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Si trabajas en Spring Boot, el foco sigue siendo integrar bien estas capas nuevas sin convertir el c&#243;digo en una feria de strings m&#225;gicos.</p></li><li><p>El valor est&#225; en que Java/Kotlin est&#225;n entrando con fuerza en el terreno agentic sin pedir perd&#243;n ni cambiar de idioma.</p></li></ul><div><hr></div><h1><strong>&#127757; Comunidad y Ecosistema</strong></h1><p>A continuaci&#243;n tienes algunos de los eventos m&#225;s relevantes del ecosistema Java y JVM que se celebrar&#225;n durante los pr&#243;ximos meses.</p><h3><strong>JDK Embassy 2026</strong></h3><p>&#128467;&#65039; <strong>2026-08-07</strong><br>&#128205; On-site / virtual, global</p><p>Evento centrado en la evoluci&#243;n del ecosistema Java con foco en JDK, rendimiento, plataforma y tendencias de desarrollo. Esta semana cobra relevancia por el empuje de las abstracciones agentic y c&#243;mo encajan sobre la base de Java moderno.</p><p>Web: https://www.jdk.embassy</p><div><hr></div><h2><strong>JavaZone</strong></h2><p>&#128467;&#65039; <strong>2&#8211;3 de septiembre de 2026</strong><br>&#128205; Oslo, Noruega</p><p>Uno de los eventos Java m&#225;s prestigiosos de Europa, organizado por la comunidad noruega de desarrolladores. Suele ofrecer contenido muy t&#233;cnico sobre JVM, arquitectura, cloud, IA y desarrollo backend.</p><p>&#127760; https://2026.javazone.no/</p><div><hr></div><h2><strong>IntelliJ IDEA Conf 2026</strong></h2><p>&#128467;&#65039; <strong>8&#8211;9 de septiembre de 2026</strong><br>&#127760; Evento online</p><p>La conferencia oficial organizada por JetBrains dedicada a IntelliJ IDEA, productividad, desarrollo Java, Kotlin y herramientas para desarrolladores.</p><p>&#127760; <a href="https://lp.jetbrains.com/intellij-idea-conf/">https://lp.jetbrains.com/intellij-idea-conf/</a></p><div><hr></div><h2><strong>Kansas City Developer Conference</strong></h2><p>&#128467;&#65039; <strong>9&#8211;11 de septiembre de 2026</strong><br>&#128205; Kansas City, Missouri (EE. UU.)</p><p>Evento multidisciplinar donde Java suele ocupar un papel destacado junto con arquitectura software, cloud, DevOps y desarrollo empresarial.</p><p>&#127760; https://www.kcdc.info/</p><div><hr></div><h2><strong>JC Conference Taiwan (JCConf)</strong></h2><p>&#128467;&#65039; <strong>11 de septiembre de 2026</strong><br>&#128205; Taip&#233;i, Taiw&#225;n</p><p>Conferencia centrada exclusivamente en Java y el ecosistema JVM, con ponencias t&#233;cnicas y casos reales de empresas asi&#225;ticas e internacionales.</p><p>&#127760; https://jcconf.tw/</p><div><hr></div><h2><strong>Devoxx Belgium</strong></h2><p>&#128467;&#65039; <strong>5&#8211;9 de octubre de 2026</strong><br>&#128205; Amberes, B&#233;lgica</p><p>Probablemente la conferencia Java m&#225;s importante del mundo. Durante cinco d&#237;as re&#250;ne a los principales expertos de Oracle, OpenJDK, Spring, Quarkus, Hibernate, Micronaut y muchas otras tecnolog&#237;as del ecosistema JVM.</p><p>&#127760; https://devoxx.be/</p><div><hr></div><h2><strong>dev2next</strong></h2><p>&#128467;&#65039; <strong>12&#8211;15 de octubre de 2026</strong><br>&#128205; Colorado Springs, EE. UU.</p><p>Conferencia para desarrolladores con un fuerte componente de arquitectura, cloud, Java moderno y desarrollo empresarial.</p><p>&#127760; https://www.dev2next.com/</p><div><hr></div><h2><strong>J on the Beach</strong></h2><p>&#128467;&#65039; <strong>29&#8211;30 de octubre de 2026</strong><br>&#128205; M&#225;laga, Espa&#241;a</p><p>Uno de los eventos tecnol&#243;gicos m&#225;s importantes de Espa&#241;a. Aunque naci&#243; alrededor de Java, actualmente cubre tambi&#233;n IA, arquitectura distribuida, cloud, big data y desarrollo de software moderno.</p><p>&#127760; https://jonthebeach.com/</p><div><hr></div><h2><strong>&#216;redev</strong></h2><p>&#128467;&#65039; <strong>4&#8211;6 de noviembre de 2026</strong><br>&#128205; Malm&#246;, Suecia</p><p>Conferencia internacional para desarrolladores donde Java contin&#250;a siendo una de las tecnolog&#237;as protagonistas junto con arquitectura, DevOps y cloud.</p><p>&#127760; https://oredev.org/</p><div><hr></div><h2><strong>JFall</strong></h2><p>&#128467;&#65039; <strong>11&#8211;12 de noviembre de 2026</strong><br>&#128205; Ede, Pa&#237;ses Bajos</p><p>Evento organizado por la comunidad Java neerlandesa con decenas de charlas t&#233;cnicas sobre JVM, Spring, Quarkus, rendimiento y buenas pr&#225;cticas.</p><p>&#127760; https://jfall.nl/</p><div><hr></div><h2><strong>IT-Tage</strong></h2><p>&#128467;&#65039; <strong>7&#8211;10 de diciembre de 2026</strong><br>&#128205; Fr&#225;ncfort, Alemania</p><p>Conferencia orientada al desarrollo de software empresarial donde Java tiene una presencia muy destacada junto con arquitectura, cloud y metodolog&#237;as &#225;giles.</p><p>&#127760; https://www.ittage.informatik-aktuell.de/</p><div><hr></div><h2><strong>Jfokus</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de febrero de 2027</strong><br>&#128205; Estocolmo, Suecia</p><p>Uno de los primeros grandes eventos Java del a&#241;o. Re&#250;ne a numerosos miembros del OpenJDK, expertos en JVM y referentes de Spring, Jakarta EE y arquitectura software.</p><p>&#127760; https://www.jfokus.se/</p><div><hr></div><h2><strong>JavaLand</strong></h2><p>&#128467;&#65039; <strong>2&#8211;4 de marzo de 2027</strong><br>&#128205; N&#252;rburg, Alemania</p><p>Una de las conferencias Java m&#225;s grandes de Europa, organizada por la Java User Group alemana. Tres d&#237;as repletos de contenido t&#233;cnico sobre todo el ecosistema Java.</p><p>&#127760;  https://www.javaland.eu/</p><div><hr></div><h2><strong>&#128161; Tip de la semana (Java / Spring Boot)</strong></h2><h3><strong>Detecta campos no inicializados sin esperar al </strong><code>NullPointerException</code></h3><p>Si tienes modelos o DTOs donde un campo <strong>debe</strong> venir siempre informado, evita depender solo de validaci&#243;n tard&#237;a. En Spring Boot puedes combinar <strong>constructor binding</strong> con validaci&#243;n para forzar invariantes desde el borde de entrada.</p><pre><code><code>import jakarta.validation.constraints.NotBlank;

public record CreateUserRequest(
    @NotBlank String name,
    @NotBlank String email
) {}
</code></code></pre><blockquote><p>Y en el controller:</p></blockquote><pre><code><code>@PostMapping("/users")
public ResponseEntity&lt;Void&gt; create(@Valid @RequestBody CreateUserRequest request) {
    userService.create(request);
    return ResponseEntity.accepted().build();
}
</code></code></pre><blockquote><p><strong>Qu&#233; ganas:</strong></p></blockquote><ul><li><p>El contrato queda expl&#237;cito</p></li><li><p>Evitas estados parcialmente construidos</p></li><li><p>El fallo ocurre temprano, donde debe ocurrir</p></li></ul><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 5 - Julio 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-c5e</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-c5e</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 31 Jul 2026 12:01:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/FYnYplMHwPk" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido/a a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h1>&#127909; V&#237;deo de la semana: Spring Boot Serverless en Vercel.com</h1><div id="youtube2-FYnYplMHwPk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;FYnYplMHwPk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/FYnYplMHwPk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h3><strong>Embabel 1.0.0 GA &#128640;</strong></h3><p>La plataforma de agentes para JVM llega a <strong>versi&#243;n estable</strong> despu&#233;s de 14 meses de evoluci&#243;n.</p><blockquote><p><strong>Cambios y mejoras clave:</strong></p></blockquote><ul><li><p>APIs experimentales promovidas a producci&#243;n, incluyendo <code>TokenCountEstimator</code></p></li><li><p>Mejor observabilidad del servidor MCP v&#237;a <strong>Spring Boot Actuator</strong></p></li><li><p>Integraci&#243;n con el modelo <strong>Z.ai GLM</strong></p></li><li><p>Ajustes y mejoras sobre modelos existentes</p></li></ul><p><strong>Por qu&#233; importa:</strong> Embabel deja de ser &#8220;interesante&#8221; para convertirse en &#8220;usable de verdad&#8221; en entornos serios. Si est&#225;s explorando agentes, automatizaci&#243;n o workflows de IA sobre JVM, este release ya no pide permiso.</p><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Mejor monitoreo en producci&#243;n sin montar telemetr&#237;a artesanal</p></li><li><p>Menos fricci&#243;n para integrar capacidades de agentes en apps Spring</p></li><li><p>Se&#241;al clara de madurez para equipos que no quieren apostar por tooling verde</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://github.com/embabel/embabel-agent/releases/tag/v1.0.0">https://github.com/embabel/embabel-agent/releases/tag/v1.0.0</a></p></blockquote><div><hr></div><h3><strong>Azul Payara 7.2.0 &#127959;&#65039;</strong></h3><p>Nueva entrega de julio 2026 para <strong>Community Edition 7.2026.7</strong>, <strong>Enterprise Edition 6.40.0</strong> y <strong>Enterprise Edition 5.89.0</strong>.</p><blockquote><p><strong>Cambios y mejoras clave:</strong></p></blockquote><ul><li><p>Correcciones de bugs y upgrades de componentes</p></li><li><p>Compatibilidad hacia atr&#225;s para definir CDI beans impl&#237;citos usando <code>glassfish-application.xml</code></p></li><li><p>Nuevo &#8220;forward-port&#8221; de descriptores de Payara 6 para fijar la app a una versi&#243;n mayor concreta</p></li><li><p>Port de la correcci&#243;n para <strong>CVE-2024-9342</strong> en el Console/REST API</p></li></ul><p><strong>Por qu&#233; importa:</strong> Payara sigue jugando la carta de la compatibilidad sin sacrificar control. El detalle del descriptor &#8220;forward-port&#8221; es especialmente &#250;til para entornos donde una actualizaci&#243;n mayor puede romper despliegues sensibles.</p><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Menos dependencia de descriptores legacy</p></li><li><p>Mejor estrategia para pinnear comportamiento por versi&#243;n</p></li><li><p>Refuerzo de seguridad en la consola administrativa y API REST</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://docs.azul.com/payara/release-notes/release-notes-7.2.0.html">https://docs.azul.com/payara/release-notes/release-notes-7.2.0.html</a></p></blockquote><div><hr></div><h3><strong>Helidon 4.5.1 &#9881;&#65039;</strong></h3><p>Helidon aprieta tuercas en seguridad y comportamiento por defecto. Un release peque&#241;o, pero con decisiones bastante serias.</p><blockquote><p><strong>Cambios y mejoras clave:</strong></p></blockquote><ul><li><p>Las requests en <strong>GraphQL</strong> requieren autenticaci&#243;n por defecto</p></li><li><p>En <strong>WebClient</strong>, cookies y <code>Authorization</code> se eliminan en redirects cross-origin</p></li><li><p>Se rechazan redirects HTTP <strong>307</strong> y <strong>308</strong> en ese flujo</p></li><li><p>Las cookies de access token OIDC se encriptan por defecto</p></li></ul><p><strong>Por qu&#233; importa:</strong> Aqu&#237; no hay maquillaje: Helidon est&#225; cerrando superficies de ataque y reduciendo riesgos por defecto. Eso es exactamente lo que quieres en 2026, no configuraciones &#8220;seguras&#8221; que solo existen en slides.</p><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Menos exposici&#243;n accidental en clientes HTTP</p></li><li><p>Mejor postura de seguridad en autenticaci&#243;n OIDC</p></li><li><p>Cambios que pueden afectar integraciones que depend&#237;an de redirects o cookies sin tratar</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://github.com/helidon-io/helidon/blob/4.5.1/CHANGELOG.md">https://github.com/helidon-io/helidon/blob/4.5.1/CHANGELOG.md</a></p></blockquote><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><h3><strong>Oracle Critical Patch Update &#8212; julio 2026 &#128272;</strong></h3><p>Oracle public&#243; versiones de mantenimiento para varias ramas del JDK:</p><ul><li><p><strong>25.0.4</strong></p></li><li><p><strong>21.0.12</strong></p></li><li><p><strong>17.0.20</strong></p></li><li><p><strong>11.0.32</strong></p></li><li><p><strong>8u501</strong></p></li></ul><blockquote><p><strong>Qu&#233; aporta:</strong></p></blockquote><ul><li><p>Correcciones de seguridad y parches cr&#237;ticos</p></li><li><p>Publicaci&#243;n alineada con el ciclo trimestral de CPUs</p></li><li><p>Pr&#243;ximo CPU previsto para el <strong>18 de agosto de 2026</strong></p></li></ul><p><strong>Cambio relevante del ecosistema:</strong> Oracle anunci&#243; que ampliar&#225; la entrega de CPUs para incluir <strong>actualizaciones mensuales</strong> dirigidas a vulnerabilidades de alta prioridad. Traducci&#243;n: la ventana para dormirte con el parcheo se reduce.</p><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Si mantienes LTS en producci&#243;n, revisa tus pipelines de actualizaci&#243;n ya</p></li><li><p>Los equipos con Java 8/11/17/21/25 deber&#237;an acelerar su pol&#237;tica de parches</p></li><li><p>M&#225;s presi&#243;n sobre automatizaci&#243;n de actualizaci&#243;n y testing de regresi&#243;n</p></li></ul><blockquote><p><strong>Enlaces oficiales:</strong></p></blockquote><ul><li><p>Advisory: <a href="https://www.oracle.com/security-alerts/cpujul2026.html">https://www.oracle.com/security-alerts/cpujul2026.html</a></p></li><li><p>25.0.4: <a href="https://www.oracle.com/java/technologies/javase/25-0-4-relnotes.html">https://www.oracle.com/java/technologies/javase/25-0-4-relnotes.html</a></p></li><li><p>21.0.12: <a href="https://www.oracle.com/java/technologies/javase/21-0-12-relnotes.html">https://www.oracle.com/java/technologies/javase/21-0-12-relnotes.html</a></p></li><li><p>17.0.20: <a href="https://www.oracle.com/java/technologies/javase/17-0-20-relnotes.html">https://www.oracle.com/java/technologies/javase/17-0-20-relnotes.html</a></p></li><li><p>11.0.32: <a href="https://www.oracle.com/java/technologies/javase/11-0-32-relnotes.html">https://www.oracle.com/java/technologies/javase/11-0-32-relnotes.html</a></p></li><li><p>8u501: <a href="https://www.oracle.com/java/technologies/javase/8u501-relnotes.html">https://www.oracle.com/java/technologies/javase/8u501-relnotes.html</a></p></li></ul><div><hr></div><h3><strong>JDK 27 EA Build 32 &#129514;</strong></h3><p>La rama <strong>JDK 27</strong> recibi&#243; el <strong>Build 32</strong> de sus early-access builds.</p><p><strong>Qu&#233; incluye:</strong></p><ul><li><p>Fixes sobre problemas diversos reportados en el tracker de OpenJDK</p></li><li><p>Actualizaciones acumuladas desde el Build 31</p></li><li><p>Notas de release disponibles para seguimiento t&#233;cnico</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>&#218;til para validar compatibilidad temprana con frameworks, bytecode tools y librer&#237;as</p></li><li><p>Si mantienes tooling que toca internals, este tipo de builds te permiten detectar roturas antes de que te exploten en QA</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://jdk.java.net/27/">https://jdk.java.net/27/</a></p></blockquote><div><hr></div><h3><strong>JDK 28 EA Build 8 &#128293;</strong></h3><p>La rama <strong>JDK 28</strong> avanza con el <strong>Build 8</strong> de su canal early-access.</p><blockquote><p><strong>Qu&#233; incluye:</strong></p></blockquote><ul><li><p>Correcciones acumuladas desde el Build 7</p></li><li><p>Ajustes y fixes de issues abiertos en OpenJDK</p></li><li><p>Se&#241;al clara de que JDK 28 empieza a perfilar contenido m&#225;s serio</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Relevante para equipos que siguen de cerca el roadmap del lenguaje y del runtime</p></li><li><p>Buen momento para probar compatibilidad de compilaci&#243;n, pruebas y observabilidad sobre la pr&#243;xima l&#237;nea</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://jdk.java.net/28/">https://jdk.java.net/28/</a></p></blockquote><div><hr></div><h2><strong>&#129514; Nuevas JEPs o propuestas del ecosistema Java</strong></h2><h3><strong>JEP 540 &#8212; Simple JSON API (Incubator) &#129521;</strong></h3><p>La propuesta avanza a <strong>Candidate</strong>.</p><p><strong>Prop&#243;sito:</strong> Definir una API est&#225;ndar y simple para <strong>parsear y generar JSON</strong> sin depender de librer&#237;as externas.</p><p><strong>Problema que resuelve:</strong> Hoy el ecosistema tiene opciones maduras, s&#237;, pero tambi&#233;n fragmentaci&#243;n. Una API nativa simplifica el trabajo para casos comunes y reduce dependencias cuando solo necesitas JSON b&#225;sico y bien definido.</p><p><strong>C&#243;mo cambiar&#237;a el desarrollo:</strong></p><ul><li><p>Menos &#8220;a&#241;adir Jackson porque s&#237;&#8221;</p></li><li><p>Mejor experiencia para proyectos peque&#241;os o m&#243;dulos del JDK</p></li><li><p>Un est&#225;ndar que sigue <strong>RFC 8259</strong></p></li></ul><blockquote><p><strong>Fase actual:</strong> Candidate<br><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/540">https://openjdk.org/jeps/540</a></p></blockquote><div><hr></div><h3><strong>JEP 539 &#8212; Strict Field Initialization in the JVM (Preview) &#129513;</strong></h3><p>La propuesta pas&#243; de <strong>Candidate</strong> a <strong>Proposed to Target</strong> para JDK 28.</p><p><strong>Prop&#243;sito:</strong> Introducir campos estrictamente inicializados en la JVM, de modo que <strong>no puedan leerse antes de ser inicializados</strong>.</p><p><strong>Problema que resuelve:</strong> Se acab&#243; observar valores por defecto como <code>0</code> o <code>null</code> cuando el contrato del campo exige inicializaci&#243;n previa. Menos ambig&#252;edad, menos bugs silenciosos.</p><p><strong>C&#243;mo cambiar&#237;a el desarrollo:</strong></p><ul><li><p>Mejor seguridad sem&#225;ntica en generaci&#243;n de bytecode</p></li><li><p>Potencial impacto en compiladores y herramientas que emiten clases</p></li><li><p>M&#225;s garant&#237;as en inicializaci&#243;n de estado cr&#237;tico</p></li></ul><p><strong>Fase actual:</strong> Proposed to Target<br><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/539">https://openjdk.org/jeps/539</a></p><div><hr></div><h3><strong>JEP 401 &#8212; Value Objects (Preview) &#9889;</strong></h3><p>Tambi&#233;n sube de <strong>Candidate</strong> a <strong>Proposed to Target</strong> para JDK 28.</p><p><strong>Prop&#243;sito:</strong> Introducir <strong>value objects</strong>: objetos con campos <code>final</code>, sin identidad y comparables por el valor de sus campos.</p><p><strong>Problema que resuelve:</strong> Modelos donde la identidad sobra y solo importa el contenido. Menos ruido, m&#225;s sem&#225;ntica, mejor alineaci&#243;n con dominios de negocio y estructuras inmutables.</p><p><strong>C&#243;mo cambiar&#237;a el desarrollo:</strong></p><ul><li><p>Entidades y modelos m&#225;s expresivos</p></li><li><p>Mayor eficiencia y claridad en dise&#241;o de dominio</p></li><li><p>Un paso fuerte hacia tipos m&#225;s sem&#225;nticos en Java</p></li></ul><blockquote><p><strong>Fase actual:</strong> Proposed to Target<br><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/401">https://openjdk.org/jeps/401</a></p></blockquote><div><hr></div><h3><strong>JEP 541 &#8212; Deprecate the macOS/x64 Port for Removal &#127822;</strong></h3><p>La JEP pasa a <strong>Candidate</strong>.</p><p><strong>Prop&#243;sito:</strong> Marcar como deprecated el port de <strong>macOS/x64</strong> para su futura eliminaci&#243;n.</p><p><strong>Problema que resuelve:</strong> Apple ya no soporta esa arquitectura. Mantener el port implica coste de mantenimiento sin retorno real.</p><p><strong>C&#243;mo cambiar&#237;a el desarrollo:</strong></p><ul><li><p>Menos superficie de soporte en OpenJDK</p></li><li><p>M&#225;s presi&#243;n para migrar entornos antiguos</p></li><li><p>Se&#241;al clara de limpieza de plataformas obsoletas</p></li></ul><blockquote><p><strong>Fase actual:</strong> Candidate<br><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/541">https://openjdk.org/jeps/541</a></p></blockquote><div><hr></div><h2><strong>&#128736;&#65039; Herramientas y utilidades para developers</strong></h2><h3><strong>BellSoft Liberica JDK builds con CPU/PSU de julio 2026 &#128295;</strong></h3><p>BellSoft public&#243; builds de <strong>Liberica JDK</strong> alineados con el CPU de Oracle y tambi&#233;n versiones <strong>PSU</strong> con fixes no cr&#237;ticos adicionales.</p><p><strong>Qu&#233; hace:</strong> Distribuye una implementaci&#243;n OpenJDK con parches de seguridad y mantenimiento para varias ramas.</p><p><strong>Novedades de la versi&#243;n:</strong></p><ul><li><p>CPU patches para:</p><ul><li><p>25.0.3.0.1</p></li><li><p>21.0.11.0.1</p></li><li><p>17.0.19.0.1</p></li><li><p>11.0.31.0.1</p></li><li><p>8u501</p></li></ul></li><li><p>PSU releases:</p><ul><li><p>26.0.2</p></li><li><p>25.0.4</p></li><li><p>21.0.12</p></li><li><p>17.0.20</p></li><li><p>11.0.32</p></li><li><p>8u502</p></li></ul></li><li><p>Total de <strong>1252 fixes y backports</strong></p></li><li><p>35 issues resueltas en todas las releases</p></li></ul><blockquote><p><strong>C&#243;mo se usa en Spring/Java:</strong></p></blockquote><ul><li><p>Ideal como runtime alternativo en contenedores</p></li><li><p>&#218;til para pipelines que validan m&#250;ltiples vendor JDKs</p></li><li><p>Interesante para sistemas que quieren menor fricci&#243;n en updates de seguridad</p></li></ul><p><strong>Enlace oficial:</strong> <a href="https://bell-sw.com/blog/liberica-jdk-8u502-11-0-32-17-0-20-21-0-12-25-0-4-and-26-0-2-builds-are-generally-available/">https://bell-sw.com/blog/liberica-jdk-8u502-11-0-32-17-0-20-21-0-12-25-0-4-and-26-0-2-builds-are-generally-available/</a></p><div><hr></div><h1><strong>&#127757; Comunidad y Ecosistema</strong></h1><p>A continuaci&#243;n tienes algunos de los eventos m&#225;s relevantes del ecosistema Java y JVM que se celebrar&#225;n durante los pr&#243;ximos meses.</p><div><hr></div><h2><strong>JavaZone</strong></h2><p>&#128467;&#65039; <strong>2&#8211;3 de septiembre de 2026</strong><br>&#128205; Oslo, Noruega</p><p>Uno de los eventos Java m&#225;s prestigiosos de Europa, organizado por la comunidad noruega de desarrolladores. Suele ofrecer contenido muy t&#233;cnico sobre JVM, arquitectura, cloud, IA y desarrollo backend.</p><p>&#127760; https://2026.javazone.no/</p><div><hr></div><h2><strong>IntelliJ IDEA Conf 2026</strong></h2><p>&#128467;&#65039; <strong>8&#8211;9 de septiembre de 2026</strong><br>&#127760; Evento online</p><p>La conferencia oficial organizada por JetBrains dedicada a IntelliJ IDEA, productividad, desarrollo Java, Kotlin y herramientas para desarrolladores.</p><p>&#127760; <a href="https://lp.jetbrains.com/intellij-idea-conf/">https://lp.jetbrains.com/intellij-idea-conf/</a></p><div><hr></div><h2><strong>Kansas City Developer Conference</strong></h2><p>&#128467;&#65039; <strong>9&#8211;11 de septiembre de 2026</strong><br>&#128205; Kansas City, Missouri (EE. UU.)</p><p>Evento multidisciplinar donde Java suele ocupar un papel destacado junto con arquitectura software, cloud, DevOps y desarrollo empresarial.</p><p>&#127760; https://www.kcdc.info/</p><div><hr></div><h2><strong>JC Conference Taiwan (JCConf)</strong></h2><p>&#128467;&#65039; <strong>11 de septiembre de 2026</strong><br>&#128205; Taip&#233;i, Taiw&#225;n</p><p>Conferencia centrada exclusivamente en Java y el ecosistema JVM, con ponencias t&#233;cnicas y casos reales de empresas asi&#225;ticas e internacionales.</p><p>&#127760; https://jcconf.tw/</p><div><hr></div><h2><strong>Devoxx Belgium</strong></h2><p>&#128467;&#65039; <strong>5&#8211;9 de octubre de 2026</strong><br>&#128205; Amberes, B&#233;lgica</p><p>Probablemente la conferencia Java m&#225;s importante del mundo. Durante cinco d&#237;as re&#250;ne a los principales expertos de Oracle, OpenJDK, Spring, Quarkus, Hibernate, Micronaut y muchas otras tecnolog&#237;as del ecosistema JVM.</p><p>&#127760; https://devoxx.be/</p><div><hr></div><h2><strong>dev2next</strong></h2><p>&#128467;&#65039; <strong>12&#8211;15 de octubre de 2026</strong><br>&#128205; Colorado Springs, EE. UU.</p><p>Conferencia para desarrolladores con un fuerte componente de arquitectura, cloud, Java moderno y desarrollo empresarial.</p><p>&#127760; https://www.dev2next.com/</p><div><hr></div><h2><strong>J on the Beach</strong></h2><p>&#128467;&#65039; <strong>29&#8211;30 de octubre de 2026</strong><br>&#128205; M&#225;laga, Espa&#241;a</p><p>Uno de los eventos tecnol&#243;gicos m&#225;s importantes de Espa&#241;a. Aunque naci&#243; alrededor de Java, actualmente cubre tambi&#233;n IA, arquitectura distribuida, cloud, big data y desarrollo de software moderno.</p><p>&#127760; https://jonthebeach.com/</p><div><hr></div><h2><strong>&#216;redev</strong></h2><p>&#128467;&#65039; <strong>4&#8211;6 de noviembre de 2026</strong><br>&#128205; Malm&#246;, Suecia</p><p>Conferencia internacional para desarrolladores donde Java contin&#250;a siendo una de las tecnolog&#237;as protagonistas junto con arquitectura, DevOps y cloud.</p><p>&#127760; https://oredev.org/</p><div><hr></div><h2><strong>JFall</strong></h2><p>&#128467;&#65039; <strong>11&#8211;12 de noviembre de 2026</strong><br>&#128205; Ede, Pa&#237;ses Bajos</p><p>Evento organizado por la comunidad Java neerlandesa con decenas de charlas t&#233;cnicas sobre JVM, Spring, Quarkus, rendimiento y buenas pr&#225;cticas.</p><p>&#127760; https://jfall.nl/</p><div><hr></div><h2><strong>IT-Tage</strong></h2><p>&#128467;&#65039; <strong>7&#8211;10 de diciembre de 2026</strong><br>&#128205; Fr&#225;ncfort, Alemania</p><p>Conferencia orientada al desarrollo de software empresarial donde Java tiene una presencia muy destacada junto con arquitectura, cloud y metodolog&#237;as &#225;giles.</p><p>&#127760; https://www.ittage.informatik-aktuell.de/</p><div><hr></div><h2><strong>Jfokus</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de febrero de 2027</strong><br>&#128205; Estocolmo, Suecia</p><p>Uno de los primeros grandes eventos Java del a&#241;o. Re&#250;ne a numerosos miembros del OpenJDK, expertos en JVM y referentes de Spring, Jakarta EE y arquitectura software.</p><p>&#127760; https://www.jfokus.se/</p><div><hr></div><h2><strong>JavaLand</strong></h2><p>&#128467;&#65039; <strong>2&#8211;4 de marzo de 2027</strong><br>&#128205; N&#252;rburg, Alemania</p><p>Una de las conferencias Java m&#225;s grandes de Europa, organizada por la Java User Group alemana. Tres d&#237;as repletos de contenido t&#233;cnico sobre todo el ecosistema Java.</p><p>&#127760;  https://www.javaland.eu/</p><div><hr></div><h2><strong>&#128161; Tip de la semana (Java / Spring Boot)</strong></h2><h3><strong>Detecta campos no inicializados sin esperar al </strong><code>NullPointerException</code></h3><p>Si tienes modelos o DTOs donde un campo <strong>debe</strong> venir siempre informado, evita depender solo de validaci&#243;n tard&#237;a. En Spring Boot puedes combinar <strong>constructor binding</strong> con validaci&#243;n para forzar invariantes desde el borde de entrada.</p><pre><code><code>import jakarta.validation.constraints.NotBlank;

public record CreateUserRequest(
    @NotBlank String name,
    @NotBlank String email
) {}
</code></code></pre><blockquote><p>Y en el controller:</p></blockquote><pre><code><code>@PostMapping("/users")
public ResponseEntity&lt;Void&gt; create(@Valid @RequestBody CreateUserRequest request) {
    userService.create(request);
    return ResponseEntity.accepted().build();
}
</code></code></pre><blockquote><p><strong>Qu&#233; ganas:</strong></p></blockquote><ul><li><p>El contrato queda expl&#237;cito</p></li><li><p>Evitas estados parcialmente construidos</p></li><li><p>El fallo ocurre temprano, donde debe ocurrir</p></li></ul><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 4 - Julio 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-5fe</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-5fe</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 24 Jul 2026 12:03:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/jFYH7-IAF34" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido/a a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h1>&#127909; V&#237;deo de la semana: CREA un REST API con MICRONAUT</h1><div id="youtube2-jFYH7-IAF34" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;jFYH7-IAF34&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/jFYH7-IAF34?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>&#128230; Novedades en Librer&#237;as y Frameworks</strong></h2><h3><strong>WildFly 41 &#128737;&#65039;</strong></h3><blockquote><p>WildFly 41 llega en <strong>GA</strong> con una tanda de mejoras bastante seria:</p></blockquote><ul><li><p><strong>Bootable JARs</strong> a&#241;adidos a:</p><ul><li><p><code>wildfly-cloud-galleon-pack</code></p></li><li><p><code>wildfly-maven-plugin</code></p></li></ul></li><li><p><strong>Im&#225;genes con JDK 25</strong> para:</p><ul><li><p><code>wildfly/wildfly</code></p></li><li><p><code>wildfly/wildfly-s2i</code></p></li><li><p><code>wildfly/wildfly-runtime</code></p></li></ul></li><li><p>Varios features promovidos de:</p><ul><li><p><code>preview</code> &#8594; <code>community</code></p></li><li><p><code>community</code> &#8594; <code>default</code></p></li></ul></li><li><p>Bug fixes y upgrades de dependencias</p></li></ul><p><strong>Por qu&#233; importa</strong> WildFly sigue empujando fuerte en entornos Jakarta EE y cloud-native. El movimiento a <strong>JDK 25</strong> en sus im&#225;genes oficiales es una se&#241;al clara: el stack se est&#225; alineando con la pr&#243;xima generaci&#243;n del runtime Java, no con el museo de JDK 17.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Mejor encaje para despliegues modernos en contenedores</p></li><li><p>Menos fricci&#243;n si est&#225;s trabajando con bootable JARs</p></li><li><p>Mayor estabilidad en features ya madurados</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/wildfly/wildfly/releases/tag/41.0.0.Final">https://github.com/wildfly/wildfly/releases/tag/41.0.0.Final</a></p></li><li><p>Anuncio: <a href="https://www.wildfly.org/news/2026/07/16/WildFly-41-is-released/">https://www.wildfly.org/news/2026/07/16/WildFly-41-is-released/</a></p></li></ul><div><hr></div><h3><strong>Open Liberty 26.0.0.7 &#128274;</strong></h3><blockquote><p>Open Liberty publica su <strong>GA release 26.0.0.7</strong> con foco en seguridad y endurecimiento del runtime:</p></blockquote><ul><li><p>Los cookies de <strong>Single Sign-On</strong> marcados como logout quedan rastreados por defecto y ya no se pueden reutilizar</p></li><li><p>Posibilidad de <strong>deshabilitar </strong><code>/health</code> cuando se usa un mecanismo de health check basado en archivo</p></li><li><p>Correcci&#243;n de <strong>8 CVEs</strong> relacionadas con:</p><ul><li><p>denial-of-service</p></li><li><p>HTTP request smuggling</p></li><li><p>server-side request forgery</p></li></ul></li></ul><p><strong>Por qu&#233; importa</strong> Aqu&#237; no hay humo: hay seguridad real. Si operas servicios expuestos, especialmente en entornos regulados o con autenticaci&#243;n federada, estos cambios importan m&#225;s que cualquier &#8220;feature&#8221; decorativa.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Menor riesgo de replay de sesi&#243;n tras logout</p></li><li><p>M&#225;s control sobre endpoints de observabilidad</p></li><li><p>Menos exposici&#243;n a vulnerabilidades conocidas</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Blog/release: <a href="https://openliberty.io/blog/2026/07/14/26.0.0.7.html">https://openliberty.io/blog/2026/07/14/26.0.0.7.html</a></p></li></ul><div><hr></div><h3><strong>TornadoVM 5.1.0 &#9889;</strong></h3><blockquote><p>TornadoVM 5.1.0 trae novedades interesantes para c&#243;mputo acelerado:</p></blockquote><ul><li><p>Soporte para almacenamiento <strong>E4M3 y E5M2</strong> de 8 bits en backend CUDA</p></li><li><p>Ruta opcional de transferencia <strong>host-to-device staged</strong> para PTX y CUDA</p></li><li><p>Mejora de rendimiento en <code>withIntraPlanConcurrency()</code> dentro de <code>TornadoExecutionPlan</code></p></li><li><p>Menor coste de bookkeeping por operaci&#243;n y join en planes concurrentes</p></li></ul><p><strong>Por qu&#233; importa</strong> Esto apunta a workloads m&#225;s pesados en GPU con menor fricci&#243;n de transferencia y mejor aprovechamiento de concurrencia interna. Menos overhead, m&#225;s trabajo &#250;til. Justo lo que quieres cuando el cuello de botella no deber&#237;a ser el framework.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Mejor rendimiento en pipelines GPU</p></li><li><p>M&#225;s opciones para modelos y c&#225;lculos con formatos FP8</p></li><li><p>Menos coste en planes concurrentes complejos</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/beehive-lab/TornadoVM/releases/tag/v5.1.0-jdk25">https://github.com/beehive-lab/TornadoVM/releases/tag/v5.1.0-jdk25</a></p></li></ul><div><hr></div><h3><strong>Apache TomEE 10.2.0 &#9749;</strong></h3><blockquote><p>TomEE 10.2.0 llega con upgrades de dependencias y fixes bastante concretos:</p></blockquote><ul><li><p>El par&#225;metro <code>sslTruststorePassword</code> en <code>HttpConnection</code> ya no se muestra en logs</p></li><li><p>Se corrige la p&#233;rdida de causa en <code>AuthenticationException</code> lanzada desde <code>authenticate()</code> en <code>JNDIContext</code></p></li><li><p>Actualizaciones de dependencias</p></li></ul><p><strong>Por qu&#233; importa</strong> Este tipo de release no vende titulares, pero arregla cosas que en producci&#243;n duelen: secretos en logs y excepciones que llegan mutiladas. El cl&#225;sico &#8220;&#191;por qu&#233; esto fall&#243;?&#8221; ahora tendr&#225; menos misterio y menos cortisol.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>M&#225;s seguridad operacional</p></li><li><p>Mejor trazabilidad de errores</p></li><li><p>Menos fugas accidentales de credenciales</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Release notes: <a href="https://tomee.apache.org/10.2.0/release-notes.html">https://tomee.apache.org/10.2.0/release-notes.html</a></p></li></ul><div><hr></div><h3><strong>Java Operator SDK 5.5.0 &#129513;</strong></h3><blockquote><p>Java Operator SDK 5.5.0 introduce cambios importantes para operadores Kubernetes:</p></blockquote><ul><li><p>Familia consistente de m&#233;todos de <strong>update/patch/create</strong></p></li><li><p>Soporte para:</p><ul><li><p><strong>RFC 6902 JSON Patch</strong></p></li><li><p><strong>RFC 7386 JSON Merge Patch</strong></p></li></ul></li><li><p>Nueva interfaz <code>Matcher</code></p></li><li><p>Personalizaci&#243;n de estrategias de matching en <code>matchAndFilter()</code> de <code>Options</code></p></li></ul><p><strong>Por qu&#233; importa</strong> Los operadores dejan de depender de magia impl&#237;cita y ganan una API m&#225;s predecible. El soporte expl&#237;cito de patching est&#225;ndar reduce ambig&#252;edad y mejora interoperabilidad. Menos &#8220;adivina lo que quer&#237;a decir el framework&#8221;, m&#225;s intenci&#243;n clara.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>M&#225;s control sobre reconciliaci&#243;n</p></li><li><p>Integraci&#243;n m&#225;s limpia con recursos complejos</p></li><li><p>Mejor encaje con flujos GitOps y actualizaciones parciales</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/operator-framework/java-operator-sdk/releases/tag/v5.5.0">https://github.com/operator-framework/java-operator-sdk/releases/tag/v5.5.0</a></p></li></ul><div><hr></div><h3><strong>LangChain4j 1.18.0 &#129302;</strong></h3><blockquote><p>LangChain4j 1.18.0 publica release formal y beta 28 con novedades &#250;tiles para IA aplicada en Java:</p></blockquote><ul><li><p>Nuevo patr&#243;n de agentes <strong>BDI</strong> (Belief-Desire-Intention)</p></li><li><p>Nueva interfaz <code>TextToSpeechModel</code> para OpenAI Text-to-Speech</p></li><li><p>Nueva clase <code>MistralAiBatchChatModel</code> para la API Batch de Mistral</p></li><li><p>Correcciones varias</p></li></ul><p><strong>Por qu&#233; importa</strong> LangChain4j sigue madurando como puente serio para aplicaciones Java con IA. El soporte BDI empuja a patrones de agente m&#225;s estructurados, y las nuevas integraciones ampl&#237;an el rango pr&#225;ctico de despliegue.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>M&#225;s opciones para arquitectura agentic</p></li><li><p>Integraci&#243;n de voz y chat batch sin inventar wrappers a mano</p></li><li><p>Mejor soporte para aplicaciones Java con IA de producci&#243;n</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/langchain4j/langchain4j/releases/tag/1.18.0">https://github.com/langchain4j/langchain4j/releases/tag/1.18.0</a></p></li></ul><div><hr></div><h3><strong>Micronaut Framework 5.0.5 &#129520;</strong></h3><blockquote><p>Micronaut 5.0.5 llega como release de mantenimiento basado en Micronaut Core 5.0.6:</p></blockquote><ul><li><p>Actualizaciones puntuales en:</p><ul><li><p>Micronaut AWS</p></li><li><p>Micronaut gRPC</p></li><li><p>Micronaut Oracle Cloud</p></li><li><p>Micronaut Logging</p></li></ul></li></ul><p><strong>Por qu&#233; importa</strong> Es una versi&#243;n de ajuste fino, pero justo ese tipo de release mantiene el ecosistema vivo sin sorpresas. Si ya est&#225;s en Micronaut, actualizar aqu&#237; suele ser una decisi&#243;n de bajo drama y alto sentido com&#250;n.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Mejor compatibilidad con m&#243;dulos cloud y observabilidad</p></li><li><p>Menos deuda t&#233;cnica acumulada</p></li><li><p>Ruta m&#225;s estable para servicios reactivos y cloud-native</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/micronaut-projects/micronaut-platform/releases/tag/v5.0.5">https://github.com/micronaut-projects/micronaut-platform/releases/tag/v5.0.5</a></p></li></ul><div><hr></div><h3><strong>Quarkus Shim &#129514;</strong></h3><blockquote><p>Quarkus presenta una nueva extensi&#243;n experimental: <strong>Quarkus Shim</strong>.</p></blockquote><ul><li><p>Permite <strong>a&#241;adir, envolver o reemplazar comportamiento</strong> en una clase Java durante la build</p></li><li><p>El cambio ocurre en <strong>augmentation</strong></p></li><li><p>No usa Java agent</p></li><li><p>No usa instrumentaci&#243;n en runtime</p></li><li><p>Funciona en:</p><ul><li><p>JVM mode</p></li><li><p>dev mode</p></li><li><p>native executables</p></li></ul></li></ul><p><strong>Por qu&#233; importa</strong> Esto es Quarkus haciendo Quarkus: transformar en build-time lo que otros intentan remendar en runtime. Menos agentes, menos fricci&#243;n, menos &#8220;misterio&#8221; en producci&#243;n.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Ideal para cross-cutting concerns en build-time</p></li><li><p>&#218;til cuando quieres extender comportamiento sin meter agentes</p></li><li><p>Especialmente interesante para native apps</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Blog: <a href="https://quarkus.io/blog/quarkus-shim/">https://quarkus.io/blog/quarkus-shim/</a></p></li><li><p>Extensi&#243;n: <a href="https://quarkus.io/extensions/io.quarkiverse.shim/quarkus-shim/">https://quarkus.io/extensions/io.quarkiverse.shim/quarkus-shim/</a></p></li></ul><div><hr></div><h3><strong>Oracle AI Agent Studio for Fusion Applications &#129504;</strong></h3><blockquote><p>Oracle introduce un <strong>AI-native builder experience</strong> para <strong>Oracle AI Agent Studio for Fusion Applications</strong>:</p></blockquote><ul><li><p>Permite crear y ejecutar Fusion Agentic Applications dentro de Oracle Fusion Cloud Applications</p></li><li><p>Une:</p><ul><li><p>no-code</p></li><li><p>low-code</p></li><li><p>pro-code</p></li></ul></li><li><p>Todo dentro de un framework nativo de Fusion</p></li></ul><p><strong>Por qu&#233; importa</strong> Oracle est&#225; empujando fuerte el stack de agentes dentro de su ecosistema cloud. Si trabajas con integraciones enterprise, esto puede marcar la pauta de c&#243;mo se construyen automatizaciones y asistentes dentro del mundo Fusion.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>M&#225;s opciones para soluciones agentic empresariales</p></li><li><p>Menor fricci&#243;n entre negocio, low-code y desarrollo profesional</p></li><li><p>Posible nueva superficie de integraci&#243;n para Java y servicios backend</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Anuncio: <a href="https://www.oracle.com/news/announcement/oracle-introduces-ai-native-builder-experience-2026-07-14/">https://www.oracle.com/news/announcement/oracle-introduces-ai-native-builder-experience-2026-07-14/</a></p></li><li><p>Studio: <a href="https://www.oracle.com/applications/fusion-ai/#studio">https://www.oracle.com/applications/fusion-ai/#studio</a></p></li></ul><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><h3><strong>JDK 27 EA Build 31</strong></h3><blockquote><p>La rama <strong>JDK 27</strong> recibi&#243; el <strong>Build 31</strong> de sus early-access builds.</p></blockquote><ul><li><p>Se publicaron fixes sobre el build anterior</p></li><li><p>Incluye correcciones de varios issues reportados en el tracker</p></li><li><p>Notas de release actualizadas</p></li></ul><p><strong>Impacto</strong> Si sigues de cerca el pulso de la pr&#243;xima versi&#243;n de Java, este build sirve para detectar regresiones temprano y validar tooling, tests y dependencias antes de que el calendario apriete.</p><p><strong>Enlaces</strong></p><ul><li><p>Build 31: <a href="https://github.com/openjdk/jdk/releases/tag/jdk-27%2B31">https://github.com/openjdk/jdk/releases/tag/jdk-27%2B31</a></p></li><li><p>EA builds: <a href="https://jdk.java.net/27/">https://jdk.java.net/27/</a></p></li><li><p>Release notes: <a href="https://jdk.java.net/27/release-notes">https://jdk.java.net/27/release-notes</a></p></li></ul><div><hr></div><h3><strong>JDK 28 EA Build 7</strong></h3><blockquote><p>La rama <strong>JDK 28</strong> public&#243; el <strong>Build 7</strong> de sus early-access builds.</p></blockquote><ul><li><p>Incluye fixes sobre el build anterior</p></li><li><p>Contin&#250;a el ciclo de estabilizaci&#243;n temprana</p></li><li><p>Release notes disponibles</p></li></ul><p><strong>Impacto</strong> Misma pel&#237;cula, otro cap&#237;tulo: validar compatibilidad anticipada evita sorpresas cuando el JDK pase de &#8220;curiosidad&#8221; a &#8220;base de producci&#243;n&#8221;.</p><p><strong>Enlaces</strong></p><ul><li><p>Build 7: <a href="https://github.com/openjdk/jdk/releases/tag/jdk-28%2B7">https://github.com/openjdk/jdk/releases/tag/jdk-28%2B7</a></p></li><li><p>EA builds: <a href="https://jdk.java.net/28/">https://jdk.java.net/28/</a></p></li><li><p>Release notes: <a href="https://jdk.java.net/28/release-notes">https://jdk.java.net/28/release-notes</a></p></li></ul><div><hr></div><h2><strong>&#129514; Nuevas JEPs o Propuestas</strong></h2><h3><strong>JEP 401: Value Objects (Preview) &#128300;</strong></h3><blockquote><p>La JEP 401 ha sido <strong>reintroducida</strong> y sube a estado <strong>Candidate</strong> bajo Project Valhalla.</p></blockquote><p><strong>Qu&#233; propone</strong></p><ul><li><p>Introducir <strong>value objects</strong></p></li><li><p>Objetos que:</p><ul><li><p>solo contienen campos <code>final</code></p></li><li><p>no tienen identidad</p></li><li><p>se distinguen &#250;nicamente por el valor de sus campos</p></li></ul></li></ul><p><strong>Problema que resuelve</strong> El modelo actual de objetos Java mezcla identidad con datos, aunque muchas veces solo quieres estructuras de valor puras. Eso complica rendimiento, modelado y sem&#225;ntica. Esta JEP va a la ra&#237;z del problema: separar &#8220;qui&#233;n eres&#8221; de &#8220;qu&#233; tienes&#8221;.</p><p><strong>C&#243;mo cambiar&#237;a el desarrollo</strong></p><ul><li><p>Modelos m&#225;s expresivos para dominios ricos en datos</p></li><li><p>Menor sobrecarga conceptual en entidades inmutables</p></li><li><p>Posible mejora de rendimiento y layout de memoria en el futuro</p></li></ul><blockquote><p><strong>Fase actual</strong></p></blockquote><ul><li><p><strong>Candidate</strong></p></li><li><p>Preview</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>JEP 401: <a href="https://openjdk.org/jeps/401">https://openjdk.org/jeps/401</a></p></li><li><p>Project Valhalla: <a href="https://openjdk.org/projects/valhalla/">https://openjdk.org/projects/valhalla/</a></p></li><li><p>Reintroducci&#243;n: <a href="https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/IUNJJ3WP3X3XHP3QZTXXSSCPKFDNTK3W/">https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/IUNJJ3WP3X3XHP3QZTXXSSCPKFDNTK3W/</a></p></li></ul><div><hr></div><h1><strong>&#127757; Comunidad y Ecosistema</strong></h1><p>A continuaci&#243;n tienes algunos de los eventos m&#225;s relevantes del ecosistema Java y JVM que se celebrar&#225;n durante los pr&#243;ximos meses.</p><div><hr></div><h2><strong>JCrete</strong></h2><p>&#128467;&#65039; <strong>26&#8211;31 de julio de 2026</strong><br>&#128205; Creta, Grecia</p><p>Una conferencia muy diferente al resto. Combina sesiones t&#233;cnicas de alto nivel con actividades al aire libre, networking y debates entre algunos de los mayores expertos del ecosistema Java.</p><p>&#127760; https://www.jcrete.org/</p><div><hr></div><h2><strong>JavaZone</strong></h2><p>&#128467;&#65039; <strong>2&#8211;3 de septiembre de 2026</strong><br>&#128205; Oslo, Noruega</p><p>Uno de los eventos Java m&#225;s prestigiosos de Europa, organizado por la comunidad noruega de desarrolladores. Suele ofrecer contenido muy t&#233;cnico sobre JVM, arquitectura, cloud, IA y desarrollo backend.</p><p>&#127760; https://2026.javazone.no/</p><div><hr></div><h2><strong>IntelliJ IDEA Conf 2026</strong></h2><p>&#128467;&#65039; <strong>8&#8211;9 de septiembre de 2026</strong><br>&#127760; Evento online</p><p>La conferencia oficial organizada por JetBrains dedicada a IntelliJ IDEA, productividad, desarrollo Java, Kotlin y herramientas para desarrolladores.</p><p>&#127760; <a href="https://lp.jetbrains.com/intellij-idea-conf/">https://lp.jetbrains.com/intellij-idea-conf/</a></p><div><hr></div><h2><strong>Kansas City Developer Conference</strong></h2><p>&#128467;&#65039; <strong>9&#8211;11 de septiembre de 2026</strong><br>&#128205; Kansas City, Missouri (EE. UU.)</p><p>Evento multidisciplinar donde Java suele ocupar un papel destacado junto con arquitectura software, cloud, DevOps y desarrollo empresarial.</p><p>&#127760; https://www.kcdc.info/</p><div><hr></div><h2><strong>JC Conference Taiwan (JCConf)</strong></h2><p>&#128467;&#65039; <strong>11 de septiembre de 2026</strong><br>&#128205; Taip&#233;i, Taiw&#225;n</p><p>Conferencia centrada exclusivamente en Java y el ecosistema JVM, con ponencias t&#233;cnicas y casos reales de empresas asi&#225;ticas e internacionales.</p><p>&#127760; https://jcconf.tw/</p><div><hr></div><h2><strong>Devoxx Belgium</strong></h2><p>&#128467;&#65039; <strong>5&#8211;9 de octubre de 2026</strong><br>&#128205; Amberes, B&#233;lgica</p><p>Probablemente la conferencia Java m&#225;s importante del mundo. Durante cinco d&#237;as re&#250;ne a los principales expertos de Oracle, OpenJDK, Spring, Quarkus, Hibernate, Micronaut y muchas otras tecnolog&#237;as del ecosistema JVM.</p><p>&#127760; https://devoxx.be/</p><div><hr></div><h2><strong>dev2next</strong></h2><p>&#128467;&#65039; <strong>12&#8211;15 de octubre de 2026</strong><br>&#128205; Colorado Springs, EE. UU.</p><p>Conferencia para desarrolladores con un fuerte componente de arquitectura, cloud, Java moderno y desarrollo empresarial.</p><p>&#127760; https://www.dev2next.com/</p><div><hr></div><h2><strong>J on the Beach</strong></h2><p>&#128467;&#65039; <strong>29&#8211;30 de octubre de 2026</strong><br>&#128205; M&#225;laga, Espa&#241;a</p><p>Uno de los eventos tecnol&#243;gicos m&#225;s importantes de Espa&#241;a. Aunque naci&#243; alrededor de Java, actualmente cubre tambi&#233;n IA, arquitectura distribuida, cloud, big data y desarrollo de software moderno.</p><p>&#127760; https://jonthebeach.com/</p><div><hr></div><h2><strong>&#216;redev</strong></h2><p>&#128467;&#65039; <strong>4&#8211;6 de noviembre de 2026</strong><br>&#128205; Malm&#246;, Suecia</p><p>Conferencia internacional para desarrolladores donde Java contin&#250;a siendo una de las tecnolog&#237;as protagonistas junto con arquitectura, DevOps y cloud.</p><p>&#127760; https://oredev.org/</p><div><hr></div><h2><strong>JFall</strong></h2><p>&#128467;&#65039; <strong>11&#8211;12 de noviembre de 2026</strong><br>&#128205; Ede, Pa&#237;ses Bajos</p><p>Evento organizado por la comunidad Java neerlandesa con decenas de charlas t&#233;cnicas sobre JVM, Spring, Quarkus, rendimiento y buenas pr&#225;cticas.</p><p>&#127760; https://jfall.nl/</p><div><hr></div><h2><strong>IT-Tage</strong></h2><p>&#128467;&#65039; <strong>7&#8211;10 de diciembre de 2026</strong><br>&#128205; Fr&#225;ncfort, Alemania</p><p>Conferencia orientada al desarrollo de software empresarial donde Java tiene una presencia muy destacada junto con arquitectura, cloud y metodolog&#237;as &#225;giles.</p><p>&#127760; https://www.ittage.informatik-aktuell.de/</p><div><hr></div><h2><strong>Jfokus</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de febrero de 2027</strong><br>&#128205; Estocolmo, Suecia</p><p>Uno de los primeros grandes eventos Java del a&#241;o. Re&#250;ne a numerosos miembros del OpenJDK, expertos en JVM y referentes de Spring, Jakarta EE y arquitectura software.</p><p>&#127760; https://www.jfokus.se/</p><div><hr></div><h2><strong>JavaLand</strong></h2><p>&#128467;&#65039; <strong>2&#8211;4 de marzo de 2027</strong><br>&#128205; N&#252;rburg, Alemania</p><p>Una de las conferencias Java m&#225;s grandes de Europa, organizada por la Java User Group alemana. Tres d&#237;as repletos de contenido t&#233;cnico sobre todo el ecosistema Java.</p><p>&#127760;  https://www.javaland.eu/</p><div><hr></div><h1><strong>&#128161; Tip de la semana</strong></h1><h3><strong>Usa </strong><code>@Bean</code><strong> con condici&#243;n expl&#237;cita para evitar beans fantasma en Spring Boot &#129504;</strong></h3><p>Cuando una app crece, los <code>@ConditionalOn...</code> pueden esconder demasiado. Si quieres evitar sorpresas en runtime, haz la condici&#243;n visible y testeable.</p><pre><code><code>@Configuration
public class PaymentConfig {

    @Bean
    @ConditionalOnProperty(prefix = "payments", name = "provider", havingValue = "stripe")
    PaymentClient stripePaymentClient() {
        return new StripePaymentClient();
    }

    @Bean
    @ConditionalOnProperty(prefix = "payments", name = "provider", havingValue = "paypal")
    PaymentClient paypalPaymentClient() {
        return new PaypalPaymentClient();
    }
}
</code></code></pre><blockquote><p><strong>Por qu&#233; funciona mejor</strong></p></blockquote><ul><li><p>Deja clara la decisi&#243;n de wiring.</p></li><li><p>Evita ambig&#252;edad cuando el entorno cambia.</p></li><li><p>Hace m&#225;s f&#225;cil testear qu&#233; bean se carga en cada perfil.</p></li></ul><blockquote><p><strong>Regla pr&#225;ctica</strong> Si una condici&#243;n de Spring no se puede explicar en una frase, probablemente tu configuraci&#243;n ya est&#225; pidiendo ox&#237;geno.</p></blockquote><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 3 - Julio 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-f73</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-f73</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 17 Jul 2026 12:05:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/reXbmFfBXaw" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido/a a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h1>&#127909; V&#237;deo de la semana: 10 ERRORES de JUNIORS que te impiden ASCENDER a SENIOR</h1><div id="youtube2-reXbmFfBXaw" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;reXbmFfBXaw&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/reXbmFfBXaw?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h3><strong>TornadoVM 5.0.0</strong></h3><p>TornadoVM da un salto serio con su versi&#243;n 5.0.0, enfocada en acelerar Java sobre GPU con mejor soporte para CUDA. No es un &#8220;nice to have&#8221;; es una jugada clara para llevar c&#243;mputo intensivo a hardware NVIDIA sin salir del ecosistema Java.</p><blockquote><p><strong>Qu&#233; trae esta versi&#243;n</strong></p></blockquote><ul><li><p>Ejecuci&#243;n <strong>nativa de Java en GPUs NVIDIA</strong>.</p></li><li><p>Nuevo <strong>Hybrid API</strong> para invocar librer&#237;as nativas NVIDIA directamente desde <code>TaskGraph</code>.</p></li><li><p>Correcci&#243;n de bugs varios.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Reduce fricci&#243;n para workloads de HPC, ML y procesamiento paralelo.</p></li><li><p>Abre la puerta a integrar kernels nativos con flujos Java existentes sin reescribir medio stack.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Si trabajas con pipelines intensivos en c&#225;lculo, esta versi&#243;n puede recortar tiempos de ejecuci&#243;n de forma brutal.</p></li><li><p>Para equipos Spring, el valor est&#225; m&#225;s en servicios de c&#225;lculo as&#237;ncronos o microservicios de procesamiento que en apps CRUD de manual.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Release: <a href="https://www.tornadovm.org/blogs/tornadovm-5-0-0-native-cuda-and-hybrid-api">https://www.tornadovm.org/blogs/tornadovm-5-0-0-native-cuda-and-hybrid-api</a></p></li><li><p>Notas: <a href="https://github.com/beehive-lab/TornadoVM/releases/tag/v5.0.0-jdk25">https://github.com/beehive-lab/TornadoVM/releases/tag/v5.0.0-jdk25</a></p></li><li><p>Hybrid API: <a href="https://github.com/beehive-lab/TornadoVM/blob/master/HYBRID_API_BRANCHES.md">https://github.com/beehive-lab/TornadoVM/blob/master/HYBRID_API_BRANCHES.md</a></p></li></ul><div><hr></div><h3><strong>JHipster 9.2.0</strong></h3><p>JHipster sigue puliendo su propuesta de generaci&#243;n full-stack, y esta versi&#243;n mete mejoras muy concretas para mantener el generador limpio y escalable.</p><blockquote><p><strong>Qu&#233; cambia</strong></p></blockquote><ul><li><p>Integraci&#243;n con <strong>ESLint</strong> para linting de m&#225;s de 3000 plantillas EJS.</p></li><li><p>Mejora en la generaci&#243;n de <strong>Blueprints</strong>.</p></li><li><p>Migraci&#243;n de <code>vinyl</code> a <code>mem-fs-editor</code>.</p></li><li><p>Nuevo tipo <code>Generator</code> en <code>JHipsterCommandDefinition</code>.</p></li><li><p>Bug fixes y upgrades de dependencias.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Mejor calidad del c&#243;digo generado.</p></li><li><p>Menos deuda t&#233;cnica en el pipeline de scaffolding.</p></li><li><p>Blueprints m&#225;s consistentes y mantenibles.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Si usas JHipster para acelerar delivery, esta versi&#243;n reduce el riesgo de plantillas rotas y hace m&#225;s predecible la personalizaci&#243;n.</p></li><li><p>Para equipos que mantienen blueprints propios, el cambio interno puede simplificar extensiones futuras.</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/jhipster/generator-jhipster/releases/tag/v9.2.0">https://github.com/jhipster/generator-jhipster/releases/tag/v9.2.0</a></p></li></ul><div><hr></div><h3><strong>Keycloak 26.7.0</strong></h3><p>Keycloak sigue empujando fuerte en IAM enterprise, y esta release trae una mezcla bastante &#250;til de automatizaci&#243;n, documentaci&#243;n y soporte real para escenarios complejos.</p><blockquote><p><strong>Qu&#233; trae</strong></p></blockquote><ul><li><p>Preview de automatizaci&#243;n de provisioning con <strong>SCIM RFC7644</strong>.</p></li><li><p>Gu&#237;a paso a paso para <strong>HAProxy</strong> y <strong>Traefik</strong>.</p></li><li><p>Soporte completo para <strong>step-up authentication con SAML</strong>.</p></li><li><p>Correcciones y mejoras de documentaci&#243;n.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>SCIM en preview apunta a menos trabajo manual en aprovisionamiento de usuarios.</p></li><li><p>El soporte de proxies reverse es una bendici&#243;n para despliegues reales, no para demos de laboratorio.</p></li><li><p>Step-up auth madura el control de acceso adaptativo.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>En arquitecturas con SSO, esta versi&#243;n te ayuda a estandarizar identidad y reducir scripts ad-hoc.</p></li><li><p>Si operas Keycloak detr&#225;s de reverse proxy, la documentaci&#243;n nueva te ahorra horas de prueba y error.</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Release: <a href="https://www.keycloak.org/2026/07/keycloak-2670-released">https://www.keycloak.org/2026/07/keycloak-2670-released</a></p></li><li><p>Release notes: <a href="https://github.com/keycloak/keycloak/releases/tag/26.7.0">https://github.com/keycloak/keycloak/releases/tag/26.7.0</a></p></li></ul><div><hr></div><h3><strong>Google ADK for Java 1.6.0</strong></h3><p>El Agent Development Kit de Google suma capacidades interesantes para construir agentes en Java sin pelear tanto con la infraestructura.</p><blockquote><p><strong>Qu&#233; cambia</strong></p></blockquote><ul><li><p>Nueva clase <code>ClassPathSkillSource</code> para cargar skills desde el classpath.</p></li><li><p><code>SequentialAgent</code> puede avanzar desde un sub-agente pausado y continuar la secuencia.</p></li><li><p>Bug fixes.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Mejora la modularidad de skills.</p></li><li><p>Hace m&#225;s flexible el flujo secuencial de agentes.</p></li><li><p>Encaja bien con apps Java que quieren a&#241;adir automatizaci&#243;n o capacidades agentic sin inventar un framework desde cero.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>M&#225;s f&#225;cil empaquetar skills en apps Spring Boot.</p></li><li><p>&#218;til si montas asistentes internos, automatizaci&#243;n de procesos o workflows inteligentes.</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/google/adk-java/releases/tag/v1.6.0">https://github.com/google/adk-java/releases/tag/v1.6.0</a></p></li><li><p>Docs: <a href="https://adk.dev/get-started/java/">https://adk.dev/get-started/java/</a></p></li></ul><div><hr></div><h3><strong>Micronaut Framework 5.0.4</strong></h3><p>Micronaut se pone serio con esta release de mantenimiento, pero no te confundas: actualizar dependencias cr&#237;ticas en producci&#243;n es exactamente donde se gana o se pierde la semana.</p><blockquote><p><strong>Qu&#233; trae</strong></p></blockquote><ul><li><p>Basado en <strong>Micronaut Core 5.0.5</strong>.</p></li><li><p>Upgrade importante a <strong>Netty 4.2.16</strong>.</p></li><li><p>Resoluci&#243;n de casi dos docenas de CVEs en Netty.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Reduce superficie de ataque.</p></li><li><p>Refuerza el runtime con una base de networking m&#225;s segura.</p></li><li><p>Para stacks reactivos, Netty no es un detalle: es el motor.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Si est&#225;s en Micronaut, este update deber&#237;a estar en tu backlog inmediato.</p></li><li><p>Si usas librer&#237;as que dependen de Netty indirectamente, toca revisar compatibilidad y testear con calma.</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Release: <a href="https://micronaut.io/2026/07/07/micronaut-framework-5-0-4-released/">https://micronaut.io/2026/07/07/micronaut-framework-5-0-4-released/</a></p></li><li><p>Release notes: <a href="https://github.com/micronaut-projects/micronaut-platform/releases/tag/v5.0.4">https://github.com/micronaut-projects/micronaut-platform/releases/tag/v5.0.4</a></p></li></ul><div><hr></div><h3><strong>GraalVM Native Build Tools 1.1.4</strong></h3><p>Peque&#241;a versi&#243;n, pero de esas que arreglan el d&#237;a en pipelines nativos.</p><blockquote><p><strong>Qu&#233; mejora</strong></p></blockquote><ul><li><p>Se restablece el uso de <code>LayeredApplicationFunctionalTest</code>.</p></li><li><p>Mejora el reporte de <code>listLibrariesMissingMetadata</code>.</p></li><li><p>Mejor visibilidad de datos faltantes en <strong>Reachability Metadata Repository</strong>.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Los tests de integraci&#243;n nativa vuelven a ser m&#225;s confiables.</p></li><li><p>Mejor feedback cuando faltan metadatos para native image.</p></li><li><p>Menos &#8220;funciona en JVM, explota en nativo&#8221; sin contexto.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Si compilas Spring Boot a native image con GraalVM, esta actualizaci&#243;n mejora tu capacidad de diagnosticar problemas de compatibilidad.</p></li><li><p>Reduce el tiempo invertido en cazar bibliotecas sin metadata.</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>README: <a href="https://github.com/graalvm/native-build-tools/blob/master/README.md">https://github.com/graalvm/native-build-tools/blob/master/README.md</a></p></li><li><p>Reachability metadata: <a href="https://github.com/oracle/graalvm-reachability-metadata/blob/master/README.md">https://github.com/oracle/graalvm-reachability-metadata/blob/master/README.md</a></p></li></ul><div><hr></div><h3><strong>Payara / OmniFish Build</strong></h3><p>OmniFish anunci&#243; una distribuci&#243;n soportada de Payara para organizaciones atrapadas en versiones antiguas. Y s&#237;, &#8220;atrapadas&#8221; suele ser la palabra correcta.</p><blockquote><p><strong>Qu&#233; aporta</strong></p></blockquote><ul><li><p>Builds soportadas de <strong>Payara Platform 5.0 y 6.0</strong>.</p></li><li><p>Fixes de seguridad regulares.</p></li><li><p>Soporte enterprise 24x7.</p></li><li><p>LTS extendido hasta <strong>2029</strong> para 5.0 y <strong>2032</strong> para 6.0.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Da aire a equipos que no pueden migrar de golpe.</p></li><li><p>Reduce el coste del salto desde versiones no soportadas.</p></li><li><p>Evita decisiones desesperadas a las 2 a.m. cuando aparece una CVE.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Ideal para empresas con deuda t&#233;cnica severa en Jakarta EE.</p></li><li><p>Permite planificar migraciones con menos presi&#243;n operativa.</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p>Anuncio: <a href="https://omnifish.ee/announcing-omnifish-build-of-payara/">https://omnifish.ee/announcing-omnifish-build-of-payara/</a></p></li><li><p>Builds: <a href="https://omnifish.ee/payara-builds/">https://omnifish.ee/payara-builds/</a></p></li></ul><div><hr></div><h3><strong>Vidocq</strong></h3><p>Vidocq entra en escena como implementaci&#243;n de <strong>Jakarta EE 11 Core Profile</strong> y <strong>MicroProfile 7.1</strong>, y lo hace con una premisa bastante agresiva: Java puro, cero dependencias externas y validaci&#243;n TCK seria.</p><blockquote><p><strong>Qu&#233; es</strong></p></blockquote><ul><li><p>Implementaci&#243;n de Jakarta EE 11 Core Profile.</p></li><li><p>Implementaci&#243;n de MicroProfile 7.1.</p></li><li><p>Soporte para <strong>JDK 25</strong>.</p></li><li><p>Validado con <strong>5,650 tests TCK</strong>.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Es una se&#241;al clara de madurez del ecosistema Jakarta.</p></li><li><p>Sirve como referencia t&#233;cnica para stacks cloud-native m&#225;s livianos.</p></li><li><p>Puede empujar a proyectos que a&#250;n dudan entre vendor lock-in y est&#225;ndares abiertos.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Interesante para equipos que quieren evaluar el futuro de Jakarta EE con menos dependencia de runtimes pesados.</p></li><li><p>Buen terreno para comparar contra otras implementaciones en apps enterprise.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Web: </p></li></ul><p>https://vidocq.dev/</p><ul><li><p>Documentaci&#243;n: <a href="https://doc.vidocq.dev/home/">https://doc.vidocq.dev/home/</a></p></li><li><p>Jakarta EE 11 Core Profile: <a href="https://jakarta.ee/specifications/coreprofile/11/">https://jakarta.ee/specifications/coreprofile/11/</a></p></li><li><p>MicroProfile 7.1: <a href="https://microprofile.io/releases/7-1/#overview">https://microprofile.io/releases/7-1/#overview</a></p></li></ul><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><h3><strong>JDK 27 &#8212; Build 30 EA</strong></h3><p>La rama de <strong>JDK 27</strong> avanza con el build <strong>27+30</strong> en modo early-access.</p><blockquote><p><strong>Detalles</strong></p></blockquote><ul><li><p>Build: <strong>JDK 27+30</strong></p></li><li><p>Tipo: <strong>Early Access</strong></p></li><li><p>Incluye correcciones sobre el build anterior.</p></li></ul><blockquote><p><strong>Qu&#233; resuelve</strong></p></blockquote><ul><li><p>Fixes de varios issues reportados en OpenJDK.</p></li><li><p>Ajustes de estabilidad y mantenimiento de la l&#237;nea 27.</p></li></ul><blockquote><p><strong>Impacto</strong></p></blockquote><ul><li><p>No cambia APIs estables, pero s&#237; da se&#241;al de madurez progresiva.</p></li><li><p>&#218;til para validar compatibilidad temprana en CI con herramientas, tests y runtime.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>EA builds: <a href="https://jdk.java.net/27/">https://jdk.java.net/27/</a></p></li><li><p>Release notes: <a href="https://jdk.java.net/27/release-notes">https://jdk.java.net/27/release-notes</a></p></li><li><p>Build 30: <a href="https://github.com/openjdk/jdk/releases/tag/jdk-27%2B30">https://github.com/openjdk/jdk/releases/tag/jdk-27%2B30</a></p></li></ul><div><hr></div><h3><strong>JDK 28 &#8212; Build 6 EA</strong></h3><p>S&#237;, JDK 28 tambi&#233;n sigue su camino con el build <strong>28+6</strong>.</p><blockquote><p><strong>Detalles</strong></p></blockquote><ul><li><p>Build: <strong>JDK 28+6</strong></p></li><li><p>Tipo: <strong>Early Access</strong></p></li><li><p>Incluye correcciones de varios issues respecto al build 5.</p></li></ul><blockquote><p><strong>Qu&#233; aporta</strong></p></blockquote><ul><li><p>Contin&#250;a el ciclo de estabilizaci&#243;n de la siguiente release.</p></li><li><p>Sirve como banco de pruebas para toolchains y bibliotecas sensibles.</p></li></ul><blockquote><p><strong>Impacto</strong></p></blockquote><ul><li><p>Relevante para equipos que hacen seguimiento de releases futuras y validan compatibilidad de forma continua.</p></li><li><p>Especialmente &#250;til en pipelines que quieren adelantarse a roturas por cambios del JDK.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>EA builds: <a href="https://jdk.java.net/28/">https://jdk.java.net/28/</a></p></li><li><p>Release notes: <a href="https://jdk.java.net/28/release-notes">https://jdk.java.net/28/release-notes</a></p></li><li><p>Build 6: <a href="https://github.com/openjdk/jdk/releases/tag/jdk-28%2B6">https://github.com/openjdk/jdk/releases/tag/jdk-28%2B6</a></p></li></ul><div><hr></div><h1><strong>&#127757; Comunidad y Ecosistema</strong></h1><p>A continuaci&#243;n tienes algunos de los eventos m&#225;s relevantes del ecosistema Java y JVM que se celebrar&#225;n durante los pr&#243;ximos meses.</p><div><hr></div><h2><strong>JConf Dominicana</strong></h2><p>&#128467;&#65039; <strong>17&#8211;18 de julio de 2026</strong><br>&#128205; Santo Domingo, Rep&#250;blica Dominicana</p><p>Uno de los eventos Java m&#225;s importantes de Latinoam&#233;rica, con charlas t&#233;cnicas impartidas tanto por expertos internacionales como por miembros de la comunidad local.</p><p>&#127760; https://jconfdominicana.org/</p><div><hr></div><h2><strong>JCrete</strong></h2><p>&#128467;&#65039; <strong>26&#8211;31 de julio de 2026</strong><br>&#128205; Creta, Grecia</p><p>Una conferencia muy diferente al resto. Combina sesiones t&#233;cnicas de alto nivel con actividades al aire libre, networking y debates entre algunos de los mayores expertos del ecosistema Java.</p><p>&#127760; https://www.jcrete.org/</p><div><hr></div><h2><strong>JavaZone</strong></h2><p>&#128467;&#65039; <strong>2&#8211;3 de septiembre de 2026</strong><br>&#128205; Oslo, Noruega</p><p>Uno de los eventos Java m&#225;s prestigiosos de Europa, organizado por la comunidad noruega de desarrolladores. Suele ofrecer contenido muy t&#233;cnico sobre JVM, arquitectura, cloud, IA y desarrollo backend.</p><p>&#127760; https://2026.javazone.no/</p><div><hr></div><h2><strong>IntelliJ IDEA Conf 2026</strong></h2><p>&#128467;&#65039; <strong>8&#8211;9 de septiembre de 2026</strong><br>&#127760; Evento online</p><p>La conferencia oficial organizada por JetBrains dedicada a IntelliJ IDEA, productividad, desarrollo Java, Kotlin y herramientas para desarrolladores.</p><p>&#127760; <a href="https://lp.jetbrains.com/intellij-idea-conf/">https://lp.jetbrains.com/intellij-idea-conf/</a></p><div><hr></div><h2><strong>Kansas City Developer Conference</strong></h2><p>&#128467;&#65039; <strong>9&#8211;11 de septiembre de 2026</strong><br>&#128205; Kansas City, Missouri (EE. UU.)</p><p>Evento multidisciplinar donde Java suele ocupar un papel destacado junto con arquitectura software, cloud, DevOps y desarrollo empresarial.</p><p>&#127760; https://www.kcdc.info/</p><div><hr></div><h2><strong>JC Conference Taiwan (JCConf)</strong></h2><p>&#128467;&#65039; <strong>11 de septiembre de 2026</strong><br>&#128205; Taip&#233;i, Taiw&#225;n</p><p>Conferencia centrada exclusivamente en Java y el ecosistema JVM, con ponencias t&#233;cnicas y casos reales de empresas asi&#225;ticas e internacionales.</p><p>&#127760; https://jcconf.tw/</p><div><hr></div><h2><strong>Devoxx Belgium</strong></h2><p>&#128467;&#65039; <strong>5&#8211;9 de octubre de 2026</strong><br>&#128205; Amberes, B&#233;lgica</p><p>Probablemente la conferencia Java m&#225;s importante del mundo. Durante cinco d&#237;as re&#250;ne a los principales expertos de Oracle, OpenJDK, Spring, Quarkus, Hibernate, Micronaut y muchas otras tecnolog&#237;as del ecosistema JVM.</p><p>&#127760; https://devoxx.be/</p><div><hr></div><h2><strong>dev2next</strong></h2><p>&#128467;&#65039; <strong>12&#8211;15 de octubre de 2026</strong><br>&#128205; Colorado Springs, EE. UU.</p><p>Conferencia para desarrolladores con un fuerte componente de arquitectura, cloud, Java moderno y desarrollo empresarial.</p><p>&#127760; https://www.dev2next.com/</p><div><hr></div><h2><strong>J on the Beach</strong></h2><p>&#128467;&#65039; <strong>29&#8211;30 de octubre de 2026</strong><br>&#128205; M&#225;laga, Espa&#241;a</p><p>Uno de los eventos tecnol&#243;gicos m&#225;s importantes de Espa&#241;a. Aunque naci&#243; alrededor de Java, actualmente cubre tambi&#233;n IA, arquitectura distribuida, cloud, big data y desarrollo de software moderno.</p><p>&#127760; https://jonthebeach.com/</p><div><hr></div><h2><strong>&#216;redev</strong></h2><p>&#128467;&#65039; <strong>4&#8211;6 de noviembre de 2026</strong><br>&#128205; Malm&#246;, Suecia</p><p>Conferencia internacional para desarrolladores donde Java contin&#250;a siendo una de las tecnolog&#237;as protagonistas junto con arquitectura, DevOps y cloud.</p><p>&#127760; https://oredev.org/</p><div><hr></div><h2><strong>JFall</strong></h2><p>&#128467;&#65039; <strong>11&#8211;12 de noviembre de 2026</strong><br>&#128205; Ede, Pa&#237;ses Bajos</p><p>Evento organizado por la comunidad Java neerlandesa con decenas de charlas t&#233;cnicas sobre JVM, Spring, Quarkus, rendimiento y buenas pr&#225;cticas.</p><p>&#127760; https://jfall.nl/</p><div><hr></div><h2><strong>IT-Tage</strong></h2><p>&#128467;&#65039; <strong>7&#8211;10 de diciembre de 2026</strong><br>&#128205; Fr&#225;ncfort, Alemania</p><p>Conferencia orientada al desarrollo de software empresarial donde Java tiene una presencia muy destacada junto con arquitectura, cloud y metodolog&#237;as &#225;giles.</p><p>&#127760; https://www.ittage.informatik-aktuell.de/</p><div><hr></div><h2><strong>Jfokus</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de febrero de 2027</strong><br>&#128205; Estocolmo, Suecia</p><p>Uno de los primeros grandes eventos Java del a&#241;o. Re&#250;ne a numerosos miembros del OpenJDK, expertos en JVM y referentes de Spring, Jakarta EE y arquitectura software.</p><p>&#127760; https://www.jfokus.se/</p><div><hr></div><h2><strong>JavaLand</strong></h2><p>&#128467;&#65039; <strong>2&#8211;4 de marzo de 2027</strong><br>&#128205; N&#252;rburg, Alemania</p><p>Una de las conferencias Java m&#225;s grandes de Europa, organizada por la Java User Group alemana. Tres d&#237;as repletos de contenido t&#233;cnico sobre todo el ecosistema Java.</p><p>&#127760;  https://www.javaland.eu/</p><div><hr></div><h1><strong>&#128161; Tip de la semana</strong></h1><h3><strong>Usa </strong><code>@Bean</code><strong> con condici&#243;n expl&#237;cita para evitar beans fantasma en Spring Boot &#129504;</strong></h3><p>Cuando una app crece, los <code>@ConditionalOn...</code> pueden esconder demasiado. Si quieres evitar sorpresas en runtime, haz la condici&#243;n visible y testeable.</p><pre><code><code>@Configuration
public class PaymentConfig {

    @Bean
    @ConditionalOnProperty(prefix = "payments", name = "provider", havingValue = "stripe")
    PaymentClient stripePaymentClient() {
        return new StripePaymentClient();
    }

    @Bean
    @ConditionalOnProperty(prefix = "payments", name = "provider", havingValue = "paypal")
    PaymentClient paypalPaymentClient() {
        return new PaypalPaymentClient();
    }
}
</code></code></pre><blockquote><p><strong>Por qu&#233; funciona mejor</strong></p></blockquote><ul><li><p>Deja clara la decisi&#243;n de wiring.</p></li><li><p>Evita ambig&#252;edad cuando el entorno cambia.</p></li><li><p>Hace m&#225;s f&#225;cil testear qu&#233; bean se carga en cada perfil.</p></li></ul><blockquote><p><strong>Regla pr&#225;ctica</strong> Si una condici&#243;n de Spring no se puede explicar en una frase, probablemente tu configuraci&#243;n ya est&#225; pidiendo ox&#237;geno.</p></blockquote><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 2 - Julio 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-f0c</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-f0c</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 10 Jul 2026 12:02:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aw_2!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F806d6e06-6de7-45f4-9c69-66e050a6f24b_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido/a a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h3><strong>GraalVM 25.1</strong></h3><blockquote><p>GraalVM 25.1 llega con cambios que s&#237; se notan en el mundo real:</p></blockquote><ul><li><p><strong>~3% menos tama&#241;o</strong> en las native images generadas.</p></li><li><p><strong>Soporte para G1 GC en native images sobre macOS AArch64</strong></p><ul><li><p>Disponible <strong>solo en Oracle GraalVM</strong>.</p></li></ul></li><li><p><strong>1.500 librer&#237;as</strong> disponibles en el <strong>GraalVM Reachability Metadata Repository</strong>.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Menos tama&#241;o en binarios = despliegues m&#225;s ligeros y arranques m&#225;s razonables.</p></li><li><p>M&#225;s metadata disponible = menos pelea con dependencias que antes romp&#237;an native-image por reflexi&#243;n, proxies o recursos.</p></li><li><p>Si trabajas con Spring Boot + native, esto reduce el &#8220;ajuste fino&#8221; infernal que suele venir despu&#233;s del primer build.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Mejor experiencia para equipos que llevan apps Java a contenedores o serverless.</p></li><li><p>Menos fricci&#243;n al compilar im&#225;genes nativas con <strong>Native Build Tools</strong>.</p></li><li><p>M&#225;s compatibilidad en ecosistemas complejos donde cada dependencia parece querer sabotearte.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Release notes: <a href="https://www.graalvm.org/release-notes/25.1/">https://www.graalvm.org/release-notes/25.1/</a></p></li><li><p>Anuncio: <a href="https://medium.com/graalvm/graalvm-25-1-is-here-13829606982e">https://medium.com/graalvm/graalvm-25-1-is-here-13829606982e</a></p></li><li><p>Metadata repo: <a href="https://github.com/oracle/graalvm-reachability-metadata/blob/master/README.md">https://github.com/oracle/graalvm-reachability-metadata/blob/master/README.md</a></p></li></ul><div><hr></div><h3><strong>JReleaser 1.25.0</strong></h3><p>JReleaser sigue afinando la maquinaria de releases y empaquetado.</p><blockquote><p><strong>Qu&#233; trae</strong></p></blockquote><ul><li><p><strong>Soporte para m&#250;ltiples formatos de archivo</strong> usando <code>jlink</code> y <code>native-image</code></p><ul><li><p>Puede generar <strong>ZIP y TAR</strong> simult&#225;neamente.</p></li></ul></li><li><p>Nuevo comportamiento al <strong>enmascarar secretos</strong></p><ul><li><p>Ya no muestra todo como asteriscos; ahora ense&#241;a el <strong>primer y &#250;ltimo car&#225;cter</strong>.</p></li></ul></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Si publicas artefactos para JVM y native, puedes automatizar empaquetados sin duplicar pipelines.</p></li><li><p>El nuevo masking mejora el debugging sin regalar credenciales a media pantalla.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>M&#225;s limpio para equipos que liberan CLI tools, runtimes custom o bundles de distribuci&#243;n.</p></li><li><p>Menos fricci&#243;n en pipelines de GitHub Actions, GitLab CI o Jenkins.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/jreleaser/jreleaser/releases/tag/v1.25.0">https://github.com/jreleaser/jreleaser/releases/tag/v1.25.0</a></p></li><li><p>Post: <a href="https://andresalmiray.com/jreleaser-1-25-0-has-been-released/">https://andresalmiray.com/jreleaser-1-25-0-has-been-released/</a></p></li><li><p>Web: </p></li></ul><p>https://jreleaser.org/</p><div><hr></div><h3><strong>GlassFish 7.1.1</strong></h3><p>Release de mantenimiento con fixes, upgrades de dependencias y ajustes internos que mejoran rendimiento y seguridad.</p><blockquote><p><strong>Cambios relevantes</strong></p></blockquote><ul><li><p>Simplificaci&#243;n de <code>isValidAnnotation()</code> en <code>WeldUtils</code> para <strong>fail-fast</strong> cuando no hay nombres de tipo v&#225;lidos.</p></li><li><p><code>isInterceptor()</code> ahora est&#225; <strong>cacheado</strong> en <code>InjectionServicesImpl</code> para evitar recorrer la jerarqu&#237;a de anotaciones en cada request.</p></li><li><p>Corrige <strong>4 CVEs</strong>.</p><ul><li><p>Destacan dos RCE:</p><ul><li><p><strong>CVE-2026-2586</strong></p></li><li><p><strong>CVE-2026-2587</strong></p></li></ul></li></ul></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Menos coste en el path de inyecci&#243;n CDI.</p></li><li><p>M&#225;s seguridad para instalaciones expuestas.</p></li><li><p>Si todav&#237;a tienes GlassFish en producci&#243;n, esta no es una actualizaci&#243;n &#8220;nice to have&#8221;. Es una de esas que conviene tomar en serio.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Mejor latencia en cargas con CDI intenso.</p></li><li><p>Menor riesgo operacional por vulnerabilidades cr&#237;ticas.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/eclipse-ee4j/glassfish/releases/tag/7.1.1">https://github.com/eclipse-ee4j/glassfish/releases/tag/7.1.1</a></p></li><li><p>Sitio: https://glassfish.org/</p></li></ul><div><hr></div><h3><strong>Micronaut Framework 5.0.3</strong></h3><p>La Foundation public&#243; Micronaut 5.0.3, basada en <strong>Micronaut Core 5.0.4</strong>.</p><blockquote><p><strong>M&#243;dulos con updates</strong></p></blockquote><ul><li><p>Micronaut AWS</p></li><li><p>Micronaut Data</p></li><li><p>Micronaut SQL Libraries</p></li><li><p>Micronaut R2DBC</p></li><li><p>Micronaut Problem JSON</p></li><li><p>Micronaut Test</p></li><li><p>Micronaut Micrometer</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Es un release de parche, pero tocando piezas clave del stack.</p></li><li><p>Si usas Micronaut en arquitectura cloud-native, data access o observabilidad, este tipo de release suele ser el que evita sorpresas feas.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Mejores bases para apps con AWS, R2DBC, m&#233;tricas y testing integrado.</p></li><li><p>Menor riesgo de incompatibilidades entre m&#243;dulos de plataforma.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/micronaut-projects/micronaut-platform/releases/tag/v5.0.3">https://github.com/micronaut-projects/micronaut-platform/releases/tag/v5.0.3</a></p></li><li><p>Anuncio: <a href="https://micronaut.io/2026/06/30/micronaut-framework-5-0-3-released/">https://micronaut.io/2026/06/30/micronaut-framework-5-0-3-released/</a></p></li></ul><div><hr></div><h3><strong>Open Liberty 26.0.0.7 beta</strong></h3><p>Open Liberty entra con una beta que apunta a Jakarta Data y health checks.</p><blockquote><p><strong>Novedades</strong></p></blockquote><ul><li><p>Soporte para <strong>Jakarta Data 1.1-M3</strong></p><ul><li><p><strong>stateful repositories</strong></p></li><li><p>nueva anotaci&#243;n <code>@First</code></p></li><li><p><code>Restriction</code> y <code>Constraint</code> como par&#225;metros en <code>@Find</code> y <code>@Delete</code></p></li></ul></li><li><p>Posibilidad de deshabilitar endpoints <code>/health</code> de <strong>MicroProfile Health 4.0</strong> cuando se usa health check basado en archivos.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Jakarta Data sigue ganando forma &#250;til, no solo te&#243;rica.</p></li><li><p>La integraci&#243;n con health checks m&#225;s controlables es &#250;til en entornos donde no quieres exponer todo por defecto.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>M&#225;s expresividad para repositorios.</p></li><li><p>M&#225;s control operativo en despliegues con observabilidad y readiness/liveness custom.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Blog: <a href="https://openliberty.io/blog/2026/06/30/26.0.0.7-beta.html">https://openliberty.io/blog/2026/06/30/26.0.0.7-beta.html</a></p></li><li><p>Web: </p></li></ul><p>https://openliberty.io/</p><div><hr></div><h3><strong>Grails 8.0.0-M2</strong></h3><p>Segundo milestone de Grails 8.0 con foco en estabilidad y trabajo con virtual threads.</p><blockquote><p><strong>Cambios notables</strong></p></blockquote><ul><li><p>La transformaci&#243;n <code>GlobalGrailsClassInjectorTransformation</code> falla correctamente si se pasa un directorio incorrecto al build de <code>grails-core</code>.</p></li><li><p>Mejor <strong>cleanup de virtual threads</strong>.</p></li><li><p>Mejor aislamiento del estado del framework ligado a <code>ThreadLocal</code>.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Menos magia rota durante el build.</p></li><li><p>Mejor comportamiento con virtual threads, una zona donde muchos frameworks a&#250;n tropiezan.</p></li><li><p>Buen s&#237;ntoma de madurez en la adaptaci&#243;n al Java moderno.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>M&#225;s previsibilidad en builds.</p></li><li><p>Mejor compatibilidad en apps que est&#233;n explorando concurrencia moderna.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Release notes: <a href="https://github.com/apache/grails-core/releases/tag/v8.0.0-M2">https://github.com/apache/grails-core/releases/tag/v8.0.0-M2</a></p></li><li><p>Proyecto: </p></li></ul><p>https://grails.apache.org/</p><div><hr></div><h3><strong>Java Operator SDK 5.4.0</strong></h3><p>Framework para construir operadores Kubernetes en Java, y esta versi&#243;n viene con mejoras interesantes para escenarios reales de cluster.</p><blockquote><p><strong>Novedades</strong></p></blockquote><ul><li><p><strong>Shard selector</strong></p><ul><li><p>Un selector estilo Kubernetes que se aplica adem&#225;s del selector normal para ejecutar m&#250;ltiples r&#233;plicas.</p></li></ul></li><li><p>Nuevo par&#225;metro <code>defaultFilters</code> en <code>@ControllerConfiguration</code></p><ul><li><p>Permite desactivar eventos de filtro por defecto.</p></li></ul></li><li><p>Nuevos m&#233;todos en <code>Context</code></p><ul><li><p><code>getSecondaryResource()</code></p></li><li><p><code>getSecondaryResourcesAsStream()</code></p></li></ul></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Mejor escalabilidad para operadores con m&#250;ltiples r&#233;plicas.</p></li><li><p>M&#225;s control sobre filtrado de eventos.</p></li><li><p>Acceso m&#225;s directo a recursos secundarios sin rodeos innecesarios.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Si mantienes operadores Java en producci&#243;n, esta release mejora control, lectura y arquitectura interna.</p></li><li><p>Menos c&#243;digo pegado con cinta para resolver recursos asociados.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Blog: <a href="https://javaoperatorsdk.io/blog/2026/07/02/version-5.4-released/">https://javaoperatorsdk.io/blog/2026/07/02/version-5.4-released/</a></p></li><li><p>Release notes: <a href="https://github.com/operator-framework/java-operator-sdk/milestone/18?closed=1">https://github.com/operator-framework/java-operator-sdk/milestone/18?closed=1</a></p></li><li><p>Sitio: </p></li></ul><p>https://javaoperatorsdk.io/</p><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><h3><strong>JDK 27 EA &#8212; Build 29</strong></h3><p>Nueva build de <strong>JDK 27 early-access</strong>: <strong>Build 29</strong>.</p><blockquote><p><strong>Qu&#233; incluye</strong></p></blockquote><ul><li><p>Fixes acumulados desde Build 28.</p></li><li><p>Correcciones de distintos issues del proyecto JDK.</p></li></ul><blockquote><p><strong>Qu&#233; resuelve</strong></p></blockquote><ul><li><p>Mantenimiento incremental del ciclo EA.</p></li><li><p>Ajustes de estabilidad y correcci&#243;n en una rama a&#250;n en evoluci&#243;n.</p></li></ul><blockquote><p><strong>Impacto en proyectos</strong></p></blockquote><ul><li><p>Si pruebas tus apps contra EA builds para anticiparte a cambios, esta build te permite validar compatibilidad con una base m&#225;s nueva.</p></li><li><p>&#218;til para equipos que hacen hardening temprano contra el siguiente LTS.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Release: <a href="https://github.com/openjdk/jdk/releases/tag/jdk-27%2B29">https://github.com/openjdk/jdk/releases/tag/jdk-27%2B29</a></p></li><li><p>EA builds: <a href="https://jdk.java.net/27/">https://jdk.java.net/27/</a></p></li><li><p>Release notes: <a href="https://jdk.java.net/27/release-notes">https://jdk.java.net/27/release-notes</a></p></li></ul><div><hr></div><h3><strong>JDK 28 EA &#8212; Build 5</strong></h3><p>Tambi&#233;n se public&#243; <strong>JDK 28 Build 5</strong> en early-access.</p><blockquote><p><strong>Qu&#233; incluye</strong></p></blockquote><ul><li><p>Fixes acumulados desde Build 4.</p></li><li><p>Correcciones de diversos issues del proyecto.</p></li></ul><blockquote><p><strong>Qu&#233; resuelve</strong></p></blockquote><ul><li><p>Contin&#250;a el pulido temprano de la siguiente l&#237;nea de desarrollo.</p></li></ul><blockquote><p><strong>Impacto en proyectos</strong></p></blockquote><ul><li><p>Ideal para validar tooling, compilaci&#243;n, tests y compatibilidad con JVM internals de cara al futuro.</p></li><li><p>Si mantienes librer&#237;as, conviene mirar estas builds antes de que te explote un cambio de comportamiento en plena ventana de release.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Release: <a href="https://github.com/openjdk/jdk/releases/tag/jdk-28%2B5">https://github.com/openjdk/jdk/releases/tag/jdk-28%2B5</a></p></li><li><p>EA builds: <a href="https://jdk.java.net/28/">https://jdk.java.net/28/</a></p></li><li><p>Release notes: <a href="https://jdk.java.net/28/release-notes">https://jdk.java.net/28/release-notes</a></p></li></ul><div><hr></div><h2><strong>&#129514; Nuevas JEPs o Propuestas del ecosistema Java</strong></h2><h3><strong>JEP 539 &#8212; Strict Field Initialization in the JVM (Preview)</strong></h3><p>La gran novedad de la semana en OpenJDK: <strong>JEP 539</strong> sube de <strong>JEP Draft</strong> a <strong>Candidate</strong>.</p><p><strong>Prop&#243;sito</strong> Introducir <strong>campos estrictamente inicializados</strong> en la JVM, que deben ser inicializados antes de ser le&#237;dos.</p><blockquote><p><strong>Qu&#233; problema resuelve</strong></p></blockquote><ul><li><p>Evita observar valores por defecto como <code>null</code> o <code>0</code>.</p></li><li><p>Reduce una clase entera de bugs derivados de estados parcialmente inicializados.</p></li></ul><blockquote><p><strong>C&#243;mo cambiar&#237;a el desarrollo</strong></p></blockquote><ul><li><p>M&#225;s garant&#237;as en el modelo de inicializaci&#243;n.</p></li><li><p>Mejor soporte para compiladores que emiten class files.</p></li><li><p>Menos dependencia en &#8220;ya se inicializar&#225; luego&#8221;, ese cl&#225;sico que luego termina en incidentes.</p></li></ul><blockquote><p><strong>Fase actual</strong></p></blockquote><ul><li><p><strong>Candidate</strong></p></li></ul><blockquote><p><strong>Enlace oficial</strong></p></blockquote><ul><li><p><a href="https://openjdk.org/jeps/539">https://openjdk.org/jeps/539</a></p></li></ul><blockquote><p><strong>Contexto adicional</strong></p></blockquote><ul><li><p>Hilo de mailing list: <a href="https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/FGQVFIUNYX4GVJTABNLPFBLBLKDPM55H/">https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/FGQVFIUNYX4GVJTABNLPFBLBLKDPM55H/</a></p></li></ul><div><hr></div><h2><strong>&#128736;&#65039; Herramientas y utilidades para developers</strong></h2><h3><strong>RefactorFirst 0.0.0 / 0.9.0</strong></h3><p>Herramienta para <strong>priorizar qu&#233; partes de una aplicaci&#243;n deber&#237;an refactorizarse primero</strong>. Y eso, cuando tienes un monolito con deuda hist&#243;rica, vale oro.</p><blockquote><p><strong>Qu&#233; hace</strong></p></blockquote><ul><li><p>Calcula mejor la eliminaci&#243;n de relaciones entre clases.</p></li><li><p>A&#241;ade detectores de disharmony OO basados en <em>Object-Oriented Metrics in Practice</em>.</p></li><li><p>Migra de <strong>D3</strong> a <strong>Vizdom</strong> para mejorar la visualizaci&#243;n.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>No todas las deudas merecen tu tiempo hoy.</p></li><li><p>RefactorFirst te ayuda a decidir d&#243;nde pegar primero, con datos y no con intuici&#243;n nocturna.</p></li></ul><blockquote><p><strong>C&#243;mo usarla en Java/Spring</strong></p></blockquote><ul><li><p>&#218;sala para identificar m&#243;dulos con m&#225;s acoplamiento antes de extraer servicios o limpiar capas.</p></li><li><p>Muy &#250;til antes de tocar un monolito Spring con a&#241;os de &#8220;solo una clase m&#225;s&#8221;.</p></li></ul><blockquote><p><strong>Enlaces</strong></p></blockquote><ul><li><p>Repo: <a href="https://github.com/jimbethancourt/RefactorFirst/blob/main/README.md">https://github.com/jimbethancourt/RefactorFirst/blob/main/README.md</a></p></li><li><p>Release notes: <a href="https://github.com/refactorfirst/RefactorFirst/releases/tag/0.9.0">https://github.com/refactorfirst/RefactorFirst/releases/tag/0.9.0</a></p></li></ul><div><hr></div><h1><strong>&#127757; Comunidad y Ecosistema</strong></h1><p>A continuaci&#243;n tienes algunos de los eventos m&#225;s relevantes del ecosistema Java y JVM que se celebrar&#225;n durante los pr&#243;ximos meses.</p><div><hr></div><h2><strong>&#220;berConf</strong></h2><p>&#128467;&#65039; <strong>14&#8211;17 de julio de 2026</strong><br>&#128205; Denver, Colorado (EE. UU.)</p><p>Conferencia orientada a desarrolladores profesionales con numerosas sesiones sobre Java, Spring, arquitectura software, testing, DevOps y desarrollo moderno.</p><p>&#127760; https://uberconf.com/</p><div><hr></div><h2><strong>JConf Dominicana</strong></h2><p>&#128467;&#65039; <strong>17&#8211;18 de julio de 2026</strong><br>&#128205; Santo Domingo, Rep&#250;blica Dominicana</p><p>Uno de los eventos Java m&#225;s importantes de Latinoam&#233;rica, con charlas t&#233;cnicas impartidas tanto por expertos internacionales como por miembros de la comunidad local.</p><p>&#127760; https://jconfdominicana.org/</p><div><hr></div><h2><strong>JCrete</strong></h2><p>&#128467;&#65039; <strong>26&#8211;31 de julio de 2026</strong><br>&#128205; Creta, Grecia</p><p>Una conferencia muy diferente al resto. Combina sesiones t&#233;cnicas de alto nivel con actividades al aire libre, networking y debates entre algunos de los mayores expertos del ecosistema Java.</p><p>&#127760; https://www.jcrete.org/</p><div><hr></div><h2><strong>JavaZone</strong></h2><p>&#128467;&#65039; <strong>2&#8211;3 de septiembre de 2026</strong><br>&#128205; Oslo, Noruega</p><p>Uno de los eventos Java m&#225;s prestigiosos de Europa, organizado por la comunidad noruega de desarrolladores. Suele ofrecer contenido muy t&#233;cnico sobre JVM, arquitectura, cloud, IA y desarrollo backend.</p><p>&#127760; https://2026.javazone.no/</p><div><hr></div><h2><strong>IntelliJ IDEA Conf 2026</strong></h2><p>&#128467;&#65039; <strong>8&#8211;9 de septiembre de 2026</strong><br>&#127760; Evento online</p><p>La conferencia oficial organizada por JetBrains dedicada a IntelliJ IDEA, productividad, desarrollo Java, Kotlin y herramientas para desarrolladores.</p><p>&#127760; <a href="https://lp.jetbrains.com/intellij-idea-conf/">https://lp.jetbrains.com/intellij-idea-conf/</a></p><div><hr></div><h2><strong>Kansas City Developer Conference</strong></h2><p>&#128467;&#65039; <strong>9&#8211;11 de septiembre de 2026</strong><br>&#128205; Kansas City, Missouri (EE. UU.)</p><p>Evento multidisciplinar donde Java suele ocupar un papel destacado junto con arquitectura software, cloud, DevOps y desarrollo empresarial.</p><p>&#127760; https://www.kcdc.info/</p><div><hr></div><h2><strong>JC Conference Taiwan (JCConf)</strong></h2><p>&#128467;&#65039; <strong>11 de septiembre de 2026</strong><br>&#128205; Taip&#233;i, Taiw&#225;n</p><p>Conferencia centrada exclusivamente en Java y el ecosistema JVM, con ponencias t&#233;cnicas y casos reales de empresas asi&#225;ticas e internacionales.</p><p>&#127760; https://jcconf.tw/</p><div><hr></div><h2><strong>Devoxx Belgium</strong></h2><p>&#128467;&#65039; <strong>5&#8211;9 de octubre de 2026</strong><br>&#128205; Amberes, B&#233;lgica</p><p>Probablemente la conferencia Java m&#225;s importante del mundo. Durante cinco d&#237;as re&#250;ne a los principales expertos de Oracle, OpenJDK, Spring, Quarkus, Hibernate, Micronaut y muchas otras tecnolog&#237;as del ecosistema JVM.</p><p>&#127760; https://devoxx.be/</p><div><hr></div><h2><strong>dev2next</strong></h2><p>&#128467;&#65039; <strong>12&#8211;15 de octubre de 2026</strong><br>&#128205; Colorado Springs, EE. UU.</p><p>Conferencia para desarrolladores con un fuerte componente de arquitectura, cloud, Java moderno y desarrollo empresarial.</p><p>&#127760; https://www.dev2next.com/</p><div><hr></div><h2><strong>J on the Beach</strong></h2><p>&#128467;&#65039; <strong>29&#8211;30 de octubre de 2026</strong><br>&#128205; M&#225;laga, Espa&#241;a</p><p>Uno de los eventos tecnol&#243;gicos m&#225;s importantes de Espa&#241;a. Aunque naci&#243; alrededor de Java, actualmente cubre tambi&#233;n IA, arquitectura distribuida, cloud, big data y desarrollo de software moderno.</p><p>&#127760; https://jonthebeach.com/</p><div><hr></div><h2><strong>&#216;redev</strong></h2><p>&#128467;&#65039; <strong>4&#8211;6 de noviembre de 2026</strong><br>&#128205; Malm&#246;, Suecia</p><p>Conferencia internacional para desarrolladores donde Java contin&#250;a siendo una de las tecnolog&#237;as protagonistas junto con arquitectura, DevOps y cloud.</p><p>&#127760; https://oredev.org/</p><div><hr></div><h2><strong>JFall</strong></h2><p>&#128467;&#65039; <strong>11&#8211;12 de noviembre de 2026</strong><br>&#128205; Ede, Pa&#237;ses Bajos</p><p>Evento organizado por la comunidad Java neerlandesa con decenas de charlas t&#233;cnicas sobre JVM, Spring, Quarkus, rendimiento y buenas pr&#225;cticas.</p><p>&#127760; https://jfall.nl/</p><div><hr></div><h2><strong>IT-Tage</strong></h2><p>&#128467;&#65039; <strong>7&#8211;10 de diciembre de 2026</strong><br>&#128205; Fr&#225;ncfort, Alemania</p><p>Conferencia orientada al desarrollo de software empresarial donde Java tiene una presencia muy destacada junto con arquitectura, cloud y metodolog&#237;as &#225;giles.</p><p>&#127760; https://www.ittage.informatik-aktuell.de/</p><div><hr></div><h2><strong>Jfokus</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de febrero de 2027</strong><br>&#128205; Estocolmo, Suecia</p><p>Uno de los primeros grandes eventos Java del a&#241;o. Re&#250;ne a numerosos miembros del OpenJDK, expertos en JVM y referentes de Spring, Jakarta EE y arquitectura software.</p><p>&#127760; https://www.jfokus.se/</p><div><hr></div><h2><strong>JavaLand</strong></h2><p>&#128467;&#65039; <strong>2&#8211;4 de marzo de 2027</strong><br>&#128205; N&#252;rburg, Alemania</p><p>Una de las conferencias Java m&#225;s grandes de Europa, organizada por la Java User Group alemana. Tres d&#237;as repletos de contenido t&#233;cnico sobre todo el ecosistema Java.</p><p>&#127760;  https://www.javaland.eu/</p><div><hr></div><h1><strong>&#128161; Tip de la semana</strong></h1><h3><strong>Usa </strong><code>@Bean</code><strong> con condici&#243;n expl&#237;cita para evitar beans fantasma en Spring Boot &#129504;</strong></h3><p>Cuando una app crece, los <code>@ConditionalOn...</code> pueden esconder demasiado. Si quieres evitar sorpresas en runtime, haz la condici&#243;n visible y testeable.</p><pre><code><code>@Configuration
public class PaymentConfig {

    @Bean
    @ConditionalOnProperty(prefix = "payments", name = "provider", havingValue = "stripe")
    PaymentClient stripePaymentClient() {
        return new StripePaymentClient();
    }

    @Bean
    @ConditionalOnProperty(prefix = "payments", name = "provider", havingValue = "paypal")
    PaymentClient paypalPaymentClient() {
        return new PaypalPaymentClient();
    }
}
</code></code></pre><blockquote><p><strong>Por qu&#233; funciona mejor</strong></p></blockquote><ul><li><p>Deja clara la decisi&#243;n de wiring.</p></li><li><p>Evita ambig&#252;edad cuando el entorno cambia.</p></li><li><p>Hace m&#225;s f&#225;cil testear qu&#233; bean se carga en cada perfil.</p></li></ul><blockquote><p><strong>Regla pr&#225;ctica</strong> Si una condici&#243;n de Spring no se puede explicar en una frase, probablemente tu configuraci&#243;n ya est&#225; pidiendo ox&#237;geno.</p></blockquote><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 1 - Julio 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-1b3</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-1b3</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 03 Jul 2026 12:00:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aw_2!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F806d6e06-6de7-45f4-9c69-66e050a6f24b_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido/a a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h1><strong>&#128230; Novedades en Librer&#237;as y Frameworks</strong></h1><div><hr></div><h1><strong>&#128640; Quarkus 3.37 y 3.37.1</strong></h1><blockquote><p><strong>Versiones:</strong> 3.37.0 y 3.37.1</p><p>Quarkus ha publicado una nueva versi&#243;n con varias mejoras interesantes para aplicaciones cloud-native y una actualizaci&#243;n de mantenimiento pocos d&#237;as despu&#233;s para corregir regresiones y mejorar la estabilidad.</p></blockquote><h2><strong>Nuevo soporte para aplicaciones modulares con </strong><code>jlink</code></h2><blockquote><p>La principal novedad de Quarkus 3.37 es la nueva extensi&#243;n <code>quarkus-jlink</code>, que permite generar im&#225;genes runtime personalizadas utilizando el sistema de m&#243;dulos de Java.</p><p><strong>&#191;Qu&#233; ventajas aporta?</strong></p></blockquote><ul><li><p>Solo se incluyen los m&#243;dulos del JDK que realmente utiliza la aplicaci&#243;n.</p></li><li><p>Se reduce el tama&#241;o de la imagen final.</p></li><li><p>Mejora los tiempos de despliegue.</p></li><li><p>Muy &#250;til para aplicaciones desplegadas en contenedores.</p></li></ul><blockquote><p>Actualmente sigue siendo una caracter&#237;stica <strong>experimental</strong>, por lo que todav&#237;a existen algunas limitaciones en compilaciones AOT, builds multiplataforma y determinados escenarios de testing.</p></blockquote><h2><strong>Actualizaci&#243;n del stack de Hibernate</strong></h2><blockquote><p>Quarkus actualiza varias de las librer&#237;as m&#225;s importantes del ecosistema:</p></blockquote><ul><li><p>Hibernate ORM <strong>7.4</strong></p></li><li><p>Hibernate Reactive <strong>3.4</strong></p></li><li><p>Hibernate Search <strong>8.4</strong></p></li></ul><blockquote><p>Esta actualizaci&#243;n incorpora mejoras de rendimiento, adem&#225;s de algunos cambios importantes que conviene revisar antes de actualizar:</p></blockquote><ul><li><p>La paginaci&#243;n ahora se ejecuta directamente en SQL.</p></li><li><p>Algunas columnas pasan a ser <code>NOT NULL</code>.</p></li><li><p>PostgreSQL 14 se convierte en la versi&#243;n m&#237;nima soportada.</p></li></ul><h2><strong>Jackson m&#225;s r&#225;pido sin reflexi&#243;n</strong></h2><blockquote><p>Quarkus habilita por defecto los <strong>reflection-free serializers</strong> de Jackson.</p><p>Esto reduce el uso de reflexi&#243;n durante la serializaci&#243;n JSON, mejora ligeramente el rendimiento y resulta especialmente beneficioso para aplicaciones compiladas como im&#225;genes nativas con GraalVM.</p></blockquote><h2><strong>Mejoras en REST Client</strong></h2><blockquote><p>Se incorpora el nuevo tipo <code>RestMultiResponse</code>, que facilita el acceso a:</p></blockquote><ul><li><p>C&#243;digo de estado HTTP.</p></li><li><p>Cabeceras de la respuesta.</p></li><li><p>Cuerpo de respuestas streaming.</p></li></ul><blockquote><p>Hasta ahora era necesario utilizar directamente el cliente HTTP de Vert.x para acceder a esta informaci&#243;n.</p></blockquote><h2><strong>Quarkus 3.37.1</strong></h2><blockquote><p>La versi&#243;n <strong>3.37.1</strong> es una actualizaci&#243;n de mantenimiento que corrige varios problemas detectados tras el lanzamiento de la 3.37.</p><p>Entre las correcciones destacan:</p></blockquote><ul><li><p>Mejoras en los nuevos serializers de Jackson.</p></li><li><p>Correcciones relacionadas con OIDC y seguridad.</p></li><li><p>Mejoras para compilaciones nativas.</p></li><li><p>Actualizaci&#243;n de m&#250;ltiples dependencias.</p></li><li><p>Correcci&#243;n de varias regresiones detectadas por la comunidad.</p></li></ul><blockquote><p><strong>Enlaces oficiales:</strong></p></blockquote><ul><li><p><a href="https://quarkus.io/blog/quarkus-3-37-released/">https://quarkus.io/blog/quarkus-3-37-released/</a></p></li><li><p><a href="https://quarkus.io/blog/quarkus-3-37-1-released/">https://quarkus.io/blog/quarkus-3-37-1-released/</a></p></li></ul><div><hr></div><h1><strong>&#9881;&#65039; Micronaut Framework</strong></h1><blockquote><p>Micronaut contin&#250;a publicando actualizaciones tanto para la rama m&#225;s reciente (5.x) como para la rama LTS (3.10.x), centradas principalmente en estabilidad y mantenimiento.</p></blockquote><h2><strong>Micronaut Core 5.1.3</strong></h2><blockquote><p>La versi&#243;n <strong>5.1.3</strong> incluye principalmente:</p></blockquote><ul><li><p>Correcci&#243;n de errores.</p></li><li><p>Mejoras de estabilidad.</p></li><li><p>Actualizaci&#243;n de dependencias internas.</p></li><li><p>Ajustes menores de rendimiento y compatibilidad.</p></li></ul><blockquote><p>Es la actualizaci&#243;n recomendada para todos los proyectos que ya utilizan Micronaut 5.1.</p></blockquote><h2><strong>Micronaut Core 5.0.4</strong></h2><blockquote><p>La rama <strong>5.0.x</strong> tambi&#233;n recibe una actualizaci&#243;n de mantenimiento.</p><p>Entre sus novedades destacan:</p></blockquote><ul><li><p>Correcci&#243;n de bugs.</p></li><li><p>Mejoras de compatibilidad.</p></li><li><p>Actualizaci&#243;n de dependencias del framework.</p></li><li><p>Mayor estabilidad para aplicaciones existentes.</p></li></ul><blockquote><p>No incorpora nuevas funcionalidades, pero s&#237; mejora la fiabilidad de la rama 5.0.</p></blockquote><h2><strong>Micronaut Core 3.10.9</strong></h2><blockquote><p>La rama <strong>3.10.x</strong>, ampliamente utilizada en proyectos empresariales, sigue recibiendo mantenimiento.</p><p>La versi&#243;n <strong>3.10.9</strong> incorpora:</p></blockquote><ul><li><p>Correcci&#243;n de errores.</p></li><li><p>Actualizaci&#243;n de dependencias.</p></li><li><p>Mejoras de estabilidad.</p></li><li><p>Correcciones para mantener la compatibilidad con el ecosistema actual.</p></li></ul><blockquote><p>Es una buena noticia para los equipos que todav&#237;a mantienen aplicaciones sobre Micronaut 3 y a&#250;n no tienen previsto migrar a la versi&#243;n 5.</p><p><strong>Enlaces oficiales:</strong></p></blockquote><ul><li><p><a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v5.1.3">https://github.com/micronaut-projects/micronaut-core/releases/tag/v5.1.3</a></p></li><li><p><a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v5.0.4">https://github.com/micronaut-projects/micronaut-core/releases/tag/v5.0.4</a></p></li><li><p><a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v3.10.9">https://github.com/micronaut-projects/micronaut-core/releases/tag/v3.10.9</a></p></li></ul><div><hr></div><h1><strong>&#9749; Actualizaciones del JDK</strong></h1><h2><strong>JDK 25 LTS &#8212; foco en diagn&#243;stico y postura operativa</strong></h2><p><strong>Versi&#243;n mencionada:</strong> OpenJDK 25 LTS<br><strong>Distribuci&#243;n destacada:</strong> Eliya 25.0.3 basada en <code>openjdk/jdk25u</code></p><p><strong>Qu&#233; cambia en la pr&#225;ctica:</strong></p><ul><li><p>Eliya se apoya en el ecosistema de <strong>JDK 25 LTS</strong></p></li><li><p>El producto conserva:</p><ul><li><p>APIs Java est&#225;ndar</p></li><li><p>comportamiento de la librer&#237;a est&#225;ndar</p></li><li><p>JIT</p></li><li><p>class loading</p></li><li><p>sem&#225;ntica del m&#243;dulo system</p></li></ul></li><li><p><code>java.security</code> en la build est&#225;ndar es <strong>bit-identical</strong> con upstream JDK 25</p></li></ul><blockquote><p><strong>Impacto para proyectos existentes:</strong></p></blockquote><ul><li><p>Migraci&#243;n de app m&#237;nima si ya est&#225;s en JDK 25</p></li><li><p>El cambio relevante est&#225; en la <strong>capa operativa</strong>, no en el c&#243;digo</p></li><li><p>Los equipos deben revisar:</p><ul><li><p>ubicaciones de heap dumps</p></li><li><p>comportamiento ante OOM</p></li><li><p>logs de crash</p></li><li><p>uso de opciones diagn&#243;sticas desbloqueadas por perfil</p></li></ul></li></ul><blockquote><p><strong>Pol&#237;tica de soporte y seguridad:</strong></p></blockquote><ul><li><p>Quarterly Critical Patch Updates dentro de las 2 semanas posteriores a cada release upstream</p></li><li><p>Objetivo de responder a CVEs cr&#237;ticas en 1 semana</p></li><li><p>Soporte hasta el cierre del ciclo LTS de JDK 25, con ventana de solape planificada con JDK 29 LTS</p></li></ul><blockquote><p><strong>Enlace oficial / referencia:</strong></p></blockquote><ul><li><p>Producto: <a href="https://root.asymm.systems/product/eliya">https://root.asymm.systems/product/eliya</a></p></li><li><p>Upstream OpenJDK: </p></li></ul><p>https://openjdk.org/</p><div><hr></div><h1><strong>&#128736;&#65039; Herramientas y Utilidades para Developers</strong></h1><h2><strong>Foojay</strong></h2><p><strong>Qu&#233; hace:</strong><br>Comunidad y medio t&#233;cnico del ecosistema Java con art&#237;culos pr&#225;cticos y an&#225;lisis de plataforma.</p><p><strong>Contenido relacionado esta semana:</strong></p><ul><li><p>Art&#237;culo de introducci&#243;n a Eliya y su enfoque de pol&#237;ticas en producci&#243;n</p></li></ul><p><strong>Enlace:</strong><br><a href="https://foojay.io/today/where-production-policy-belongs-building-eliya-in-public/">https://foojay.io/today/where-production-policy-belongs-building-eliya-in-public/</a></p><div><hr></div><h1><strong>&#127757; Comunidad y Ecosistema</strong></h1><p>A continuaci&#243;n tienes algunos de los eventos m&#225;s relevantes del ecosistema Java y JVM que se celebrar&#225;n durante los pr&#243;ximos meses.</p><div><hr></div><h2><strong>WeAreDevelopers World Congress</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de julio de 2026</strong><br>&#128205; Berl&#237;n, Alemania</p><p>Uno de los mayores eventos para desarrolladores de Europa. Aunque abarca m&#250;ltiples tecnolog&#237;as, Java siempre tiene una presencia muy importante con charlas sobre Spring, Quarkus, Kubernetes, arquitectura, cloud y rendimiento.</p><p>&#127760; <a href="https://www.wearedevelopers.com/world-congress">https://www.wearedevelopers.com/world-congress</a></p><div><hr></div><h2><strong>Java Forum Stuttgart</strong></h2><p>&#128467;&#65039; <strong>9 de julio de 2026</strong><br>&#128205; Stuttgart, Alemania</p><p>Evento cl&#225;sico de la comunidad Java europea con foco en arquitectura, backend, cloud y buenas pr&#225;cticas de ingenier&#237;a. Una excelente conferencia para desarrolladores Java que buscan contenido t&#233;cnico de calidad.</p><p>&#127760; https://www.java-forum-stuttgart.de/</p><div><hr></div><h2><strong>&#220;berConf</strong></h2><p>&#128467;&#65039; <strong>14&#8211;17 de julio de 2026</strong><br>&#128205; Denver, Colorado (EE. UU.)</p><p>Conferencia orientada a desarrolladores profesionales con numerosas sesiones sobre Java, Spring, arquitectura software, testing, DevOps y desarrollo moderno.</p><p>&#127760; https://uberconf.com/</p><div><hr></div><h2><strong>JConf Dominicana</strong></h2><p>&#128467;&#65039; <strong>17&#8211;18 de julio de 2026</strong><br>&#128205; Santo Domingo, Rep&#250;blica Dominicana</p><p>Uno de los eventos Java m&#225;s importantes de Latinoam&#233;rica, con charlas t&#233;cnicas impartidas tanto por expertos internacionales como por miembros de la comunidad local.</p><p>&#127760; https://jconfdominicana.org/</p><div><hr></div><h2><strong>JCrete</strong></h2><p>&#128467;&#65039; <strong>26&#8211;31 de julio de 2026</strong><br>&#128205; Creta, Grecia</p><p>Una conferencia muy diferente al resto. Combina sesiones t&#233;cnicas de alto nivel con actividades al aire libre, networking y debates entre algunos de los mayores expertos del ecosistema Java.</p><p>&#127760; https://www.jcrete.org/</p><div><hr></div><h2><strong>JavaZone</strong></h2><p>&#128467;&#65039; <strong>2&#8211;3 de septiembre de 2026</strong><br>&#128205; Oslo, Noruega</p><p>Uno de los eventos Java m&#225;s prestigiosos de Europa, organizado por la comunidad noruega de desarrolladores. Suele ofrecer contenido muy t&#233;cnico sobre JVM, arquitectura, cloud, IA y desarrollo backend.</p><p>&#127760; https://2026.javazone.no/</p><div><hr></div><h2><strong>IntelliJ IDEA Conf 2026</strong></h2><p>&#128467;&#65039; <strong>8&#8211;9 de septiembre de 2026</strong><br>&#127760; Evento online</p><p>La conferencia oficial organizada por JetBrains dedicada a IntelliJ IDEA, productividad, desarrollo Java, Kotlin y herramientas para desarrolladores.</p><p>&#127760; <a href="https://lp.jetbrains.com/intellij-idea-conf/">https://lp.jetbrains.com/intellij-idea-conf/</a></p><div><hr></div><h2><strong>Kansas City Developer Conference</strong></h2><p>&#128467;&#65039; <strong>9&#8211;11 de septiembre de 2026</strong><br>&#128205; Kansas City, Missouri (EE. UU.)</p><p>Evento multidisciplinar donde Java suele ocupar un papel destacado junto con arquitectura software, cloud, DevOps y desarrollo empresarial.</p><p>&#127760; https://www.kcdc.info/</p><div><hr></div><h2><strong>JC Conference Taiwan (JCConf)</strong></h2><p>&#128467;&#65039; <strong>11 de septiembre de 2026</strong><br>&#128205; Taip&#233;i, Taiw&#225;n</p><p>Conferencia centrada exclusivamente en Java y el ecosistema JVM, con ponencias t&#233;cnicas y casos reales de empresas asi&#225;ticas e internacionales.</p><p>&#127760; https://jcconf.tw/</p><div><hr></div><h2><strong>Devoxx Belgium</strong></h2><p>&#128467;&#65039; <strong>5&#8211;9 de octubre de 2026</strong><br>&#128205; Amberes, B&#233;lgica</p><p>Probablemente la conferencia Java m&#225;s importante del mundo. Durante cinco d&#237;as re&#250;ne a los principales expertos de Oracle, OpenJDK, Spring, Quarkus, Hibernate, Micronaut y muchas otras tecnolog&#237;as del ecosistema JVM.</p><p>&#127760; https://devoxx.be/</p><div><hr></div><h2><strong>dev2next</strong></h2><p>&#128467;&#65039; <strong>12&#8211;15 de octubre de 2026</strong><br>&#128205; Colorado Springs, EE. UU.</p><p>Conferencia para desarrolladores con un fuerte componente de arquitectura, cloud, Java moderno y desarrollo empresarial.</p><p>&#127760; https://www.dev2next.com/</p><div><hr></div><h2><strong>J on the Beach</strong></h2><p>&#128467;&#65039; <strong>29&#8211;30 de octubre de 2026</strong><br>&#128205; M&#225;laga, Espa&#241;a</p><p>Uno de los eventos tecnol&#243;gicos m&#225;s importantes de Espa&#241;a. Aunque naci&#243; alrededor de Java, actualmente cubre tambi&#233;n IA, arquitectura distribuida, cloud, big data y desarrollo de software moderno.</p><p>&#127760; https://jonthebeach.com/</p><div><hr></div><h2><strong>&#216;redev</strong></h2><p>&#128467;&#65039; <strong>4&#8211;6 de noviembre de 2026</strong><br>&#128205; Malm&#246;, Suecia</p><p>Conferencia internacional para desarrolladores donde Java contin&#250;a siendo una de las tecnolog&#237;as protagonistas junto con arquitectura, DevOps y cloud.</p><p>&#127760; https://oredev.org/</p><div><hr></div><h2><strong>JFall</strong></h2><p>&#128467;&#65039; <strong>11&#8211;12 de noviembre de 2026</strong><br>&#128205; Ede, Pa&#237;ses Bajos</p><p>Evento organizado por la comunidad Java neerlandesa con decenas de charlas t&#233;cnicas sobre JVM, Spring, Quarkus, rendimiento y buenas pr&#225;cticas.</p><p>&#127760; https://jfall.nl/</p><div><hr></div><h2><strong>IT-Tage</strong></h2><p>&#128467;&#65039; <strong>7&#8211;10 de diciembre de 2026</strong><br>&#128205; Fr&#225;ncfort, Alemania</p><p>Conferencia orientada al desarrollo de software empresarial donde Java tiene una presencia muy destacada junto con arquitectura, cloud y metodolog&#237;as &#225;giles.</p><p>&#127760; https://www.ittage.informatik-aktuell.de/</p><div><hr></div><h2><strong>Jfokus</strong></h2><p>&#128467;&#65039; <strong>8&#8211;10 de febrero de 2027</strong><br>&#128205; Estocolmo, Suecia</p><p>Uno de los primeros grandes eventos Java del a&#241;o. Re&#250;ne a numerosos miembros del OpenJDK, expertos en JVM y referentes de Spring, Jakarta EE y arquitectura software.</p><p>&#127760; https://www.jfokus.se/</p><div><hr></div><h2><strong>JavaLand</strong></h2><p>&#128467;&#65039; <strong>2&#8211;4 de marzo de 2027</strong><br>&#128205; N&#252;rburg, Alemania</p><p>Una de las conferencias Java m&#225;s grandes de Europa, organizada por la Java User Group alemana. Tres d&#237;as repletos de contenido t&#233;cnico sobre todo el ecosistema Java.</p><p>&#127760;  https://www.javaland.eu/</p><div><hr></div><h1><strong>&#128161; Tip de la semana</strong></h1><h2><strong>Captura crash logs y heap dumps con rutas predecibles en Spring Boot</strong></h2><p>Si tus dumps terminan dispersos por el filesystem del contenedor, no est&#225;s haciendo observabilidad: est&#225;s coleccionando basura.</p><p>En despliegues Spring Boot, define rutas expl&#237;citas y consistentes para diagn&#243;sticos JVM:</p><pre><code><code>java \
  -XX:+HeapDumpOnOutOfMemoryError \
  -XX:HeapDumpPath=/var/log/myservice/heapdumps \
  -XX:ErrorFile=/var/log/myservice/hs_err_pid%p.log \
  -XX:+ExitOnOutOfMemoryError \
  -jar app.jar
</code></code></pre><blockquote><p><strong>Por qu&#233; vale oro:</strong></p></blockquote><ul><li><p>Evitas perder artefactos por reinicios del pod</p></li><li><p>Facilitas correlaci&#243;n por servicio/instancia</p></li><li><p>Simplificas recolecci&#243;n en incidentes y auditor&#237;as</p></li></ul><p><strong>Extra pro:</strong> monta <code>/var/log/myservice</code> en un volumen persistente o sidecar de logs.<br>Diagn&#243;stico &#250;til &gt; &#233;pica ef&#237;mera.</p><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 4 - Junio 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-391</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-391</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 26 Jun 2026 12:03:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/2CRsXU-D8Ng" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h2>&#127897;&#65039; Lo Que Nadie Te Cuenta Sobre Entrar en una Big Tech | Jelena Duric | CodeCast #36</h2><div id="youtube2-2CRsXU-D8Ng" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;2CRsXU-D8Ng&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/2CRsXU-D8Ng?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>En este episodio del podcast hablo con <strong>Jelena</strong>, Campus Ambassador y Developer Advocate en JetBrains, para descubrir c&#243;mo es trabajar en una de las empresas m&#225;s influyentes del ecosistema de desarrollo de software.</p><p>Durante la conversaci&#243;n hablamos de su trayectoria, desde sus estudios de Ingenier&#237;a Inform&#225;tica en Serbia hasta su llegada a Espa&#241;a para cursar un m&#225;ster en Ciencia de Datos e Inteligencia Artificial. Tambi&#233;n profundizamos en qu&#233; hace realmente un <strong>Developer Advocate</strong>, cu&#225;l es el papel de un <strong>Campus Ambassador</strong> y por qu&#233; empresas como <strong>JetBrains</strong> invierten tanto en conectar con estudiantes y desarrolladores.</p><p>Adem&#225;s, hablamos sobre el proceso de selecci&#243;n de JetBrains, qu&#233; buscan en los candidatos, c&#243;mo utilizan las pr&#225;cticas para descubrir talento y por qu&#233; valoran tanto la proactividad, el aprendizaje continuo y la responsabilidad individual. Tambi&#233;n descubrimos c&#243;mo el feedback de la comunidad influye directamente en la evoluci&#243;n de productos como <strong>IntelliJ IDEA</strong> y el resto del ecosistema <strong>JetBrains</strong>.</p><p>Si alguna vez te has preguntado c&#243;mo funciona una empresa de desarrollo de herramientas para programadores desde dentro, o te interesa conocer oportunidades profesionales m&#225;s all&#225; del desarrollo de software tradicional, este episodio te ofrecer&#225; una perspectiva muy interesante.</p><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h3><strong>Spring Tools 5.2.0</strong></h3><p>Spring Tools sigue empujando el IDE hacia un flujo m&#225;s inteligente, menos manual y m&#225;s cercano a c&#243;mo realmente trabajan los equipos hoy.</p><p><strong>Qu&#233; trae esta versi&#243;n</strong></p><ul><li><p>Bug fixes generales</p></li><li><p>Actualizaci&#243;n a <strong>Eclipse 2026-06</strong></p></li><li><p>Nuevo <strong>Claude Code Plugin</strong> experimental con:</p><ul><li><p>servidor MCP embebido</p></li><li><p>skills para Claude Code</p></li></ul></li><li><p>Soporte para <strong>Spring AI</strong></p></li><li><p>Soporte para <strong>type-safe property references</strong></p><ul><li><p>refactoriza propiedades string-based hacia referencias tipadas autom&#225;ticamente</p></li></ul></li></ul><p><strong>Por qu&#233; importa</strong> Esto no es solo &#8220;otro update del IDE&#8221;. La novedad de propiedades tipadas ataca uno de los cl&#225;sicos bugs silenciosos en Spring: strings mal escritos en configuraci&#243;n que pasan revisi&#243;n visual pero rompen en runtime. Menos magia negra, m&#225;s seguridad.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Mejora la refactorizaci&#243;n en proyectos grandes</p></li><li><p>Reduce errores en <code>application.yml</code> / <code>application.properties</code></p></li><li><p>Acelera adopci&#243;n de Spring AI sin salir del ecosistema de tooling</p></li><li><p>Puede abrir la puerta a flujos asistidos por LLM directamente desde el IDE</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p><a href="https://spring.io/blog/2026/06/15/spring-tools-5-2-0-released">https://spring.io/blog/2026/06/15/spring-tools-5-2-0-released</a></p></li><li><p><a href="https://github.com/spring-projects/spring-tools/releases/tag/5.2.0.RELEASE">https://github.com/spring-projects/spring-tools/releases/tag/5.2.0.RELEASE</a></p></li></ul><div><hr></div><h3><strong>Helidon 4.5.0</strong></h3><p>Helidon contin&#250;a madurando con una mezcla sana de mejoras de seguridad, estabilidad API y endurecimiento del stack HTTP.</p><p><strong>Qu&#233; trae esta versi&#243;n</strong></p><ul><li><p>Bug fixes</p></li><li><p><strong>Hardened value encryption</strong> en la configuraci&#243;n de secretos compartidos en Helidon Config</p></li><li><p>Finalizaci&#243;n del proyecto de estabilidad API</p><ul><li><p>uso de anotaciones <code>@Api</code> para marcar constructores y APIs como:</p><ul><li><p>internal</p></li><li><p>preview</p></li><li><p>incubating</p></li><li><p>stable</p></li></ul></li></ul></li><li><p>Rechazo de enteros malformados en <strong>HPACK</strong> para HTTP/2</p></li></ul><p><strong>Por qu&#233; importa</strong> Helidon est&#225; dejando claro que no quiere ser &#8220;otro framework m&#225;s&#8221;: quiere ser una base seria para producci&#243;n. La clasificaci&#243;n de estabilidad por API es especialmente &#250;til en equipos que necesitan controlar riesgos al actualizar dependencias.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Menos exposici&#243;n por configuraci&#243;n de secretos</p></li><li><p>Mejor trazabilidad de compatibilidad en upgrades</p></li><li><p>Mayor robustez ante tr&#225;fico HTTP/2 malicioso o corrupto</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li></li></ul><p>https://helidon.io/</p><ul><li><p><a href="https://github.com/helidon-io/helidon/releases/tag/4.5.0">https://github.com/helidon-io/helidon/releases/tag/4.5.0</a></p></li></ul><div><hr></div><h3><strong>Open Liberty 26.0.0.6</strong></h3><p>Open Liberty publica una GA con enfoque claro en seguridad y correcci&#243;n de vulnerabilidades.</p><p><strong>Qu&#233; trae esta versi&#243;n</strong></p><ul><li><p>Bug fixes</p></li><li><p>Correcci&#243;n de:</p><ul><li><p><strong>CVE-2026-4410</strong>: posible consumo excesivo de memoria por request malicioso</p></li><li><p><strong>CVE-2026-5516</strong>: bypass de autenticaci&#243;n en una ventana temporal limitada</p></li></ul></li></ul><p><strong>Por qu&#233; importa</strong> Las vulnerabilidades corregidas afectan ramas previas y pueden impactar entornos expuestos en producci&#243;n. Aqu&#237; la recomendaci&#243;n no es debatirlo: es actualizar.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Reduce superficie de ataque</p></li><li><p>Evita DoS por consumo de memoria</p></li><li><p>Refuerza autenticaci&#243;n en escenarios vulnerables</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p><a href="https://openliberty.io/blog/2026/06/16/26.0.0.6.html">https://openliberty.io/blog/2026/06/16/26.0.0.6.html</a></p></li><li></li></ul><p>https://openliberty.io/</p><div><hr></div><h3><strong>Apache TomEE 11.0.0-M1</strong></h3><p>TomEE pisa el acelerador con el primer milestone de la l&#237;nea 11.</p><p><strong>Qu&#233; trae esta versi&#243;n</strong></p><ul><li><p>Soporte para <strong>Jakarta EE 11</strong></p></li><li><p>Soporte para <strong>MicroProfile 7.1</strong></p></li><li><p>Bug fixes</p></li><li><p>Upgrades de dependencias</p></li><li><p>Mejora en mensajes de despliegue <code>conf.0008</code></p><ul><li><p>ahora incluyen nombres de beans desplegados</p></li><li><p>y nombres declarados en <code>ejb-jar.xml</code></p></li></ul></li></ul><p><strong>Por qu&#233; importa</strong> TomEE se alinea con la siguiente generaci&#243;n del stack Jakarta. Si trabajas con aplicaciones enterprise pesadas, esto marca una ruta clara para modernizar sin reescribir medio sistema.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Facilita pruebas de compatibilidad con Jakarta EE 11</p></li><li><p>Mejor observabilidad del despliegue</p></li><li><p>M&#225;s claridad al depurar aplicaciones EJB/Java EE cl&#225;sicas</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p><a href="https://tomee.apache.org/11.0.0-M1/release-notes.html">https://tomee.apache.org/11.0.0-M1/release-notes.html</a></p></li><li></li></ul><p>https://tomee.apache.org/</p><div><hr></div><h3><strong>JobRunr 8.7.0</strong></h3><p>JobRunr sigue refinando la experiencia de jobs en segundo plano sin hacerte pelear con infraestructura innecesaria.</p><p><strong>Qu&#233; trae esta versi&#243;n</strong></p><ul><li><p>Bug fixes</p></li><li><p><strong>Lazy server initialization</strong></p><ul><li><p><code>BackgroundJobServer</code> y <code>WebServer</code> se arrancan cuando se usa la Fluent API</p></li></ul></li><li><p>Mejora del dashboard</p><ul><li><p>link directo a la p&#225;gina de releases de GitHub</p></li><li><p>respeta el esquema de color del sistema del desarrollador</p></li></ul></li><li><p>Soporte para deserializar colecciones Java soportadas v&#237;a <code>Jackson3JsonMapper</code></p></li></ul><p><strong>Por qu&#233; importa</strong> Menos arranque prematuro, menos fricci&#243;n en bootstrap, mejor dashboard. En proyectos Spring Boot esto se traduce en arranques m&#225;s limpios y una UX m&#225;s agradable para operaciones y desarrollo.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Menor coste inicial en apps que no siempre necesitan el worker activo</p></li><li><p>Integraci&#243;n m&#225;s c&#243;moda con Jackson 3</p></li><li><p>Dashboard m&#225;s usable en entornos de desarrollo</p></li></ul><p><strong>Enlace</strong></p><ul><li><p><a href="https://www.jobrunr.io/en/blog/jobrunr-v8.7.0/">https://www.jobrunr.io/en/blog/jobrunr-v8.7.0/</a></p></li><li><p><a href="https://github.com/jobrunr/jobrunr/releases/tag/v8.7.0">https://github.com/jobrunr/jobrunr/releases/tag/v8.7.0</a></p></li></ul><div><hr></div><h3><strong>Hibernate ORM 8.0.0.Beta1</strong></h3><p>Hibernate entra en beta con una de sus versiones m&#225;s ambiciosas en a&#241;os.</p><p><strong>Qu&#233; trae esta versi&#243;n</strong></p><ul><li><p>Implementaci&#243;n de <strong>Jakarta Persistence 4.0-M5</strong></p></li><li><p>Nuevo <strong>graph-based flush coordination</strong></p><ul><li><p>planifica insert, update, delete y collections seg&#250;n las restricciones relacionales del modelo</p></li></ul></li><li><p>Soporte para aplicar <strong>row-level security</strong> en multi-tenancy por discriminador</p><ul><li><p>en bases compatibles como:</p><ul><li><p>PostgreSQL</p></li><li><p>Db2</p></li><li><p>SQL Server</p></li><li><p>CockroachDB</p></li></ul></li></ul></li></ul><p><strong>Por qu&#233; importa</strong> Hibernate 8 no est&#225; jugando a cambiar numeritos. El flush coordinado por grafo puede mejorar consistencia y comportamiento interno en modelos complejos. Y el soporte de seguridad por fila para multi-tenancy es directamente interesante para arquitecturas con aislamiento real de datos.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Posible mejora en persistencia de dominios complejos</p></li><li><p>M&#225;s control sobre visibilidad de datos en SaaS multi-tenant</p></li><li><p>Camino claro hacia Jakarta Persistence 4.0</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p><a href="https://in.relation.to/2026/06/16/orm-80-beta1/">https://in.relation.to/2026/06/16/orm-80-beta1/</a></p></li><li><p><a href="https://github.com/hibernate/hibernate-orm/releases/tag/8.0.0.Beta1">https://github.com/hibernate/hibernate-orm/releases/tag/8.0.0.Beta1</a></p></li></ul><div><hr></div><h3><strong>Quarkus: releases urgentes por CVE-2026-50559</strong></h3><p>Quarkus ha publicado releases de mantenimiento de emergencia para varias ramas activas.</p><p><strong>Qu&#233; trae esta intervenci&#243;n</strong></p><ul><li><p>Parcheo para <strong>CVE-2026-50559</strong></p></li><li><p>Afecta ramas:</p><ul><li><p>3.20</p></li><li><p>3.27</p></li><li><p>3.33</p></li><li><p>3.36</p></li><li><p>3.37</p></li></ul></li></ul><blockquote><p><strong>Qu&#233; resuelve</strong> La vulnerabilidad est&#225; relacionada con escenarios donde un atacante puede usar:</p></blockquote><ul><li><p><code>"%3B"</code> para colar matrix parameters a trav&#233;s de la capa de seguridad</p></li><li><p><code>"%2F"</code> o <code>"%5C"</code> para acceder a recursos est&#225;ticos protegidos</p></li></ul><p><strong>Por qu&#233; importa</strong> Esto es una alerta seria de hardening. Si usas Quarkus expuesto a internet, no conviene esperar a &#8220;la pr&#243;xima minor&#8221;. Las rutas codificadas creativamente son justo el tipo de bug que termina en incidente.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Actualizaci&#243;n prioritaria en servicios expuestos</p></li><li><p>Revisi&#243;n de reglas de seguridad y paths codificados</p></li><li><p>Menos riesgo de bypass en recursos est&#225;ticos y par&#225;metros de matriz</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p><a href="https://quarkus.io/blog/CVE-2026-50559/">https://quarkus.io/blog/CVE-2026-50559/</a></p></li></ul><div><hr></div><h3><strong>Gradle 9.6.0</strong></h3><p>Gradle 9.6.0 llega con cambios &#250;tiles para CI/CD y una advertencia clara para el futuro del DSL Groovy.</p><p><strong>Qu&#233; trae esta versi&#243;n</strong></p><ul><li><p>Mejoras en la <strong>Configuration Cache</strong></p><ul><li><p>seguimiento m&#225;s preciso de properties v&#237;a system properties y environment variables</p></li></ul></li><li><p>Nueva opci&#243;n:</p><ul><li><p><code>--non-interactive</code></p></li><li><p>desactiva prompts interactivos en entornos automatizados</p></li></ul></li><li><p>Deprecaci&#243;n de:</p><ul><li><p>lookup impl&#237;cito de properties y methods en parent projects en <strong>Groovy DSL</strong></p></li><li><p>ser&#225; removido en Gradle 10.0</p></li></ul></li></ul><p><strong>Por qu&#233; importa</strong> La cache de configuraci&#243;n es donde se gana o se pierde tiempo real en builds grandes. Y la opci&#243;n <code>--non-interactive</code> es exactamente lo que quieres en pipelines que no toleran preguntas tontas a mitad de la ejecuci&#243;n.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Builds m&#225;s reproducibles</p></li><li><p>Menos ruido en CI</p></li><li><p>Aviso temprano para migrar scripts Groovy antes de Gradle 10</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p><a href="https://docs.gradle.org/9.6.0/release-notes.html">https://docs.gradle.org/9.6.0/release-notes.html</a></p></li><li><p><a href="https://github.com/gradle/gradle/releases/tag/v9.6.0">https://github.com/gradle/gradle/releases/tag/v9.6.0</a></p></li></ul><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><h3><strong>jtreg 8.3.0</strong></h3><p>El harness de testing del JDK se actualiza para acompa&#241;ar mejor el ritmo del ecosistema Java moderno.</p><p><strong>Versi&#243;n</strong></p><ul><li><p><code>jtreg 8.3.0</code></p></li></ul><p><strong>Qu&#233; incluye</strong></p><ul><li><p>Soporte para <strong>JEP 512</strong>:</p><ul><li><p><em>Compact Source Files and Instance Main Methods</em></p></li></ul></li><li><p>Mejor soporte en driver mode para:</p><ul><li><p>tag <code>/native</code></p></li><li><p>tests con <code>@enablePreview</code></p></li></ul></li></ul><p><strong>Qu&#233; resuelve</strong> jtreg es una pieza clave del testing de OpenJDK. Esta versi&#243;n mejora la cobertura de casos modernos de lenguaje y testing de features preview, lo cual reduce fricci&#243;n para validar cambios del JDK.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>Mejor soporte para pruebas ligadas a nuevas sintaxis</p></li><li><p>Menos fricci&#243;n al validar c&#243;digo preview</p></li><li><p>M&#225;s robustez en la infraestructura de test del JDK</p></li></ul><p><strong>Enlace</strong></p><ul><li><p><a href="https://openjdk.org/jtreg/">https://openjdk.org/jtreg/</a></p></li><li><p><a href="https://github.com/openjdk/jtreg/blob/master/CHANGELOG.md#8.3">https://github.com/openjdk/jtreg/blob/master/CHANGELOG.md#8.3</a></p></li><li><p><a href="https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/YLSR7ELTNGE3NTLPD2QRPG6TCZXAMU4T/">https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/YLSR7ELTNGE3NTLPD2QRPG6TCZXAMU4T/</a></p></li></ul><h3><strong>JDK 27 EA Build 27</strong></h3><p><strong>Tipo</strong></p><ul><li><p>Early-access build: <code>jdk-27+27</code></p></li></ul><p><strong>Qu&#233; incluye</strong></p><ul><li><p>Correcciones acumuladas desde Build 26</p></li><li><p>Fixes para varios issues del tracker de OpenJDK</p></li></ul><p><strong>Qu&#233; aporta</strong> A&#250;n estamos en fase de maduraci&#243;n, pero este build sigue cerrando grietas antes del freeze. Si est&#225;s validando compatibilidad futura, este es el tipo de build que conviene meter en pruebas automatizadas tempranas.</p><p><strong>Impacto pr&#225;ctico</strong></p><ul><li><p>&#218;til para testar librer&#237;as y apps contra el siguiente ciclo</p></li><li><p>Detecta regresiones antes de que muerdan en serio</p></li><li><p>Ayuda a fabricantes de frameworks a adelantarse a cambios</p></li></ul><blockquote><p><strong>Enlace</strong></p></blockquote><ul><li><p><a href="https://jdk.java.net/27/">https://jdk.java.net/27/</a></p></li><li><p><a href="https://github.com/openjdk/jdk/releases/tag/jdk-27%2B27">https://github.com/openjdk/jdk/releases/tag/jdk-27%2B27</a></p></li><li><p><a href="https://jdk.java.net/27/release-notes">https://jdk.java.net/27/release-notes</a></p></li></ul><h3><strong>JDK 28 EA Build 3</strong></h3><p><strong>Tipo</strong></p><ul><li><p>Early-access build: <code>jdk-28+3</code></p></li></ul><p><strong>Qu&#233; incluye</strong></p><ul><li><p>Fixes y actualizaciones desde Build 2</p></li><li><p>Correcciones para varios issues abiertos</p></li></ul><p><strong>Qu&#233; aporta</strong> JDK 28 todav&#237;a va muy verde, pero ya aparece en la ruta de evoluci&#243;n. Para equipos serios, este tipo de builds sirven para detectar si alguna dependencia o plugin se rompe antes del pr&#243;ximo salto.</p><p><strong>Enlace</strong></p><ul><li><p><a href="https://jdk.java.net/28/">https://jdk.java.net/28/</a></p></li><li><p><a href="https://github.com/openjdk/jdk/releases/tag/jdk-28%2B3">https://github.com/openjdk/jdk/releases/tag/jdk-28%2B3</a></p></li><li><p><a href="https://jdk.java.net/28/release-notes">https://jdk.java.net/28/release-notes</a></p></li></ul><div><hr></div><h2><strong>&#129514; Nuevas JEPs o Propuestas del ecosistema Java</strong></h2><h3><strong>JEP 512 &#8212; Compact Source Files and Instance Main Methods</strong></h3><p><strong>Estado</strong></p><ul><li><p>Ya integrada y con soporte ampliado en jtreg</p></li></ul><p><strong>Prop&#243;sito</strong> Simplificar la entrada al lenguaje Java con archivos fuente compactos y m&#233;todos <code>main</code> de instancia.</p><p><strong>Problema que resuelve</strong> Reduce la fricci&#243;n para ejemplos, scripts peque&#241;os, demos y aprendizaje. Menos ceremonia, m&#225;s c&#243;digo &#250;til.</p><p><strong>C&#243;mo cambia el desarrollo</strong></p><ul><li><p>Permite escribir programas simples sin el peso habitual de la estructura cl&#225;sica</p></li><li><p>Facilita la ense&#241;anza y scripts ligeros</p></li><li><p>Mejora la ergonom&#237;a para tooling y testing</p></li></ul><p><strong>Enlace</strong></p><ul><li><p><a href="https://openjdk.org/jeps/512">https://openjdk.org/jeps/512</a></p></li></ul><div><hr></div><h3><strong>&#127757; Comunidad y Ecosistema</strong></h3><h3><strong>Java Forum Stuttgart</strong></h3><p>&#128467;&#65039; July 9, 2026<br>&#128205; Stuttgart, Germany</p><p>Evento clave del ecosistema Java en Alemania, con foco en charlas t&#233;cnicas, intercambio de experiencias y tendencias del lenguaje, el runtime y el ecosistema alrededor de Spring, cloud y arquitectura moderna. Si trabajas en Java y quieres o&#237;r cosas &#250;tiles en vez de marketing envuelto en humo, este es tu sitio.</p><p>Web: https://www.java-forum-stuttgart.de/</p><div><hr></div><p><strong>JConf Dominicana 2026</strong></p><p>&#128467;&#65039; 17 de julio de 2026<br>&#128205; Santo Domingo, Rep&#250;blica Dominicana<br>Conferencia de Java y tecnolog&#237;a en el Caribe.<br>Web: https://jconfdominicana.org/</p><div><hr></div><p><strong>JCrete 2026</strong></p><p>&#128467;&#65039; 26 de julio de 2026<br>&#128205; Creta, Grecia<br>Conferencia internacional de Java en un entorno colaborativo y relajado.<br>Web: https://www.jcrete.org/</p><div><hr></div><p><strong>JC Conference Taiwan (JCConf)</strong></p><p>&#128467;&#65039; September 11, 2026<br>&#128205; Tapiei, Taiwan</p><p>Una conferencia de comunidad con fuerte orientaci&#243;n a Java, arquitectura, frameworks y pr&#225;cticas de desarrollo. Buena se&#241;al para seguir el pulso del ecosistema en APAC y ver qu&#233; temas est&#225;n moviendo la conversaci&#243;n t&#233;cnica.</p><p>Web: https://jcconf.tw/</p><div><hr></div><h2><strong>&#128161; Tip de la semana</strong></h2><h3><strong>Evita el cast de </strong><code>Optional</code><strong> a </strong><code>null</code><strong> con una composici&#243;n limpia</strong></h3><p>En Spring Boot y Java backend, el error com&#250;n no es <code>Optional</code> en s&#237;. El problema es usarlo como si fuera una caja para todo, y luego pelearte con <code>null</code> otra vez.</p><p>Si quieres transformar un valor opcional sin duplicar l&#243;gica, usa <code>map</code> + <code>orElseGet</code>:</p><pre><code><code>public UserDto getUserDto(Long id) {
    return userRepository.findById(id)
        .map(user -&gt; new UserDto(user.getId(), user.getName(), user.getEmail()))
        .orElseGet(() -&gt; new UserDto(null, "anonymous", null));
}
</code></code></pre><p><strong>Por qu&#233; funciona mejor</strong></p><ul><li><p>Evita <code>if (isPresent())</code></p></li><li><p>Mantiene el flujo declarativo</p></li><li><p>Se integra bien con servicios y controllers Spring</p></li><li><p>Hace m&#225;s expl&#237;cita la rama &#8220;fallback&#8221;</p></li></ul><p><strong>Regla brutalmente &#250;til</strong> Si tu <code>Optional</code> empieza a necesitar <code>get()</code> + <code>null</code> + tres <code>if</code>, ya no est&#225;s simplificando: est&#225;s escondiendo deuda t&#233;cnica.</p><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 3 - Junio 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-bc8</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-bc8</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 19 Jun 2026 12:03:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/PzfFKDl8RSM" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h2>&#127909; V&#237;deo de la semana - Novedades Spring Boot 4.1.0</h2><div id="youtube2-PzfFKDl8RSM" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;PzfFKDl8RSM&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/PzfFKDl8RSM?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h3><strong>Spring Boot 4.1</strong></h3><p><strong>Publicado:</strong> 10 de junio de 2026<br><strong>Enlace oficial:</strong> <a href="https://spring.io/blog/2026/06/10/spring-boot-4">https://spring.io/blog/2026/06/10/spring-boot-4</a><br><strong>Release notes:</strong> <a href="https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.1-Release-Notes">https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-4.1-Release-Notes</a></p><p>Spring Boot 4.1 no es una revoluci&#243;n; es una actualizaci&#243;n con dientes. Viene a cerrar huecos operativos, endurecer seguridad y mejorar la integraci&#243;n con el stack moderno de observabilidad y mensajer&#237;a.</p><p><strong>Cambios y mejoras clave:</strong></p><ul><li><p>&#128640; <strong>Spring gRPC auto-configuration</strong> para servidor y cliente</p><ul><li><p>Soporte para transporte <strong>Netty standalone</strong> y <strong>Servlet HTTP/2</strong></p></li><li><p>Nuevo <code>@GrpcAdvice</code> para manejo centralizado de excepciones</p></li><li><p><code>ObservationGrpcServerInterceptor</code> auto-configurado para m&#233;tricas y trazas</p></li></ul></li><li><p>&#128737;&#65039; <strong>Mitigaci&#243;n SSRF en clientes HTTP</strong></p><ul><li><p>Nuevo <code>InetAddressFilter</code></p></li><li><p>Permite bloquear o permitir rangos de IP en clientes reactivos y bloqueantes</p></li></ul></li><li><p>&#129525; <strong>Propagaci&#243;n as&#237;ncrona de contexto en </strong><code>@Async</code></p><ul><li><p>Micrometer context viaja autom&#225;ticamente entre hilos</p></li><li><p>Menos wiring manual, menos &#8220;por qu&#233; se perdi&#243; el trace?&#8221;</p></li></ul></li><li><p>&#128164; <strong>Lazy datasource connections</strong></p><ul><li><p><code>spring.datasource.connection-fetch=lazy</code></p></li><li><p>Retrasa la conexi&#243;n f&#237;sica hasta la primera consulta real</p></li></ul></li><li><p>&#128201; <strong>Mejor bootstrap de JPA</strong></p><ul><li><p><code>spring.jpa.bootstrap</code> habilita inicializaci&#243;n as&#237;ncrona en background</p></li></ul></li><li><p>&#128225; <strong>OpenTelemetry mejorado</strong></p><ul><li><p><code>management.opentelemetry.enabled</code></p></li><li><p>Soporte para exemplars OTLP</p></li><li><p>SSL bundles para exporters OTLP</p></li><li><p>Lectura de variables de entorno m&#225;s completa</p></li></ul></li><li><p>&#129520; <strong>Redis listener endpoints auto-configurados</strong></p><ul><li><p><code>RedisMessageListenerContainer</code> por defecto si no existe uno</p></li></ul></li><li><p>&#128270; <strong>/actuator/info m&#225;s &#250;til</strong></p><ul><li><p>Nuevos campos en <code>ProcessInfo</code>: <code>uptime</code>, <code>startTime</code>, <code>currentTime</code>, <code>timezone</code>, <code>locale</code>, <code>workingDirectory</code></p></li></ul></li><li><p>&#129514; <strong>Jackson m&#225;s configurable</strong></p><ul><li><p>Ajustes por <code>spring.jackson.read.*</code> y <code>spring.jackson.write.*</code></p></li><li><p>Aplica a CBOR, JSON y XML</p></li></ul></li><li><p>&#9888;&#65039; <strong>Deprecaciones y roturas</strong></p><ul><li><p>Se eliminan APIs deprecated en 4.0</p></li><li><p><code>layertools</code> desaparece; usa <code>tools</code></p></li><li><p>Se depreca soporte para Apache Derby</p></li><li><p>Se deprecian propiedades de Dynatrace V1 y DevTools LiveReload</p></li></ul></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Menos configuraci&#243;n manual para gRPC y tracing</p></li><li><p>Menos riesgo de exponer servicios internos v&#237;a SSRF</p></li><li><p>Arranque m&#225;s limpio en apps con JPA grande o conexiones caras</p></li><li><p>Mejor correlaci&#243;n de logs, m&#233;tricas y trazas en tareas as&#237;ncronas</p></li><li><p>M&#225;s control sobre el comportamiento de serializaci&#243;n y observabilidad</p></li></ul><blockquote><p><strong>Compatibilidad y contexto:</strong></p></blockquote><ul><li><p>Spring Boot 4 mantiene baseline de <strong>JDK 17</strong></p></li><li><p>Algunas capacidades nuevas piden <strong>Java 21</strong>, especialmente por dependencias como <strong>jOOQ 3.20</strong></p></li><li><p>Spring Boot 4.1 se apoya en <strong>Spring Framework 7.0.x</strong></p></li></ul><blockquote><p><strong>Ojo aqu&#237;:</strong> si vienes de 4.0, esto no es &#8220;actualizar por deporte&#8221;. Revisa especialmente:</p></blockquote><ul><li><p><code>layertools</code></p></li><li><p>propiedades de Jackson</p></li><li><p><code>-DskipTests</code> en builds con AOT</p></li><li><p>cualquier integraci&#243;n manual de gRPC o tracing</p></li></ul><div><hr></div><h3><strong>Spring Modulith 2.1.0</strong></h3><p><strong>Enlace:</strong> <a href="https://spring.io/blog/2026/06/11/spring-modulith-2-1-ga-2-0-7-and-1-4-12-released">https://spring.io/blog/2026/06/11/spring-modulith-2-1-ga-2-0-7-and-1-4-12-released</a></p><p>Spring Modulith sigue empujando la idea de monolito modular sin pedir perd&#243;n. Su valor est&#225; en forzar arquitectura con l&#237;mites reales, no con diagramas bonitos.</p><p><strong>Relevancia:</strong></p><ul><li><p>Ayuda a definir m&#243;dulos internos consistentes</p></li><li><p>Encaja especialmente bien con equipos que quieren orden sin saltar a microservicios por ansiedad</p></li><li><p>Mantiene una estrategia sana para dominios complejos en Spring Boot</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Mejor separaci&#243;n de responsabilidades</p></li><li><p>Menos acoplamiento accidental</p></li><li><p>M&#225;s facilidad para testear y evolucionar el core del sistema</p></li></ul><div><hr></div><h3><strong>Spring Cloud 2025.1.2</strong></h3><p><strong>Enlace:</strong> <a href="https://spring.io/blog/2026/06/11/spring-cloud-2025-1-2-aka-oakwood-has-been-released">https://spring.io/blog/2026/06/11/spring-cloud-2025-1-2-aka-oakwood-has-been-released</a></p><p>Spring Cloud acompa&#241;a la ola de Spring Boot 4.1 con una release de mantenimiento que importa m&#225;s de lo que parece: estabilidad del ecosistema distribuido.</p><p><strong>Qu&#233; aporta:</strong></p><ul><li><p>Ajustes de compatibilidad con la nueva l&#237;nea de Spring Boot</p></li><li><p>Evoluci&#243;n del stack para aplicaciones cloud nativas</p></li><li><p>Soporte alineado con la generaci&#243;n actual del ecosistema Spring</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Menos fricci&#243;n al actualizar Boot</p></li><li><p>Menor riesgo de incompatibilidades cruzadas entre starters y autoconfiguraciones</p></li></ul><div><hr></div><h3><strong>Spring HATEOAS 3.1.0</strong></h3><p><strong>Enlace:</strong> <a href="https://spring.io/blog/2026/06/08/spring-hateoas-3-1-GA-3-0-7-and-2-5-3-released">https://spring.io/blog/2026/06/08/spring-hateoas-3-1-GA-3-0-7-and-2-5-3-released</a></p><p>Spring HATEOAS sigue siendo una pieza &#250;til cuando la API no debe limitarse a JSON &#8220;plano&#8221; y ya.</p><p><strong>Relevancia:</strong></p><ul><li><p>Ideal para APIs con navegaci&#243;n hipermedia real</p></li><li><p>&#218;til en dominios donde el cliente necesita descubrir estados y transiciones</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico:</strong></p></blockquote><ul><li><p>Mejores contratos de API orientados a recursos</p></li><li><p>Menos acoplamiento entre frontend y backend cuando se dise&#241;a con HATEOAS en serio</p></li></ul><div><hr></div><h3><strong>Spring Security 7.1.0</strong></h3><p><strong>Enlace:</strong> <a href="https://github.com/spring-projects/spring-vault/releases/tag/4.1.0">https://github.com/spring-projects/spring-vault/releases/tag/4.1.0</a></p><p>Spring Security sigue avanzando con la ola de Spring 7 / Boot 4.1. Aunque el ecosistema se mueva, la prioridad es la misma: seguridad sin convertir el c&#243;digo en un pantano ceremonial.</p><p><strong>Impacto pr&#225;ctico:</strong></p><ul><li><p>Mejor alineaci&#243;n con el nuevo stack Spring</p></li><li><p>Menos deuda de compatibilidad al adoptar Boot 4.1</p></li></ul><div><hr></div><h3><strong>&#127757; Comunidad y Ecosistema</strong></h3><div><hr></div><h3><strong>Java Forum Stuttgart</strong></h3><p>&#128467;&#65039; July 9, 2026<br>&#128205; Stuttgart, Germany</p><p>Evento clave del ecosistema Java en Alemania, con foco en charlas t&#233;cnicas, intercambio de experiencias y tendencias del lenguaje, el runtime y el ecosistema alrededor de Spring, cloud y arquitectura moderna. Si trabajas en Java y quieres o&#237;r cosas &#250;tiles en vez de marketing envuelto en humo, este es tu sitio.</p><p>Web: https://www.java-forum-stuttgart.de/</p><div><hr></div><p><strong>JConf Dominicana 2026</strong></p><p>&#128467;&#65039; 17 de julio de 2026<br>&#128205; Santo Domingo, Rep&#250;blica Dominicana<br>Conferencia de Java y tecnolog&#237;a en el Caribe.<br>Web: https://jconfdominicana.org/</p><div><hr></div><p><strong>JCrete 2026</strong></p><p>&#128467;&#65039; 26 de julio de 2026<br>&#128205; Creta, Grecia<br>Conferencia internacional de Java en un entorno colaborativo y relajado.<br>Web: https://www.jcrete.org/</p><div><hr></div><h3><code>@Async</code><strong> sin perder trazas: deja que Spring Boot 4.1 haga el trabajo sucio</strong></h3><p>En versiones anteriores, propagar contexto de observabilidad en tareas as&#237;ncronas pod&#237;a requerir configuraci&#243;n adicional. Con Spring Boot 4.1, <code>@Async</code> ya propaga el contexto de Micrometer autom&#225;ticamente.</p><p><strong>Qu&#233; ganas:</strong></p><ul><li><p>Trace IDs consistentes entre hilos</p></li><li><p>Menos configuraci&#243;n manual</p></li><li><p>Mejor correlaci&#243;n entre logs, m&#233;tricas y trazas</p></li></ul><pre><code><code>@Service
public class ReportService {

    @Async
    public CompletableFuture&lt;String&gt; generateReport() {
        // El contexto de observabilidad viaja con la ejecuci&#243;n
        return CompletableFuture.completedFuture("report-ready");
    }
}
</code></code></pre><p><strong>Detalle pr&#225;ctico:</strong><br>Si tu app usa <code>@Async</code> para jobs internos, revisa si estabas metiendo wrappers de contexto a mano. Con Boot 4.1, parte de ese pegamento ya sobra. Menos c&#243;digo ritual, m&#225;s se&#241;al &#250;til.</p><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 2 - Junio 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-d0a</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-d0a</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 12 Jun 2026 12:58:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!a0Zb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h2>&#128640; Nos vemos en DevBcn 2026</h2><p>Este a&#241;o voy a estar en la pr&#243;xima edici&#243;n de <a href="https://www.devbcn.com/2026">DevBcn 2026</a> y, sinceramente, tiene pintaza. Si trabajas con Java, Cloud, IA, DevOps, Frontend o simplemente quieres rodearte de gente apasionada por la tecnolog&#237;a, es uno de esos eventos que merecen la pena. Adem&#225;s, muchas empresas tienen presupuesto para formaci&#243;n y conferencias, as&#237; que <em>antes de pagar el ticket de tu bolsillo, intenta que te lo cubra la empresa</em> (DevBcn incluso tiene una secci&#243;n de &#8220;<a href="https://www.devbcn.com/2026/convince-your-boss">Convince your Boss</a>&#8221; para ayudarte &#128516;). </p><p>Nos vemos en <strong>Barcelona el 16 y 17 de junio</strong>.</p><h3>&#127873;C&#211;DIGO DE DESCUENTO: <em>YO_PROGRAMO_EN_JAVA</em></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devbcn.com/2026" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!a0Zb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg" width="344" height="531.852534562212" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1342,&quot;width&quot;:868,&quot;resizeWidth&quot;:344,&quot;bytes&quot;:195104,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.devbcn.com/2026&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programandoenjava.substack.com/i/199743124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.devbcn.com/2026&quot;,&quot;text&quot;:&quot;CONOCER M&#193;S SOBRE LA CONFERENCIA&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.devbcn.com/2026"><span>CONOCER M&#193;S SOBRE LA CONFERENCIA</span></a></p><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h2>Spring Boot 4.1.0 disponible</h2><p>El equipo de Spring ha anunciado la disponibilidad de <strong>Spring Boot 4.1.0</strong>, una actualizaci&#243;n importante que incorpora nuevas funcionalidades, mejoras en observabilidad y actualizaciones de dependencias. Esta versi&#243;n tambi&#233;n incluye todas las correcciones de errores, mejoras de documentaci&#243;n y parches de seguridad presentes en <strong>Spring Boot 4.0.7</strong>.</p><p>M&#225;s informaci&#243;n: <a href="https://spring.io/blog/2026/06/10/spring-boot-4">https://spring.io/blog/2026/06/10/spring-boot-4</a></p><h3>Novedades destacadas</h3><h4>gRPC integrado en Spring Boot</h4><p>Una de las incorporaciones m&#225;s relevantes es el soporte oficial para <strong>Spring gRPC</strong>, facilitando la creaci&#243;n de servicios de alto rendimiento basados en RPC dentro del ecosistema Spring.</p><p><strong>Impacto pr&#225;ctico:</strong></p><ul><li><p>Configuraci&#243;n m&#225;s sencilla de servicios gRPC.</p></li><li><p>Mejor integraci&#243;n con observabilidad y m&#233;tricas de Spring.</p></li><li><p>Menos c&#243;digo de infraestructura para proyectos distribuidos.</p></li></ul><div><hr></div><h4>Mejoras en la configuraci&#243;n de Jackson</h4><p>Se ampl&#237;an las opciones de configuraci&#243;n y personalizaci&#243;n de Jackson.</p><p><strong>Impacto pr&#225;ctico:</strong></p><ul><li><p>Mayor control sobre serializaci&#243;n y deserializaci&#243;n.</p></li><li><p>Configuraciones m&#225;s consistentes entre entornos.</p></li><li><p>Menor necesidad de personalizaciones manuales mediante beans adicionales.</p></li></ul><div><hr></div><h4>Mitigaci&#243;n de SSRF en clientes HTTP</h4><p>Spring Boot incorpora soporte para <strong>InetAddressFilter</strong>, una nueva medida orientada a reducir riesgos de <strong>Server-Side Request Forgery (SSRF)</strong>.</p><p><strong>Impacto pr&#225;ctico:</strong></p><ul><li><p>Mayor protecci&#243;n frente a accesos no autorizados a recursos internos.</p></li><li><p>Configuraci&#243;n m&#225;s sencilla de pol&#237;ticas de red seguras.</p></li><li><p>Especialmente &#250;til en aplicaciones que consumen URLs proporcionadas por usuarios o sistemas externos.</p></li></ul><div><hr></div><h4>Mejoras de observabilidad</h4><p>Contin&#250;a la apuesta de Spring por la observabilidad moderna con varias actualizaciones relacionadas con <strong>OpenTelemetry</strong>.</p><p><strong>Impacto pr&#225;ctico:</strong></p><ul><li><p>Mejor integraci&#243;n con plataformas de monitorizaci&#243;n.</p></li><li><p>Trazas distribuidas m&#225;s completas.</p></li><li><p>Menor esfuerzo para instrumentar aplicaciones cloud-native.</p></li></ul><div><hr></div><h4>Rotaci&#243;n de ficheros para Log4j</h4><p>Se a&#241;ade soporte mejorado para la gesti&#243;n y rotaci&#243;n de logs utilizando Log4j.</p><p><strong>Impacto pr&#225;ctico:</strong></p><ul><li><p>Gesti&#243;n m&#225;s eficiente de logs en producci&#243;n.</p></li><li><p>Menor riesgo de crecimiento descontrolado de archivos.</p></li><li><p>Configuraci&#243;n m&#225;s alineada con despliegues empresariales.</p></li></ul><h3>Por qu&#233; es importante</h3><p>Spring Boot 4.1.0 no es una release revolucionaria, pero s&#237; una actualizaci&#243;n estrat&#233;gica que refuerza &#225;reas cr&#237;ticas para aplicaciones modernas:</p><ul><li><p>Comunicaci&#243;n entre servicios mediante gRPC.</p></li><li><p>Seguridad frente a SSRF.</p></li><li><p>Observabilidad con OpenTelemetry.</p></li><li><p>Mejor experiencia de configuraci&#243;n.</p></li><li><p>Infraestructura m&#225;s preparada para producci&#243;n.</p></li></ul><p>Si ya est&#225;s en la rama 4.x, esta actualizaci&#243;n merece estar en tu backlog de migraciones de las pr&#243;ximas semanas. Especialmente si est&#225;s construyendo sistemas distribuidos, plataformas basadas en IA o aplicaciones cloud-native donde observabilidad y seguridad ya no son opcionales.</p><div><hr></div><h2>Spring AI 2.0.0-RC1</h2><p>Spring AI entra en una fase m&#225;s madura y, esta vez, el cambio de verdad est&#225; en la arquitectura de ejecuci&#243;n de herramientas. La release <strong>2.0.0-RC1</strong> simplifica el modelo de <em>tool calling</em> y limpia parte del lastre hist&#243;rico de la API. M&#225;s info oficial: <a href="https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now">https://spring.io/blog/2026/06/06/spring-ai-2-0-0-RC1-available-now</a></p><h3>Qu&#233; cambia</h3><ul><li><p>Se unifica la ejecuci&#243;n de herramientas: adi&#243;s a fragmentar la l&#243;gica entre mecanismos distintos.</p></li><li><p>Se elimina <code>internalToolExecutionEnabled</code>.</p></li><li><p>Se eliminan <code>toolNames()</code> y la resoluci&#243;n por nombre.</p></li><li><p>Las herramientas pasan a registrarse como <code>ToolCallback</code> beans.</p></li><li><p>Se inyectan expl&#237;citamente con <code>ChatClient.tools()</code>.</p></li><li><p>Mejora la memoria y la salida estructurada:</p><ul><li><p><em>Snap</em> en l&#237;mites de turnos para evitar cortes a mitad de intercambio.</p></li><li><p>Se reducen duplicados en prompts.</p></li><li><p><code>EntityParamSpec</code> permite afinar la configuraci&#243;n por llamada.</p></li></ul></li><li><p>Limpieza de API y modelo:</p><ul><li><p>Pixtral Large retirado.</p></li><li><p>MiniMax consolidado con Anthropic.</p></li><li><p>Renombres como <code>ToolCallAdvisor</code> &#8594; <code>ToolCallingAdvisor</code>.</p></li></ul></li><li><p>Varios fixes de comportamiento y estabilidad.</p></li></ul><h3>Por qu&#233; importa</h3><p>Esto no es solo un cambio est&#233;tico. El nuevo enfoque reduce ambig&#252;edad, hace el flujo de ejecuci&#243;n m&#225;s predecible y encaja mejor con aplicaciones serias donde el <em>tooling</em> deja de ser demo y pasa a ser infraestructura.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>Menos magia negra en tiempo de ejecuci&#243;n.</p></li><li><p>Menos sorpresas al escalar conversaciones con memoria.</p></li><li><p>M&#225;s facilidad para auditar qu&#233; herramientas se exponen y cu&#225;ndo.</p></li><li><p>Migraci&#243;n recomendable si ya est&#225;s en Spring AI y usas <em>tool calling</em> de forma intensiva.</p></li></ul><h3>Recomendaci&#243;n r&#225;pida</h3><ul><li><p>Actualiza a <strong>2.0.0-RC1</strong>.</p></li><li><p>Migra tu integraci&#243;n a <code>ChatClient</code> + <code>ToolCallingAdvisor</code>.</p></li><li><p>Revisa el changelog completo y valida tus herramientas como <code>ToolCallback</code>.</p></li></ul><div><hr></div><h2>Spring HATEOAS 3.1 GA, 3.0.7 y 2.5.3 &#128274;</h2><p>La familia Spring HATEOAS recibe una actualizaci&#243;n importante con foco en seguridad y robustez. La versi&#243;n <strong>3.1.0 GA</strong> llega junto con <strong>3.0.7</strong> y <strong>2.5.3</strong>. M&#225;s info oficial: <a href="https://spring.io/blog/2026/06/08/spring-hateoas-3-1-GA-2-0-6-and-1-4-11-released">https://spring.io/blog/2026/06/08/spring-hateoas-3-1-GA-2-0-6-and-1-4-11-released</a></p><h3>Qu&#233; incluye</h3><ul><li><p>Dependencias actualizadas.</p></li><li><p>Mejoras en el parsing de enlaces.</p></li><li><p>Correcciones de robustez general.</p></li><li><p>Parches de seguridad cr&#237;ticos:</p><ul><li><p><strong>CVE-2026-41006</strong>: deserializadores Collection+JSON/UBER ignoraban la configuraci&#243;n de Jackson.</p></li><li><p><strong>CVE-2026-41007</strong>: posible agotamiento de heap por una cach&#233; interna sin l&#237;mite.</p></li></ul></li></ul><h3>Por qu&#233; importa</h3><p>HATEOAS suele vivir en capas &#8220;tranquilas&#8221; del stack&#8230; hasta que deja de vivir. Si expones APIs hipermedia, estos parches no son decorativos: son una actualizaci&#243;n obligatoria.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>Menos riesgo en serializaci&#243;n/deserializaci&#243;n.</p></li><li><p>Menor probabilidad de problemas de memoria en escenarios con carga.</p></li><li><p>M&#225;s estabilidad en APIs con enlaces complejos o mucha navegaci&#243;n de recursos.</p></li></ul><h3>Recomendaci&#243;n r&#225;pida</h3><ul><li><p>Actualiza a <code>org.springframework.hateoas:spring-hateoas:3.1.0</code>.</p></li><li><p>Si usas Maven, puedes forzar la versi&#243;n con:</p></li></ul><pre><code><code>./mvnw -Dspring-hateoas.version=3.1.0</code></code></pre><div><hr></div><h2>Spring REST Docs 4.0.1 y 3.0.6 &#129534;</h2><p>Spring REST Docs tambi&#233;n se pone al d&#237;a con dos ramas activas: <strong>4.0.1</strong> y <strong>3.0.6</strong>. M&#225;s info oficial:<br><br><a href="https://spring.io/blog/2026/06/09/spring-restdocs-4">https://spring.io/blog/2026/06/09/spring-restdocs-4</a><br><br><a href="https://spring.io/blog/2026/06/09/spring-restdocs-3">https://spring.io/blog/2026/06/09/spring-restdocs-3</a></p><h3>Qu&#233; trae</h3><ul><li><p><strong>4.0.1</strong><br></p><ul><li><p>10 correcciones.<br></p></li><li><p>Mejoras de documentaci&#243;n.<br></p></li><li><p>Dependencias actualizadas.<br></p></li><li><p>Parche de seguridad para <strong>CVE-2026-40991</strong> (XXE).<br></p></li></ul></li><li><p><strong>3.0.6</strong><br></p><ul><li><p>9 correcciones.<br></p></li><li><p>Mejoras de documentaci&#243;n.<br></p></li><li><p>Dependencias actualizadas.<br></p></li><li><p>Tambi&#233;n incluye el parche de <strong>CVE-2026-40991</strong>.<br></p></li></ul></li></ul><h3>Por qu&#233; importa</h3><p>REST Docs es de esas herramientas que parecen aburridas hasta que tu documentaci&#243;n empieza a mentir. Estas versiones reducen fricci&#243;n y, sobre todo, tapan un agujero de seguridad que no conviene ignorar.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>Documentaci&#243;n m&#225;s consistente.<br></p></li><li><p>Menos ruido en el mantenimiento de snippets.<br></p></li><li><p>M&#225;s seguridad al documentar XML no confiable.<br></p></li><li><p>Actualizaci&#243;n recomendable incluso si no vas justo de tiempo.<br></p></li></ul><h3>Recomendaci&#243;n r&#225;pida</h3><ul><li><p>Rama 4.x:</p></li></ul><pre><code><code>implementation 'org.springframework.restdocs:spring-restdocs-core:4.0.1'</code></code></pre><ul><li><p>Rama 3.x:</p></li></ul><pre><code><code>./mvnw -Dspring-restdocs.version=3.0.6</code></code></pre><div><hr></div><h2>Spring for Apache Pulsar 1.2.18 y 2.0.6 &#128225;</h2><p>Spring for Apache Pulsar recibe una actualizaci&#243;n doble: <strong>1.2.18</strong> y <strong>2.0.6</strong>. M&#225;s info oficial: <a href="https://spring.io/blog/2026/06/10/spring-for-apache-pulsar-1-2-18-and-2-0-6-are-now-available">https://spring.io/blog/2026/06/10/spring-for-apache-pulsar-1-2-18-and-2-0-6-are-now-available</a></p><h3>Qu&#233; cambia</h3><ul><li><p><strong>2.0.6</strong><br></p><ul><li><p>Apache Pulsar Client actualizado a <strong>4.2.1</strong>.<br></p></li><li><p>Bumps de Jackson, Logback, Caffeine y Testcontainers.<br></p></li></ul></li><li><p><strong>1.2.18</strong><br></p><ul><li><p>Actualizaciones de Jackson y Logback.<br></p></li></ul></li><li><p>Seguridad:<br></p><ul><li><p>Parche para <strong>CVE-2026-41732</strong>, donde el <em>header mapper</em> por defecto pod&#237;a deserializar clases maliciosas.<br></p></li></ul></li></ul><h3>Por qu&#233; importa</h3><p>Pulsar es infra, y en infra los problemas peque&#241;os suelen llegar con disfraz de &#8220;solo una actualizaci&#243;n menor&#8221;. Aqu&#237; hay dependencias al d&#237;a y un parche de seguridad que merece atenci&#243;n inmediata.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>Mejor compatibilidad con el ecosistema actual.<br></p></li><li><p>Menos exposici&#243;n a deserializaci&#243;n peligrosa.<br></p></li><li><p>Mejor base para proyectos que combinan mensajer&#237;a, observabilidad y tests de integraci&#243;n.<br></p></li></ul><h3>Recomendaci&#243;n r&#225;pida</h3><ul><li><p>Actualiza a <code>1.2.18</code> o <code>2.0.6</code> seg&#250;n tu rama.<br></p></li><li><p>Si est&#225;s en la l&#237;nea 2.x:</p></li></ul><pre><code><code>./mvnw -Dspring-pulsar.version=2.0.6</code></code></pre><div><hr></div><h2>Spring Modulith 2.1 GA, 2.0.7 y 1.4.12 &#129521;</h2><p>Spring Modulith sube el nivel con <strong>2.1.0 GA</strong>, acompa&#241;ado por <strong>2.0.7</strong> y <strong>1.4.12</strong>. M&#225;s info oficial: <a href="https://spring.io/blog/2026/06/11/spring-modulith-2-1-ga-2-0-7-and-1-4-12-released">https://spring.io/blog/2026/06/11/spring-modulith-2-1-ga-2-0-7-and-1-4-12-released</a></p><h3>Qu&#233; trae</h3><ul><li><p>Outbox de externalizaci&#243;n de eventos con <strong>Namastack</strong> y <strong>JobRunr</strong>.<br></p></li><li><p>Testing de m&#243;dulos compatible con los <em>slice tests</em> de Spring Boot.<br></p></li><li><p><code>PublishedEvents</code> y <code>Scenario</code> ahora ven eventos de todos los hilos.<br></p></li><li><p>Observabilidad m&#225;s simplificada.<br></p></li><li><p>En 2.0.7 y 1.4.12 predominan upgrades de dependencias y fixes menores.<br></p></li></ul><h3>Por qu&#233; importa</h3><p>Modulith sigue siendo una de las formas m&#225;s sensatas de llevar orden al caos sin convertir el proyecto en microservicios por puro deporte. Esta release empuja justo en las piezas que m&#225;s valor aportan: eventos, observabilidad y tests.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>Mejor soporte para arquitecturas modulares reales.<br></p></li><li><p>M&#225;s confianza al testear l&#237;mites de m&#243;dulo.<br></p></li><li><p>Mejor trazabilidad de eventos en flujos concurrentes.<br></p></li><li><p>M&#225;s opciones para sacar eventos fuera del proceso sin improvisar.<br></p></li></ul><h3>Recomendaci&#243;n r&#225;pida</h3><ul><li><p>Si ya trabajas con un monolito modular, esta versi&#243;n merece piloto.<br></p></li><li><p>Actualiza con:</p></li></ul><pre><code><code>./mvnw -Dmodulith.version=2.1.0</code></code></pre><div><hr></div><h2>Quarkus 3.37: Quarkus Data en preview</h2><p>Quarkus sigue apretando el acelerador con <strong>Quarkus 3.37</strong>, donde aparece <strong>Quarkus Data</strong> en preview. M&#225;s info oficial: <a href="https://quarkus.io/blog/quarkus-insights-250-quarkus-data/">https://quarkus.io/blog/quarkus-insights-250-quarkus-data/</a></p><h3>Qu&#233; cambia</h3><ul><li><p>Panache evoluciona hacia <strong>Quarkus Data</strong>.<br></p></li><li><p>Integraci&#243;n con <strong>Jakarta Data</strong>.<br></p></li><li><p>Repositorios con validaci&#243;n de consultas en compilaci&#243;n.<br></p></li><li><p>Unificaci&#243;n de modos:<br></p><ul><li><p>blocking / reactive<br></p></li><li><p>managed / stateless<br></p></li></ul></li><li><p>Se conserva la ergonom&#237;a de Panache, pero con repositorios m&#225;s type-safe.<br></p></li></ul><h3>Por qu&#233; importa</h3><p>Quarkus est&#225; intentando resolver la tensi&#243;n cl&#225;sica entre comodidad y rigor. La idea es simple: seguir escribiendo r&#225;pido, pero con m&#225;s validaci&#243;n en build y menos errores tontos en runtime.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>Mejor feedback temprano en consultas mal definidas.<br></p></li><li><p>Menos dependencia de magia en repositorios.<br></p></li><li><p>M&#225;s alineaci&#243;n con el est&#225;ndar Jakarta Data.<br></p></li><li><p>Muy interesante para equipos que quieren productividad sin renunciar a disciplina.<br></p></li></ul><h3>Aviso</h3><p>Sigue siendo <strong>experimental</strong>, as&#237; que el nombre de paquetes y tipos puede cambiar.</p><div><hr></div><h2>Quarkus 3.35: PGO para binarios nativos</h2><p>La rama <strong>3.35</strong> incorpora soporte para <strong>Profile-Guided Optimization (PGO)</strong> en nativos. M&#225;s info oficial: <a href="https://quarkus.io/blog/quarkus-newsletter-69/">https://quarkus.io/blog/quarkus-newsletter-69/</a></p><h3>Qu&#233; trae</h3><ul><li><p>Puedes activar:</p></li></ul><pre><code><code>quarkus.native.pgo.enabled=true</code></code></pre><ul><li><p>Los tests de integraci&#243;n generan el perfil.<br></p></li><li><p>La build produce un binario nativo optimizado seg&#250;n el comportamiento real.<br></p></li></ul><h3>Por qu&#233; importa</h3><p>Esto ya no va de &#8220;compilar a nativo y rezar&#8221;. PGO hace que la optimizaci&#243;n est&#233; guiada por uso real, no por intuici&#243;n. Y eso, en producci&#243;n, se nota.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>Mejores tiempos de arranque y comportamiento m&#225;s afinado.<br></p></li><li><p>Binarios nativos m&#225;s ajustados a tu carga real.<br></p></li><li><p>Especialmente &#250;til en entornos donde cada milisegundo y cada byte cuentan.<br></p></li></ul><div><hr></div><h2>Quarkus 3.36.2: mantenimiento</h2><p>La versi&#243;n <strong>3.36.2</strong> llega como release de mantenimiento. M&#225;s info oficial: <a href="https://quarkus.io/blog/quarkus-3-36-2-released/">https://quarkus.io/blog/quarkus-3-36-2-released/</a></p><h3>Qu&#233; aporta</h3><ul><li><p>Correcciones menores.<br></p></li><li><p>Ajustes de estabilidad.<br></p></li><li><p>Actualizaciones de la l&#237;nea 3.36.</p></li></ul><div><hr></div><h2>Micronaut 3.8.15: seguridad y control del cliente HTTP</h2><p>Micronaut <strong>3.8.15</strong> llega con una combinaci&#243;n bastante seria de seguridad y mejoras de cliente HTTP. Release oficial en GitHub: <a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v3.8.15">https://github.com/micronaut-projects/micronaut-core/releases/tag/v3.8.15</a></p><h3>Qu&#233; cambia</h3><ul><li><p>Evita reenviar cabeceras sensibles en redirecciones <em>cross-origin</em>.<br></p></li><li><p>A&#241;ade un l&#237;mite configurable de redirecciones en el cliente HTTP.<br></p></li><li><p>Actualizaci&#243;n a <strong>Netty 4.1.135</strong>.<br></p></li><li><p>Peque&#241;as mejoras de rendimiento.<br></p></li></ul><h3>Por qu&#233; importa</h3><p>Las redirecciones mal gestionadas y el reenv&#237;o de cabeceras sensibles son el tipo de detalle que te explota tarde, en producci&#243;n y con un ticket urgente. Esta release ataca justo ah&#237;.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>M&#225;s control sobre clientes HTTP.<br></p></li><li><p>Menor exposici&#243;n de cabeceras en escenarios inseguros.<br></p></li><li><p>Mejor base para servicios que consumen APIs externas.<br></p></li></ul><div><hr></div><h2>Micronaut 5.0.3: fixes, pero importantes</h2><p>Micronaut <strong>5.0.3</strong> afina varias &#225;reas del framework. Release oficial en GitHub: <a href="https://github.com/micronaut-projects/micronaut-core/releases/tag/v5.0.3">https://github.com/micronaut-projects/micronaut-core/releases/tag/v5.0.3</a></p><h3>Qu&#233; corrige</h3><ul><li><p>Validaci&#243;n de <code>RequestBean</code> para propiedades computadas.<br></p></li><li><p>Mejor coincidencia gen&#233;rica para beans interceptados.<br></p></li><li><p>Correcci&#243;n de introspecci&#243;n para m&#233;todos de extensi&#243;n Kotlin.<br></p></li><li><p>Uso correcto de <code>Http2ClientConfiguration.PREFIX</code> en <code>ServiceHttp2ClientConfiguration</code>.<br></p></li><li><p>Otros fixes menores.<br></p></li></ul><h3>Por qu&#233; importa</h3><p>No es una release para presumir en una slide, pero s&#237; para evitar bugs absurdos en validaci&#243;n, proxies e integraci&#243;n con Kotlin.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>Menos sorpresas en apps mixtas Java/Kotlin.<br></p></li><li><p>M&#225;s estabilidad en beans interceptados.<br></p></li><li><p>Mejor comportamiento del cliente HTTP/2.<br></p></li></ul><div><hr></div><h2>A2A Java SDK 1.0.0.Final &#129302;</h2><p>El SDK Java oficial del protocolo <strong>Agent2Agent</strong> ya tiene su primera versi&#243;n final: <strong>1.0.0.Final</strong>. M&#225;s info oficial: <a href="https://quarkus.io/blog/a2a-java-sdk-1-0-0-final-released/">https://quarkus.io/blog/a2a-java-sdk-1-0-0-final-released/</a></p><h3>Qu&#233; incluye</h3><ul><li><p>Soporte para:<br></p><ul><li><p>JSON-RPC<br></p></li><li><p>gRPC<br></p></li><li><p>REST<br></p></li></ul></li><li><p>Integration Test Kit (ITK) para validar interoperabilidad.<br></p></li><li><p>Correcciones de protocolo en SSE, gRPC y JSON-RPC.<br></p></li><li><p><code>AgentEmitter</code>.<br></p></li><li><p>Modelos basados en <code>record</code>.<br></p></li><li><p>OpenTelemetry integrado.<br></p></li><li><p>Compatibilidad con v0.3.<br></p></li><li><p>Cambio de coordenadas Maven a <code>org.a2aproject.sdk</code>.<br></p></li></ul><h3>Por qu&#233; importa</h3><p>Si est&#225;s siguiendo el movimiento de agentes, esta es la parte menos humo y m&#225;s ingenier&#237;a: un SDK oficial, interoperable y con tests para comprobar que no est&#225;s fabricando una demo fr&#225;gil con olor a producci&#243;n.</p><h3>Impacto pr&#225;ctico</h3><ul><li><p>Mejor base para integraciones agent-to-agent reales.<br></p></li><li><p>Menos fricci&#243;n al testear compatibilidad.<br></p></li><li><p>Instrumentaci&#243;n lista para observabilidad seria.</p></li></ul><div><hr></div><h3><strong>&#127757; Comunidad y Ecosistema</strong></h3><p><strong>JNation 2026</strong></p><p>&#128467;&#65039; 26 de mayo de 2026<br>&#128205; Coimbra, Portugal</p><p>Evento para la comunidad Java con charlas t&#233;cnicas sobre desarrollo backend, arquitectura y JVM.</p><p>Web: https://jnation.pt/</p><div><hr></div><p><strong>JCON Slovenia 2026</strong></p><p>&#128467;&#65039; 27 de mayo de 2026<br>&#128205; Portoro&#382;, Eslovenia</p><p>Conferencia local centrada en Java, cloud y desarrollo moderno.</p><p>Web: https://slovenia.jcon.one/</p><div><hr></div><p><strong>JJUG CCC Spring 2026</strong></p><p>&#128467;&#65039; 30 de mayo de 2026<br>&#128205; Tokio, Jap&#243;n</p><p>Evento de la comunidad Java japonesa con charlas t&#233;cnicas y tendencias del ecosistema JVM.</p><p>Web: https://www.java-users.jp/</p><div><hr></div><p><strong>Jprime 2026</strong></p><p>&#128467;&#65039; 3 de junio de 2026<br>&#128205; Sof&#237;a, Bulgaria</p><p>Conferencia sobre Java, arquitectura de software y tecnolog&#237;as relacionadas.</p><p>Web: https://jprime.io/</p><div><hr></div><p><strong>J-Spring 2026</strong></p><p>&#128467;&#65039; 4 de junio de 2026<br>&#128205; Utrecht, Pa&#237;ses Bajos</p><p>Evento centrado en Spring y Java con sesiones pr&#225;cticas y networking.</p><p>Web: https://jspring.nl/</p><div><hr></div><p><strong>JSail Unconference 2026</strong></p><p>&#128467;&#65039; 8 de junio de 2026<br>&#128205; Hemelum, Pa&#237;ses Bajos</p><p>Unconference para desarrolladores Java centrada en intercambio de conocimiento y comunidad.</p><p>Web: https://jsail.ijug.eu/</p><div><hr></div><p><strong>DevBcn 2026</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devbcn.com/2026" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CKYK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Convince Your Boss - DevBcn 2026 | DevBcn&quot;,&quot;title&quot;:&quot;Convince Your Boss - DevBcn 2026 | DevBcn&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.devbcn.com/2026&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Convince Your Boss - DevBcn 2026 | DevBcn" title="Convince Your Boss - DevBcn 2026 | DevBcn" srcset="/__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128467;&#65039; 16 de junio de 2026<br>&#128205; Barcelona, Espa&#241;a</p><p>Conferencia tecnol&#243;gica con foco en Java, cloud, frontend y arquitectura moderna.</p><p>Web: <a href="https://www.devbcn.com/">https://www.devbcn.com/</a></p><div><hr></div><p><strong>Devoxx Poland 2026</strong></p><p>&#128467;&#65039; 17 de junio de 2026<br>&#128205; Cracovia, Polonia</p><p>Gran evento con enfoque en Java, Kotlin y el ecosistema JVM con m&#250;ltiples tracks t&#233;cnicos.</p><p>Web: https://devoxx.pl/</p><div><hr></div><h3><strong>Java Forum Stuttgart</strong></h3><p>&#128467;&#65039; July 9, 2026<br>&#128205; Stuttgart, Germany</p><p>Evento clave del ecosistema Java en Alemania, con foco en charlas t&#233;cnicas, intercambio de experiencias y tendencias del lenguaje, el runtime y el ecosistema alrededor de Spring, cloud y arquitectura moderna. Si trabajas en Java y quieres o&#237;r cosas &#250;tiles en vez de marketing envuelto en humo, este es tu sitio.</p><p>Web: https://www.java-forum-stuttgart.de/</p><div><hr></div><p><strong>JConf Dominicana 2026</strong></p><p>&#128467;&#65039; 17 de julio de 2026<br>&#128205; Santo Domingo, Rep&#250;blica Dominicana<br>Conferencia de Java y tecnolog&#237;a en el Caribe.<br>Web: https://jconfdominicana.org/</p><div><hr></div><p><strong>JCrete 2026</strong></p><p>&#128467;&#65039; 26 de julio de 2026<br>&#128205; Creta, Grecia<br>Conferencia internacional de Java en un entorno colaborativo y relajado.<br>Web: https://www.jcrete.org/</p><div><hr></div><h3><strong>&#128161; Tip de la semana (Java / Spring Boot)</strong></h3><h3><strong>Usa </strong><code>record</code><strong> para DTOs inmutables y reduce el ruido donde no aporta valor</strong></h3><p>Si sigues creando clases con getters, <code>equals</code>, <code>hashCode</code> y <code>toString</code> solo para transportar datos, est&#225;s pagando un impuesto innecesario.</p><p>Con <code>record</code>, Java te da un DTO compacto, legible y dif&#237;cil de romper:</p><pre><code><code>public record UserResponse(Long id, String name, String email) {}
</code></code></pre><blockquote><p><strong>Ventajas pr&#225;cticas:</strong></p></blockquote><ul><li><p>Menos boilerplate</p></li><li><p>Inmutabilidad por defecto</p></li><li><p>Mejor legibilidad en capas de API y mapping</p></li><li><p>Encaja muy bien con Spring Boot en respuestas REST y proyecciones simples</p></li></ul><blockquote><p><strong>Ejemplo de uso en un controller:</strong></p></blockquote><pre><code><code>@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public UserResponse getUser(@PathVariable Long id) {
        return new UserResponse(id, "Ricardo", "ricardo@programandoenjava.com");
    }
}
</code></code></pre><blockquote><p><strong>Cu&#225;ndo no usarlo:</strong></p></blockquote><ul><li><p>Cuando necesitas mutabilidad</p></li><li><p>Cuando el objeto requiere l&#243;gica de dominio compleja</p></li><li><p>Cuando tu framework o librer&#237;a a&#250;n depende de un bean cl&#225;sico con constructor vac&#237;o y setters</p></li></ul><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 1 - Junio 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-79d</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-79d</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 05 Jun 2026 12:02:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!a0Zb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h2>&#128640; Nos vemos en DevBcn 2026</h2><p>Este a&#241;o voy a estar en la pr&#243;xima edici&#243;n de <a href="https://www.devbcn.com/2026">DevBcn 2026</a> y, sinceramente, tiene pintaza. Si trabajas con Java, Cloud, IA, DevOps, Frontend o simplemente quieres rodearte de gente apasionada por la tecnolog&#237;a, es uno de esos eventos que merecen la pena. Adem&#225;s, muchas empresas tienen presupuesto para formaci&#243;n y conferencias, as&#237; que <em>antes de pagar el ticket de tu bolsillo, intenta que te lo cubra la empresa</em> (DevBcn incluso tiene una secci&#243;n de &#8220;<a href="https://www.devbcn.com/2026/convince-your-boss">Convince your Boss</a>&#8221; para ayudarte &#128516;). </p><p>Nos vemos en <strong>Barcelona el 16 y 17 de junio</strong>.</p><h3>&#127873;C&#211;DIGO DE DESCUENTO: <em>YO_PROGRAMO_EN_JAVA</em></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devbcn.com/2026" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!a0Zb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg" width="344" height="531.852534562212" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1342,&quot;width&quot;:868,&quot;resizeWidth&quot;:344,&quot;bytes&quot;:195104,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.devbcn.com/2026&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programandoenjava.substack.com/i/199743124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.devbcn.com/2026&quot;,&quot;text&quot;:&quot;CONOCER M&#193;S SOBRE LA CONFERENCIA&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.devbcn.com/2026"><span>CONOCER M&#193;S SOBRE LA CONFERENCIA</span></a></p><div><hr></div><h2><strong>&#128230; Novedades en librer&#237;as y frameworks</strong></h2><h3><strong>Spring AI 2.0.0-M8</strong></h3><p>La octava milestone de Spring AI 2.0 sigue empujando el stack de IA en Java hacia algo m&#225;s serio y menos &#8220;demo con humo&#8221;.</p><blockquote><p><strong>Qu&#233; trae esta versi&#243;n:</strong></p></blockquote><ul><li><p>Ajustes en <code>MistralAiApi</code> para alinear el mapeo Jackson con los content types definidos en el OpenAPI oficial de Mistral AI.</p></li><li><p>Exposici&#243;n de rate limits devueltos por la API de Anthropic a trav&#233;s de <code>ChatResponseMetadata</code>.</p></li><li><p>Mejoras y correcciones generales sobre el roadmap de Spring AI 2.0.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Si integras varios proveedores de LLM, tener contratos m&#225;s consistentes reduce el coste de mantenimiento.</p></li><li><p>Poder leer l&#237;mites de uso directamente en metadatos del chat ayuda a construir backoff, alertas y control de consumo sin inventarte parsers fr&#225;giles.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Mejor observabilidad de consumo en aplicaciones Spring AI.</p></li><li><p>Integraciones m&#225;s limpias con Mistral y Anthropic.</p></li><li><p>Menos c&#243;digo pegado con cinta adhesiva alrededor de respuestas HTTP.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://spring.io/blog/2026/05/27/spring-ai-2-0-0-M8-available-now">https://spring.io/blog/2026/05/27/spring-ai-2-0-0-M8-available-now</a><br><strong>Release notes:</strong> <a href="https://github.com/spring-projects/spring-ai/releases/tag/v2.0.0-M8">https://github.com/spring-projects/spring-ai/releases/tag/v2.0.0-M8</a></p></blockquote><div><hr></div><h3><strong>Hazelcast Platform 5.7.0</strong></h3><p>Hazelcast llega con una release que va directa a producci&#243;n, no a la diapositiva bonita.</p><blockquote><p><strong>Cambios destacados:</strong></p></blockquote><ul><li><p>Soporte para <strong>JDK 25</strong>.</p></li><li><p><strong>Dynamic diagnostic logging</strong> pasa de beta a GA.</p></li><li><p>Mejoras en <code>mapWithMerging()</code>, <code>mapWithUpdating()</code> y <code>mapWithEntryProcessor()</code> para resolver correctamente clases desde <strong>User Code Namespace</strong> durante la deserializaci&#243;n.</p></li><li><p>M&#233;tricas de backpressure mejoradas en Hazelcast Jet.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>El soporte para JDK 25 reduce fricci&#243;n en upgrades de plataforma.</p></li><li><p>El logging din&#225;mico GA mejora diagn&#243;stico en clusters sin rituales de reinicio.</p></li><li><p>La resoluci&#243;n correcta de clases en UCN es clave si despliegas jobs con c&#243;digo distribuido.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Menos errores raros de deserializaci&#243;n.</p></li><li><p>Mejor trazabilidad en entornos distribuidos.</p></li><li><p>M&#225;s control para pipelines y sistemas en memoria con cargas variables.</p></li></ul><blockquote><p><strong>Enlaces oficiales:</strong><br><a href="https://hazelcast.com/blog/announcing-hazelcast-platform-5-7-release/">https://hazelcast.com/blog/announcing-hazelcast-platform-5-7-release/</a><br><a href="https://docs.hazelcast.com/hazelcast/5.7/release-notes/community">https://docs.hazelcast.com/hazelcast/5.7/release-notes/community</a><br><a href="https://docs.hazelcast.com/hazelcast/5.7/whats-new">https://docs.hazelcast.com/hazelcast/5.7/whats-new</a></p></blockquote><div><hr></div><h3><strong>Quarkus 3.36.0</strong></h3><p>Quarkus sigue afinando su propuesta: rendimiento, extensiones experimentales y menos ceremonia para construir backend moderno.</p><blockquote><p><strong>Novedades relevantes:</strong></p></blockquote><ul><li><p>Nueva extensi&#243;n experimental <strong>Signals</strong>.</p></li><li><p>Soporte para <strong>OIDC SPIFFE JWT tokens</strong> para autenticaci&#243;n de cliente.</p></li><li><p>Correcciones de bugs y upgrades de dependencias.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Signals abre una v&#237;a interesante para interacci&#243;n desacoplada entre componentes.</p></li><li><p>SPIFFE JWT encaja con entornos cloud-native y seguridad de identidad m&#225;s estricta.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>M&#225;s opciones para arquitecturas orientadas a eventos o componentes cooperativos.</p></li><li><p>Mejor encaje en infra moderna con identidad de workload.</p></li><li><p>Buen material si est&#225;s construyendo servicios nativos de contenedor sin querer arrastrar medio planeta.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://quarkus.io/blog/quarkus-3-36-released/">https://quarkus.io/blog/quarkus-3-36-released/</a><br><strong>Release notes:</strong> <a href="https://github.com/quarkusio/quarkus/releases/tag/3.36.0">https://github.com/quarkusio/quarkus/releases/tag/3.36.0</a></p></blockquote><div><hr></div><h3><strong>Hibernate ORM 7.4.0</strong></h3><p>Hibernate sigue haciendo lo suyo: tocar el ORM donde m&#225;s duele y donde m&#225;s valor aporta.</p><blockquote><p><strong>Cambios destacados:</strong></p></blockquote><ul><li><p>Soporte para anotar datos con <code>@Temporal</code> y <code>@Audited</code>.</p></li><li><p>Nuevo valor <code>REFRESH_SESSION</code> en <code>CacheMode</code>.</p></li><li><p>Soporte para <strong>Google Cloud Spanner</strong> en GoogleSQL y PostgreSQL.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Mejor soporte de anotaciones y auditor&#237;a en modelos con requisitos hist&#243;ricos o regulatorios.</p></li><li><p><code>REFRESH_SESSION</code> da m&#225;s control sobre el estado de entidades ya asociadas al persistence context.</p></li><li><p>Spanner abre una v&#237;a interesante para aplicaciones que necesitan escalado global con consistencia fuerte.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Menos dolor en proyectos con modelos legacy.</p></li><li><p>M&#225;s control en escenarios con cach&#233; y sincronizaci&#243;n de estado.</p></li><li><p>Opciones reales para desplegar en infra distribuida de alto nivel.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://in.relation.to/2026/05/26/orm-74/">https://in.relation.to/2026/05/26/orm-74/</a></p></blockquote><div><hr></div><h3><strong>Koog 1.0.0</strong></h3><p>Koog alcanza su primera versi&#243;n estable. Y eso ya no es un experimento simp&#225;tico: ahora es una base m&#225;s seria para agentes IA en Kotlin y Java.</p><p><strong>Qu&#233; aporta la GA:</strong></p><ul><li><p>Convenciones de nombres unificadas para wrappers bloqueantes en Java y Kotlin.</p></li><li><p>Mejor persistencia y rendimiento de memoria en agentes basados en planner.</p></li><li><p>Checkpoint y restore para agentes.</p></li><li><p>Transporte HTTP desacoplado para integrarse mejor con infraestructura existente y distintos clientes HTTP.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Un framework de agentes sin una historia clara de persistencia y transporte acaba siendo una demo con esteroides.</p></li><li><p>La estabilidad 1.0 es una se&#241;al fuerte para adopci&#243;n real en producto.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>M&#225;s facilidad para integrar agentes en servicios Java existentes.</p></li><li><p>Mejor encaje en arquitecturas observables, persistentes y testables.</p></li><li><p>Menos dependencia de decisiones internas del framework.</p></li></ul><blockquote><p><strong>Enlaces oficiales:</strong><br><a href="https://blog.jetbrains.com/ai/2026/05/koog-1-0-is-out-stable-core-better-interop-and-multiplatform-observability/">https://blog.jetbrains.com/ai/2026/05/koog-1-0-is-out-stable-core-better-interop-and-multiplatform-observability/</a><br><a href="https://github.com/JetBrains/koog/releases/tag/1.0.0">https://github.com/JetBrains/koog/releases/tag/1.0.0</a></p></blockquote><div><hr></div><h3><strong>JHipster 9.1.0</strong></h3><p>JHipster sigue afinando su generaci&#243;n de apps enterprise sin pedirte permiso.</p><blockquote><p><strong>Novedades:</strong></p></blockquote><ul><li><p><code>getCurrentUserJWT()</code> ahora puede devolver una instancia de Spring Security <code>Jwt</code>.</p></li><li><p>Los blueprints oficiales generan archivos en <strong>TypeScript</strong> en lugar de JavaScript.</p></li><li><p>Correcci&#243;n de bugs y actualizaci&#243;n de dependencias.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Mejor integraci&#243;n con Spring Security moderno y JWT.</p></li><li><p>TypeScript por defecto mejora consistencia y mantenibilidad en el frontend generado.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Menos pegamento custom al trabajar con autenticaci&#243;n.</p></li><li><p>Menos deuda t&#233;cnica en el front generado.</p></li><li><p>Mejor experiencia si usas JHipster como acelerador de producto y no como juguete de laboratorio.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://github.com/jhipster/generator-jhipster/releases/tag/v9.1.0">https://github.com/jhipster/generator-jhipster/releases/tag/v9.1.0</a></p></blockquote><div><hr></div><h3><strong>Endive</strong></h3><p>No es un framework cl&#225;sico, pero merece foco: <strong>Endive</strong> aparece como un runtime Wasm nativo para JVM.</p><blockquote><p><strong>Qu&#233; es</strong></p></blockquote><ul><li><p>Un runtime WebAssembly para JVM.</p></li><li><p>Dise&#241;ado para ejecutar Wasm <strong>sin JNI</strong>, <strong>sin librer&#237;as nativas</strong> y <strong>sin binarios espec&#237;ficos por plataforma</strong>.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Menos dependencia de c&#243;digo nativo.</p></li><li><p>M&#225;s portabilidad.</p></li><li><p>Una direcci&#243;n interesante si quieres ejecutar componentes Wasm dentro del ecosistema JVM sin abrir la caja de Pandora del native interop.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Puede ser relevante para plataformas plugin-based, sandboxing o ejecuci&#243;n aislada de componentes.</p></li><li><p>A&#250;n no es una release formal, pero el mensaje es claro: Wasm en Java ya no es una curiosidad.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://bytecodealliance.org/articles/endive-and-the-next-chapter-of-webassembly-on-the-jvm">https://bytecodealliance.org/articles/endive-and-the-next-chapter-of-webassembly-on-the-jvm</a><br><strong>Proyecto:</strong> </p><p>https://endive.run/</p></blockquote><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><h3><strong>JDK 27 &#8212; Build 24 de early-access</strong></h3><p>La rama de JDK 27 sigue avanzando con el <strong>Build 24</strong> de sus builds de acceso anticipado.</p><blockquote><p><strong>Detalles relevantes:</strong></p></blockquote><ul><li><p>Publicado como <strong>JDK 27+24</strong>.</p></li><li><p>Incluye correcciones respecto al build anterior.</p></li><li><p>Notas de release actualizadas para seguimiento del progreso.</p></li></ul><blockquote><p><strong>Impacto</strong></p></blockquote><ul><li><p>Si est&#225;s testeando compatibilidad temprana, este build sirve para validar regresiones en compilaci&#243;n, runtime y librer&#237;as.</p></li><li><p>Los equipos que mantienen frameworks o tooling deber&#237;an seguirlo de cerca; el coste de ignorar EA builds suele cobrarse m&#225;s tarde.</p></li></ul><blockquote><p><strong>Enlaces oficiales:</strong><br><a href="https://jdk.java.net/27/">https://jdk.java.net/27/</a><br><a href="https://github.com/openjdk/jdk/releases/tag/jdk-27%2B24">https://github.com/openjdk/jdk/releases/tag/jdk-27%2B24</a><br><a href="https://jdk.java.net/27/release-notes">https://jdk.java.net/27/release-notes</a></p></blockquote><div><hr></div><h3><strong>JEP 536 &#8212; JFR In-Process Data Redaction</strong></h3><p>Esta JEP sube a <strong>Targeted</strong> para JDK 27.</p><blockquote><p><strong>Qu&#233; introduce</strong></p></blockquote><ul><li><p>Redacci&#243;n de informaci&#243;n sensible dentro de <strong>Java Flight Recorder</strong> antes de que el recording se complete.</p></li><li><p>Aplica a datos como:</p><ul><li><p>argumentos de l&#237;nea de comandos</p></li><li><p>valores iniciales de variables de entorno</p></li><li><p>propiedades del sistema</p></li></ul></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>JFR es potent&#237;simo, pero tambi&#233;n puede convertirse en una fuente accidental de fuga de secretos.</p></li><li><p>Esta mejora ataca un problema muy real: observabilidad sin abrir la puerta a credenciales.</p></li></ul><blockquote><p><strong>Impacto en proyectos existentes</strong></p></blockquote><ul><li><p>Menos riesgo de exponer informaci&#243;n sensible en trazas de diagn&#243;stico.</p></li><li><p>Mejor encaje en entornos regulados o con requisitos de seguridad altos.</p></li><li><p>Los equipos de SRE y plataforma van a respirar un poco mejor.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/536">https://openjdk.org/jeps/536</a></p></blockquote><div><hr></div><h3><strong>JEP 538 &#8212; PEM Encodings of Cryptographic Objects</strong></h3><p>La JEP 538 permanece en <strong>Proposed to Target</strong> para JDK 27 y cambia a <strong>third preview</strong>.</p><blockquote><p><strong>Qu&#233; resuelve</strong></p></blockquote><ul><li><p>Permite codificar y decodificar objetos criptogr&#225;ficos en formato <strong>PEM</strong>.</p></li><li><p>Abarca claves, certificados y CRLs.</p></li><li><p>Soporta conversiones entre texto PEM y formatos binarios como:</p><ul><li><p>PKCS #8</p></li><li><p>X.509</p></li></ul></li></ul><blockquote><p><strong>Cambios destacados</strong></p></blockquote><ul><li><p>La clase <code>PEM</code> pasa de <code>record</code> a clase regular para facilitar constructores con contenido Base64 en byte arrays.</p></li><li><p><code>DEREncodable</code> se renombra a <code>BinaryEncodable</code> para describir mejor el contenido.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Simplifica el trabajo con material criptogr&#225;fico en Java.</p></li><li><p>Reduce fricci&#243;n con herramientas y formatos que ya viven en PEM desde hace d&#233;cadas.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Mejor interoperabilidad en sistemas de certificados, autenticaci&#243;n mutua y gesti&#243;n de claves.</p></li><li><p>Menos necesidad de librer&#237;as externas para tareas comunes de encoding.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/538">https://openjdk.org/jeps/538</a></p></blockquote><div><hr></div><h3><strong>JEP 528 &#8212; Post-Mortem Crash Analysis with jcmd</strong></h3><p>La JEP 528 vuelve a <strong>Candidate</strong> con objetivo en <strong>JDK 28</strong>.</p><blockquote><p><strong>Qu&#233; propone</strong></p></blockquote><ul><li><p>Extender <code>jcmd</code> para diagnosticar JVM tras un crash.</p></li><li><p>La intenci&#243;n es desplazar parte de esta funcionalidad desde <code>jhsdb</code> o Serviceability Agent hacia una herramienta m&#225;s unificada.</p></li></ul><blockquote><p><strong>Por qu&#233; importa</strong></p></blockquote><ul><li><p>Centraliza diagnosis y reduce el salto entre herramientas.</p></li><li><p>M&#225;s coherencia operativa para equipos de producci&#243;n.</p></li></ul><blockquote><p><strong>Impacto pr&#225;ctico</strong></p></blockquote><ul><li><p>Menos dispersi&#243;n de tooling para an&#225;lisis post-mortem.</p></li><li><p>Posible simplificaci&#243;n de scripts y procedimientos de soporte.</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/528">https://openjdk.org/jeps/528</a></p></blockquote><div><hr></div><h3><strong>&#127757; Comunidad y Ecosistema</strong></h3><p><strong>JNation 2026</strong></p><p>&#128467;&#65039; 26 de mayo de 2026<br>&#128205; Coimbra, Portugal</p><p>Evento para la comunidad Java con charlas t&#233;cnicas sobre desarrollo backend, arquitectura y JVM.</p><p>Web: https://jnation.pt/</p><div><hr></div><p><strong>JCON Slovenia 2026</strong></p><p>&#128467;&#65039; 27 de mayo de 2026<br>&#128205; Portoro&#382;, Eslovenia</p><p>Conferencia local centrada en Java, cloud y desarrollo moderno.</p><p>Web: https://slovenia.jcon.one/</p><div><hr></div><p><strong>JJUG CCC Spring 2026</strong></p><p>&#128467;&#65039; 30 de mayo de 2026<br>&#128205; Tokio, Jap&#243;n</p><p>Evento de la comunidad Java japonesa con charlas t&#233;cnicas y tendencias del ecosistema JVM.</p><p>Web: https://www.java-users.jp/</p><div><hr></div><p><strong>Jprime 2026</strong></p><p>&#128467;&#65039; 3 de junio de 2026<br>&#128205; Sof&#237;a, Bulgaria</p><p>Conferencia sobre Java, arquitectura de software y tecnolog&#237;as relacionadas.</p><p>Web: https://jprime.io/</p><div><hr></div><p><strong>J-Spring 2026</strong></p><p>&#128467;&#65039; 4 de junio de 2026<br>&#128205; Utrecht, Pa&#237;ses Bajos</p><p>Evento centrado en Spring y Java con sesiones pr&#225;cticas y networking.</p><p>Web: https://jspring.nl/</p><div><hr></div><p><strong>JSail Unconference 2026</strong></p><p>&#128467;&#65039; 8 de junio de 2026<br>&#128205; Hemelum, Pa&#237;ses Bajos</p><p>Unconference para desarrolladores Java centrada en intercambio de conocimiento y comunidad.</p><p>Web: https://jsail.ijug.eu/</p><div><hr></div><p><strong>DevBcn 2026</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devbcn.com/2026" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CKYK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Convince Your Boss - DevBcn 2026 | DevBcn&quot;,&quot;title&quot;:&quot;Convince Your Boss - DevBcn 2026 | DevBcn&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.devbcn.com/2026&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Convince Your Boss - DevBcn 2026 | DevBcn" title="Convince Your Boss - DevBcn 2026 | DevBcn" srcset="/__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128467;&#65039; 16 de junio de 2026<br>&#128205; Barcelona, Espa&#241;a</p><p>Conferencia tecnol&#243;gica con foco en Java, cloud, frontend y arquitectura moderna.</p><p>Web: <a href="https://www.devbcn.com/">https://www.devbcn.com/</a></p><div><hr></div><p><strong>Devoxx Poland 2026</strong></p><p>&#128467;&#65039; 17 de junio de 2026<br>&#128205; Cracovia, Polonia</p><p>Gran evento con enfoque en Java, Kotlin y el ecosistema JVM con m&#250;ltiples tracks t&#233;cnicos.</p><p>Web: https://devoxx.pl/</p><div><hr></div><h3><strong>Java Forum Stuttgart</strong></h3><p>&#128467;&#65039; July 9, 2026<br>&#128205; Stuttgart, Germany</p><p>Evento clave del ecosistema Java en Alemania, con foco en charlas t&#233;cnicas, intercambio de experiencias y tendencias del lenguaje, el runtime y el ecosistema alrededor de Spring, cloud y arquitectura moderna. Si trabajas en Java y quieres o&#237;r cosas &#250;tiles en vez de marketing envuelto en humo, este es tu sitio.</p><p>Web: https://www.java-forum-stuttgart.de/</p><div><hr></div><p><strong>JConf Dominicana 2026</strong></p><p>&#128467;&#65039; 17 de julio de 2026<br>&#128205; Santo Domingo, Rep&#250;blica Dominicana<br>Conferencia de Java y tecnolog&#237;a en el Caribe.<br>Web: https://jconfdominicana.org/</p><div><hr></div><p><strong>JCrete 2026</strong></p><p>&#128467;&#65039; 26 de julio de 2026<br>&#128205; Creta, Grecia<br>Conferencia internacional de Java en un entorno colaborativo y relajado.<br>Web: https://www.jcrete.org/</p><div><hr></div><h3><strong>&#128161; Tip de la semana</strong></h3><h3><strong>Usa </strong><code>CacheMode.REFRESH_SESSION</code><strong> cuando el estado en sesi&#243;n ya no sea confiable</strong></h3><p>Si una entidad ya est&#225; asociada al persistence context y quieres forzar refresco sin desmontar todo el contexto, <code>REFRESH_SESSION</code> puede evitar inconsistencias sutiles.</p><pre><code><code>List&lt;Order&gt; orders = entityManager.createQuery(
        "select o from Order o where o.status = :status", Order.class)
    .setParameter("status", OrderStatus.PENDING)
    .setHint("org.hibernate.cacheMode", CacheMode.REFRESH_SESSION)
    .getResultList();
</code></code></pre><blockquote><p><strong>Cu&#225;ndo te salva</strong></p></blockquote><ul><li><p>Cuando el estado cacheado qued&#243; viejo.</p></li><li><p>Cuando hay procesos externos actualizando la misma entidad.</p></li><li><p>Cuando necesitas coherencia puntual sin resetear toda la sesi&#243;n.</p></li></ul><p><strong>La idea brutalmente simple:</strong> no invalides m&#225;s de lo necesario. En Hibernate, a veces el problema no es leer menos, sino refrescar justo donde toca.</p><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[🚨En 1 hora cierra todo]]></title><description><![CDATA[(caduca a las 23:59h)]]></description><link>https://programandoenjava.substack.com/p/en-1-hora-cierra-todo</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/en-1-hora-cierra-todo</guid><pubDate>Sun, 31 May 2026 20:59:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aw_2!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F806d6e06-6de7-45f4-9c69-66e050a6f24b_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hola,</p><p>En menos de <strong>1 hora</strong>:</p><ul><li><p>&#10060; Caduca el cup&#243;n <strong>BOOTCAMP25</strong></p></li><li><p>&#10060; Cierran las <strong>inscripciones</strong></p></li><li><p>&#9989; El <strong>lunes empieza el bootcamp</strong></p></li></ul><p><strong>Si ibas a hacerlo, es ahora.</strong></p><blockquote><p>&#127903;&#65039; Cup&#243;n: <strong>BOOTCAMP25</strong></p></blockquote><h3><strong>&#128680;&#218;LTIMA OPORTUNIDAD</strong></h3><p>&#128073; <a href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=listmonk@TrackLink">https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack&quot;,&quot;text&quot;:&quot;&#127873;APLICAR 25%DESCUENTO&#127873;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack"><span>&#127873;APLICAR 25%DESCUENTO&#127873;</span></a></p><p>Ricardo</p>]]></content:encoded></item><item><title><![CDATA[⏰Quedan 6 horas (y el cupón sigue activo)]]></title><description><![CDATA[(caduca a las 23:59h)]]></description><link>https://programandoenjava.substack.com/p/quedan-6-horas-y-el-cupon-sigue-activo</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/quedan-6-horas-y-el-cupon-sigue-activo</guid><pubDate>Sun, 31 May 2026 16:01:14 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aw_2!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F806d6e06-6de7-45f4-9c69-66e050a6f24b_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hola,</p><p>Son las 18:00h.</p><p><strong>El cup&#243;n BOOTCAMP25 sigue activo. Quedan 6 horas.</strong></p><p>Si llevas d&#237;as pens&#225;ndolo y a&#250;n no has dado el paso, quiero recordarte una cosa:</p><p><strong>Tenemos garant&#237;a de 14 d&#237;as.</strong></p><ul><li><p>Entras hoy <strong>con el 25% de descuento</strong></p></li><li><p>Asistes a las primeras sesiones</p></li><li><p>Hablas con Ricardo y Jordy directamente</p></li><li><p>Si en esos <strong>14 d&#237;as </strong>no ves que esto va a cambiar tu forma de dise&#241;ar sistemas, te devolvemos <strong>todo el dinero, sin preguntas</strong></p></li></ul><p><strong>Con el cup&#243;n de hoy y la garant&#237;a de 14 d&#237;as, el riesgo es cero.</strong></p><div><hr></div><blockquote><p>&#127903;&#65039; Cup&#243;n: <strong>BOOTCAMP25</strong></p></blockquote><p><strong>&#9200; Oferta disponible hasta el 31 de mayo de 2026 a las 23:59h</strong></p><p>&#128073; <a href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=listmonk@TrackLink">https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack&quot;,&quot;text&quot;:&quot;&#127873;APLICAR 25%DESCUENTO&#127873;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack"><span>&#127873;APLICAR 25%DESCUENTO&#127873;</span></a></p><p>Ricardo</p>]]></content:encoded></item><item><title><![CDATA[⏳Quedan 12 horas para entrar con un 25% de descuento]]></title><description><![CDATA[(caduca a las 23:59h)]]></description><link>https://programandoenjava.substack.com/p/quedan-12-horas-para-entrar-con-un</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/quedan-12-horas-para-entrar-con-un</guid><pubDate>Sun, 31 May 2026 10:00:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aw_2!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F806d6e06-6de7-45f4-9c69-66e050a6f24b_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hola,</p><p><strong>A las 23:59h de hoy cierran las inscripciones al bootcamp.</strong></p><p>Y el cup&#243;n <strong>BOOTCAMP25</strong> &#8212;que te da un <strong>25% de descuento</strong>&#8212; caduca con ellas.</p><p>Si llevas d&#237;as pensando si es el momento, quiero ser directo:</p><p><strong>No va a haber mejor momento que hoy.</strong></p><ul><li><p>El precio <strong>m&#225;s bajo posible</strong> gracias al cup&#243;n</p></li><li><p>La <strong>garant&#237;a de 14 d&#237;as</strong> elimina cualquier riesgo</p></li><li><p>El bootcamp <strong>empieza ma&#241;ana lunes 1 de junio</strong></p></li></ul><div><hr></div><p>S&#233; que 997&#8364; es una decisi&#243;n importante.</p><p>Pero pi&#233;nsalo as&#237;: entras hoy, asistes a las primeras sesiones, hablas con Ricardo y Jordy, ves el material con tus propios ojos.</p><p><strong>Si en 14 d&#237;as no ves que esto va a cambiar tu carrera, te devolvemos todo el dinero. Sin preguntas.</strong></p><p>Con el descuento de hoy y la garant&#237;a, <strong>el riesgo real es cero.</strong></p><div><hr></div><blockquote><p>&#127903;&#65039; Cup&#243;n: <strong>BOOTCAMP25</strong></p></blockquote><p><strong>&#9200; Oferta disponible hasta el 31 de mayo de 2026 a las 23:59h</strong></p><p>&#128073; <a href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=listmonk@TrackLink">https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack&quot;,&quot;text&quot;:&quot;&#127873;APLICAR 25%DESCUENTO&#127873;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack"><span>&#127873;APLICAR 25%DESCUENTO&#127873;</span></a></p><p>Ricardo</p>]]></content:encoded></item><item><title><![CDATA[🎁Solo hoy: 25% de descuento en el bootcamp]]></title><description><![CDATA[(caduca a las 23:59h)]]></description><link>https://programandoenjava.substack.com/p/solo-hoy-25-de-descuento-en-el-bootcamp</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/solo-hoy-25-de-descuento-en-el-bootcamp</guid><pubDate>Sun, 31 May 2026 07:01:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aw_2!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F806d6e06-6de7-45f4-9c69-66e050a6f24b_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hola,</p><p><strong>Hoy es el &#250;ltimo d&#237;a</strong> para unirte al bootcamp Arquitecto Java &amp; Spring Boot 2&#170; edici&#243;n.</p><p>Y quiero darte un empuj&#243;n final.</p><p><strong>Solo hoy, domingo 31 de mayo, tienes un 25% de descuento en cualquier tramo del bootcamp.</strong></p><blockquote><p>&#127903;&#65039; Cup&#243;n: <strong>BOOTCAMP25</strong></p><p>&#9200; V&#225;lido hasta las <strong>23:59h de hoy</strong></p></blockquote><p>&#128073; <strong>Apl&#237;calo aqu&#237;: <a href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack">https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata</a></strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack&quot;,&quot;text&quot;:&quot;&#127873;APLICAR 25%DESCUENTO&#127873;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack"><span>&#127873;APLICAR 25%DESCUENTO&#127873;</span></a></p><div><hr></div><p>Si viste la masterclass del martes y algo reson&#243; contigo, ya sabes lo que ense&#241;amos y c&#243;mo lo hacemos.</p><p>El bootcamp es exactamente eso, pero durante <strong>3 meses</strong>, con tu propio c&#243;digo, con feedback directo de Ricardo y Jordy.</p><div><hr></div><p><strong>Esto es lo que incluye:</strong></p><p>&#9989; Clases en vivo <strong>L-M-X 19:00-21:00h</strong> (grabadas si no puedes asistir)</p><p>&#9989; <strong>Mentor&#237;a 1:1</strong> personalizada</p><p>&#9989; <strong>Revisi&#243;n de tu c&#243;digo</strong> por Ricardo y Jordy</p><p>&#9989; <strong>Proyecto final</strong> para tu portfolio</p><p>&#9989; Certificado oficial</p><p>&#9989; Grupo <strong>WhatsApp VIP</strong> post-bootcamp</p><p>&#9989; <strong>1 a&#241;o de acceso</strong> a la plataforma CodeJa</p><p>&#9989; <strong>Garant&#237;a 14 d&#237;as</strong> sin riesgo</p><div><hr></div><blockquote><p>&#127903;&#65039; Cup&#243;n: <strong>BOOTCAMP25</strong></p><p>&#9200; Solo hoy hasta las <strong>23:59h</strong></p></blockquote><p>&#128073; <a href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack">https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack&quot;,&quot;text&quot;:&quot;&#8252;&#65039;APLICAR DESCUENTO&#8252;&#65039;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales#matriculamdata?utm_source=substack"><span>&#8252;&#65039;APLICAR DESCUENTO&#8252;&#65039;</span></a></p><p>Si tienes alguna duda antes de decidir, responde este email ahora. <strong>Estoy aqu&#237; todo el d&#237;a.</strong></p><p>Ricardo</p>]]></content:encoded></item><item><title><![CDATA[👀Mañana es el último día]]></title><description><![CDATA[Hola &#128075;,]]></description><link>https://programandoenjava.substack.com/p/manana-es-el-ultimo-dia</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/manana-es-el-ultimo-dia</guid><pubDate>Sat, 30 May 2026 13:24:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aw_2!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F806d6e06-6de7-45f4-9c69-66e050a6f24b_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hola &#128075;,</p><p><strong>Ma&#241;ana</strong> domingo 31 de mayo a las <strong>23:59h</strong> cierran las <strong>inscripciones</strong>.</p><p>El lunes 1 de junio empieza el bootcamp con los alumnos que hayan entrado.</p><div><hr></div><p>Si llevas d&#237;as pens&#225;ndolo y no terminas de decidir, quiero darte un <strong>dato</strong> que quiz&#225;s resuelve tu duda:</p><p><strong>Tenemos garant&#237;a de 14 d&#237;as.</strong></p><p><strong>Entras</strong>. Asistes a las <strong>primeras</strong> <strong>sesiones</strong>. Hablas con Ricardo y Jordy. Ves el <strong>material</strong>. Hablas con los otros <strong>alumnos</strong>.</p><p>Si en esos 14 d&#237;as no ves que esto va a cambiar tu forma de dise&#241;ar sistemas, <strong>te devolvemos todo el dinero</strong>. Sin preguntas. Sin tr&#225;mites.</p><p>No tienes nada que perder prob&#225;ndolo.</p><div><hr></div><p><a href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales">https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales&quot;,&quot;text&quot;:&quot;&#128073;CONVERTIRSE EN ARQUITECTO&#128072;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales"><span>&#128073;CONVERTIRSE EN ARQUITECTO&#128072;</span></a></p><p>Ma&#241;ana cierra.</p><p>Si tienes alguna duda antes de decidir, responde este email hoy. Estoy pendiente.</p><p>Ricardo</p>]]></content:encoded></item><item><title><![CDATA[Newsletter Java: Novedades de la Semana 5 - Mayo 2026]]></title><description><![CDATA[Tu newsletter semanal de Programando En Java]]></description><link>https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-962</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/newsletter-java-novedades-de-la-semana-962</guid><dc:creator><![CDATA[Programando En Java]]></dc:creator><pubDate>Fri, 29 May 2026 14:02:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!k52o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#161;Bienvenido a tu dosis semanal de alto octanaje en el ecosistema Java!</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Todo listo para que sigas subiendo de nivel en Java. &#161;Vamos al l&#237;o! &#9749;&#128187;</p><h3>Redes Sociales</h3><ul><li><p>&#128216; <strong>Facebook</strong>: <em><a href="https://www.facebook.com/people/Programando-en-JAVA/61552087284236/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en JAVA</a></em></p></li><li><p>&#128038; <strong>X (Twitter)</strong>: <em><a href="https://x.com/ProgEnJava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">ProgEnJava</a></em></p></li><li><p>&#128248; <strong>Instagram</strong>: <em><a href="https://www.instagram.com/programandoenjava/?utm_source=programandoenjava&amp;utm_medium=newsletter">Programando en Java</a></em></p></li><li><p>&#128188; <strong>LinkedIn</strong>: <em><a href="https://www.linkedin.com/in/ricardo-romero-ben%C3%ADtez-b4a4048a/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Ricardo Romero Ben&#237;tez</a></em></p></li><li><p>&#9654;&#65039; <strong>YouTube</strong>: <em><a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#127925; <strong>TikTok</strong>: <em><a href="https://www.tiktok.com/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#129525; <strong>Threads</strong>: <em><a href="https://www.threads.net/@programandoenjava?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Programando en Java</a></em></p></li><li><p>&#128172; <strong>Discord</strong>: <em><a href="https://discord.gg/K3CeetMx2r?utm_source=programandoenjava&amp;utm_medium=newsletter&amp;utm_campaign=newsletter-java-novedades-de-la-semana-5-mayo-2025">Comunidad de Programando en JAVA</a></em></p></li></ul><div><hr></div><h2>&#128640; CONVIERTETE en Arquitecto con JAVA y Spring Boot</h2><p>Tras el &#233;xito de la primera edici&#243;n del <strong>Bootcamp Arquitecto con Java y Spring Boot</strong>, estoy feliz de anunciar la segunda edici&#243;n que comenzar&#225; este <strong>1 de Junio</strong>, prep&#225;rate porque juntos estamos preparando para que aprendas que significa realmente ser arquitecto con java.</p><p>Adem&#225;s, en esta edici&#243;n se incorpora <strong>Jordy Rodr&#237;guez</strong>, del canal de YouTube</p><p><a href="https://www.youtube.com/@4SoftwareDevelopers">4SoftwareDevelopers</a>, codirigiendo el programa junto a <strong>Ricardo Romero </strong>de <a href="https://www.youtube.com/channel/UC9NOIj8jphmaPLEa2ufG_hA/">Programando en Java</a>.</p><p>No te lo pierdas y inscr&#237;bete &#128680; <strong>ANTES DEL 31 DE MAYO (DOMINGO), PLAZAS LIMITADAS!!</strong> &#128071;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!k52o!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!k52o!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!k52o!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!k52o!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!k52o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1714581,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programandoenjava.substack.com/i/199743124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!k52o!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png 424w, /__u/substackcdn.com/image/fetch/$s_!k52o!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png 848w, /__u/substackcdn.com/image/fetch/$s_!k52o!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png 1272w, /__u/substackcdn.com/image/fetch/$s_!k52o!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb03fbd5-53fa-46f9-9172-083d6f49f519_1672x941.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales&quot;,&quot;text&quot;:&quot;&#128073; OBTENER M&#193;S INFORMACI&#211;N&#128072;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales"><span>&#128073; OBTENER M&#193;S INFORMACI&#211;N&#128072;</span></a></p><div><hr></div><h2>&#128640; Nos vemos en DevBcn 2026</h2><p>Este a&#241;o voy a estar en la pr&#243;xima edici&#243;n de <a href="https://www.devbcn.com/2026">DevBcn 2026</a> y, sinceramente, tiene pintaza. Si trabajas con Java, Cloud, IA, DevOps, Frontend o simplemente quieres rodearte de gente apasionada por la tecnolog&#237;a, es uno de esos eventos que merecen la pena. Adem&#225;s, muchas empresas tienen presupuesto para formaci&#243;n y conferencias, as&#237; que <em>antes de pagar el ticket de tu bolsillo, intenta que te lo cubra la empresa</em> (DevBcn incluso tiene una secci&#243;n de &#8220;<a href="https://www.devbcn.com/2026/convince-your-boss">Convince your Boss</a>&#8221; para ayudarte &#128516;). </p><p>Nos vemos en <strong>Barcelona el 16 y 17 de junio</strong>.</p><h3>&#127873;C&#211;DIGO DE DESCUENTO: <em>YO_PROGRAMO_EN_JAVA</em></h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devbcn.com/2026" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!a0Zb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg" width="344" height="531.852534562212" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1342,&quot;width&quot;:868,&quot;resizeWidth&quot;:344,&quot;bytes&quot;:195104,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://www.devbcn.com/2026&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://programandoenjava.substack.com/i/199743124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!a0Zb!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f00c05-c43f-4d5f-9b1a-be33edf2de48_868x1342.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.devbcn.com/2026&quot;,&quot;text&quot;:&quot;CONOCER M&#193;S SOBRE LA CONFERENCIA&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.devbcn.com/2026"><span>CONOCER M&#193;S SOBRE LA CONFERENCIA</span></a></p><div><hr></div><h2><strong>&#9749; Actualizaciones del JDK</strong></h2><h3><strong>JDK 27 &#8212; calendario de release ya cerrado</strong></h3><p>El calendario de <strong>JDK 27</strong> fue aprobado y ya tiene fechas clave. La l&#237;nea temporal importa porque el feature freeze est&#225; cerca y la pel&#237;cula empieza a definirse de verdad.</p><blockquote><p><strong>Fechas clave</strong></p></blockquote><ul><li><p><strong>Rampdown Phase One:</strong> 4 junio 2026</p></li><li><p><strong>Rampdown Phase Two:</strong> 16 julio 2026</p></li><li><p><strong>Initial Release Candidate:</strong> 6 agosto 2026</p></li><li><p><strong>Final Release Candidate:</strong> 20 agosto 2026</p></li><li><p><strong>GA:</strong> 14 septiembre 2026</p></li></ul><blockquote><p><strong>Estado del feature set</strong> Ya hay <strong>10 JEPs</strong> en el set de caracter&#237;sticas de JDK 27:</p></blockquote><ul><li><p>JEP 523: Make G1 the Default Garbage Collector in All Environments<br><a href="https://openjdk.org/jeps/523">https://openjdk.org/jeps/523</a></p></li><li><p>JEP 527: Post-Quantum Hybrid Key Exchange for TLS 1.3<br><a href="https://openjdk.org/jeps/527">https://openjdk.org/jeps/527</a></p></li><li><p>JEP 528: Post-Mortem Crash Analysis with jcmd<br><a href="https://openjdk.org/jeps/528">https://openjdk.org/jeps/528</a></p></li><li><p>JEP 531: Lazy Constants (Third Preview)<br><a href="https://openjdk.org/jeps/531">https://openjdk.org/jeps/531</a></p></li><li><p>JEP 532: Primitive Types in Patterns, instanceof, and switch (Fifth Preview)<br><a href="https://openjdk.org/jeps/532">https://openjdk.org/jeps/532</a></p></li><li><p>JEP 533: Structured Concurrency (Seventh Preview)<br><a href="https://openjdk.org/jeps/533">https://openjdk.org/jeps/533</a></p></li><li><p>JEP 534: Compact Object Headers by Default<br><a href="https://openjdk.org/jeps/534">https://openjdk.org/jeps/534</a></p></li><li><p>JEP 536: JFR In-Process Data Redaction<br><a href="https://openjdk.org/jeps/536">https://openjdk.org/jeps/536</a></p></li><li><p>JEP 537: Vector API (Twelfth Incubator)<br><a href="https://openjdk.org/jeps/537">https://openjdk.org/jeps/537</a></p></li><li><p>JEP 538: PEM Encodings of Cryptographic Objects<br><a href="https://openjdk.org/jeps/538">https://openjdk.org/jeps/538</a></p></li></ul><blockquote><p><strong>Impacto para proyectos existentes</strong></p></blockquote><ul><li><p>JDK 27 va a ser una release de consolidaci&#243;n con cambios de plataforma que s&#237; pueden sentirse en memoria, GC, observabilidad y seguridad</p></li><li><p>Si est&#225;s planificando upgrades, este es el momento de revisar compatibilidad con previews/incubators y decisiones operativas de JVM</p></li><li><p>El runtime se pone m&#225;s serio, m&#225;s predecible y algo menos indulgente con configuraciones heredadas</p></li></ul><blockquote><p><strong>Fuente oficial:</strong> <a href="https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/XSC4BBCVZFNYBTCH6V2DB23JWH2YRUNV/">https://mail.openjdk.org/archives/list/jdk-dev@openjdk.org/thread/XSC4BBCVZFNYBTCH6V2DB23JWH2YRUNV/</a></p></blockquote><div><hr></div><h2><strong>&#129514; Nuevas JEPs o Propuestas del Ecosistema Java</strong></h2><h3><strong>JEP 538 &#8212; PEM Encodings of Cryptographic Objects</strong></h3><p>Esta JEP propone <strong>finalizar</strong> el soporte para codificar y decodificar objetos criptogr&#225;ficos en formato <strong>PEM</strong>. No es una feature decorativa: es una pieza muy pr&#225;ctica para el mundo real de certificados, claves y CRLs.</p><blockquote><p><strong>Prop&#243;sito</strong></p></blockquote><ul><li><p>A&#241;adir una API para convertir objetos criptogr&#225;ficos a formato PEM y &#1086;&#1073;&#1088;&#1072;&#1090;&#1085;&#1086; a objetos Java</p></li><li><p>Soportar conversi&#243;n entre texto PEM y formatos binarios como <strong>PKCS #8</strong> y <strong>X.509</strong></p></li></ul><blockquote><p><strong>Problema que resuelve</strong></p></blockquote><ul><li><p>Hoy muchas integraciones con certificados, claves y material criptogr&#225;fico terminan dependiendo de utilidades externas o parsing casero</p></li><li><p>El soporte directo reduce fricci&#243;n y errores en pipelines de seguridad</p></li></ul><blockquote><p><strong>Cambios relevantes</strong></p></blockquote><ul><li><p>La clase <code>PEM</code> pasa de record a clase regular por conveniencia</p></li><li><p><code>DEREncodable</code> se renombra a <code>BinaryEncodable</code> para describir mejor el contenido binario</p></li></ul><blockquote><p><strong>Fase actual</strong></p></blockquote><ul><li><p><strong>Proposed to Target</strong> para JDK 27</p></li></ul><blockquote><p><strong>Impacto en el desarrollo</strong></p></blockquote><ul><li><p>Menos c&#243;digo de pegamento al manejar certificados</p></li><li><p>Mejor soporte para tooling de seguridad, provisioning y automatizaci&#243;n</p></li><li><p>Especialmente &#250;til en servicios Spring Security y flujos de trust material</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/538">https://openjdk.org/jeps/538</a></p></blockquote><div><hr></div><h3><strong>JEP 536 &#8212; JFR In-Process Data Redaction</strong></h3><p>JFR quiere dejar de filtrar secretos como si fuera un colador industrial. Esta propuesta a&#241;ade <strong>redacci&#243;n de datos sensibles dentro del propio proceso</strong> antes de completar la grabaci&#243;n.</p><blockquote><p><strong>Prop&#243;sito</strong></p></blockquote><ul><li><p>Redactar informaci&#243;n sensible en JFR</p></li><li><p>Cubrir datos como:</p><ul><li><p>argumentos de l&#237;nea de comandos</p></li><li><p>valores iniciales de variables de entorno</p></li><li><p>propiedades de sistema</p></li></ul></li></ul><blockquote><p><strong>Problema que resuelve</strong></p></blockquote><ul><li><p>Los dumps y recordings pueden capturar m&#225;s de lo que deber&#237;an</p></li><li><p>En entornos productivos, eso es una mina de oro para incidentes de seguridad si no se controla</p></li></ul><blockquote><p><strong>Fase actual</strong></p></blockquote><ul><li><p><strong>Proposed to Target</strong> para JDK 27</p></li></ul><blockquote><p><strong>Impacto en el desarrollo</strong></p></blockquote><ul><li><p>Mejora la postura de seguridad sin depender solo de procesos externos</p></li><li><p>Hace m&#225;s viable usar JFR de forma amplia en producci&#243;n</p></li><li><p>Muy buena noticia para equipos que hacen observability sin querer regalar secretos en el camino</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/536">https://openjdk.org/jeps/536</a></p></blockquote><div><hr></div><h3><strong>JEP 528 &#8212; Post-Mortem Crash Analysis with jcmd</strong></h3><p><code>jcmd</code> quiere asumir trabajo que antes ca&#237;a en <code>jhsdb</code> o en la Serviceability Agent. La idea: <strong>diagn&#243;stico post-crash m&#225;s integrado y accesible</strong>.</p><blockquote><p><strong>Prop&#243;sito</strong></p></blockquote><ul><li><p>Extender <code>jcmd</code> para analizar una JVM tras un crash</p></li><li><p>Centralizar capacidades de diagn&#243;sticos de servicio</p></li></ul><blockquote><p><strong>Problema que resuelve</strong></p></blockquote><ul><li><p>El an&#225;lisis post-mortem sigue siendo demasiado fragmentado</p></li><li><p>Mover capacidad a <code>jcmd</code> simplifica el workflow operativo</p></li></ul><blockquote><p><strong>Fase actual</strong></p></blockquote><ul><li><p><strong>Proposed to Target</strong> para JDK 27</p></li></ul><blockquote><p><strong>Impacto en el desarrollo</strong></p></blockquote><ul><li><p>Mejor tooling para SREs y equipos de plataforma</p></li><li><p>Menos dependencia de utilidades especializadas para incident response</p></li><li><p>Si tu producci&#243;n crashea, al menos el diagn&#243;stico deja de ser arqueolog&#237;a JVM</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://openjdk.org/jeps/528">https://openjdk.org/jeps/528</a></p></blockquote><div><hr></div><h2><strong>&#128736;&#65039; Herramientas y Utilidades para Developers</strong></h2><h3><code>jcmd</code><strong> refuerza su papel como herramienta de operaciones</strong></h3><p>No es una herramienta nueva, pero la evoluci&#243;n propuesta en JEP 528 le da m&#225;s peso en el ecosistema de diagn&#243;stico JVM.</p><blockquote><p><strong>Qu&#233; hace</strong></p></blockquote><ul><li><p>Permite ejecutar comandos de diagn&#243;stico sobre una JVM en ejecuci&#243;n</p></li><li><p>Se orienta a observabilidad, troubleshooting y soporte operativo</p></li></ul><blockquote><p><strong>Novedad relevante</strong></p></blockquote><ul><li><p>La propuesta busca ampliar su uso para an&#225;lisis post-mortem</p></li><li><p>Menos salto entre herramientas cuando algo explota</p></li></ul><blockquote><p><strong>C&#243;mo usarlo en Java/Spring</strong></p></blockquote><ul><li><p>Diagn&#243;stico r&#225;pido de memoria, threads, classloading y m&#225;s</p></li><li><p>Muy &#250;til en contenedores y entornos donde no quieres instalar media toolbox alrededor</p></li><li><p>Ideal para runbooks de producci&#243;n con Spring Boot</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://docs.oracle.com/en/java/javase/25/docs/specs/man/jcmd.html">https://docs.oracle.com/en/java/javase/25/docs/specs/man/jcmd.html</a></p></blockquote><div><hr></div><h3><strong>JFR con redacci&#243;n de datos sensibles</strong></h3><p>La mejora propuesta en JEP 536 tambi&#233;n convierte a <strong>JFR</strong> en una herramienta m&#225;s segura para producci&#243;n.</p><blockquote><p><strong>Qu&#233; hace</strong></p></blockquote><ul><li><p>Registra eventos de la JVM con coste bajo</p></li><li><p>La propuesta a&#241;ade redacci&#243;n de secretos antes de cerrar el recording</p></li></ul><blockquote><p><strong>C&#243;mo usarlo en Spring Boot</strong></p></blockquote><ul><li><p>Perfila cuellos de botella sin exponer credenciales o argumentos delicados</p></li><li><p>&#218;til para incidentes y an&#225;lisis de comportamiento real bajo carga</p></li></ul><blockquote><p><strong>Enlace oficial:</strong> <a href="https://openjdk.org/projects/jmc/">https://openjdk.org/projects/jmc/</a></p></blockquote><div><hr></div><h3><strong>&#127757; Comunidad y Ecosistema</strong></h3><p><strong>JNation 2026</strong></p><p>&#128467;&#65039; 26 de mayo de 2026<br>&#128205; Coimbra, Portugal</p><p>Evento para la comunidad Java con charlas t&#233;cnicas sobre desarrollo backend, arquitectura y JVM.</p><p>Web: https://jnation.pt/</p><div><hr></div><p><strong>JCON Slovenia 2026</strong></p><p>&#128467;&#65039; 27 de mayo de 2026<br>&#128205; Portoro&#382;, Eslovenia</p><p>Conferencia local centrada en Java, cloud y desarrollo moderno.</p><p>Web: https://slovenia.jcon.one/</p><div><hr></div><p><strong>JJUG CCC Spring 2026</strong></p><p>&#128467;&#65039; 30 de mayo de 2026<br>&#128205; Tokio, Jap&#243;n</p><p>Evento de la comunidad Java japonesa con charlas t&#233;cnicas y tendencias del ecosistema JVM.</p><p>Web: https://www.java-users.jp/</p><div><hr></div><p><strong>Jprime 2026</strong></p><p>&#128467;&#65039; 3 de junio de 2026<br>&#128205; Sof&#237;a, Bulgaria</p><p>Conferencia sobre Java, arquitectura de software y tecnolog&#237;as relacionadas.</p><p>Web: https://jprime.io/</p><div><hr></div><p><strong>J-Spring 2026</strong></p><p>&#128467;&#65039; 4 de junio de 2026<br>&#128205; Utrecht, Pa&#237;ses Bajos</p><p>Evento centrado en Spring y Java con sesiones pr&#225;cticas y networking.</p><p>Web: https://jspring.nl/</p><div><hr></div><p><strong>JSail Unconference 2026</strong></p><p>&#128467;&#65039; 8 de junio de 2026<br>&#128205; Hemelum, Pa&#237;ses Bajos</p><p>Unconference para desarrolladores Java centrada en intercambio de conocimiento y comunidad.</p><p>Web: https://jsail.ijug.eu/</p><div><hr></div><p><strong>DevBcn 2026</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.devbcn.com/2026" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_webp, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CKYK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png" width="1200" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Convince Your Boss - DevBcn 2026 | DevBcn&quot;,&quot;title&quot;:&quot;Convince Your Boss - DevBcn 2026 | DevBcn&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.devbcn.com/2026&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Convince Your Boss - DevBcn 2026 | DevBcn" title="Convince Your Boss - DevBcn 2026 | DevBcn" srcset="/__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_424, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 424w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_848, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 848w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1272, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CKYK!, /__u/programandoenjava.substack.com/w_1456, /__u/programandoenjava.substack.com/c_limit, /__u/programandoenjava.substack.com/f_auto, /__u/programandoenjava.substack.com/q_auto:good, /__u/programandoenjava.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faea86aab-1d8a-4aae-8e6b-78aae080eb96_1200x630.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>&#128467;&#65039; 16 de junio de 2026<br>&#128205; Barcelona, Espa&#241;a</p><p>Conferencia tecnol&#243;gica con foco en Java, cloud, frontend y arquitectura moderna.</p><p>Web: <a href="https://www.devbcn.com/">https://www.devbcn.com/</a></p><div><hr></div><p><strong>Devoxx Poland 2026</strong></p><p>&#128467;&#65039; 17 de junio de 2026<br>&#128205; Cracovia, Polonia</p><p>Gran evento con enfoque en Java, Kotlin y el ecosistema JVM con m&#250;ltiples tracks t&#233;cnicos.</p><p>Web: https://devoxx.pl/</p><div><hr></div><p><strong>JConf Dominicana 2026</strong></p><p>&#128467;&#65039; 17 de julio de 2026<br>&#128205; Santo Domingo, Rep&#250;blica Dominicana<br>Conferencia de Java y tecnolog&#237;a en el Caribe.<br>Web: https://jconfdominicana.org/</p><div><hr></div><p><strong>JCrete 2026</strong></p><p>&#128467;&#65039; 26 de julio de 2026<br>&#128205; Creta, Grecia<br>Conferencia internacional de Java en un entorno colaborativo y relajado.<br>Web: https://www.jcrete.org/</p><div><hr></div><h3><strong>&#128161; Tip de la semana</strong></h3><h3><strong>Usa </strong><code>ProblemDetail</code><strong> para estandarizar errores en Spring Boot 3+</strong></h3><p>Si todav&#237;a devuelves <code>Map&lt;String, Object&gt;</code> para errores, est&#225;s dejando calidad en la mesa. <code>ProblemDetail</code> te da una respuesta HTTP m&#225;s limpia, alineada con RFC 7807 y mucho m&#225;s manejable.</p><pre><code><code>@RestControllerAdvice
public class ApiExceptionHandler {

    @ExceptionHandler(IllegalArgumentException.class)
    public ResponseEntity&lt;ProblemDetail&gt; handleIllegalArgument(IllegalArgumentException ex) {
        ProblemDetail problem = ProblemDetail.forStatus(HttpStatus.BAD_REQUEST);
        problem.setTitle("Par&#225;metro inv&#225;lido");
        problem.setDetail(ex.getMessage());
        problem.setProperty("errorCode", "BAD_REQUEST_INVALID_ARGUMENT");

        return ResponseEntity.badRequest().body(problem);
    }
}
</code></code></pre><blockquote><p><strong>Ventajas</strong></p></blockquote><ul><li><p>Respuestas consistentes</p></li><li><p>Mejor integraci&#243;n con clientes y gateways</p></li><li><p>Menos inventos ad hoc en cada endpoint</p></li></ul><div><hr></div><p>&#191;Te ha molado? Comparte esta newsletter con otro friki del backend &#128187;<br>&#191;Preguntas o sugerencias? Responde a este correo, y charlamos.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://programandoenjava.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Suscribirse&quot;,&quot;language&quot;:&quot;es&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Este Substack est&#225; apoyado por los lectores. Para recibir nuevos posts y apoyar mi trabajo, considera convertirte en un suscriptor de contenido gratis o un suscriptor de pago.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Escribe tu correo electr&#243;nico..." tabindex="-1"><input type="submit" class="button primary" value="Suscribirse"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[🤯Lo que incluye el bootcamp (para los que preguntaron ayer)]]></title><description><![CDATA[Hola, Ayer en el chat al menos dos personas preguntaron]]></description><link>https://programandoenjava.substack.com/p/lo-que-incluye-el-bootcamp-para-los</link><guid isPermaLink="false">https://programandoenjava.substack.com/p/lo-que-incluye-el-bootcamp-para-los</guid><pubDate>Wed, 27 May 2026 12:03:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Aw_2!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F806d6e06-6de7-45f4-9c69-66e050a6f24b_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hola,</p><p>Ayer en el chat al menos dos personas preguntaron<br>el precio y los detalles del bootcamp.</p><p>Aqu&#237; est&#225; todo, sin rodeos:</p><h2>&#191;QU&#201; ES EL BOOTCAMP?</h2><p>3 meses para pasar de ejecutar c&#243;digo a dise&#241;ar sistemas.</p><ul><li><p>Clases en vivo L-M-X de 19:00 a 21:00h.</p></li><li><p>Quedan grabadas, puedes verlas cuando puedas.</p></li><li><p>Tareas semanales con feedback directo.</p></li><li><p>Mentor&#237;a 1:1 personalizada.</p></li><li><p>Revisi&#243;n de TU c&#243;digo por Ricardo y Jordy.</p></li><li><p>Proyecto final para tu portfolio.</p></li><li><p>Certificado al finalizar el Bootcamp</p></li></ul><h2>&#191;QU&#201; INCLUYE?</h2><p>&#9989; Clases en vivo (grabadas)<br>&#9989; Tareas con feedback personalizado<br>&#9989; Mentor&#237;a 1:1<br>&#9989; Revisi&#243;n de c&#243;digo real tuyo<br>&#9989; Proyecto final + certificado<br>&#9989; Grupo WhatsApp VIP post-bootcamp<br>&#9989; 1 a&#241;o acceso plataforma CodeJa<br>&#9989; Garant&#237;a 14 d&#237;as sin riesgo</p><h2>&#191;CU&#193;NTO TIEMPO NECESITO?</h2><p>~6 horas semanales.<br>Las clases son fuera de horario laboral (19:00-21:00h/Madrid).<br>Si no puedes asistir en vivo, ves la grabaci&#243;n.</p><h2>&#191;PARA QUI&#201;N ES?</h2><p>Para desarrolladores Java con experiencia que quieren<br>dar el salto a dise&#241;ar sistemas, no solo ejecutarlos.</p><p>No es para juniors.<br>No es para gente que quiere aprender Spring b&#225;sico.<br>Es para quien ya sabe programar y quiere pensar como arquitecto.</p><p>Toda la informaci&#243;n y precios aqu&#237;:</p><p><a href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales@TrackLink">https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales&quot;,&quot;text&quot;:&quot;&#128073; RESERVAR PLAZA AHORA &#128072;&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.codeja.dev/bootcamp/java-arquitecto-2-edicion/sales"><span>&#128073; RESERVAR PLAZA AHORA &#128072;</span></a></p><p><strong>Inscripciones cierran el domingo 31 de mayo.</strong><br><strong>Inicio: lunes 1 de junio.</strong></p><p>Si tienes alguna pregunta, responde este email.</p><p>Ricardo</p>]]></content:encoded></item></channel></rss>