💎 Lehrpfad 4: Enterprise Architekturen

Master 16: Enterprise Banking Core & Transactions

Führe alle Kernkonzepte zusammen: Thread-sichere Banktransaktionen, Deadlock-Vermeidung, saubere Kapselung und robuste Testabdeckung.

📂 Dateien dieser Lerneinheit:
📄 Aufgabe.java (Startercode) 🧪 TestAufgabe.java (Tests) 💡 Musterloesung.java (Lösung) 📖 README.md

💡 1. Transaktionssicherheit & Deadlock-Prävention

In verteilten Kernbankensystemen müssen Geldtransfers atomar und thread-sicher sein. Um Deadlocks zu vermeiden, müssen Kontosperren in deterministischer Reihenfolge gesetzt werden:

public class BankingService {
    public boolean transferiere(Konto von, Konto nach, BigDecimal betrag) {
        // Deadlock-Prävention durch konsistente Sperr-Reihenfolge (nach IBAN sortiert):
        Konto ersteSperre = von.getIban().compareTo(nach.getIban()) < 0 ? von : nach;
        Konto zweiteSperre = von.getIban().compareTo(nach.getIban()) < 0 ? nach : von;

        synchronized (ersteSperre) {
            synchronized (zweiteSperre) {
                if (von.getSaldo().compareTo(betrag) < 0) return false;
                von.abbuchen(betrag);
                nach.einzahlen(betrag);
                return true;
            }
        }
    }
}
🏦 Didaktische Analogie: Das Notariat

Ein Immobilienkauf scheitert, wenn der Verkäufer das Geld nimmt, aber das Grundbuch nicht überschreibt. Das Bankensystem garantiert als unparteiischer Notar: Entweder wechseln Geld und Buchung gemeinsam den Besitzer, oder gar nichts passiert!

⚡ 2. Quick-Cheat-Sheet

AnforderungLösungsmusterVerhinderte Gefahr
Exakte Cent-BeträgeBigDecimal statt doubleGleitkomma-Rundungsfehler
Atomarer TransferGeschachtelte SperrenGeldverlust bei Zwischenabsturz
Deadlock-FreiheitSortierte Lock-HierarchieSystem-Freeze bei Kreuzüberweisungen
AuditierbarkeitUnveränderliche Transaktions-RecordsNachträgliche Datenmanipulation

⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)

⚠️ Gleitkommazahlen für Geld

Verwende niemals double für Währungen! 0.1 + 0.2 ergibt 0.30000000000000004.

⚠️ Unsymmetrisches Locking

Sperrt Thread 1 Konto A dann B, und Thread 2 Konto B dann A, entsteht ein unlösbarer Deadlock. Sortiere Locks immer nach ID!

🧠 4. Diagnostischer Selbst-Check

Überprüfe dein Verständnis von Sprach-Features, Speicherverwaltung und Enterprise-Architektur, bevor du den Code in der Web-IDE schreibst.

🎯 5. Aufgaben & Checkliste in Aufgabe.java

💻 In Web-IDE öffnen & lösen →