Entradas

Try-with-resources: una solución para manejar recursos en Java

  Cuando trabajamos con bases de datos en Java, es común abrir múltiples recursos como Connection , PreparedStatement y ResultSet . El problema es que, si no se cierran correctamente, pueden producirse fugas de memoria o saturación de conexiones. Para resolver esto, Java incorporó desde la versión 7 la estructura try-with-resources , una forma más segura y limpia de manejar recursos que deben cerrarse automáticamente. ¿Qué es try-with-resources? Es una extensión del bloque try que permite declarar recursos dentro de paréntesis. Estos recursos se cierran automáticamente al finalizar el bloque, incluso si ocurre una excepción. Ejemplo sin try-with-resources Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = ConexionBD.getConnection(); ps = conn.prepareStatement("SELECT * FROM mascotas"); rs = ps.executeQuery(); while (rs.next()) { System.out.println(rs.getString("nombre")); } } catch (SQLException e)...

Creando una clase de conexión a MySQL en Java

  Cuando comencé a aprender Java, una de las primeras tareas fue conectarme a una base de datos MySQL. Para ello, normalmente se crea una clase encargada de centralizar la configuración de la conexión y entregar objetos Connection al resto de la aplicación. Un ejemplo simple es el siguiente: package com.egga.appvet.includes; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Connection; public class ConexionBD { private static final String URL = "jdbc:mysql://localhost:3306/AppVet"; private static final String USER = "tuusuario"; private static final String PASS = "tupassword@"; public static Connection getConnection() throws SQLException { return DriverManager.getConnection(URL, USER, PASS); } } En este ejemplo se definen tres constantes: URL: dirección de la base de datos MySQL. USER: usuario utilizado para conectarse al servidor. PASS: contraseña del usuario. El método getConnection() devuel...

Boleta Electrónica en Chile: Los 3 Ambientes del SII para Desarrolladores

Boleta Electrónica en Chile: Los 3 Ambientes del SII para Desarrolladores Al trabajar con boletas electrónicas, los desarrolladores suelen confundirse con los distintos ambientes del SII . Para simplificarlo, hay tres ambientes principales : Certificación, Pruebas de envío y Producción , cada uno con su propósito y servidor específico. 1. Certificación de Boletas Qué es: Ambiente donde solo resuelves y envias el set de pruebas de boletas . Qué haces aquí: Realizar el enrolamiento del contribuyente ante el SII. Enviar el set de pruebas de boletas que proporciona el SII. Obtener el track ID de envío correspondiente al set y posteriormente lo declaras. Servidor / Endpoint: https://maullin.sii.cl 2. Pruebas de Envío de Boletas Qué es: Ambiente donde simulas el envío de boletas al SII . Qué haces aquí: Enviar boletas de prueba no las del set. Recibir trackid de recepción como si fueran boletas reales, pero sin efecto t...

PHP/Java Bridge: una integración posible, pero con riesgos

PHP/Java Bridge: una integración posible, pero con riesgos PHP/Java Bridge es una tecnología que permite invocar código Java desde PHP , delegando la ejecución a una JVM persistente que corre dentro de un contenedor de servlets , normalmente Apache Tomcat . Aunque hoy está obsoleta y fuera de soporte , sigue siendo posible hacerla funcionar , incluso en PHP 8 , siempre bajo configuraciones no estándar y asumiendo riesgos reales . Advertencia ⚠️ Proyecto sin mantenimiento ⚠️ Soporte oficial limitado a PHP 5 ⚠️ Funcionamiento en PHP 7/8 no garantizado ⚠️ Riesgos de seguridad y estabilidad ⚠️ Dependencia directa de un contenedor Java El uso de esta tecnología es bajo tu propia responsabilidad . No es una recomendación para producción. Por qué era necesario crear una aplicación web Uno de los puntos clave —y que suele olvidarse— es que PHP/Java Bridge exigía crear una aplicación web Java . No era opcional. La forma correcta de hacerlo era: Crear una aplicación web Java Empaquet...

Comunidad de programación web Java (Discord)

 Este servidor de Discord es un espacio complementario al blog para compartir recursos y experiencias sobre programación web en Java, con énfasis en Jetty, Servlets y Thymeleaf. El objetivo es: Compartir enlaces, ejemplos y documentación útil Conversar sobre desarrollo web con Java sin frameworks pesados Resolver dudas puntuales y comentar buenas prácticas No es un canal de soporte formal ni un chat permanente, sino un espacio de intercambio entre personas interesadas en desarrollo web Java. 👉 Enlace al Discord: https://discord.gg/YeDGK5aR

Cuando el "vibe coding" se convierte en desgaste

 Hace unas semanas me contactó un informático que trabajaba en la farmacia de su señora. Era de la misma carrera de Informática de mi casa de estudios, aunque él se dedicaba a soporte técnico . Me comentó: “Estoy haciendo un programa en Python para administrar la farmacia de mi señora y quiero añadirle boleta electrónica. Ojo, no soy programador, lo hice con ChatGPT.” En ese momento no entendí bien, pero luego comprendí que se trataba del famoso vibe coding : dejar que la IA escriba la mayor parte del código, sin planificación, estructura ni comprensión de fondo. El cliente me pagó las horas trabajadas, pero sinceramente, no fue un desafío técnico… fue un desgaste . No sabía qué herramientas o librerías estaba utilizando, y adaptar un script sencillo a ese entorno fue realmente complejo. Cada intento generaba nuevos prompts y versiones de código completamente distintas. Esa experiencia me dejó una conclusión muy clara: La IA puede ser una gran ayuda, pero cuando se us...

🚀 Integrando Thymeleaf en un Servlet Java

Hoy estuve trabajando en un servlet que utiliza Thymeleaf como motor de plantillas para manejar vistas dinámicas dentro de una aplicación Java tradicional (sin Spring Boot). Thymeleaf puede integrarse perfectamente en un proyecto basado en Servlets si se inicializa adecuadamente el TemplateEngine . Esto permite mantener una separación clara entre lógica y presentación, con vistas HTML procesadas dinámicamente desde el servidor. package com.egga.appventas.caja; import com.egga.appventas.include.ThymeleafConfig; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; public class AdminCaja extends HttpServlet{ private TemplateEngine templateEngine; @Override public void init() { // Inicializaci...