Wiederbelebung von Legacy-Code

Civardi Chiara

Wie man 30 Jahre alte Java-Anwendungen für die nächsten 30 Jahre modernisiert

Wie man 30 Jahre alte Java-Anwendungen für die nächsten 30 Jahre modernisiert

Java ist seit 30 Jahren das Rückgrat von Web- und Unternehmensanwendungen, die von Bankensystemen bis hin zu großen Logistikplattformen alles unterstützen. Die Technologie ist nicht nur immer noch weit verbreitet, sondern einige der ersten Enterprise Java-Anwendungen, die in den 1990er und frühen 2000er Jahren entwickelt wurden, sind immer noch in Betrieb und spielen eine wichtige Rolle im Geschäftsbetrieb. Wie können Entwickler also diese wichtigen, 30 Jahre alten Enterprise Java-Anwendungen in die Zukunft bringen, ohne dabei wichtige Geschäftsfunktionen zu beeinträchtigen?

Lassen Sie uns anlässlich des 30-jährigen Bestehens von Java auf eine Zeitreise in die Mitte der 1990er Jahre gehen. Ich erinnere mich, dass mein Vater gerade eine neue Stelle bei einem Unternehmen angetreten hatte, das IT-Outsourcing-Dienstleistungen für Banken anbot – oder, wie ich meinen Klassenkameraden zu erklären pflegte, „er arbeitet mit Computern“. Damals war an seinem neuen Arbeitsplatz die Rede von den „coolen Sun-Vertretern“ und dem Neuling in der Branche: Java.

Die vielversprechende „Write Once, Run Anywhere“-Magie (WORA) faszinierte viele Softwareentwickler, die darauf brannten, robuste Unternehmensanwendungen auf der Grundlage dieser aufregenden neuen Technologie zu entwickeln. Zahllosen Ingenieurteams in aller Welt gelang es, die Programmiersprache Java und ihr Framework als De-facto-Standard für die Anwendungsentwicklung zu etablieren. Diese ersten Anwendungen legten den Grundstein für die digitalen Geschäftsabläufe, die wir heute kennen.

Drei Jahrzehnte später steht mein Vater kurz vor der Rente, und genau diese Java-Anwendungen sind immer noch da, zusammen mit vielen anderen neueren Anwendungen. In vielen Fällen können diese früheren Softwarelösungen als „Altlasten“ betrachtet werden, da sie mit älteren Technologien oder unter Verwendung veralteter Entwicklungsparadigmen entwickelt wurden. Daher leiden diese einst hochmodernen Anwendungen heute oft unter einer Reihe von Problemen, wie zum Beispiel veraltete Architektur und Sicherheitslücken. Außerdem kann ihre Pflege schwierig und/oder kostspielig sein.

Manchmal muss man in den sauren Apfel beißen: wenn es nicht kaputt ist, muss es vielleicht trotzdem repariert werden

Legacy-Anwendungen sind nicht unbedingt defekt. In der Tat sind sie für viele alltägliche Vorgänge nach wie vor von entscheidender Bedeutung und funktionieren immer noch gut – nur nicht gut genug für die heutigen geschäftlichen und technologischen Anforderungen.

Eine Enterprise Java-Anwendung, die in den frühen 2000er Jahren auf der Java 2 Platform, Enterprise Edition (J2EE) oder Java EE geschrieben wurde, kann immer noch effektiv Finanztransaktionen abwickeln oder Logistik verwalten. Die Integration mit modernen Tools und Plattformen, die Gewährleistung ihrer Sicherheit und der bestmöglichen Leistung kann jedoch eine Herausforderung sein, wenn nicht gar unmöglich. Erschwerend kommt hinzu, dass immer weniger der ursprünglichen Entwickler dieser Legacy-Anwendungen verfügbar sind. Gleichzeitig sinkt die Zahl der Experten, die sich mit älteren Java-Versionen und veralteten Frameworks auskennen – und mit jedem Jahr wird die Modernisierung komplexer.

