Delivery Handbuch

Vollständige, direkt lesbare All-in-One-Dokumentation für den Delivery-Bereich.

Einziger Haupt-Einstieg: seb4u-java-master/index.html

Überblick und Schnellstart

Dieses Delivery-Handbuch ist eine All-in-One-Seite. Alle wichtigen Inhalte werden direkt hier angezeigt. Du musst nicht in Unterordner wechseln, um CI/CD, Docker, Kubernetes, Security, Observability, Runbooks, ADRs, Templates, Skripte oder Konfigurationen zu lesen.

57Dokumente
57Konfig/Skripte
54Java-Quellen im Katalog
1Hauptstart: ../index.html
Einziger Einstieg des Gesamtpakets: seb4u-java-master/index.html. Diese Seite ist das vollständige Delivery-Handbuch im Ordner delivery/.

Schnellstart

cd delivery
cp .env.example .env
./scripts/preflight.sh
./scripts/ci-local.sh
./scripts/dev-up.sh
./scripts/smoke-test.sh
./scripts/dev-down.sh

Delivery

Quelle: README.md

Delivery

Dieser Ordner ist kein eigener Einstiegspunkt. Der einzige Einstieg für das gesamte Paket ist:

seb4u-java-master/index.html

Der Ordner delivery/ enthält die Delivery-/DevOps-Artefakte zum Java-Master-System:

  • CI/CD-Workflows unter .github/workflows/
  • Docker-Dateien und compose.yaml
  • Kubernetes-Demo-Manifeste unter k8s/
  • lokale Skripte unter scripts/
  • Delivery-Dokumentation unter docs/devops/
  • ADRs unter docs/adr/
  • API-Beispiele unter docs/api/
  • Maven-/Java-Projektdateien für Delivery-Prüfungen

Wichtige HTML-Dokumente

Diese HTML-Seiten sind Dokumentationsseiten, aber keine separaten Startpunkte:

  • docs/devops/DELIVERY_MASTER_PLAN.html
  • docs/devops/CI_CD.html
  • docs/devops/DOCKER.html
  • docs/devops/KUBERNETES_BASELINE.html falls vorhanden, sonst k8s/README.html
  • docs/devops/SECURITY_DELIVERY_CHECKLIST.html
  • docs/devops/OBSERVABILITY_DEEP_DIVE.html
  • docs/devops/RELEASE_RUNBOOK.html
  • docs/devops/INCIDENT_RUNBOOK.html
  • docs/devops/OPERATIONS_PLAYBOOK.html

Schnellstart lokal

cd delivery
cp .env.example .env
bash scripts/preflight.sh
bash scripts/ci-local.sh
make docker-up
make smoke
make docker-down

Name

Im gesamten Paket heißt dieser Bereich nur noch Delivery. Alte Namen wie Delivery, Delivery, fixed, clean oder v2 werden nicht mehr verwendet.

seb4u Java Master – Delivery

Quelle: docs/devops/DELIVERY_INTRO.md

seb4u Java Master – Delivery

Dieses Paket erweitert das bestehende Java-Master-Projekt um professionelle Delivery-Struktur.

Neue Bereiche

  • GitHub Actions CI
  • Docker und Compose
  • lokale Make-Targets
  • Package Guard
  • Quality-Gates
  • Smoke-Tests
  • OpenAPI-Vertrag
  • ADRs
  • Release- und Incident-Runbooks
  • Portfolio-Guide

Schnellstart

cp .env.example .env
make compile
make test
make quality
make docker-up
make smoke
make docker-down

Wichtigste Dateien

.github/workflows/ci.yml
.github/workflows/docker-smoke.yml
.github/workflows/release-dry-run.yml
Dockerfile.spring
Dockerfile.file-worker
compose.yaml
Makefile
docs/devops/
docs/adr/
docs/api/commerceflow-openapi.yaml
docs/project/
scripts/package-guard.sh
scripts/quality-gates.sh
scripts/smoke-test.sh

Package-Standard

Alle eigenen Java-Packages bleiben bei:

  • com.seb4u.demo...
  • com.seb4u.demo.spring...
  • com.seb4u.demo.jakarta...

SEB4U Delivery

Quelle: docs/devops/DELIVERY_OVERVIEW.md

SEB4U Delivery

Der Delivery Pack wurde ausgebaut. Er ist jetzt nicht nur ein kleines DevOps-Beispiel, sondern ein kompletter professioneller Auslieferungs- und Betriebsrahmen für das Java-Master-Projekt.

Inhalt

Bereich Enthalten
CI/CD GitHub Actions für CI, Docker Smoke, Release Dry Run, Security, Docs, Nightly Quality
Container Dockerfiles, Compose, lokale Stack-Skripte
Kubernetes Namespace, Deployment, Service, Ingress, HPA, PDB, NetworkPolicy, Kustomize
Qualität Package Guard, Quality Gates, OpenAPI Check, Local CI, Performance Smoke
Security Delivery Security Checklist, Supply Chain Hinweise, Secret Scan Baseline
Betrieb Incident Runbook, Operations Playbook, Rollback Strategy, Service Levels
Observability Logging-Konzept, Metrics, Alert-Regeln, Beispiel-Konfigurationen
Projektführung ADRs, Roadmap, Task Board, Review-Rubrik, PR Template

Umfang

  • Dateien gesamt: 180
  • Java-Dateien: 54
  • GitHub Workflows: 6
  • Kubernetes YAML-Dateien: 9
  • Shell-Skripte: 13
  • DevOps/Doku-Dateien: 46

Start

cp .env.example .env
bash scripts/preflight.sh
bash scripts/ci-local.sh
make docker-up
make smoke
make docker-down

Delivery Master Plan

Quelle: docs/devops/DELIVERY_MASTER_PLAN.md

Delivery Master Plan

Dieses Dokument beschreibt die professionelle Auslieferung des SEB4U Java Master Projekts von lokalem Build bis Release.

Zielbild

Bereich Ziel Artefakt
Build reproduzierbar, schnell, prüfbar Maven, Wrapper-Strategie, CI
Test Unit, Integration, Smoke, Contract JUnit, Testplan, OpenAPI
Container lokal und CI nutzbar Dockerfiles, Compose
Security früh prüfen, nicht erst im Betrieb Package Guard, Dependency Checkliste
Release nachvollziehbar und rückrollbar Runbook, Changelog, Tags
Betrieb beobachtbar, diagnosefähig Logs, Metrics, Traces, Health

Pipeline-Stufen

  1. Validate: Java-Version, Package-Standard, Format, statische Checks.
  2. Compile: alle Module kompilieren.
  3. Test: Unit- und Modul-Tests.
  4. Contract: OpenAPI-Datei validieren und Beispielrequests prüfen.
  5. Package: JARs und Container bauen.
  6. Smoke: Service startet, Healthcheck antwortet, Beispielrequest funktioniert.
  7. Release Dry Run: Version, Changelog, Git-Tag, Rollback-Plan prüfen.
  8. Deploy: Zielumgebung aktualisieren.
  9. Observe: Logs, Metriken und Fehlerbudget beobachten.

Definition of Done

  • Alle Qualitäts-Gates grün.
  • Keine fremden Demo-Packages (com.example, com.acme).
  • OpenAPI und Implementierung passen zusammen.
  • Smoke-Test läuft gegen Container.
  • Release Notes sind geschrieben.
  • Rollback-Schritte sind dokumentiert.

Lokale Entwicklung

Quelle: docs/devops/LOCAL_DEVELOPMENT.md

Lokale Entwicklung

Voraussetzungen

  • Java 25 oder kompatible JDK-Installation
  • Maven 3.9+ oder IDE mit Maven-Integration
  • Docker mit Compose-Unterstützung
  • Git

Standardworkflow

make compile
make test
make quality

Spring Adapter starten

make run-spring

oder per Docker:

make docker-up
make smoke
make docker-down

Typische Fehler

Symptom Ursache Lösung
Unsupported class file major version falsches JDK Java 25 aktivieren
Port 8080 belegt anderer Service läuft APP_PORT=8090 make docker-up
Docker Healthcheck rot App startet noch Logs lesen: docker compose logs -f
Tests grün, Docker rot Dockerfile/Runtime-Problem Smoke-Workflow lokal nachbauen

CI/CD Pipeline

Quelle: docs/devops/CI_CD.md

CI/CD Pipeline

Pipeline-Stufen

Checkout -> JDK Setup -> Compile -> Test -> Package -> Package Guard -> Reports

CI-Ziele

  1. schnelles Feedback bei Pull Requests
  2. reproduzierbarer Maven-Build
  3. Erkennen falscher Package-Namen
  4. zentrale Testreports
  5. separater Docker-Smoke für Runtime-Probleme

Branch-Strategie

