Wir analysieren die Java-Anwendung in Bezug auf die Java-Version, Konfiguration des Application Servers, Nutzung von EJB und JPA, Dependency-Graph, Build-Toolchain (Ant, Maven, Gradle) sowie Deployment. Das Ergebnis ist ein schriftlicher Migrationsplan mit Risikobewertung, Migrationsansatz und Zeitabschätzung für jeden Schritt. Der Migrationsprozess beginnt erst nach der schriftlichen Analyse.
Wir unterstützen bei der Migration von Java-Anwendungen, die auf Java EE beziehungsweise Jakarta EE basieren, zum Spring-Boot-Framework. Dabei ersetzen wir bestehende EJB Session Beans durch Spring-Komponenten, JAX-RS und JAX-WS Endpunkte durch Spring MVC oder Spring WebFlux, JTA-basierte Transaktionen durch Spring-Transaktionen sowie containerverwaltete Ressourcen durch Spring-native Ressourcen. Die Geschäftslogik bleibt erhalten, wodurch die Anwendung vom Application Server unabhängig gemacht wird.
Wir unterstützen bei der Migration von Anwendungen, die auf JBoss EAP, Oracle WebLogic oder IBM WebSphere laufen, auf moderne Laufzeitumgebungen oder containerisierte Umgebungen. Dazu gehört die Auflösung von Abhängigkeiten zu proprietären APIs und Konfigurationen sowie die Validierung des Anwendungsverhaltens in der neuen Laufzeitumgebung vor dem finalen Umstieg.
Wir aktualisieren ältere Java-Anwendungen, die noch auf Java 6 oder anderen veralteten Java-Versionen laufen, auf aktuelle LTS-Versionen von Java. Dabei entfernen wir veraltete APIs, beheben Probleme des Modulsystems ab Java 9 und stellen die Kompatibilität aller Abhängigkeiten sicher. Bei großen Codebasen erfolgt das Upgrade schrittweise über Zwischenversionen.
Zur Aufteilung eines Java-Monolithen in unabhängig deploybare Microservices setzen wir Domain-Driven Design ein. Die Aufteilung basiert auf der fachlichen Domäne und nicht auf der technischen Schichtenstruktur. Die Microservices werden als eigenständige Komponenten mit Spring Boot entwickelt, mit Docker containerisiert und in einer Kubernetes-Umgebung bereitgestellt. Für die schrittweise Zerlegung des Monolithen nutzen wir das Strangler-Fig-Pattern.
Die Migration einer Java-Anwendung in eine Cloud-Native-Umgebung erfolgt mit Infrastruktur-Plattformen wie AWS, Azure oder Google Cloud. Zunächst wird die Anwendung mit Docker containerisiert, anschließend in Kubernetes orchestriert. Danach erfolgt die Migration der Datenbank in eine Cloud-Native-Umgebung. Abschließend wird eine CI/CD-Pipeline implementiert, um die Anwendung effizient zu betreiben und weiterzuentwickeln.
Wir unterstützen bei der Migration von Legacy-Datenbanken bestehender Java-Anwendungen, darunter Oracle DB, IBM DB2 sowie ältere Versionen von MySQL oder PostgreSQL, auf moderne Managed-Database-Plattformen. Dies umfasst die Migration des Datenbankschemas, Anpassungen der Object-Relational-Mapping-Schicht, die Überarbeitung bestehender Stored Procedures sowie die Validierung der Daten vor und nach der Migration.
Wir modernisieren veraltete SOAP/WSDL-Services und RMI-Schnittstellen und transformieren sie in RESTful oder gRPC APIs. Zum Prozess gehören Contract Design, Versionierung, Authentifizierung und vollständige Dokumentation. Die API-Modernisierung ermöglicht eine reibungslose Integration von Java-Backends mit modernen Frontends und weiteren Services.
Wir modernisieren Legacy-Codebasen, um technische Schulden zu reduzieren, ohne das externe Verhalten der Anwendung zu verändern. Dazu gehören das Entfernen von Code-Duplikaten, die Reduzierung der zyklomatischen Komplexität, das Ersetzen veralteter Codebestandteile, die Aktualisierung von Abhängigkeiten sowie die Einführung automatisierter Tests. Das Refactoring erfolgt schrittweise aufgrund der durchgeführten Analyse.
Wir implementieren CI/CD-Pipelines für Java-Anwendungen, die bislang manuell oder halbautomatisch betrieben werden. Als Build-Tools kommen Maven oder Gradle zum Einsatz, automatisierte Tests werden mit JUnit und Integrationstest-Frameworks durchgeführt, und die Pipelines laufen über GitHub Actions, GitLab CI/CD oder Jenkins.
Wir bieten Wartung und Support für migrierte Java-Anwendungen, einschließlich regelmäßiger Abhängigkeits- und Sicherheitsupdates, Performance-Monitoring und Optimierung, Fehleranalyse und -behebung sowie Infrastrukturmanagement. Wir bieten Supportverträge mit klar definierten Rückmeldungszeiten und Service-Level-Vereinbarungen an.