Aufgrund der entscheidenden Rolle, die solche Legacy-Anwendungen spielen, stellt sich nicht die Frage, ob sie modernisiert werden müssen, sondern wie dies geschehen kann, ohne das gesamte System und die damit verbundenen Geschäftsabläufe zu beeinträchtigen. Glücklicherweise gibt es eine Reihe von Möglichkeiten für ein erfolgreiches Upgrade.

Bei der Wahl des besten Modernisierungskonzepts sollten die Unternehmensziele, die Budgetbeschränkungen und die damit verbundenen Risiken berücksichtigt werden. Manche Unternehmen legen den Schwerpunkt auf Kosteneffizienz und entscheiden sich für schrittweise Aktualisierungen, während sich andere auf langfristige Skalierbarkeit fokussieren und sich für eine komplette Überholung entscheiden.

Was vor der Modernisierung zu beachten ist

Ein Verständnis der verschiedenen Migrationsansätze und der Art und Weise, wie sie sowohl technischen als auch geschäftlichen Anforderungen gerecht werden können, ist das Fundament jeder erfolgreichen Modernisierung. Durch ein klares Bild des aktuellen Status und des Bedarfs können Unternehmen wirksame Pläne erstellen, die mit den strategischen Zielen übereinstimmen und gleichzeitig die Investitionsrendite maximieren und potenzielle Störungen gering halten.

Bei der Diskussion über die potenzielle Modernisierung einer Enterprise Java-Anwendung ist es wichtig, die Software zu untersuchen und sich potenziell ergebende, technische Herausforderungen zu definieren. Diese können durch alte Abhängigkeiten, veraltete Frameworks oder monolithische Architekturen verursacht werden, die sich nur schwer entkoppeln lassen. Die Umstellung auf moderne Frameworks kann zu komplexen Problemen führen, die eine sorgfältige Planung erfordern. Darüber hinaus können Sicherheitsschwachstellen in älteren Java-Anwendungen ein Risiko darstellen, wenn sie während des Modernisierungsprozesses nicht ordnungsgemäß behoben werden.

Außerdem sollte auch das Budget diskutiert werden. Die Modernisierung ist zwar mit erheblichen Kosten für Infrastruktur, Lizenzierung, Schulung und potenzielle Ausfallzeiten verbunden, es gibt jedoch mehrere Möglichkeiten, die jeweils unterschiedliche Anfangsinvestitionen erfordern. Darüber hinaus sollten Unternehmen die kurzfristigen Ausgaben gegen die langfristigen Vorteile abwägen, wie z. B. geringere Wartungskosten, verbesserte Sicherheit und Betriebszeit sowie die Fähigkeit, künftiges Unternehmenswachstum zu unterstützen.

Daneben sind auch kulturelle Aspekte zu berücksichtigen. Entwickler wollen vielleicht unbedingt die neuesten Technologien einführen, während Unternehmensleiter unter Umständen zögern, Investitionen in etwas zu bewilligen, das scheinbar „gut funktioniert“. Die Überbrückung dieser Kluft erfordert eine klare Kommunikation und umfassende Zusammenarbeit, damit alle Erwartungen erfüllt werden und jeder den Wert einer Anwendung versteht, die auf dem neuesten Stand ist.

Neben der Bewertung und dem Aufbau der richtigen Modernisierungskultur ist es auch wichtig, Kenntnisse und Fähigkeiten der heutigen Entwickler zu berücksichtigen. Obwohl Java nach wie vor eine der beliebtesten Programmiersprachen und Frameworks ist, schwindet das Fachwissen, das mit den in den 1990er und frühen 2000er Jahren geschriebenen Enterprise Java-Anwendung verbunden ist, zunehmend. Die ursprünglichen Entwickler der Legacy-Systeme stehen nicht mehr als Berater zur Verfügung. Wie mein Vater genießen viele von ihnen jetzt ihren Ruhestand.

