14 Años de Soporte para un Pastebin Interno: Lecciones de la Evolución del Stack
Una herramienta interna para compartir código y registros, similar a Pastebin, se lanzó en 2012 y duró 14 años. Inicialmente, era un simple formulario web para guardar "pegas" con generación de enlaces y eliminación automática de entradas obsoletas. Más tarde, añadimos resaltado de sintaxis, comentarios línea por línea, autorización y dibujo sobre texto. El valor principal era el despliegue local sin servicios externos.
El proyecto no pretendía ser único: tales soluciones son fácilmente reproducibles. El desafío clave no fue la creación, sino el soporte a largo plazo, donde las tecnologías se vuelven obsoletas, los frameworks mueren y las expectativas de los usuarios crecen.
Stack Tecnológico: Scala Combinado con Spring y Hibernate
La elección del stack se basó en disponibilidad e interés: Scala en lugar de Java en una configuración clásica Spring-Hibernate-JSP. Scala 2.x se compilaba a bytecode de JVM, pero la integración reveló problemas de compatibilidad.
- Anotaciones y escáneres de clases: Spring y Hibernate manejaban incorrectamente el bytecode de Scala. Ejemplo de problema con campos Entity:
@ManyToOne(fetch = FetchType.EAGER, cascade = Array(CascadeType.PERSIST, CascadeType.MERGE))
@JoinColumn(name = "owner_id")
private var owner: User = null
Los campos requerían valores predeterminados explícitos.
- Tipos de datos, herencia, enumeraciones y anotaciones: Un rango completo de incompatibilidades, resueltas mediante prueba y error.
Evitamos NoSQL y almacenamiento en archivos: la pérdida de datos al reiniciar era inaceptable. Lucene para indexación causaba duplicados durante las actualizaciones.
Sistema de Construcción: Maven en Lugar de sbt
En 2012, sbt estaba crudo, con integración deficiente en IDE y CI. Maven proporcionaba estabilidad: soporte para SonarQube, múltiples bases de datos y múltiples contenedores de servlets.
Ventajas de Maven durante 14 años:
- Lanzamientos predecibles.
- Integración fácil con el ecosistema.
- Cambios mínimos de configuración.
sbt evolucionó, pero la migración no fue necesaria: Maven nunca nos falló.
El Fin de Compass Search
Compass, el predecesor de Elasticsearch, se integraba con Hibernate/Spring para búsqueda embebida. Para 2014, el proyecto murió: el autor pasó a ES distribuido.
Consecuencias:
- Las dependencias de bibliotecas obsoletas rompieron las actualizaciones.
- Soportar código muerto tomó 5 años.
- La migración a Hibernate Search no tuvo éxito en el primer intento.
Lección: monitorear la actividad del proyecto upstream.
Problemas con Apache Tiles y Plantillas JSP
Tiles añadía composición de plantillas a JSP, donde la tecnología base se limitaba a directivas include. Cada página duplicaba la estructura:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<c:import url="header.jsp" />
</head>
<body>
<%@include file="body.jsp"%>
</body>
<footer>
<jsp:include page="footer.jsp" />
</footer>
</html>
El refactorizar se convirtió en una pesadilla. Tiles también murió, empeorando los problemas.
Repositorio y Commits: 14 Años en un Solo Repo de GitHub
El desarrollo en tiempo libre llevó a commits menos que ideales. El código en versiones recientes está limpiado, y el proyecto es estable. El acceso público simplifica forks y contribuciones.
Conclusiones Clave
- El soporte del proyecto es más importante que el desarrollo: las tecnologías se vuelven obsoletas más rápido que las expectativas.
- Elegir un stack basado en disponibilidad funciona pero requiere pruebas de compatibilidad (Scala + Spring/Hibernate).
- Los frameworks muertos (Compass, Tiles) te arrastran: monitorea las hojas de ruta.
- Maven sigue siendo el estándar de oro para estabilidad en proyectos legacy.
- Los datos de usuario son críticos incluso para herramientas temporales.
En general, el proyecto ilustra la realidad del desarrollo empresarial: el 90% del esfuerzo va a mantenimiento.
— Editorial Team
Aún no hay comentarios.