Branch Zweck Gate
main stabiler Stand CI muss grün sein
feature/* Lern-/Featurearbeit PR + Review
release/* Release-Kandidat Release-Dry-Run

Quality Gates

  • mvn compile
  • mvn test
  • mvn package
  • scripts/package-guard.sh
  • OpenAPI- und ADR-Dateien vorhanden

Warum kein Deployment automatisch?

Das Projekt ist ein Lernsystem. Deshalb erzeugt die Pipeline zuerst reproduzierbare Artefakte. Echte Deployments sollten später mit Umgebung, Secrets, Registry und Rollback-Regeln ergänzt werden.

Quality Gates

Quelle: docs/devops/QUALITY_GATES.md

Quality Gates

Definition of Done

Ein Modul gilt als fertig, wenn:

  • es kompiliert
  • Tests vorhanden und grün sind
  • Package-Standard eingehalten wird
  • README aktualisiert ist
  • Fehlerfälle erklärt sind
  • bei API-Code der Vertrag dokumentiert ist

Review-Checkliste

Bereich Frage
Architektur Bleibt Domain frei von Frameworks?
API Sind Fehlerantworten stabil?
I/O Sind Pfade validiert und Schreibvorgänge atomar?
Concurrency Gibt es Timeouts, Cancellation und Shutdown?
Security Werden Secrets nie geloggt?
Testing Gibt es positive und negative Fälle?
Betrieb Gibt es Healthcheck und Runbook?

Automatisierte Gates

bash scripts/package-guard.sh
mvn -B -ntp compile
mvn -B -ntp test
mvn -B -ntp package

Docker & Compose

Quelle: docs/devops/DOCKER.md

Docker & Compose

Services

Service Profil Zweck
commerceflow-spring app REST/HTTP Adapter
file-worker worker File-/Outbox-Demo
docs docs Workbook/Cheat-Sheets lokal anzeigen

App starten

docker compose --profile app up -d --build
curl http://localhost:8080/actuator/health

Dokumentation starten

docker compose --profile docs up -d
open http://localhost:8088

Designregeln

  • Dockerfiles bauen nur konkrete Adapter, nicht alle Lernmodule als Runtime.
  • Domain und Application bleiben Framework-neutral.
  • Runtime-Images laufen mit unprivilegiertem User.
  • Healthchecks prüfen den tatsächlichen HTTP-Prozess.

Kubernetes Demo Manifeste

Quelle: k8s/README.md

Kubernetes Demo Manifeste

Diese Manifeste sind als Lern- und Strukturbeispiel gedacht. Für Produktion müssen Image Registry, Secrets, Ressourcenlimits und Netzwerkregeln projektspezifisch angepasst werden.

kubectl apply -k k8s/
kubectl get pods -n seb4u

Environment Strategy

Quelle: docs/devops/ENVIRONMENT_STRATEGY.md

Environment Strategy

Umgebung Zweck Daten Deployment
local Entwicklung Demo/Test Compose
ci automatisierte Checks generiert GitHub Actions
staging Releaseprobe anonymisiert Container/K8s
prod Betrieb echt kontrolliert

Konfigurationsregeln

  • Defaults dürfen sicher sein, aber nicht produktionsgefährlich.
  • Secrets nie committen.
  • Ports, URLs und Credentials über Environment oder Profile.
  • Feature Flags explizit dokumentieren.

Test Strategy

Quelle: docs/devops/TEST_STRATEGY.md

Test Strategy

Testpyramide

Ebene Zweck Beispiele
Unit reine Logik Money, Result, Validatoren
Modul Ports/Use Cases PlaceOrderUseCase mit Fake Ports
Integration Adapter File Outbox, Spring Controller
Contract API-Vertrag OpenAPI gegen Request/Response
Smoke läuft der Service? Healthcheck + Beispielorder
Performance Smoke grobe Regression 100 Beispielrequests, Latenzgrenze

Anti-Patterns

  • Alles mit Spring-Kontext testen, obwohl reine Domainlogik reicht.
  • Zufällige Tests ohne kontrollierte Clock/ID-Generatoren.
  • Tests, die Reihenfolge oder globale Zustände voraussetzen.
  • Nur Happy Path testen.

Checkliste pro Pull Request

  • [ ] Mindestens ein Test schützt die neue Fachregel.
  • [ ] Fehlerfall ist abgedeckt.
  • [ ] Keine Sleeps in Tests ohne Timeout-Strategie.
  • [ ] Tests sind unabhängig voneinander ausführbar.
  • [ ] Keine echten Secrets in Testdaten.

Security Delivery Checklist

Quelle: docs/devops/SECURITY_DELIVERY_CHECKLIST.md

Security Delivery Checklist

Vor Merge

  • [ ] Keine Secrets im Repository.
  • [ ] Keine alten Demo-Packages.
  • [ ] Eingaben validiert.
  • [ ] Fehlerantworten verraten keine Interna.
  • [ ] Authentifizierung/Autorisierung nicht im Controller versteckt.
  • [ ] Logs enthalten keine Passwörter, Tokens oder vollständige Zahlungsdaten.

Vor Release

  • [ ] Dependency-Report geprüft.
  • [ ] Container läuft als non-root User.
  • [ ] Nur notwendige Ports exposed.
  • [ ] CORS bewusst konfiguriert.
  • [ ] Rate Limit oder Schutzkonzept dokumentiert.
  • [ ] Rollback-Plan vorhanden.

Threat Model Kurzform

Bedrohung Schutz
Manipulierte Requests Validation + Fehlerverträge
Replay Idempotency Keys
Datenverlust Outbox + atomare Dateioperationen
Secret Leak .env.example, keine echten Secrets
Supply Chain Dependabot, Lock/Version Review

Supply Chain Security

Quelle: docs/devops/SUPPLY_CHAIN_SECURITY.md

Supply Chain Security

Risiken

  • Ungeprüfte Dependencies.
  • Zu breite Version Ranges.
  • Base Images ohne Update-Strategie.
  • Build-Skripte ohne Review.
  • Secrets in CI Logs.

Regeln

  • Versionen zentral verwalten.
  • Dependency Updates klein und regelmäßig einspielen.
  • CI-Workflows wie Code behandeln.
  • Container möglichst minimal halten.
  • Keine Tokens in Beispieldateien.

Observability

Quelle: docs/devops/OBSERVABILITY.md

Observability

Ziel

Nicht nur wissen, dass etwas kaputt ist, sondern schnell erkennen:

  • welche Operation betroffen ist
  • welche Korrelation/Order-ID betroffen ist
  • ob der Fehler transient oder dauerhaft ist
  • ob ein Rollback nötig ist

Minimalstandard

Signal Beispiel
Logs strukturierte Events mit Order-ID
Metrics Requests, Fehler, Dauer, Queue-Länge
Traces Use Case über Adaptergrenzen hinweg
Health Liveness und Readiness

Log-Event-Form

{
  "event": "order.placed",
  "orderId": "ord-123",
  "customerId": "cus-1",
  "durationMs": 42,
  "result": "success"
}

Lernaufgabe

Erweitere commerceflow-adapter-spring um einen Request-Logging-Filter, der pro Request eine Korrelation-ID erzeugt oder übernimmt.

Observability Deep Dive

Quelle: docs/devops/OBSERVABILITY_DEEP_DIVE.md

Observability Deep Dive

Was beobachtet wird

Signal Frage Beispiel
Logs Was ist passiert? order.created, payment.failed
Metrics Wie oft/langsam? Requestdauer, Fehlerquote
Traces Wo hängt es? Controller → Use Case → Adapter
Events Welche Fachänderung? OrderPlaced, PaymentApproved

Strukturierte Logfelder

{
  "service": "commerceflow",
  "env": "local",
  "correlationId": "c-123",
  "orderId": "o-987",
  "event": "order.created",
  "durationMs": 42
}

Alert-Regeln

  • Fehlerquote > 2% für 10 Minuten.
  • P95 Latenz > 500ms für 15 Minuten.
  • Outbox Queue wächst über Schwellenwert.
  • Healthcheck schlägt mehrfach fehl.

Service Levels

Quelle: docs/devops/SERVICE_LEVELS.md

Service Levels

Beispiel-SLOs für CommerceFlow

Messwert Ziel
Verfügbarkeit local/staging nicht relevant, nur Demo
Fehlerquote API < 2% im Smoke-Test
P95 Response Time < 500ms im Smoke-Test
Outbox Verarbeitung innerhalb 60 Sekunden

Fehlerbudget

Ein Fehlerbudget verhindert, dass neue Features blind ausgeliefert werden, wenn der Service instabil ist. Für Lernprojekte genügt ein vereinfachter Ansatz: Wenn Smoke/Quality-Gates rot sind, wird nicht released.

Production Readiness Matrix

Quelle: docs/devops/PRODUCTION_READINESS_MATRIX.md

Production Readiness Matrix

Kategorie Bronze Silber Gold
Build mvn test läuft CI prüft alle Module reproduzierbare Versionen + SBOM
Tests Unit Tests Integration + Smoke Contract + Performance Smoke
Config .env.example Profile lokal/ci/prod Secret-Strategie dokumentiert
Logging lesbare Logs strukturierte Logs Correlation IDs + Audit Events
Metrics Health Endpoint technische Metriken Business-Metriken + Alerts
Security Input Validation Dependency Checks Threat Model + Release Gate
Deployment manuell Docker Compose Kubernetes Manifeste + Rollback
Betrieb README Runbooks Incident Simulation

Master-Regeln

  • Ein Service ist nicht fertig, wenn er nur lokal startet.
  • Jede Änderung braucht einen Weg zum Testen, Releasen und Zurückrollen.
  • Logs sind Teil des Produkts, nicht Debug-Reste.
  • Konfiguration gehört nicht in Code, sondern in Umgebung, Profile oder Secret Stores.

Release Runbook

Quelle: docs/devops/RELEASE_RUNBOOK.md

Release Runbook

1. Vorbereitung

git status
make quality
bash scripts/release-dry-run.sh 1.0.0

2. Prüfung

  • Sind alle Tests grün?
  • Stimmen Package-Namen mit com.seb4u.demo...?
  • Sind README, Workbook und Cheat-Sheets aktuell?
  • Ist das OpenAPI-Dokument aktuell?
  • Gibt es offene ADRs?

3. Artefakte

  • Maven-Module als JARs
  • Docker Image für Spring Adapter
  • ZIP-Archiv für Lernpaket
  • SHA256-Prüfsumme

4. Rollback

  1. letzte funktionierende Git-Revision identifizieren
  2. Docker-Image-Tag zurücksetzen
  3. Compose oder Plattform neu starten
  4. Smoke-Test ausführen
  5. Incident-Notiz schreiben

5. Nachbereitung

  • Changelog ergänzen
  • Lessons Learned notieren
  • Workbook-Aufgaben ggf. anpassen

Rollback Strategy

Quelle: docs/devops/ROLLBACK_STRATEGY.md

Rollback Strategy

Rollback-Arten

Art Wann Risiko
Container-Rollback Service-Code fehlerhaft niedrig
Config-Rollback falsche Variable/Profile mittel
Daten-Rollback Migration fehlerhaft hoch
Feature-Flag-Off Feature fehlerhaft niedrig

Vor jedem Release klären

  • Welche Version ist die letzte bekannte gute Version?
  • Sind Datenmigrationen rückwärtskompatibel?
  • Gibt es ein Feature Flag?
  • Welche Smoke-Tests bestätigen den Rollback?

Incident Runbook

Quelle: docs/devops/INCIDENT_RUNBOOK.md

Incident Runbook

Erste 5 Minuten

  1. Umfang klären: lokal, CI, Docker, Runtime?
  2. Logs sichern: docker compose logs --no-color > incident.log
  3. Health prüfen: curl -v /actuator/health
  4. letzte Änderung finden: git log --oneline -5
  5. Workaround oder Rollback entscheiden

Diagnosematrix

Problem Prüfen Häufige Lösung
App startet nicht Java-Version, JAR, Env Dockerfile oder JDK korrigieren
Tests hängen Concurrency-Code Timeouts, Executor Shutdown
API 500 Controller/Use Case Fehlervertrag testen
Outbox leer Adapter-Konfiguration Pfade/Volumes prüfen
CI rot Workflow-Log lokal denselben Maven-Befehl ausführen

Postmortem-Fragen

  • Was war der technische Auslöser?
  • Welcher Test hätte es verhindert?
  • Welche Dokumentation fehlte?
  • Welche Metrik hätte früher gewarnt?

Operations Playbook

Quelle: docs/devops/OPERATIONS_PLAYBOOK.md

Operations Playbook

Häufige Symptome

Symptom Erste Prüfung Nächster Schritt
Service startet nicht Logs, Port, Env Config prüfen
Healthcheck rot /actuator/health Dependency prüfen
Requests langsam Metriken, Logs Thread/DB/File IO prüfen
Outbox wächst Worker Logs Dead-letter prüfen
4xx häufen sich Request Validation API Docs prüfen
5xx häufen sich Stacktraces Rollback erwägen

Incident-Minimalprozess

  1. Problem beschreiben.
  2. Zeit und betroffene Version notieren.
  3. Scope feststellen.
  4. Sofortmaßnahme wählen.
  5. Ursache analysieren.
  6. Follow-up Task erstellen.

CommerceFlow Runbook

Quelle: docs/devops/RUNBOOK_COMMERCEFLOW.md

CommerceFlow Runbook

Start lokal

cp .env.example .env
make docker-up
make smoke

Diagnose

docker compose ps
docker compose logs -f commerceflow-spring
curl -i http://localhost:8080/actuator/health

Typische Fehler

Fehler Ursache Lösung
Port belegt 8080 genutzt .env Port ändern
Build rot Java/Maven fehlt Devcontainer nutzen
Smoke rot Service nicht ready Logs prüfen
Outbox leer Use Case nicht ausgeführt Beispielrequest senden

Code Ownership

Quelle: docs/devops/CODE_OWNERSHIP.md

Code Ownership

Bereich Owner-Rolle Review-Fokus
Domain Backend/Core Invarianten, Typmodell
Application Backend Use Cases, Transaktionen
Adapter Integration Fehler, I/O, Timeouts
Delivery DevOps CI, Container, Release
Docs Tech Lead Verständlichkeit, Aktualität

Review-Regeln

  • Kritische Pfade brauchen zweiten Review.
  • Delivery-Dateien zählen als produktiver Code.
  • Jede neue Architekturentscheidung bekommt ein ADR, wenn sie mehrere Module betrifft.

Changelog Template

Quelle: docs/devops/CHANGELOG_TEMPLATE.md

Changelog Template

[Unreleased]

Added

Changed

Fixed

Security

[x.y.z] - YYYY-MM-DD

Added

Changed

Fixed

Release Notes Template

Quelle: docs/devops/RELEASE_NOTES_TEMPLATE.md

Release Notes Template

Version

vX.Y.Z

Änderungen

  • Feature:
  • Fix:
  • Breaking Change:
  • Migration:

Risiken

  • Technisch:
  • Fachlich:
  • Betrieb:

Tests

  • [ ] Unit
  • [ ] Integration
  • [ ] Smoke
  • [ ] Docker
  • [ ] Rollback geprüft

Projekt-Roadmap

Quelle: docs/project/ROADMAP.md

Projekt-Roadmap

Phase 1: Stabilisieren

  • Package Guard in CI aktiv
  • Smoke-Test lokal und in GitHub Actions
  • OpenAPI-Vertrag prüfen
  • README pro Modul aktuell halten

Phase 2: Professionalisieren

  • Spring Adapter mit echten Fehlerantworten erweitern
  • Testcontainers für Spring Adapter ergänzen
  • Observability-Beispiele um Metriken erweitern
  • Docker-Image in Registry veröffentlichen

Phase 3: Portfolio-Reife

  • Screenshots und API-Beispiele ergänzen
  • Architekturdiagramme aktualisieren
  • 3–5 Architekturentscheidungen erklären
  • Demo-Video oder README Walkthrough erstellen

Task Board

Quelle: docs/project/TASK_BOARD.md

Task Board

Backlog

ID Aufgabe Modul Schwierigkeit
B-001 Request Correlation ID einbauen Spring Mittel
B-002 Outbox Worker idempotent machen File Adapter Schwer
B-003 Contract-Test aus OpenAPI ableiten Tests Schwer
B-004 Docker Image Größe messen DevOps Mittel
B-005 Algorithmen-Benchmark ergänzen Algorithms Mittel

In Progress

ID Aufgabe Notiz
P-001 Delivery Pack prüfen make quality lokal ausführen

Done-Kriterien

  • Code kompiliert
  • Tests grün
  • README/Workbook angepasst
  • Package Guard grün
  • Smoke-Test dokumentiert

Review-Rubrik

Quelle: docs/project/REVIEW_RUBRIC.md

Review-Rubrik

Punkte Bedeutung
0 fehlt oder falsch
1 funktioniert nur für Happy Path
2 solide, aber mit Lücken
3 produktionsnah und gut erklärt

Bewertungskategorien

Kategorie 0 1 2 3
Korrektheit kompiliert nicht Happy Path Edge Cases Fehlerverträge
Architektur vermischt Schichten teilweise getrennt klare Ports sauber hexagonal
Tests keine wenige relevante Fälle inkl. negative Fälle
Betrieb keine Hinweise Startbefehl Health/Logs Runbook/Smoke
Security ignoriert einfache Checks Validation sichere Defaults

Portfolio Guide

Quelle: docs/project/PORTFOLIO_GUIDE.md

Portfolio Guide

Ziel

Das Projekt soll zeigen, dass du Java nicht nur syntaktisch kennst, sondern strukturiert entwickeln, testen und betreiben kannst.

README-Erzählung

  1. Problem: CommerceFlow simuliert Bestellung und Outbox.
  2. Architektur: Domain, Application, Adapter.
  3. Qualität: Tests, Package Guard, CI.
  4. Betrieb: Docker, Healthcheck, Smoke-Test.
  5. Lernen: Workbook und Cheat-Sheets.

Gute Demo-Reihenfolge

make test
make docker-up
make smoke
make docker-down

Interview-Satz

„Ich habe das Projekt bewusst hexagonal aufgebaut: Die Domain kennt weder Spring noch Jakarta, Adapter implementieren Ports, und CI prüft Package- und Build-Regeln automatisch.“

Architektur: seb4u Java Master Projektpaket

Quelle: docs/ARCHITECTURE.md

Architektur: seb4u Java Master Projektpaket

Modulgruppen

A Lernlabs
  java-core
  java-io
  java-concurrency
  java-algorithms
  security-labs

B CommerceFlow Core
  commerceflow-domain
  commerceflow-application

C Adapter
  commerceflow-adapter-file
  commerceflow-adapter-spring
  commerceflow-adapter-jakarta

D Tests
  commerceflow-tests

Dependency-Regel

Adapter -> Application -> Domain
Labs    -> keine CommerceFlow-Abhängigkeit
Domain  -> keine Framework-Abhängigkeit

Package-Regel

com.seb4u.demo.*
com.seb4u.demo.spring.*
com.seb4u.demo.jakarta.*

Projektstruktur

Quelle: docs/PROJECT_TREE.md

Projektstruktur

seb4u-java-master-parent/
├── pom.xml
├── README.md
├── docs/
├── java-core/
├── java-io/
├── java-concurrency/
├── java-algorithms/
├── security-labs/
├── commerceflow-domain/
├── commerceflow-application/
├── commerceflow-adapter-file/
├── commerceflow-adapter-spring/
├── commerceflow-adapter-jakarta/
└── commerceflow-tests/

Architecture Decision Records

Quelle: docs/adr/README.md

Architecture Decision Records

ADRs dokumentieren wichtige Projektentscheidungen. Jede Entscheidung wird kurz, prüfbar und änderbar beschrieben.

Index

  • ADR-0001: Package Standard
  • ADR-0002: Hexagonale CommerceFlow Architektur
  • ADR-0003: Maven Multi-Module Aufbau
  • ADR-0004: Docker Compose für lokale Laufzeit
  • ADR-0005: CI Quality Gates
  • ADR-0006: OpenAPI als API-Vertrag

Vorlage

# ADR-XXXX: Titel

## Status
Akzeptiert | Ersetzt | Entwurf

## Kontext

## Entscheidung

## Konsequenzen

Zweck

Quelle: .github/PULL_REQUEST_TEMPLATE.md

Zweck

Änderung

Tests

  • [ ] Unit
  • [ ] Integration
  • [ ] Smoke
  • [ ] Nicht nötig, Begründung:

Risiko

Checkliste

  • [ ] Package-Standard eingehalten
  • [ ] Keine Secrets
  • [ ] Doku aktualisiert
  • [ ] Rollback bedacht

seb4u Projektpaket Check

Quelle: SEB4U_PROJECT_EXPORT_CHECK.md

seb4u Projektpaket Check

Ziel: Empfehlung 9 + 10 umsetzen.

  • Projekt-Export Edition: umgesetzt
  • Maven Multi-Module Edition: umgesetzt
  • Package-Standard: com.seb4u.demo, com.seb4u.demo.spring, com.seb4u.demo.jakarta
  • Hexagonale CommerceFlow-Struktur: umgesetzt
  • Spring und Jakarta getrennt: umgesetzt
  • README pro Modul: umgesetzt
  • Quickstart und HTTP-Testrequest: umgesetzt

Hinweis: Der Container hatte kein Maven installiert. Es wurde deshalb ein statischer Struktur- und Package-Check durchgeführt; Maven-Build bitte lokal mit JDK 25 und Maven ausführen.

seb4u Java Master Projektpaket – Report

Quelle: SEB4U_PROJECT_EXPORT_REPORT.md

seb4u Java Master Projektpaket – Report

Ergebnis

  • Java-Dateien: 44
  • Maven-POMs: 12
  • Maven-Module: 11
  • README-Dateien: 12
  • eindeutige Package-Deklarationen: 13
  • ungültige Packages: 0

Module

  • java-core
  • java-io
  • java-concurrency
  • java-algorithms
  • security-labs
  • commerceflow-domain
  • commerceflow-application
  • commerceflow-adapter-file
  • commerceflow-adapter-spring
  • commerceflow-adapter-jakarta
  • commerceflow-tests

Package-Standard

Alle eigenen Java-Dateien liegen unter einer dieser Basen:

  • com.seb4u.demo
  • com.seb4u.demo.spring
  • com.seb4u.demo.jakarta

Statischer Package-Check: OK

Compile-Check

  • javac --release 21 für alle frameworkfreien Main-Module: OK
  • Spring/Jakarta-Module benötigen externe Dependencies und wurden im Container nicht mit Maven gebaut.
  • Im Container war Maven nicht installiert; lokaler Vollbuild bitte mit JDK 25 und Maven ausführen:
mvn clean verify

Empfohlener lokaler Volltest

cd seb4u-java-master-parent
mvn clean verify
mvn -pl commerceflow-adapter-spring -am spring-boot:run

SEB4U Java Master – Delivery-Bereinigung Check

Quelle: check.md

SEB4U Java Master – Delivery-Bereinigung Check

Datum: 2026-07-03T08:59:39

Ziel

Im Gesamtpaket soll es genau eine Delivery-Sektion geben.

Ergebnis

  • Einziger Delivery-Startpunkt: delivery/index.html
  • Delivery-Dokumentation: delivery/index.html
  • Kein zusätzliches Delivery-ZIP im Hauptpaket
  • Einheitlicher sichtbarer Name: Delivery
  • Alle Delivery-Inhalte liegen direkt lesbar unter delivery/

Prüfwerte

  • HTML-Dateien geprüft: 109
  • Fehlende lokale HTML-Links: 0
  • HTML-Dateien mit doppelten IDs: 0
  • Alte Delivery-Doppelbegriffe in Startdateien: 0
  • ZIP-Dateien innerhalb von delivery/: 0

Fehlende Links

Keine.

Doppelte IDs

Keine.

Alte Begriffe in Startdateien

Keine.

ZIP-Dateien in Delivery

Keine.

commerceflow-adapter-file

Quelle: commerceflow-adapter-file/README.md

commerceflow-adapter-file

Dateibasierte Adapter für Repository und Outbox.

commerceflow-adapter-jakarta

Quelle: commerceflow-adapter-jakarta/README.md

commerceflow-adapter-jakarta

Jakarta Servlet Adapter mit Package com.seb4u.demo.jakarta.commerceflow.

commerceflow-adapter-spring

Quelle: commerceflow-adapter-spring/README.md

commerceflow-adapter-spring

Spring Boot REST Adapter mit Package com.seb4u.demo.spring.commerceflow.

commerceflow-application

Quelle: commerceflow-application/README.md

commerceflow-application

Use Cases und Ports ohne Framework-Abhängigkeit.

commerceflow-domain

Quelle: commerceflow-domain/README.md

commerceflow-domain

Frameworkfreier Domain Core für CommerceFlow.

commerceflow-tests

Quelle: commerceflow-tests/README.md

commerceflow-tests

Akzeptanztests und Architekturregeln für CommerceFlow.

ADR-0001-package-standard: Package Standard

Quelle: docs/adr/ADR-0001-package-standard.md

ADR-0001-package-standard: Package Standard

Status

Akzeptiert

Kontext

Das seb4u Java Master Projekt ist gleichzeitig Lernsystem, Codebasis und Portfolio-Projekt. Deshalb müssen Architekturentscheidungen sichtbar dokumentiert werden.

Entscheidung

Alle eigenen Packages verwenden com.seb4u.demo, com.seb4u.demo.spring oder com.seb4u.demo.jakarta.

Konsequenzen

Ein konsistenter Package-Standard macht Codebeispiele kopierbar, suchbar und prüfbar.

Review-Fragen

  • Ist die Entscheidung noch passend?
  • Gibt es neue Module, die dagegen verstoßen?
  • Muss das Workbook angepasst werden?

ADR-0002-hexagonal-commerceflow: Hexagonale CommerceFlow Architektur

Quelle: docs/adr/ADR-0002-hexagonal-commerceflow.md

ADR-0002-hexagonal-commerceflow: Hexagonale CommerceFlow Architektur

Status

Akzeptiert

Kontext

Das seb4u Java Master Projekt ist gleichzeitig Lernsystem, Codebasis und Portfolio-Projekt. Deshalb müssen Architekturentscheidungen sichtbar dokumentiert werden.

Entscheidung

Domain und Application bleiben Framework-neutral; Adapter implementieren Ports.

Konsequenzen

So kann Spring, Jakarta, File-I/O und Testing getrennt gelernt werden.

Review-Fragen

  • Ist die Entscheidung noch passend?
  • Gibt es neue Module, die dagegen verstoßen?
  • Muss das Workbook angepasst werden?

ADR-0003-maven-multi-module: Maven Multi-Module Aufbau

Quelle: docs/adr/ADR-0003-maven-multi-module.md

ADR-0003-maven-multi-module: Maven Multi-Module Aufbau

Status

Akzeptiert

Kontext

Das seb4u Java Master Projekt ist gleichzeitig Lernsystem, Codebasis und Portfolio-Projekt. Deshalb müssen Architekturentscheidungen sichtbar dokumentiert werden.

Entscheidung

Das Projekt nutzt ein Parent-POM mit Lern- und CommerceFlow-Modulen.

Konsequenzen

Modulgrenzen werden sichtbar und Dependency-Richtung kann geprüft werden.

Review-Fragen

  • Ist die Entscheidung noch passend?
  • Gibt es neue Module, die dagegen verstoßen?
  • Muss das Workbook angepasst werden?

ADR-0004-docker-compose-local: Docker Compose für lokale Laufzeit

Quelle: docs/adr/ADR-0004-docker-compose-local.md

ADR-0004-docker-compose-local: Docker Compose für lokale Laufzeit

Status

Akzeptiert

Kontext

Das seb4u Java Master Projekt ist gleichzeitig Lernsystem, Codebasis und Portfolio-Projekt. Deshalb müssen Architekturentscheidungen sichtbar dokumentiert werden.

Entscheidung

Lokale Runtime wird über Compose-Profile modelliert.

Konsequenzen

Lernende können App, Worker und Dokumentation getrennt starten.

Review-Fragen

  • Ist die Entscheidung noch passend?
  • Gibt es neue Module, die dagegen verstoßen?
  • Muss das Workbook angepasst werden?

ADR-0005-ci-quality-gates: CI Quality Gates

Quelle: docs/adr/ADR-0005-ci-quality-gates.md

ADR-0005-ci-quality-gates: CI Quality Gates

Status

Akzeptiert

Kontext

Das seb4u Java Master Projekt ist gleichzeitig Lernsystem, Codebasis und Portfolio-Projekt. Deshalb müssen Architekturentscheidungen sichtbar dokumentiert werden.

Entscheidung

CI kompiliert, testet, paketiert und prüft Package-Regeln.

Konsequenzen

Schnelles Feedback verhindert schleichende Strukturfehler.

Review-Fragen

  • Ist die Entscheidung noch passend?
  • Gibt es neue Module, die dagegen verstoßen?
  • Muss das Workbook angepasst werden?

ADR-0006-openapi-contract: OpenAPI als API-Vertrag

Quelle: docs/adr/ADR-0006-openapi-contract.md

ADR-0006-openapi-contract: OpenAPI als API-Vertrag

Status

Akzeptiert

Kontext

Das seb4u Java Master Projekt ist gleichzeitig Lernsystem, Codebasis und Portfolio-Projekt. Deshalb müssen Architekturentscheidungen sichtbar dokumentiert werden.

Entscheidung

Die CommerceFlow HTTP-API wird in docs/api/commerceflow-openapi.yaml beschrieben.

Konsequenzen

API-Design wird überprüfbar, testbar und für Frontend/Clients nutzbar.

Review-Fragen

  • Ist die Entscheidung noch passend?
  • Gibt es neue Module, die dagegen verstoßen?
  • Muss das Workbook angepasst werden?

seb4u Delivery Pack

Quelle: docs/devops/README.md

seb4u Delivery Pack

Dieses Paket macht aus dem Lernprojekt ein professionelles Delivery-Setup.

Enthalten

  • GitHub Actions für CI, Docker-Smoke und Release-Dry-Run
  • Dockerfile für Spring Adapter und File Worker
  • Compose-Profil für App, Worker und lokale Dokumentation
  • lokale Make-Targets
  • Qualitäts-Gates
  • OpenAPI-Vertrag
  • ADRs für Architekturentscheidungen
  • Runbooks für Release, Incident, Rollback und lokale Entwicklung

Schnellstart

cp .env.example .env
make compile
make test
make docker-up
make smoke
make docker-down

Prinzip

Die Lernmodule bleiben bewusst einfach. Delivery-Dateien liegen außen herum und erklären, wie derselbe Code professionell gebaut, geprüft, paketiert und betrieben wird.

ADR-XXXX: Titel

Quelle: docs/templates/adr-template.md

ADR-XXXX: Titel

Status

Vorgeschlagen / Akzeptiert / Ersetzt

Kontext

Welche Entscheidung steht an?

Entscheidung

Was wird entschieden?

Konsequenzen

Was wird einfacher, was schwieriger?

Incident Report

Quelle: docs/templates/incident-template.md

Incident Report

Zusammenfassung

Zeitraum

Auswirkung

Ursache

Sofortmaßnahme

Dauerhafte Maßnahme

Follow-up Tasks

Release Checklist

Quelle: docs/templates/release-checklist-template.md

Release Checklist

  • [ ] Version gesetzt
  • [ ] Changelog aktualisiert
  • [ ] Tests grün
  • [ ] Docker Smoke grün
  • [ ] Rollback dokumentiert
  • [ ] Release Notes geschrieben
  • [ ] Monitoring nach Release geprüft

java-algorithms

Quelle: java-algorithms/README.md

java-algorithms

Datenstrukturen und Algorithmen mit idiomatischem Java.

java-concurrency

Quelle: java-concurrency/README.md

java-concurrency

Virtual Threads, Bulkhead, Retry, CompletableFuture und Backpressure.

java-core

Quelle: java-core/README.md

java-core

Core Java Labs: Records, sealed Result, Value Objects, Guard Clauses und kleine Domänenmodelle.

java-io

Quelle: java-io/README.md

java-io

I/O und NIO.2 Labs: Safe Paths, Atomic Writes, CSV-Streaming und WatchService.

security-labs

Quelle: security-labs/README.md

security-labs

Passwort-Hashing, HMAC und sichere Vergleiche mit JDK-Bordmitteln.

Architekturdiagramm

Quelle: docs/architecture.svg

seb4u Java Master – Maven Multi-Module Architektur LabsCore · I/O · ConcurrencyAlgorithmen · Security CommerceFlow DomainRecords, Events, Invariantenframeworkfrei ApplicationUse Cases, Ports, ResultTransaktionsgrenzen Spring AdapterREST API Jakarta AdapterServlet API File AdapterRepository + Outbox

Datei: .devcontainer/devcontainer.json

Quelle: .devcontainer/devcontainer.json

{
  "name": "seb4u Java Master",
  "image": "mcr.microsoft.com/devcontainers/java:25",
  "features": {
    "ghcr.io/devcontainers/features/docker-in-docker:2": {}
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "vscjava.vscode-java-pack",
        "redhat.java",
        "vmware.vscode-spring-boot",
        "vscjava.vscode-maven",
        "github.vscode-github-actions"
      ]
    }
  },
  "postCreateCommand": "mvn -B -ntp -DskipTests compile || true",
  "remoteUser": "vscode"
}

Datei: .env.example

Quelle: .env.example

JAVA_VERSION=25
APP_PORT=8080
DOCS_PORT=8088
COMMERCEFLOW_OUTBOX_DIR=./data/outbox

Datei: .github/dependabot.yml

Quelle: .github/dependabot.yml

version: 2
updates:
  - package-ecosystem: maven
    directory: '/'
    schedule:
      interval: weekly
    open-pull-requests-limit: 5
    labels: [dependencies, java]
  - package-ecosystem: github-actions
    directory: '/'
    schedule:
      interval: weekly
    open-pull-requests-limit: 5
    labels: [dependencies, ci]
  - package-ecosystem: docker
    directory: '/'
    schedule:
      interval: weekly
    open-pull-requests-limit: 5
    labels: [dependencies, docker]

Datei: .github/workflows/ci.yml

Quelle: .github/workflows/ci.yml

name: CI

on:
  push:
    branches: [ main, master ]
  pull_request:
    branches: [ main, master ]
  workflow_dispatch:

permissions:
  contents: read
  checks: write

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

jobs:
  validate:
    name: Validate Maven Modules
    runs-on: ubuntu-latest
    timeout-minutes: 25
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up JDK 25
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: '25'
          cache: maven

      - name: Print tool versions
        run: |
          java -version
          mvn -version

      - name: Compile all modules
        run: mvn -B -ntp -DskipTests compile

      - name: Run tests
        run: mvn -B -ntp test

      - name: Package without integration services
        run: mvn -B -ntp -DskipTests package

      - name: Package standard guard
        run: bash scripts/package-guard.sh

      - name: Upload build reports
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: surefire-reports
          path: '**/target/surefire-reports/**'
          if-no-files-found: ignore

Datei: .github/workflows/docker-smoke.yml

Quelle: .github/workflows/docker-smoke.yml

name: Docker Smoke

on:
  workflow_dispatch:
  pull_request:
    paths:
      - 'Dockerfile*'
      - 'compose.yaml'
      - 'commerceflow-*/**'
      - 'pom.xml'
      - '.github/workflows/docker-smoke.yml'

