Zpět na domů

14 let pastebinu na Scala: lekce podpory

Článek popisuje 14letou evoluci interního pastebinu na Scala, Spring a Hibernate. Jsou zkoumány problémy kompatibility, krach frameworků Compass a Tiles, volba Maven. Lekce pro podporu legacy projektů.

Jak 14 let podporovat pastebin: krach frameworků a Scala
Advertisement 728x90

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.

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

Google AdInline article slot

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.

Google AdInline article slot

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

Advertisement 728x90

Číst dál