Newsletter Java: Novedades de la Semana 2 Febrero 2025
Tu newsletter semanal de Programando En Java
¡Hola comunidad Java! 👋
En esta edición encontrarás un video exclusivo que refuta el mito de que Java está anticuado, las últimas actualizaciones del JDK, novedades en frameworks y herramientas, y una sección especial sobre Micronaut y LangChain4J para integrar LLMs en tus aplicaciones. Además, te comparto un tip práctico para optimizar tu código.
¡Descúbrelo ahora! 🤗👀
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
🎥 Video de la Semana: ¿JAVA ESTÁ MUERTO? ALERTA CLICKBAIT 🚨‼️
En este video, desafiamos la creencia de que Java es cosa del pasado.
Descubre cómo:
Desmontar críticas comunes: Revisamos argumentos que aseguran que Java ya no es moderno y los refutamos.
Ejemplos actuales: Mostramos casos reales y aplicaciones de vanguardia que siguen usando Java de forma eficiente.
Innovaciones y mejoras: Hablamos de por qué JAVA se está actualizando y mejorando a un ritmo más rápido.
🔧 Actualizaciones del Ecosistema Java
1. Actualizaciones del JDK
JDK 24 – Build 36
Qué trae: Correcciones de errores y mejoras de rendimiento que fortalecen la estabilidad del entorno.
Detalles: Se incluyen actualizaciones desde Build 35 que solucionan issues críticos para optimizar el rendimiento en aplicaciones modernas.
Enlaces útiles:
🔗 Build 36 en GitHub
📄 Release notes de JDK 24
JDK 25 – Build 9
Qué trae: Mejoras en seguridad y gestión de memoria, enfocadas en entornos de producción exigentes.
Detalles: Correcciones acumuladas desde Build 8 que garantizan una JVM más robusta y eficiente.
Enlaces útiles:
🔗 Build 9 en GitHub
📄 Release notes de JDK 25
🤩 ¡Tu opinión importa!
Ayúdame a mejorar esta newsletter y necesito tu ayuda. Responde esta encuesta (menos de 1 minuto) para contarme qué temas prefieres y cómo puedo mejorarla.
👉Realizar encuesta👈
💬 Sesión de Mentoría 1:1
¿Quieres llevar tus conocimientos de Java y Spring al siguiente nivel?
¡Estoy aquí para ayudarte!
15 minutos gratuitos para resolver tus dudas técnicas.
Sesiones personalizadas de 1 hora para profundizar en tus proyectos y retos.
😎 Mentoría GRATIS: Reserva ahora
🆘 Mentoría personalizada: Reserva ahora
🛠️ Novedades en Frameworks y Herramientas
GlassFish 7.0.22
Qué trae:
Actualizaciones de mantenimiento con correcciones de errores y mejoras en seguridad.
Incorporación de atributos Add-Opens y Add-Exports en la shell estática para mejorar la compatibilidad con nuevas versiones de Java.
Enlace:
🔗 Release notes de GlassFish 7.0.22
GraalVM y Graal Development Kit
Native Build Tools 0.10.5:
Qué trae: Soporte para
reachability-metadata.json
y solución para el archivo temporalaccess-filter.json
, facilitando la interoperabilidad con GraalVM Native Image.
Graal Development Kit 4.7.3.1:
Qué trae: Mejoras en la seguridad de la cadena de suministro, actualizaciones en el GDK Launcher y en el GDK CLI, ideales para desarrollar aplicaciones cloud-native.
Enlace:
🔗 Graal Development Kit 4.7.3.1
Spring Cloud Stream Applications 2025.0.0 & 2024.0.1
Qué traen:
Actualizaciones en dependencias (Spring Boot 3.4.2 y 3.3.8, respectivamente) y soporte para Micrometer Tracing.
Nueva propiedad
enableSecurityScan
para gestionar la ejecución de escaneos de seguridad con Trivy.
Enlaces:
🔗 Versión 2025.0.0
🔗 Versión 2024.0.1
Quarkus 3.18.2
Qué trae:
Primera versión de mantenimiento con mejoras en la gestión de conexiones y solución a errores como el
NullPointerException
en Hibernate ORM.Se asegura que los ejecutables nativos tengan los permisos correctos al copiarse a imágenes de contenedor.
Enlace:
🔗 Changelog de Quarkus 3.18.2
WildFly 35.0.1
Qué trae:
Correcciones críticas que abordan errores como
NullPointerException
y problemas en la sincronización de transacciones.
Enlace:
🔗 WildFly 35.0.1 Released
LangChain4j 1.0.0-Beta
Qué trae:
Primera versión beta con cambios importantes, como la deprecación de métodos
generate()
a favor de los experimentaleschat()
, que formarán parte de un nuevo Chat API.Refactorización del interfaz
McpTransport
y de la claseToolExecution
para mejorar la configuración y ejecución de herramientas.
JHipster Lite 1.28.0 y 1.27.0
Qué traen:
Múltiples mejoras en dependencias, incluyendo la actualización de Vitest 3.0.5 que corrige vulnerabilidades críticas (CVE-2025-24964) relacionadas con Cross-Site WebSocket Hijacking (CSWSH).
Enlaces:
🔗 JHipster Lite 1.28.0
🔗 JHipster Lite 1.27.0
JDKUpdater 14.0.73+109
Qué trae:
Nuevo set inicial de CVEs extraídos de la National Vulnerability Database y mejoras en la actualización de datos sin reemplazar información existente.
Keycloak 26.1.1
Qué trae:
Mejoras en la autenticación X.509 con la opción
x509-cert-auth-crl-abort-if-non-updated
y la opciónforce-login
en el restablecimiento de credenciales.
Enlace:
🔗 Release notes de Keycloak 26.1.1
Jox 0.4.0
Qué trae:
Rediseño del Channel para utilizar métodos de fábrica, optimizando su integración con hilos virtuales, y ajustes en la configuración del buffer a nivel de
Flow
.
Enlace:
🔗 Release notes de Jox 0.4.0
🌟 Micronaut Framework 4.7.0 & LangChain4J Integration
La Micronaut Foundation ha lanzado Micronaut Framework 4.7.0 en diciembre de 2024, apenas cuatro meses después de la versión 4.6.0. Esta versión trae novedades muy interesantes para los desarrolladores que desean integrar LLMs en sus aplicaciones Java:
Soporte para LangChain4J:
Permite integrar modelos de lenguaje (LLMs) en aplicaciones Java.
Se ofrece soporte experimental mediante la versión 0.2.0 del módulo Micronaut LangChain4J.
Integración con Graal-based Dynamic Languages:
El módulo Micronaut Graal Languages proporciona integración con lenguajes dinámicos basados en Graal, como GraalPy (un runtime Python 3.11 compatible construido sobre GraalVM).
Configuración en Maven:
Se requiere especificar un annotation processor en el
pom.xml
para habilitar la funcionalidad de LangChain4J, y declarar la dependencia correspondiente.Ejemplo de configuración Maven:
<annotationProcessorPaths> <path> <groupId>io.micronaut.langchain4j</groupId> <artifactId>micronaut-langchain4j-processor</artifactId> </path> </annotationProcessorPaths> ... <dependency> <groupId>io.micronaut.langchain4j</groupId> <artifactId>micronaut-langchain4j-core</artifactId> </dependency>
Soporte para Chat Language Models:
Micronaut ahora soporta varios modelos de lenguaje, incluyendo Anthropic, Azure, Amazon Bedrock, HuggingFace, Mistral AI, Ollama, OpenAI, Google Gemini y Google Vertex AI (¡y más!).
Pruebas y Ejemplos:
Se ofrecen dependencias para probar el modelo (por ejemplo, para Ollama) y ejemplos de uso mediante anotaciones como
@AiService
.Ejemplo de servicio AI:
@AiService public interface MyAiService { @SystemMessage("Let's have a conversation") String chat(String message); }
Embedding Stores:
Micronaut facilita la integración con diferentes almacenes de datos para embeddings, como Elastic Search, MongoDB, Neo4j, Oracle, Open Search, PGVector, Redis y Qdrant.
Recursos Adicionales:
Encuentra ejemplos completos y la configuración de Gradle en los repositorios de GitHub:
Novedades en GraalPy y GDK:
Oracle lanzó GraalPy version 24.1.2 en enero de 2025, ofreciendo un runtime Python 3.11 sobre GraalVM.
Además, se publicó el Graal Development Kit (GDK) para Micronaut 4.7.3.1 en febrero de 2025.
Enlaces útiles:
🔗 Release notes de Micronaut Framework 4.7.0
🔗 Guía de Micronaut LangChain4J
🔗 Guía de Micronaut Graal Languages
🔗 GraalPy Releases
💡 Tip en Java de la Semana
Optimiza el rendimiento usando StringBuilder en concatenaciones dentro de bucles
Cuando necesites construir cadenas de texto dentro de un bucle, evita el uso del operador +
para concatenar. Utiliza en su lugar la clase StringBuilder
para minimizar la creación de objetos y mejorar la eficiencia.
Ejemplo:
public class ConcatenacionEjemplo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append("Número: ").append(i).append("\n");
}
System.out.println(sb.toString());
}
}
¿Por qué usarlo?
Reduce la sobrecarga de memoria al evitar la creación de múltiples objetos
String
.Mejora la eficiencia en operaciones repetitivas de concatenación.
¡Eso es todo por esta semana! Espero que disfrutes de estas actualizaciones, ejemplos y tips, y que sigas comprobando que Java está tan vigente y potente como siempre.
Nos vemos en la próxima edición con más novedades, consejos y diversión en el mundo del desarrollo.
¡Feliz programación y que tengas una excelente semana! 🚀💻🎉
¡Y Feliz San Valentín 💖💖!
Ricardo