Diese Tatsache in Verbindung mit der begrenzten Dokumentation früherer Systeme bedeutet, dass vor der Aktualisierung einer Anwendung oft ein Reverse Engineering erforderlich ist. Darüber hinaus kann die Software auf veralteten Frameworks und Methoden beruhen, mit denen die heutigen Teams möglicherweise nicht vertraut sind. Ein klares Bild der vorhandenen Fähigkeiten und möglicher Lücken ist für die Festlegung des weiteren Vorgehens von grundlegender Bedeutung.

Durch die proaktive Besprechung und Planung dieser Aspekte können Unternehmen, die am besten geeignete Modernisierungsstrategie ermitteln und die Voraussetzungen für eine erfolgreiche Zusammenarbeit schaffen.

Viele Wege führen zur Modernisierung

Für manche Unternehmen ist der beste Ansatz derjenige, der die wenigsten Störungen verursacht. In solchen Fällen ist die Aufrechterhaltung, auch als Verkapselung bezeichnet, ideal. Dabei wird das alte System beibehalten, seine Kernfunktionen werden jedoch in einen oder mehrere Microservices verpackt, die mit neueren Anwendungen mit moderneren Funktionalitäten interagieren. Dadurch können die notwendigen Funktionalitäten ohne Neuprogrammierung beibehalten und gleichzeitig innovative Elemente, wie z. B. Cloud-basierte Erweiterungen, eingeführt werden.

Eine weitere, nicht-invasive Option ist das Rehosting, auch bekannt als Lift-and-Shift. In der Regel handelt es sich um die Migration einer Anwendung von einer physischen Umgebung, z. B. lokaler Hardware, in eine andere, nämlich eine Cloud-Infrastruktur. Der Prozess konzentriert sich ausschließlich auf die Hosting-Umgebung und beinhaltet keine wesentlichen Änderungen an der zugrundeliegenden Architektur oder Funktionalität der Anwendung.

Dieser Ansatz ermöglicht zwar einen schnellen Übergang zu einer neuen Umgebung und kann teilweise dazu beitragen, die Kosten für die Wartung veralteter Hardware zu senken, hilft jedoch Entwicklern und Endbenutzern nicht unbedingt dabei, die Vorteile der Cloud (oder einer anderen neuen Plattform) voll auszuschöpfen. Daher können sie möglicherweise nicht von wichtigen Modernisierungsmöglichkeiten wie Systemoptimierung, neuen Funktionen und weiteren Kosteneinsparungen profitieren, die durch umfangreichere Änderungen erreicht werden könnten.

Ein Schritt in diese Richtung kann durch die Entscheidung für eine Umstellung von Legacy-Anwendungen auf eine neue Plattform erreicht werden. Dabei wird die Legacy-Anwendung auf eine neuere Version ihrer Laufzeitumgebung migriert, ohne dass umfangreiche Änderungen am Code oder an der Struktur vorgenommen werden. Mit dieser Aktualisierung können Unternehmen die Vorteile moderner Verbesserungen nutzen und gleichzeitig die Anwendung weitgehend intakt lassen. So kann beispielsweise eine Anwendung, die mit Java 5 und J2EE läuft, mit minimalen Änderungen auf Java 11 und Jakarta EE 8 aktualisiert werden. Dies mag zwar nur wie eine kleine Änderung erscheinen, doch die Leistungsverbesserungen und Sicherheitsaktualisierungen sind erheblich und können dazu beitragen, Sicherheitsrisiken zu minimieren.

Unternehmen können eine Umstellung auf eine neue Plattform auch mit Refaktorierung kombinieren, wobei eine Anwendung intern, d. h. im Quellcode, optimiert und umstrukturiert wird, ohne die externe Funktionalität und die beabsichtigten Funktionen zu beeinträchtigen. Das Ziel dieser Art von Modernisierung ist die Verbesserung der internen Leistung und der Pflege der Anwendung, ohne dass es zu erheblichen Ausfallzeiten kommt. So kann beispielsweise die Verlagerung von J2EE-Anwendungen in die Cloud einem veralteten System neues Leben einhauchen, ohne dass in eine komplette Neuprogrammierung investiert werden muss, selbst wenn die aktualisierte Lösung nicht alle Vorteile der neuen Umgebung nutzt.

