Volver al inicio

14 Años de Pastebin en Scala: Lecciones de Soporte

El artículo describe la evolución de 14 años del Pastebin interno en Scala, Spring y Hibernate. Cubre problemas de compatibilidad, el colapso de los frameworks Compass y Tiles, la elección de Maven. Lecciones para soportar proyectos legacy.

Cómo Soportar Pastebin durante 14 Años: Colapso de Frameworks y Scala
Advertisement 728x90

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.

Google AdInline article slot
  • 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.

Google AdInline article slot

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.

Google AdInline article slot

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

Advertisement 728x90

Leer después