14 let podpory interního pastbinu: lekce z evoluce technologického stacku
Interní nástroj pro sdílení kódu a logů, obdobu Pastebinu, spuštěný v roce 2012, fungoval 14 let. Zpočátku šlo o jednoduchý webový formulář pro ukládání "past" s generováním odkazů a automatickým mazáním zastaralých záznamů. Později přibylo zvýrazňování syntaxe, řádkové komentáře, autorizace a kreslení přes text. Hlavní hodnota spočívala v lokálním nasazení bez externích služeb.
Projekt si nečinil nárok na jedinečnost: podobná řešení lze snadno replikovat. Klíčovou výzvou nebylo vytvoření, ale dlouhodobá podpora, kde technologie zastarávají, frameworky umírají a uživatelská očekávání rostou.
Technologický stack: Scala ve spojení se Spring a Hibernate
Výběr stacku byl určen dostupností a zájmem: Scala místo Javy na klasickém Spring-Hibernate-JSP. Scala 2.x se kompilovala do JVM-bajtkódu, ale integrace odhalila problémy s kompatibilitou.
- Anotace a skenery tříd: Spring a Hibernate nesprávně zpracovávaly Scala-bajtkód. Příklad problému s poli Entity:
@ManyToOne(fetch = FetchType.EAGER, cascade = Array(CascadeType.PERSIST, CascadeType.MERGE))
@JoinColumn(name = "owner_id")
private var owner: User = null
Pole vyžadovala explicitní výchozí hodnoty.
- Datové typy, dědičnost, enum a anotace: Plné spektrum nekompatibilit, řešených metodou pokus-omyl.
Odmítnutí NoSQL a souborového úložiště: ztráta dat při restartu byla nepřijatelná. Lucene pro indexování vedl k duplicitám při aktualizacích.
Sestavení: Maven místo sbt
V roce 2012 byl sbt nedozrálý, s špatnou integrací do IDE a CI. Maven zajistil stabilitu: podpora SonarQube, multi-DB, multi-servlet-kontejnerů.
Výhody Mavenu na 14leté trati:
- Předvídatelnost vydání.
- Snadná integrace s ekosystémem.
- Minimální změny konfigurace.
sbt se vyvíjel, ale migrace nebyla nutná — Maven nezklamal.
Krach Compass Search
Compass, předchůdce Elasticsearchu, se integroval s Hibernate/Spring pro vestavěné vyhledávání. Do roku 2014 projekt zemřel: autor přešel k distribuovanému ES.
Důsledky:
- Závislosti na zastaralých knihovnách rozbíjely aktualizace.
- Podpora mrtvé kódové základny zabrala 5 let.
- Migrace na Hibernate Search neproběhla na první pokus.
Lekce: sledovat aktivitu upstream-projektů.
Problémy Apache Tiles a JSP-šablon
Tiles přidával kompozici šablon do JSP, kde základní technologie byla omezena na include-direktivy. Každá stránka duplikovala strukturu:
<%@ 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>
Refaktorizace se stala peklem. Tiles také zemřel, což problémy zhoršilo.
Repozitář a commity: 14 let v jednom GitHub-repo
Vývoj ve volném čase vedl k neideálním commitům. Kód posledních verzí je vyčištěn, projekt je stabilní. Veřejný přístup usnadňuje forky a příspěvky.
Co je důležité
- Podpora projektu je důležitější než vývoj: technologie zastarávají rychleji než očekávání.
- Výběr stacku podle dostupnosti funguje, ale vyžaduje testy kompatibility (Scala + Spring/Hibernate).
- Mrtvé frameworky (Compass, Tiles) táhnou dolů: sledovat roadmapy.
- Maven zůstává etalonem stability pro legacy-projekty.
- Uživatelská data jsou kritická i pro dočasné nástroje.
Celkový objem: projekt ilustruje realitu enterprise-vývoje — 90 % úsilí na údržbu.
— Editorial Team
Zatím žádné komentáře.