permissions:
  contents: read

jobs:
  docker-smoke:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Build Spring image
        run: docker build -f Dockerfile.spring -t seb4u/commerceflow-spring:ci .

      - name: Compose up
        run: docker compose --profile app up -d --build

      - name: Smoke test
        run: bash scripts/smoke-test.sh http://localhost:8080

      - name: Logs on failure
        if: failure()
        run: docker compose logs --no-color

      - name: Compose down
        if: always()
        run: docker compose down -v --remove-orphans

Datei: .github/workflows/docs-check.yml

Quelle: .github/workflows/docs-check.yml

name: Docs Check
on:
  pull_request:
  workflow_dispatch:
jobs:
  docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Required docs exist
        run: |
          test -f docs/devops/DELIVERY_MASTER_PLAN.md
          test -f docs/devops/PRODUCTION_READINESS_MATRIX.md
          test -f docs/api/commerceflow-openapi.yaml
          test -f docs/adr/README.md

Datei: .github/workflows/nightly-quality.yml

Quelle: .github/workflows/nightly-quality.yml

name: Nightly Quality
on:
  schedule:
    - cron: '0 3 * * *'
  workflow_dispatch:
jobs:
  nightly:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: '25'
          cache: maven
      - name: Local CI
        run: bash scripts/ci-local.sh

