Newsletter Java: Novedades de la Semana 1 Septiembre 2025
Tu newsletter semanal de Programando En Java
¡Hola javeros!
Esta semana viene cargada de actualizaciones potentes que no querrás ignorar: desde la llegada oficial de Groovy 5 hasta avances serios en Project Leyden y nuevas versiones en frameworks clave como Quarkus y Hibernate Validator. Vamos al grano 👇
Todo listo para que sigas subiendo de nivel en Java. ¡Vamos al lío! ☕💻
Redes Sociales
📘 Facebook: Programando en JAVA
🐦 X (Twitter): ProgEnJava
📸 Instagram: Programando en Java
💼 LinkedIn: Ricardo Romero Benítez
▶️ YouTube: Programando en Java
🎵 TikTok: Programando en Java
🧵 Threads: Programando en Java
💬 Discord: Comunidad de Programando en JAVA
🚀 ¡Acelera tu carrera Java con Codeja!
Si estás cansado de practicar sin rumbo, prueba CodeJa: una plataforma práctica creada para que de verdad subas de nivel.
🎯 Retos reales y semanales — orientados a problemas de producción.
🏆 Leaderboard global — compite y gana visibilidad.
😎 Retos semanales - compite por la mejor posición en los retos semanales
🔁 Historial de envíos — revisa, compara y vuelve a versiones anteriores de tu código.
💬 4 mentorías 1:1 al mes — arquitectura, revisión de CV o preparación de entrevistas.
🎥 Video de la Semana
👨💻 CodeCast 12 - Iván López
En esta conversación charlamos con Iván López, ingeniero principal especializado en Java y tecnologías relacionadas con la JVM, sobre su trayectoria profesional, el papel de las comunidades tecnológicas y la evolución del desarrollo de software.
Analizamos temas clave para cualquier desarrollador:
💡 La importancia del inglés en tecnología y cómo superar las barreras culturales.
🏢 El choque cultural y organizativo tras la compra de VMware por Broadcom.
⚙️ La evolución del ecosistema Java y herramientas modernas que facilitan el trabajo diario.
🧪 El papel esencial de los tests automatizados en la calidad del software.
💻 Entrevistas técnicas: cómo deberían ser prácticas y realistas.
🤝 El valor del networking y la comunidad más allá del conocimiento técnico.
👉 Mira el podcast completo aquí:
También en Spotify:
📦 Novedades en Librerías y Frameworks
🚀 Apache Groovy 5.0.0 (GA)
Groovy alcanza su versión estable 5.0.0 con varios cambios jugosos:
Soporte completo desde JDK 11 hasta JDK 25.
Nueva anotación
@OperatorRenamepara alinear operadores con librerías externas.REPL
groovyshrediseñado con soporte cross-platform y syntax highlighting (JLine 3).
➡️ Release notes: https://groovy-lang.org/releasenotes/groovy-5.0.html
🧬 Quarkus 3.26.0 + Emergencias
La versión 3.26.0 trae:
Soporte para múltiples unidades de persistencia en Hibernate Reactive.
Dev UI con nueva página de configuración.
HQL console mejorado con integración de Hibernate Tools for Natural Language.
Además, se lanzaron versiones de emergencia (3.26.1, 3.20.2.2, 3.15.6.2) por un bug en Vert.x 4.5.18 que colgaba conexiones HTTP.
➡️ Blog oficial: https://quarkus.io/blog/quarkus-3-26-released/
🧪 Hibernate Validator 9.1.0 Alpha
Primera alpha con:
Mejoras al rendimiento de validaciones en cascada.
Deprecación de
@Valida nivel contenedor (úsala en los type arguments).
➡️ Release notes: https://hibernate.atlassian.net/issues/?jql=project=10060+AND+fixVersion=33605
🧱 Camel Quarkus 3.26.0
Alineado con Quarkus 3.26.0:
🧹 Limpieza de clases legacy en Jackson JQ y Cassandra Client.
🔧 Refactor en
CamelContextCustomizerpara configuraciones enRUNTIME_INIT.
➡️ Release notes: https://camel.apache.org/releases/q-3.26.0/
🔐 Open Liberty 25.0.0.9 (Beta)
Avanza en cumplimiento con FIPS 140-3 usando IBM Semeru Runtimes.
➡️ Blog oficial: https://openliberty.io/blog/2025/08/26/25.0.0.9-beta.html
📦 JReleaser 1.20.0
Automatización de releases con mejoras para JBang:
Soporte para scripts de JBang como extensiones.
Hooks para provisionar versiones automáticamente.
➡️ Release: https://github.com/jreleaser/jreleaser/releases/tag/v1.20.0
🤖 LangChain4j 1.4.0
Integraciones nuevas con Watson.ai, Azure OpenAI (transcripción de audio), y soporte de tokens para Anthropic.
Mejor manejo de errores con
ToolArgumentsErrorHandler.Pool de hilos virtuales como ejecutor por defecto.
➡️ Release: https://github.com/langchain4j/langchain4j/releases/tag/1.4.0
🔧 Helidon MCP Server (Tech Preview)
Nuevo servidor experimental basado en el Model Context Protocol (MCP):
Soporta APIs imperativas y declarativas.
Procesamiento en tiempo de compilación.
Usa hilos virtuales de Helidon WebServer.
➡️ Proyecto: https://github.com/helidon-io/helidon-mcp
☕ Actualizaciones del JDK
🧪 JDK 25 EA – Build 36
Se mantiene estable como el último build disponible.
➡️ Notas: https://jdk.java.net/25/release-notes
🛠️ JDK 26 EA – Build 13
Incluye múltiples fixes y mejoras técnicas.
➡️ Release notes: https://jdk.java.net/26/release-notes
⚙️ Project Leyden – Build 26-leydenpremain+1
Build experimental con enfoque en:
Tiempo de arranque más rápido.
Menor huella de memoria.
Mejor tiempo hasta rendimiento pico.
Con soporte para:
JEP 483: Carga y enlace AOT.
JEP 514: Ergonomía AOT desde CLI.
JEP 515: Perfilado de métodos AOT.
➡️ Build: https://jdk.java.net/leyden/
🧪 Nuevas JEPs o Propuestas
🔧 JEP 522 – G1 GC: Improve Throughput by Reducing Synchronization
Promovida a estado “Candidate”.
Reduce la sincronización entre hilos de aplicación y del GC.
Menor overhead y mayor throughput en sistemas con alto paralelismo.
➡️ JEP: https://openjdk.org/jeps/522
🛠️ Herramientas y Utilidades para Developers
🛳️ JReleaser 1.20.0 (mejora para scripting)
Soporte completo para hooks y extensiones usando JBang.
Facilita la automatización de releases Spring Boot + CLI tooling.
➡️ GitHub: https://github.com/jreleaser/jreleaser
🌍 Comunidad y Ecosistema
📢 JavaOne y Devoxx 2025
Se abren los CFP para los dos eventos Java más grandes del año. Si tienes algo que decir sobre Spring, Leyden o Java moderno, este es el momento.
➡️ JavaOne: https://javaone.oracle.com
➡️ Devoxx: https://cfp.devoxx.com
💡 Programación funcional en Java (pequeños hábitos, gran impacto)
La programación funcional en Java no es solo streams. Se trata de escribir funciones puras, preferir inmutabilidad, evitar efectos secundarios y componer pequeñas funciones para resolver problemas complejos de forma clara y testeable. Estos hábitos hacen tu código más fácil de razonar, probar y paralelizar.
Ventajas
✅ Código más declarativo y legible.
✅ Menos bugs por estado compartido.
✅ Más fácil de testear (funciones puras).
✅ Composición simple con
Function,Predicate,OptionalyStream.
Función pura +
Stream(sin mutaciones):
public static List<Integer> squareAll(List<Integer> nums) {
return nums.stream()
.map(n -> n * n) // función pura
.collect(Collectors.toUnmodifiableList()); // lista inmutable
}
Composición de funciones con
Function:
Function<String, String> trim = String::trim;
Function<String, String> toLower = String::toLowerCase;
Function<String, String> normalize = trim.andThen(toLower);
String clean = normalize.apply(" Hello@Example.COM "); // "hello@example.com"
Uso de
Optionalpara encadenar sin nulls:
record User(String username, String email, Role role) {}
Optional<String> email = findUserById(id)
.map(User::email)
.filter(e -> e.contains("@"))
.map(String::toLowerCase);
String result = email.orElse("no-email@unknown");
Agrupar y mapear con
Collectors:
Map<Role, List<String>> usersByRole = users.stream()
.collect(Collectors.groupingBy(User::role,
Collectors.mapping(User::username, Collectors.toList())));
Qué no hacer: evitar efectos secundarios dentro de streams
// MAL: muta una lista externa — propenso a bugs y no-thread-safe
List<String> out = new ArrayList<>();
users.stream().forEach(u -> out.add(u.username()));
// BIEN: devuelve resultado sin mutar estado externo
List<String> out2 = users.stream()
.map(User::username)
.collect(Collectors.toList());
¿Te ha molado? Comparte esta newsletter con otro friki del backend 💻
¿Preguntas o sugerencias? Responde a este correo, y charlamos.