Wenn das Ziel einer Modernisierung die Umstellung auf eine andere Architektur ist, z.B. von monolithischen auf Microservices-basierte Anwendungen, dann ist eine Umstellung der Architektur notwendig. Indem sie eine monolithische Java-Anwendung in Microservices aufteilen, können Unternehmen die Skalierbarkeit ihrer Systeme, die Unabhängigkeit bei der Bereitstellung sowie die Ausfallsicherheit verbessern.

Anstatt nur einen Teil einer alten Enterprise Java-Anwendung zu aktualisieren, um modernere Architekturen und Innovationen, wie z. B. die Cloud, zu übernehmen, verfügen Unternehmen möglicherweise über die erforderlichen Ressourcen, um die gesamte Anwendung neu zu erstellen. Dabei wird der gesamte Code umgeschrieben, was dazu beitragen kann, dass die neuesten Technologien in vollem Umfang genutzt werden.

Und als Letztes ist der radikalste Ansatz die vollständige Ersetzung der bestehenden Enterprise Java-Anwendung. Ein Neuanfang mit modernen Java-Frameworks und -Technologien kann Unternehmen, die mit den neuesten Lösungen und Trends auf dem Laufenden bleiben wollen, sicherlich helfen. Dies garantiert zwar einen Neustart mit den neuesten Funktionen, erfordert aber auch erhebliche Investitionen in Form von Kosten, Zeit und Ressourcen. Die Unternehmen müssen sorgfältig abwägen, ob die Vorteile einer grundlegenden Erneuerung die Störungen und Unterbrechungen rechtfertigen.

Obwohl die hier betrachteten Modernisierungsansätze unterschiedlich sind, können bestimmte Strategien unabhängig vom gewählten Weg zum Erfolg beitragen. So kann beispielsweise ein schrittweiser Ansatz, selbst bei der Wiederherstellung oder Ersetzung von Legacy-Anwendungen, zur Minimierung von Störungen beitragen. Die schrittweise Einführung neuer Technologien, z. B. durch inkrementelle Updates und Proof-of-Concepts, ermöglicht es den Teams, sich in einem überschaubaren Tempo anzupassen und sicherzustellen, dass das gesamte System und die dazugehörigen Anwendungen weiterhin reibungslos funktionieren.

Eine Modernisierungsmentalität etablieren

Java und Enterprise Java-Anwendung aus den 1990er- und frühen 2000er-Jahren bilden das Rückgrat einer Vielzahl der heutigen digitalen Systeme. Daher ist es von entscheidender Bedeutung, sie auf dem neuesten Stand zu halten und so einen optimalen Betrieb mit hoher Leistung, Effizienz und Betriebszeit bei maximaler Benutzerzufriedenheit zu gewährleisten.

Obwohl die Modernisierung von Anwendungen unvermeidlich ist, besteht das Ziel solcher Aktivitäten nicht darin, alten Code blindlings zu aktualisieren oder jede neue verfügbare Technologie zu übernehmen. Erfolgreiche Modernisierungen sind in erster Linie strategisch, da sie Innovation und Pragmatismus in Einklang bringen. Nicht jedes System muss mit Microservices überarbeitet werden, und auch nicht jede Modernisierung erfordert eine komplette Neuprogrammierung. Mit sorgfältiger Planung und der richtigen Strategie kann selbst eine 30 Jahre alte Java-Anwendung für die nächsten 30 Jahre gerüstet sein.

Total
0
Shares
Previous Post

Wenn hashCode() lügt und equals() hilflos ist

Next Post

Kurze Links, klare Architektur – Ein URL-Shortener in Core Java

Related Posts