Datei: .github/workflows/release-dry-run.yml

Quelle: .github/workflows/release-dry-run.yml

name: Release Dry Run

on:
  workflow_dispatch:
    inputs:
      release_version:
        description: 'Release version, example: 1.0.0'
        required: true
        default: '1.0.0'
      next_snapshot:
        description: 'Next snapshot version, example: 1.0.1-SNAPSHOT'
        required: true
        default: '1.0.1-SNAPSHOT'

permissions:
  contents: read

jobs:
  release-dry-run:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up JDK 25
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: '25'
          cache: maven

      - name: Validate release inputs
        run: |
          echo "Release: ${{ inputs.release_version }}"
          echo "Next:    ${{ inputs.next_snapshot }}"
          test -n "${{ inputs.release_version }}"
          test -n "${{ inputs.next_snapshot }}"

      - name: Full verification
        run: mvn -B -ntp verify

      - name: Create dry-run archive
        run: |
          mkdir -p dist
          git archive --format=zip --output dist/seb4u-java-master-${{ inputs.release_version }}.zip HEAD
          ls -lah dist

      - name: Upload dry-run archive
        uses: actions/upload-artifact@v4
        with:
          name: release-dry-run
          path: dist/*.zip

Datei: .github/workflows/security-check.yml

Quelle: .github/workflows/security-check.yml

name: Security Check
on:
  pull_request:
  workflow_dispatch:
jobs:
  security-baseline:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Check for obvious secrets
        run: |
          ! grep -RInE "(password|secret|token|api[_-]?key)\s*[:=]\s*['\"]?[A-Za-z0-9_-]{16,}" . --exclude-dir=.git || exit 1
      - name: Package guard
        run: bash scripts/package-guard.sh

Datei: .gitignore

Quelle: .gitignore

target/
.idea/
.vscode/
*.iml
.DS_Store
commerceflow-data/
*.log

# Delivery pack
.env
.env.local
logs/
coverage/
target/
.docker/
*.pid
*.log

Datei: Dockerfile.file-worker

Quelle: Dockerfile.file-worker

# syntax=docker/dockerfile:1
ARG JAVA_VERSION=25
FROM maven:3-eclipse-temurin-${JAVA_VERSION} AS build
WORKDIR /workspace
COPY . .
RUN mvn -B -ntp -pl commerceflow-adapter-file -am -DskipTests package

FROM eclipse-temurin:${JAVA_VERSION}-jre
WORKDIR /app
RUN mkdir -p /app/data/outbox /app/data/archive && addgroup --system seb4u && adduser --system --ingroup seb4u seb4u
COPY --from=build /workspace/commerceflow-adapter-file/target/*.jar /app/commerceflow-file-worker.jar
USER seb4u
ENTRYPOINT ["java", "-jar", "/app/commerceflow-file-worker.jar"]

Datei: Dockerfile.spring

Quelle: Dockerfile.spring

# syntax=docker/dockerfile:1
ARG JAVA_VERSION=25
FROM maven:3-eclipse-temurin-${JAVA_VERSION} AS build
WORKDIR /workspace
COPY pom.xml ./
COPY java-core/pom.xml java-core/pom.xml
COPY java-io/pom.xml java-io/pom.xml
COPY java-concurrency/pom.xml java-concurrency/pom.xml
COPY java-algorithms/pom.xml java-algorithms/pom.xml
COPY security-labs/pom.xml security-labs/pom.xml
COPY commerceflow-domain/pom.xml commerceflow-domain/pom.xml
COPY commerceflow-application/pom.xml commerceflow-application/pom.xml
COPY commerceflow-adapter-file/pom.xml commerceflow-adapter-file/pom.xml
COPY commerceflow-adapter-spring/pom.xml commerceflow-adapter-spring/pom.xml
COPY commerceflow-adapter-jakarta/pom.xml commerceflow-adapter-jakarta/pom.xml
COPY commerceflow-tests/pom.xml commerceflow-tests/pom.xml
RUN mvn -B -ntp -DskipTests dependency:go-offline || true
COPY . .
RUN mvn -B -ntp -pl commerceflow-adapter-spring -am -DskipTests package

FROM eclipse-temurin:${JAVA_VERSION}-jre
WORKDIR /app
RUN mkdir -p /app/data/outbox && addgroup --system seb4u && adduser --system --ingroup seb4u seb4u
COPY --from=build /workspace/commerceflow-adapter-spring/target/*.jar /app/commerceflow-spring.jar
ENV SERVER_PORT=8080 \
    MANAGEMENT_ENDPOINT_HEALTH_PROBES_ENABLED=true \
    SPRING_PROFILES_ACTIVE=docker
EXPOSE 8080
USER seb4u
HEALTHCHECK --interval=20s --timeout=3s --start-period=30s --retries=5 \
  CMD wget -qO- http://localhost:8080/actuator/health || exit 1
ENTRYPOINT ["java", "-XX:MaxRAMPercentage=75", "-jar", "/app/commerceflow-spring.jar"]

Datei: Makefile

Quelle: Makefile

SHELL := /usr/bin/env bash
MVN ?= mvn
APP_URL ?= http://localhost:8080

.PHONY: help compile test verify package run-spring docker-build docker-up docker-down smoke quality package-guard docs-tree clean

help:
	@printf "seb4u Java Master targets:\n"
	@printf "  make compile       Compile all modules\n"
	@printf "  make test          Run unit tests\n"
	@printf "  make verify        Run Maven verify\n"
	@printf "  make run-spring    Run Spring adapter locally\n"
	@printf "  make docker-up     Start Compose app profile\n"
	@printf "  make smoke         Run smoke test against APP_URL\n"
	@printf "  make quality       Run quality gate scripts\n"

compile:
	$(MVN) -B -ntp compile

test:
	$(MVN) -B -ntp test

verify:
	$(MVN) -B -ntp verify

package:
	$(MVN) -B -ntp -DskipTests package

run-spring:
	$(MVN) -pl commerceflow-adapter-spring -am spring-boot:run

docker-build:
	docker build -f Dockerfile.spring -t seb4u/commerceflow-spring:local .

docker-up:
	docker compose --profile app up -d --build

docker-down:
	docker compose down -v --remove-orphans

smoke:
	bash scripts/smoke-test.sh $(APP_URL)

quality:
	bash scripts/quality-gates.sh

package-guard:
	bash scripts/package-guard.sh

docs-tree:
	find . -maxdepth 3 -type f | sort

clean:
	$(MVN) -B -ntp clean
	docker compose down -v --remove-orphans || true

Datei: SEB4U_PROJECT_EXPORT_CHECK.json

Quelle: SEB4U_PROJECT_EXPORT_CHECK.json

{
  "java_files": 44,
  "pom_files": 12,
  "readmes": 12,
  "unique_packages": 13,
  "invalid_packages": [],
  "modules": [
    "java-core",
    "java-io",
    "java-concurrency",
    "java-algorithms",
    "security-labs",
    "commerceflow-domain",
    "commerceflow-application",
    "commerceflow-adapter-file",
    "commerceflow-adapter-spring",
    "commerceflow-adapter-jakarta",
    "commerceflow-tests"
  ],
  "javac_sanity_check": {
    "status": "passed",
    "scope": "frameworkfreie Module: java-core, java-io, java-concurrency, java-algorithms, security-labs, commerceflow-domain, commerceflow-application, commerceflow-adapter-file",
    "runtime_in_container": "OpenJDK 21; Maven not installed in container"
  }
}

Datei: commerceflow-adapter-file/pom.xml

Quelle: commerceflow-adapter-file/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>commerceflow-adapter-file</artifactId>
  <dependencies>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-domain</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-application</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><scope>test</scope></dependency>
  </dependencies>
</project>

Datei: commerceflow-adapter-jakarta/pom.xml

Quelle: commerceflow-adapter-jakarta/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>commerceflow-adapter-jakarta</artifactId>
  <packaging>war</packaging>
  <dependencies>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-domain</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-application</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-adapter-file</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.1.0</version><scope>provided</scope></dependency>
  </dependencies>
</project>

Datei: commerceflow-adapter-spring/pom.xml

Quelle: commerceflow-adapter-spring/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>commerceflow-adapter-spring</artifactId>
  <dependencies>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-domain</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-application</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-adapter-file</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webmvc</artifactId></dependency>
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

Datei: commerceflow-application/pom.xml

Quelle: commerceflow-application/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>commerceflow-application</artifactId>
  <dependencies>
    <dependency>
      <groupId>com.seb4u.demo</groupId>
      <artifactId>commerceflow-domain</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Datei: commerceflow-domain/pom.xml

Quelle: commerceflow-domain/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>commerceflow-domain</artifactId>
  <name>seb4u commerceflow-domain</name>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Datei: commerceflow-tests/pom.xml

Quelle: commerceflow-tests/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>commerceflow-tests</artifactId>
  <dependencies>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-domain</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-application</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>com.seb4u.demo</groupId><artifactId>commerceflow-adapter-file</artifactId><version>${project.version}</version></dependency>
    <dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><scope>test</scope></dependency>
  </dependencies>
</project>

Datei: compose.yaml

Quelle: compose.yaml

name: seb4u-java-master

services:
  commerceflow-spring:
    profiles: [app]
    build:
      context: .
      dockerfile: Dockerfile.spring
      args:
        JAVA_VERSION: ${JAVA_VERSION:-25}
    image: seb4u/commerceflow-spring:local
    environment:
      SPRING_PROFILES_ACTIVE: docker
      SERVER_PORT: 8080
      COMMERCEFLOW_OUTBOX_DIR: /app/data/outbox
    ports:
      - '${APP_PORT:-8080}:8080'
    volumes:
      - commerceflow-outbox:/app/data/outbox
    healthcheck:
      test: ['CMD', 'wget', '-qO-', 'http://localhost:8080/actuator/health']
      interval: 20s
      timeout: 3s
      retries: 5
      start_period: 30s

  file-worker:
    profiles: [worker]
    build:
      context: .
      dockerfile: Dockerfile.file-worker
      args:
        JAVA_VERSION: ${JAVA_VERSION:-25}
    image: seb4u/commerceflow-file-worker:local
    volumes:
      - commerceflow-outbox:/app/data/outbox

  docs:
    profiles: [docs]
    image: nginx:alpine
    ports:
      - '${DOCS_PORT:-8088}:80'
    volumes:
      - ./docs/workbook:/usr/share/nginx/html:ro

volumes:
  commerceflow-outbox:

Datei: configs/application-local.yml

Quelle: configs/application-local.yml

server:
  port: 8080
commerceflow:
  outbox-dir: ./target/outbox
logging:
  level:
    com.seb4u.demo: DEBUG

Datei: configs/application-prod.yml

Quelle: configs/application-prod.yml

server:
  port: 8080
commerceflow:
  outbox-dir: ${COMMERCEFLOW_OUTBOX_DIR:/data/outbox}
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus
  endpoint:
    health:
      probes:
        enabled: true
logging:
  level:
    root: INFO

Datei: configs/logback-spring.xml

Quelle: configs/logback-spring.xml

<configuration>
  <springProperty scope="context" name="appName" source="spring.application.name" defaultValue="commerceflow"/>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSS} level=%level service=${appName} thread=%thread logger=%logger{36} msg="%msg"%n</pattern>
    </encoder>
  </appender>
  <root level="INFO">
    <appender-ref ref="STDOUT"/>
  </root>
</configuration>

Datei: configs/prometheus-rules.yaml

Quelle: configs/prometheus-rules.yaml

groups:
  - name: commerceflow.rules
    rules:
      - alert: CommerceFlowHighErrorRate
        expr: rate(http_server_requests_seconds_count{status=~"5.."}[5m]) > 0.02
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "CommerceFlow error rate is high"
      - alert: CommerceFlowSlowRequests
        expr: histogram_quantile(0.95, rate(http_server_requests_seconds_bucket[5m])) > 0.5
        for: 15m
        labels:
          severity: warning
        annotations:
          summary: "CommerceFlow P95 latency is high"

Datei: docs/api/commerceflow-openapi.yaml

Quelle: docs/api/commerceflow-openapi.yaml

openapi: 3.1.0
info:
  title: CommerceFlow API
  version: 1.0.0
  description: |
    Lern- und Portfolio-API für das seb4u Java Master Projekt.
    Die API ist bewusst klein, aber mit professionellen Fehlerverträgen modelliert.
servers:
  - url: http://localhost:8080
paths:
  /actuator/health:
    get:
      summary: Healthcheck
      responses:
        '200':
          description: Anwendung ist erreichbar
  /orders:
    post:
      summary: Bestellung anlegen
      operationId: placeOrder
      tags: [Orders]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlaceOrderRequest'
            examples:
              default:
                value:
                  customerId: customer-100
                  currency: EUR
                  lines:
                    - sku: BOOK-JAVA
                      quantity: 1
                      unitPrice: '49.90'
      responses:
        '201':
          description: Bestellung wurde angenommen
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlaceOrderResponse'
        '400':
          description: Validierungsfehler
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
        '409':
          description: Konflikt, zum Beispiel doppelte Idempotency-Key-Verarbeitung
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Problem'
components:
  schemas:
    PlaceOrderRequest:
      type: object
      required: [customerId, currency, lines]
      properties:
        customerId:
          type: string
          minLength: 1
        currency:
          type: string
          pattern: '^[A-Z]{3}$'
        lines:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/OrderLineRequest'
    OrderLineRequest:
      type: object
      required: [sku, quantity, unitPrice]
      properties:
        sku:
          type: string
          minLength: 1
        quantity:
          type: integer
          minimum: 1
        unitPrice:
          type: string
          pattern: '^[0-9]+(\\.[0-9]{2})$'
    PlaceOrderResponse:
      type: object
      required: [orderId, status]
      properties:
        orderId:
          type: string
        status:
          type: string
          enum: [ACCEPTED, REJECTED]
    Problem:
      type: object
      required: [type, title, status, detail]
      properties:
        type:
          type: string
          format: uri-reference
        title:
          type: string
        status:
          type: integer
        detail:
          type: string
        correlationId:
          type: string

Datei: docs/api/commerceflow-postman-collection.json

Quelle: docs/api/commerceflow-postman-collection.json

{
  "info": {
    "name": "SEB4U CommerceFlow",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "item": [
    {
      "name": "Health",
      "request": { "method": "GET", "url": "http://localhost:8080/actuator/health" }
    },
    {
      "name": "Place Order",
      "request": {
        "method": "POST",
        "header": [
          { "key": "Content-Type", "value": "application/json" },
          { "key": "Idempotency-Key", "value": "demo-1" }
        ],
        "url": "http://localhost:8080/orders",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"customerId\": \"cust-100\",\n  \"lines\": [{\"sku\": \"BOOK-1\", \"quantity\": 2, \"price\": \"19.90\", \"currency\": \"EUR\"}]\n}"
        }
      }
    }
  ]
}

Datei: docs/api/commerceflow-requests.http

Quelle: docs/api/commerceflow-requests.http

### Health
GET http://localhost:8080/actuator/health

### Place order
POST http://localhost:8080/orders
Content-Type: application/json
Idempotency-Key: demo-{{$timestamp}}

{
  "customerId": "cust-100",
  "lines": [
    { "sku": "BOOK-1", "quantity": 2, "price": "19.90", "currency": "EUR" }
  ]
}

Datei: java-algorithms/pom.xml

Quelle: java-algorithms/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>java-algorithms</artifactId>
  <name>seb4u java-algorithms</name>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Datei: java-concurrency/pom.xml

Quelle: java-concurrency/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>java-concurrency</artifactId>
  <name>seb4u java-concurrency</name>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Datei: java-core/pom.xml

Quelle: java-core/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>java-core</artifactId>
  <name>seb4u java-core</name>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Datei: java-io/pom.xml

Quelle: java-io/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>java-io</artifactId>
  <name>seb4u java-io</name>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Datei: k8s/configmap.yaml

Quelle: k8s/configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: commerceflow-config
  namespace: seb4u
data:
  SPRING_PROFILES_ACTIVE: prod
  COMMERCEFLOW_OUTBOX_DIR: /data/outbox

Datei: k8s/deployment.yaml

Quelle: k8s/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: commerceflow-spring
  namespace: seb4u
spec:
  replicas: 2
  selector:
    matchLabels:
      app: commerceflow-spring
  template:
    metadata:
      labels:
        app: commerceflow-spring
    spec:
      containers:
        - name: app
          image: commerceflow-spring:local
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
          envFrom:
            - configMapRef:
                name: commerceflow-config
          readinessProbe:
            httpGet:
              path: /actuator/health/readiness
              port: 8080
            initialDelaySeconds: 10
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /actuator/health/liveness
              port: 8080
            initialDelaySeconds: 30
            periodSeconds: 20
          resources:
            requests:
              cpu: "250m"
              memory: "256Mi"
            limits:
              cpu: "1000m"
              memory: "768Mi"

Datei: k8s/hpa.yaml

Quelle: k8s/hpa.yaml

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: commerceflow-spring
  namespace: seb4u
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: commerceflow-spring
  minReplicas: 2
  maxReplicas: 5
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70

Datei: k8s/ingress.yaml

Quelle: k8s/ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: commerceflow
  namespace: seb4u
spec:
  rules:
    - host: commerceflow.local
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: commerceflow-spring
                port:
                  number: 80

Datei: k8s/kustomization.yaml

Quelle: k8s/kustomization.yaml

resources:
  - namespace.yaml
  - configmap.yaml
  - deployment.yaml
  - service.yaml
  - ingress.yaml
  - hpa.yaml
  - pdb.yaml
  - network-policy.yaml

Datei: k8s/namespace.yaml

Quelle: k8s/namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: seb4u

Datei: k8s/network-policy.yaml

Quelle: k8s/network-policy.yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: commerceflow-default
  namespace: seb4u
spec:
  podSelector:
    matchLabels:
      app: commerceflow-spring
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector: {}
      ports:
        - protocol: TCP
          port: 8080

Datei: k8s/pdb.yaml

Quelle: k8s/pdb.yaml

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: commerceflow-spring
  namespace: seb4u
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: commerceflow-spring

Datei: k8s/service.yaml

Quelle: k8s/service.yaml

apiVersion: v1
kind: Service
metadata:
  name: commerceflow-spring
  namespace: seb4u
spec:
  selector:
    app: commerceflow-spring
  ports:
    - name: http
      port: 80
      targetPort: 8080

Datei: pom.xml

Quelle: pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.seb4u.demo</groupId>
  <artifactId>seb4u-java-master-parent</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>seb4u Java Master Parent</name>

  <modules>
    <module>java-core</module>
    <module>java-io</module>
    <module>java-concurrency</module>
    <module>java-algorithms</module>
    <module>security-labs</module>
    <module>commerceflow-domain</module>
    <module>commerceflow-application</module>
    <module>commerceflow-adapter-file</module>
    <module>commerceflow-adapter-spring</module>
    <module>commerceflow-adapter-jakarta</module>
    <module>commerceflow-tests</module>
  </modules>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>25</java.version>
    <maven.compiler.release>${java.version}</maven.compiler.release>
    <spring-boot.version>4.1.0</spring-boot.version>
    <junit.version>6.1.1</junit.version>
    <maven.compiler.plugin.version>3.15.0</maven.compiler.plugin.version>
    <maven.surefire.plugin.version>3.5.4</maven.surefire.plugin.version>
    <exec.maven.plugin.version>3.5.0</exec.maven.plugin.version>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring-boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.junit</groupId>
        <artifactId>junit-bom</artifactId>
        <version>${junit.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>${maven.compiler.plugin.version}</version>
          <configuration>
            <release>${maven.compiler.release}</release>
            <showWarnings>true</showWarnings>
            <compilerArgs>
              <arg>-Xlint:all</arg>
            </compilerArgs>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${maven.surefire.plugin.version}</version>
          <configuration>
            <useModulePath>false</useModulePath>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>exec-maven-plugin</artifactId>
          <version>${exec.maven.plugin.version}</version>
        </plugin>
        <plugin>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-maven-plugin</artifactId>
          <version>${spring-boot.version}</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

Datei: scripts/ci-local.sh

Quelle: scripts/ci-local.sh

#!/usr/bin/env bash
set -euo pipefail
bash scripts/preflight.sh
mvn -q -DskipTests=false test
bash scripts/quality-gates.sh
bash scripts/release-dry-run.sh

Datei: scripts/dev-down.sh

Quelle: scripts/dev-down.sh

#!/usr/bin/env bash
set -euo pipefail
docker compose down -v --remove-orphans

Datei: scripts/dev-up.sh

Quelle: scripts/dev-up.sh

#!/usr/bin/env bash
set -euo pipefail
cp -n .env.example .env 2>/dev/null || true
docker compose --profile app up -d --build
bash scripts/smoke-test.sh "http://localhost:${APP_PORT:-8080}"

Datei: scripts/package-guard.sh

Quelle: scripts/package-guard.sh

#!/usr/bin/env bash
set -euo pipefail

bad=0
while IFS= read -r file; do
  pkg=$(grep -E '^package ' "$file" | sed 's/package //;s/;//' || true)
  case "$pkg" in
    com.seb4u.demo|com.seb4u.demo.*|"") ;;
    *) echo "Invalid package in $file: $pkg"; bad=1 ;;
  esac
  if grep -Eq 'package +(com\.example|com\.acme|shop|master)(\.|;)' "$file"; then
    echo "Old demo package prefix found in $file"; bad=1
  fi
  if grep -Eq '^package +com\.seb4u\.demo\.(spring|jakarta)' "$file"; then
    case "$file" in
      *commerceflow-adapter-spring/src/main/java/com/seb4u/demo/spring/*|*commerceflow-adapter-jakarta/src/main/java/com/seb4u/demo/jakarta/*) ;;
      *) echo "Framework package in unexpected module: $file"; bad=1 ;;
    esac
  fi
done < <(find . -type f -name '*.java' | sort)

if [[ "$bad" -ne 0 ]]; then
  echo "Package guard failed."
  exit 1
fi

echo "Package guard OK."

Datei: scripts/performance-smoke.sh

Quelle: scripts/performance-smoke.sh

#!/usr/bin/env bash
set -euo pipefail
base="${BASE_URL:-http://localhost:8080}"
requests="${REQUESTS:-25}"
start=$(date +%s)
for i in $(seq 1 "$requests"); do
  curl -fsS "$base/actuator/health" >/dev/null
done
end=$(date +%s)
echo "Performance smoke OK: $requests health requests in $((end-start))s"

Datei: scripts/preflight.sh

Quelle: scripts/preflight.sh

#!/usr/bin/env bash
set -euo pipefail
command -v java >/dev/null || { echo "java fehlt"; exit 1; }
command -v mvn >/dev/null || { echo "maven fehlt"; exit 1; }
java -version
mvn -version
bash scripts/package-guard.sh

Datei: scripts/quality-gates.sh

Quelle: scripts/quality-gates.sh

#!/usr/bin/env bash
set -euo pipefail

echo "== seb4u quality gates =="
java -version
mvn -version

echo "1/5 package guard"
bash scripts/package-guard.sh

echo "2/5 compile"
mvn -B -ntp -DskipTests compile

echo "3/5 tests"
mvn -B -ntp test

echo "4/5 package"
mvn -B -ntp -DskipTests package

echo "5/5 smoke documentation check"
test -f docs/api/commerceflow-openapi.yaml
test -f docs/adr/ADR-0001-package-standard.md
test -f docs/devops/RELEASE_RUNBOOK.md

echo "Quality gates OK."

Datei: scripts/release-dry-run.sh

Quelle: scripts/release-dry-run.sh

#!/usr/bin/env bash
set -euo pipefail
VERSION="${1:-1.0.0-local}"
mkdir -p dist
mvn -B -ntp verify
git archive --format=zip --output "dist/seb4u-java-master-${VERSION}.zip" HEAD || \
  zip -qr "dist/seb4u-java-master-${VERSION}.zip" . -x 'target/*' '.git/*' 'dist/*'
sha256sum "dist/seb4u-java-master-${VERSION}.zip" | tee "dist/seb4u-java-master-${VERSION}.sha256"
ls -lah dist

Datei: scripts/rollback-check.sh

Quelle: scripts/rollback-check.sh

#!/usr/bin/env bash
set -euo pipefail
[ -f docs/devops/ROLLBACK_STRATEGY.md ] || { echo "Rollback Strategie fehlt"; exit 1; }
[ -f docs/devops/RELEASE_NOTES_TEMPLATE.md ] || { echo "Release Notes Template fehlt"; exit 1; }
echo "Rollback Unterlagen vorhanden"

Datei: scripts/run-all-labs.sh

Quelle: scripts/run-all-labs.sh

#!/usr/bin/env bash
set -euo pipefail
mvn -pl java-core exec:java -Dexec.mainClass=com.seb4u.demo.core.CoreLabApp
mvn -pl java-io exec:java -Dexec.mainClass=com.seb4u.demo.io.IoLabApp
mvn -pl java-concurrency exec:java -Dexec.mainClass=com.seb4u.demo.concurrent.ConcurrencyLabApp
mvn -pl java-algorithms exec:java -Dexec.mainClass=com.seb4u.demo.algorithms.AlgorithmsLabApp
mvn -pl security-labs exec:java -Dexec.mainClass=com.seb4u.demo.security.SecurityLabApp

Datei: scripts/sbom-placeholder.sh

Quelle: scripts/sbom-placeholder.sh

#!/usr/bin/env bash
set -euo pipefail
mkdir -p target
cat > target/sbom-placeholder.json <<'JSON'
{
  "name": "seb4u-java-master",
  "note": "Placeholder: In echten Projekten CycloneDX oder ein vergleichbares SBOM-Tool einsetzen."
}
JSON
echo "SBOM Placeholder geschrieben: target/sbom-placeholder.json"

Datei: scripts/smoke-test.sh

Quelle: scripts/smoke-test.sh

#!/usr/bin/env bash
set -euo pipefail
BASE_URL="${1:-http://localhost:8080}"

echo "Smoke testing $BASE_URL"

for i in {1..30}; do
  if curl -fsS "$BASE_URL/actuator/health" >/tmp/seb4u-health.json 2>/dev/null; then
    cat /tmp/seb4u-health.json
    break
  fi
  sleep 2
  if [[ "$i" == "30" ]]; then
    echo "Health endpoint not ready" >&2
    exit 1
  fi
done

curl -fsS -H 'Content-Type: application/json' \
  -d '{"customerId":"customer-100","currency":"EUR","lines":[{"sku":"BOOK-JAVA","quantity":1,"unitPrice":"49.90"}]}' \
  "$BASE_URL/orders" || true

echo "Smoke test finished."

Datei: scripts/spring-demo-request.http

Quelle: scripts/spring-demo-request.http

POST http://localhost:8080/api/orders
Content-Type: application/json

{
  "customerId": "11111111-1111-1111-1111-111111111111",
  "items": [
    { "sku": "BOOK-JAVA", "quantity": 2, "unitPrice": 39.90 },
    { "sku": "COURSE-JAVA", "quantity": 1, "unitPrice": 149.00 }
  ]
}

Datei: scripts/verify-openapi.sh

Quelle: scripts/verify-openapi.sh

#!/usr/bin/env bash
set -euo pipefail
file="docs/api/commerceflow-openapi.yaml"
[ -s "$file" ] || { echo "OpenAPI Datei fehlt: $file"; exit 1; }
grep -q "openapi:" "$file" || { echo "Keine OpenAPI Signatur"; exit 1; }
grep -q "/orders" "$file" || { echo "Pfad /orders fehlt"; exit 1; }
echo "OpenAPI Minimalcheck OK"

Datei: security-labs/pom.xml

Quelle: security-labs/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.seb4u.demo</groupId>
    <artifactId>seb4u-java-master-parent</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>
  <artifactId>security-labs</artifactId>
  <name>seb4u security-labs</name>
  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

Java-Quellen im Delivery-Paket

DateiPackage
commerceflow-adapter-file/src/main/java/com/seb4u/demo/commerceflow/adapter/file/AlwaysApprovedPaymentPort.javacom.seb4u.demo.commerceflow.adapter.file
commerceflow-adapter-file/src/main/java/com/seb4u/demo/commerceflow/adapter/file/FileAdapterLabApp.javacom.seb4u.demo.commerceflow.adapter.file
commerceflow-adapter-file/src/main/java/com/seb4u/demo/commerceflow/adapter/file/FileOutboxPort.javacom.seb4u.demo.commerceflow.adapter.file
commerceflow-adapter-file/src/main/java/com/seb4u/demo/commerceflow/adapter/file/InMemoryOrderRepository.javacom.seb4u.demo.commerceflow.adapter.file
commerceflow-adapter-jakarta/src/main/java/com/seb4u/demo/jakarta/commerceflow/CommerceFlowServlet.javacom.seb4u.demo.jakarta.commerceflow
commerceflow-adapter-spring/src/main/java/com/seb4u/demo/spring/commerceflow/CommerceFlowConfiguration.javacom.seb4u.demo.spring.commerceflow
commerceflow-adapter-spring/src/main/java/com/seb4u/demo/spring/commerceflow/CommerceFlowSpringApplication.javacom.seb4u.demo.spring.commerceflow
commerceflow-adapter-spring/src/main/java/com/seb4u/demo/spring/commerceflow/OrderController.javacom.seb4u.demo.spring.commerceflow
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/commands/PlaceOrderCommand.javacom.seb4u.demo.commerceflow.application.commands
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/ports/OrderRepository.javacom.seb4u.demo.commerceflow.application.ports
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/ports/OutboxPort.javacom.seb4u.demo.commerceflow.application.ports
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/ports/PaymentPort.javacom.seb4u.demo.commerceflow.application.ports
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/usecases/PlaceOrderUseCase.javacom.seb4u.demo.commerceflow.application.usecases
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/Ids.javacom.seb4u.demo.commerceflow.domain
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/Money.javacom.seb4u.demo.commerceflow.domain
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/Order.javacom.seb4u.demo.commerceflow.domain
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/OrderEvent.javacom.seb4u.demo.commerceflow.domain
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/OrderLine.javacom.seb4u.demo.commerceflow.domain
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/OrderStatus.javacom.seb4u.demo.commerceflow.domain
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/Result.javacom.seb4u.demo.commerceflow.domain
commerceflow-tests/src/test/java/com/seb4u/demo/commerceflow/tests/CommerceFlowAcceptanceTest.javacom.seb4u.demo.commerceflow.tests
commerceflow-tests/src/test/java/com/seb4u/demo/commerceflow/tests/PackageStandardTest.javacom.seb4u.demo.commerceflow.tests
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/algorithms/DijkstraSolution.javacom.seb4u.demo.workbook.algorithms
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/architecture/PlaceOrderWorkflowSolution.javacom.seb4u.demo.workbook.architecture
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/cloud/IdempotencyStoreSolution.javacom.seb4u.demo.workbook.cloud
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/commerceflow/IdempotentOutboxSolution.javacom.seb4u.demo.workbook.commerceflow
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/core/Money.javacom.seb4u.demo.workbook.core
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/core/PackageGuardSolution.javacom.seb4u.demo.workbook.core
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/fullstack/PageResponse.javacom.seb4u.demo.workbook.fullstack
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/interview/ThreadSafeMemoizerSolution.javacom.seb4u.demo.workbook.interview
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/io/AtomicCsvImportSolution.javacom.seb4u.demo.workbook.io
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/portfolio/PortfolioReadmeTemplate.javacom.seb4u.demo.workbook.portfolio
java-algorithms/src/main/java/com/seb4u/demo/algorithms/AlgorithmsLabApp.javacom.seb4u.demo.algorithms
java-algorithms/src/main/java/com/seb4u/demo/algorithms/GraphAlgorithms.javacom.seb4u.demo.algorithms
java-algorithms/src/main/java/com/seb4u/demo/algorithms/LruCache.javacom.seb4u.demo.algorithms
java-algorithms/src/main/java/com/seb4u/demo/algorithms/SlidingWindow.javacom.seb4u.demo.algorithms
java-algorithms/src/main/java/com/seb4u/demo/algorithms/TopologicalSorter.javacom.seb4u.demo.algorithms
java-concurrency/src/main/java/com/seb4u/demo/concurrent/BackpressurePipeline.javacom.seb4u.demo.concurrent
java-concurrency/src/main/java/com/seb4u/demo/concurrent/BulkheadExecutor.javacom.seb4u.demo.concurrent
java-concurrency/src/main/java/com/seb4u/demo/concurrent/ConcurrencyLabApp.javacom.seb4u.demo.concurrent
java-concurrency/src/main/java/com/seb4u/demo/concurrent/RetryPolicy.javacom.seb4u.demo.concurrent
java-core/src/main/java/com/seb4u/demo/core/CoreLabApp.javacom.seb4u.demo.core
java-core/src/main/java/com/seb4u/demo/core/Money.javacom.seb4u.demo.core
java-core/src/main/java/com/seb4u/demo/core/Result.javacom.seb4u.demo.core
java-core/src/main/java/com/seb4u/demo/core/Validation.javacom.seb4u.demo.core
java-core/src/test/java/com/seb4u/demo/core/MoneyTest.javacom.seb4u.demo.core
java-io/src/main/java/com/seb4u/demo/io/AtomicFileWriter.javacom.seb4u.demo.io
java-io/src/main/java/com/seb4u/demo/io/CsvLedgerImporter.javacom.seb4u.demo.io
java-io/src/main/java/com/seb4u/demo/io/DebouncedDirectoryWatcher.javacom.seb4u.demo.io
java-io/src/main/java/com/seb4u/demo/io/IoLabApp.javacom.seb4u.demo.io
java-io/src/main/java/com/seb4u/demo/io/SafePath.javacom.seb4u.demo.io
security-labs/src/main/java/com/seb4u/demo/security/HmacSigner.javacom.seb4u.demo.security
security-labs/src/main/java/com/seb4u/demo/security/PasswordHasher.javacom.seb4u.demo.security
security-labs/src/main/java/com/seb4u/demo/security/SecurityLabApp.javacom.seb4u.demo.security

Vollständiger Delivery-Dateikatalog

DateiBytes
.devcontainer/devcontainer.json507
.devcontainer/devcontainer.json.html11886
.env.example83
.github/PULL_REQUEST_TEMPLATE.html11011
.github/PULL_REQUEST_TEMPLATE.md237
.github/dependabot.yml480
.github/dependabot.yml.html12956
.github/workflows/ci.yml1212
.github/workflows/ci.yml.html16851
.github/workflows/docker-smoke.yml865
.github/workflows/docker-smoke.yml.html14301
.github/workflows/docs-check.yml398
.github/workflows/docs-check.yml.html11273
.github/workflows/nightly-quality.yml367
.github/workflows/nightly-quality.yml.html12128
.github/workflows/release-dry-run.yml1358
.github/workflows/release-dry-run.yml.html16310
.github/workflows/security-check.yml413
.github/workflows/security-check.yml.html11520
.gitignore143
Dockerfile.file-worker551
Dockerfile.file-worker.html11697
Dockerfile.spring1542
Dockerfile.spring.html14711
Makefile1321
Makefile.html14861
README.html279311
README.md1387
SEB4U_PROJECT_EXPORT_CHECK.html11298
SEB4U_PROJECT_EXPORT_CHECK.json729
SEB4U_PROJECT_EXPORT_CHECK.md575
SEB4U_PROJECT_EXPORT_REPORT.html12622
SEB4U_PROJECT_EXPORT_REPORT.md1148
check.md760
commerceflow-adapter-file/README.html10775
commerceflow-adapter-file/README.md79
commerceflow-adapter-file/pom.xml929
commerceflow-adapter-file/src/main/java/com/seb4u/demo/commerceflow/adapter/file/AlwaysApprovedPaymentPort.java587
commerceflow-adapter-file/src/main/java/com/seb4u/demo/commerceflow/adapter/file/FileAdapterLabApp.java1049
commerceflow-adapter-file/src/main/java/com/seb4u/demo/commerceflow/adapter/file/FileOutboxPort.java1701
commerceflow-adapter-file/src/main/java/com/seb4u/demo/commerceflow/adapter/file/InMemoryOrderRepository.java691
commerceflow-adapter-jakarta/README.html10823
commerceflow-adapter-jakarta/README.md107
commerceflow-adapter-jakarta/pom.xml1143
commerceflow-adapter-jakarta/src/main/java/com/seb4u/demo/jakarta/commerceflow/CommerceFlowServlet.java2409
commerceflow-adapter-spring/README.html10819
commerceflow-adapter-spring/README.md106
commerceflow-adapter-spring/pom.xml1668
commerceflow-adapter-spring/src/main/java/com/seb4u/demo/spring/commerceflow/CommerceFlowConfiguration.java1439
commerceflow-adapter-spring/src/main/java/com/seb4u/demo/spring/commerceflow/CommerceFlowSpringApplication.java361
commerceflow-adapter-spring/src/main/java/com/seb4u/demo/spring/commerceflow/OrderController.java2443
commerceflow-adapter-spring/src/main/resources/application.properties153
commerceflow-application/README.html10771
commerceflow-application/README.md78
commerceflow-application/pom.xml831
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/commands/PlaceOrderCommand.java415
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/ports/OrderRepository.java300
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/ports/OutboxPort.java178
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/ports/PaymentPort.java302
commerceflow-application/src/main/java/com/seb4u/demo/commerceflow/application/usecases/PlaceOrderUseCase.java2867
commerceflow-domain/README.html10748
commerceflow-domain/README.md70
commerceflow-domain/pom.xml697
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/Ids.java770
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/Money.java1327
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/Order.java2164
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/OrderEvent.java703
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/OrderLine.java511
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/OrderStatus.java104
commerceflow-domain/src/main/java/com/seb4u/demo/commerceflow/domain/Result.java1041
commerceflow-tests/README.html10753
commerceflow-tests/README.md78
commerceflow-tests/pom.xml1072
commerceflow-tests/src/test/java/com/seb4u/demo/commerceflow/tests/CommerceFlowAcceptanceTest.java1483
commerceflow-tests/src/test/java/com/seb4u/demo/commerceflow/tests/PackageStandardTest.java293
compose.yaml1100
compose.yaml.html15677
configs/application-local.yml109
configs/application-local.yml.html10257
configs/application-prod.yml280
configs/application-prod.yml.html11171
configs/logback-spring.xml458
configs/prometheus-rules.yaml573
configs/prometheus-rules.yaml.html12565
dateiliste.txt13696
docs/ARCHITECTURE.html11336
docs/ARCHITECTURE.md611
docs/PROJECT_TREE.html11004
docs/PROJECT_TREE.md444
docs/adr/ADR-0001-package-standard.html11383
docs/adr/ADR-0001-package-standard.md615
docs/adr/ADR-0002-hexagonal-commerceflow.html11390
docs/adr/ADR-0002-hexagonal-commerceflow.md599
docs/adr/ADR-0003-maven-multi-module.html11337
docs/adr/ADR-0003-maven-multi-module.md578
docs/adr/ADR-0004-docker-compose-local.html11350
docs/adr/ADR-0004-docker-compose-local.md565
docs/adr/ADR-0005-ci-quality-gates.html11277
docs/adr/ADR-0005-ci-quality-gates.md542
docs/adr/ADR-0006-openapi-contract.html11348
docs/adr/ADR-0006-openapi-contract.md588
docs/adr/README.html11356
docs/adr/README.md517
docs/api/commerceflow-openapi.yaml2839
docs/api/commerceflow-openapi.yaml.html24630
docs/api/commerceflow-postman-collection.json784
docs/api/commerceflow-postman-collection.json.html14039
docs/api/commerceflow-requests.http298
docs/api/commerceflow-requests.http.html10242
docs/architecture.svg2075
docs/devops/CHANGELOG_TEMPLATE.html10636
docs/devops/CHANGELOG_TEMPLATE.md147
docs/devops/CI_CD.html11769
docs/devops/CI_CD.md907
docs/devops/CODE_OWNERSHIP.html11253
docs/devops/CODE_OWNERSHIP.md526
docs/devops/DELIVERY_INTRO.html11885
docs/devops/DELIVERY_INTRO.md949
docs/devops/DELIVERY_MASTER_PLAN.html12494
docs/devops/DELIVERY_MASTER_PLAN.md1473
docs/devops/DELIVERY_OVERVIEW.html12218
docs/devops/DELIVERY_OVERVIEW.md1218
docs/devops/DOCKER.html11841
docs/devops/DOCKER.md709
docs/devops/ENVIRONMENT_STRATEGY.html11266
docs/devops/ENVIRONMENT_STRATEGY.md509
docs/devops/INCIDENT_RUNBOOK.html11694
docs/devops/INCIDENT_RUNBOOK.md868
docs/devops/LOCAL_DEVELOPMENT.html11842
docs/devops/LOCAL_DEVELOPMENT.md771
docs/devops/OBSERVABILITY.html12332
docs/devops/OBSERVABILITY.md786
docs/devops/OBSERVABILITY_DEEP_DIVE.html12490
docs/devops/OBSERVABILITY_DEEP_DIVE.md713
docs/devops/OPERATIONS_PLAYBOOK.html11474
docs/devops/OPERATIONS_PLAYBOOK.md665
docs/devops/PRODUCTION_READINESS_MATRIX.html11982
docs/devops/PRODUCTION_READINESS_MATRIX.md1002
docs/devops/QUALITY_GATES.html11853
docs/devops/QUALITY_GATES.md793
docs/devops/README.html11506
docs/devops/README.md746
docs/devops/RELEASE_NOTES_TEMPLATE.html10866
docs/devops/RELEASE_NOTES_TEMPLATE.md252
docs/devops/RELEASE_RUNBOOK.html11527
docs/devops/RELEASE_RUNBOOK.md739
docs/devops/ROLLBACK_STRATEGY.html11214
docs/devops/ROLLBACK_STRATEGY.md502
docs/devops/RUNBOOK_COMMERCEFLOW.html11584
docs/devops/RUNBOOK_COMMERCEFLOW.md527
docs/devops/SECURITY_DELIVERY_CHECKLIST.html11694
docs/devops/SECURITY_DELIVERY_CHECKLIST.md884
docs/devops/SERVICE_LEVELS.html11147
docs/devops/SERVICE_LEVELS.md511
docs/devops/SUPPLY_CHAIN_SECURITY.html10949
docs/devops/SUPPLY_CHAIN_SECURITY.md389
docs/devops/TEST_STRATEGY.html11775
docs/devops/TEST_STRATEGY.md953
docs/project/PORTFOLIO_GUIDE.html11525
docs/project/PORTFOLIO_GUIDE.md703
docs/project/REVIEW_RUBRIC.html11901
docs/project/REVIEW_RUBRIC.md658
docs/project/ROADMAP.html11316
docs/project/ROADMAP.md602
docs/project/TASK_BOARD.html11714
docs/project/TASK_BOARD.md655
docs/templates/adr-template.html10841
docs/templates/adr-template.md205
docs/templates/incident-template.html10775
docs/templates/incident-template.md143
docs/templates/release-checklist-template.html10883
docs/templates/release-checklist-template.md214
docs/workbook/seb4u_java_master_cheatsheets.html14451
docs/workbook/seb4u_java_master_cheatsheets.md3100
docs/workbook/seb4u_java_master_cheatsheets.pdf81363
docs/workbook/seb4u_java_master_workbook.html94007
docs/workbook/seb4u_java_master_workbook.md17036
docs/workbook/seb4u_java_master_workbook.pdf144479
docs/workbook/workbook-solutions/README.html11413
docs/workbook/workbook-solutions/README.md382
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/algorithms/DijkstraSolution.java1283
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/architecture/PlaceOrderWorkflowSolution.java1713
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/cloud/IdempotencyStoreSolution.java1005
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/commerceflow/IdempotentOutboxSolution.java725
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/core/Money.java1457
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/core/PackageGuardSolution.java1008
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/fullstack/PageResponse.java646
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/interview/ThreadSafeMemoizerSolution.java455
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/io/AtomicCsvImportSolution.java2270
docs/workbook/workbook-solutions/src/main/java/com/seb4u/demo/workbook/portfolio/PortfolioReadmeTemplate.java917
java-algorithms/README.html10741
java-algorithms/README.md75
java-algorithms/pom.xml689
java-algorithms/src/main/java/com/seb4u/demo/algorithms/AlgorithmsLabApp.java652
java-algorithms/src/main/java/com/seb4u/demo/algorithms/GraphAlgorithms.java2134
java-algorithms/src/main/java/com/seb4u/demo/algorithms/LruCache.java540
java-algorithms/src/main/java/com/seb4u/demo/algorithms/SlidingWindow.java621
java-algorithms/src/main/java/com/seb4u/demo/algorithms/TopologicalSorter.java1270
java-concurrency/README.html10759
java-concurrency/README.md90
java-concurrency/pom.xml691
java-concurrency/src/main/java/com/seb4u/demo/concurrent/BackpressurePipeline.java1455
java-concurrency/src/main/java/com/seb4u/demo/concurrent/BulkheadExecutor.java2018
java-concurrency/src/main/java/com/seb4u/demo/concurrent/ConcurrencyLabApp.java853
java-concurrency/src/main/java/com/seb4u/demo/concurrent/RetryPolicy.java985
java-core/README.html10758
java-core/README.md110
java-core/pom.xml677
java-core/src/main/java/com/seb4u/demo/core/CoreLabApp.java622
java-core/src/main/java/com/seb4u/demo/core/Money.java1724
java-core/src/main/java/com/seb4u/demo/core/Result.java1493
java-core/src/main/java/com/seb4u/demo/core/Validation.java880
java-core/src/test/java/com/seb4u/demo/core/MoneyTest.java289
java-io/README.html10732
java-io/README.md90
java-io/pom.xml673
java-io/src/main/java/com/seb4u/demo/io/AtomicFileWriter.java930
java-io/src/main/java/com/seb4u/demo/io/CsvLedgerImporter.java1561
java-io/src/main/java/com/seb4u/demo/io/DebouncedDirectoryWatcher.java2826
java-io/src/main/java/com/seb4u/demo/io/IoLabApp.java640
java-io/src/main/java/com/seb4u/demo/io/SafePath.java671
k8s/README.html11141
k8s/README.md272
k8s/configmap.yaml165
k8s/configmap.yaml.html10526
k8s/deployment.yaml1062
k8s/deployment.yaml.html15255
k8s/hpa.yaml390
k8s/hpa.yaml.html12045
k8s/ingress.yaml356
k8s/ingress.yaml.html11665
k8s/kustomization.yaml153
k8s/kustomization.yaml.html10713
k8s/namespace.yaml55
k8s/namespace.yaml.html9949
k8s/network-policy.yaml322
k8s/network-policy.yaml.html11693
k8s/pdb.yaml189
k8s/pdb.yaml.html10666
k8s/service.yaml197
k8s/service.yaml.html11028
pom.xml3273
scripts/ci-local.sh156
scripts/ci-local.sh.html9936
scripts/dev-down.sh78
scripts/dev-down.sh.html9741
scripts/dev-up.sh189
scripts/dev-up.sh.html10324
scripts/package-guard.sh883
scripts/package-guard.sh.html14854
scripts/performance-smoke.sh301
scripts/performance-smoke.sh.html11486
scripts/preflight.sh217
scripts/preflight.sh.html10815
scripts/quality-gates.sh486
scripts/quality-gates.sh.html11200
scripts/release-dry-run.sh379
scripts/release-dry-run.sh.html11532
scripts/rollback-check.sh260
scripts/rollback-check.sh.html10928
scripts/run-all-labs.sh462
scripts/run-all-labs.sh.html10624
scripts/sbom-placeholder.sh304
scripts/sbom-placeholder.sh.html10298
scripts/smoke-test.sh590
scripts/smoke-test.sh.html12779
scripts/spring-demo-request.http275
scripts/spring-demo-request.http.html10139
scripts/verify-openapi.sh317
scripts/verify-openapi.sh.html11832
security-labs/README.html10744
security-labs/README.md84
security-labs/pom.xml685
security-labs/src/main/java/com/seb4u/demo/security/HmacSigner.java1085
security-labs/src/main/java/com/seb4u/demo/security/PasswordHasher.java2186
security-labs/src/main/java/com/seb4u/demo/security/SecurityLabApp.java701