Copybook
Gemeinsame Felddefinition fuer COBOL-Programme und externe Adapter.
Zentrale Transaktionslogik, Buchungen, Vertragsfuehrung, Policenverwaltung oder Kundenstammdaten mit sehr hoher Stabilitaet.
Mainframe-Systeme sind in vielen Unternehmen keine technischen Altlasten, sondern betriebliche Rueckgrate. Sie verarbeiten hohe Transaktionsmengen, sind stark kontrolliert und enthalten Fachlogik, die in keinem aktuellen Wiki vollstaendig dokumentiert ist.
Typische Modernisierungsfehler entstehen, wenn Teams Copybooks wie simple DTOs behandeln oder Host-Transaktionen ueber neue APIs exponieren, ohne Commit-Verhalten, Sperren, Tagesabschluss und Fehlercodes zu verstehen.
Das Ziel ist nicht zwingend, den Host sofort abzuwerfen. Ziel ist zuerst eine kontrollierte Kapselung: stabile Facades, fachliche Testfaelle, Golden-Master-Vergleiche, beobachtbare Integrationen und klare Grenzen fuer neue Funktionen.
Gemeinsame Felddefinition fuer COBOL-Programme und externe Adapter.
Online-Transaktion mit definiertem Programmnamen, Eingabemaske, Antwortcode und Commit-Verhalten.
Datenhaltung fuer sequenzielle, indexierte oder relationale Kernbestände.
Beschreibung fuer Batchjobs, Step-Folgen, Dateien, Ressourcen und Rueckgabecodes.
Die Beispiele sind bewusst nicht minimalistisch. Sie zeigen typische Artefakte, die man in echten Legacy-Analysen findet: Schnittstellenverträge, Containerkonfiguration, SQL/PL-SQL, Jobdefinitionen, Queue-Regeln oder Adaptercode.
01 POLICY-CHANGE-REQUEST.
05 POLICY-NO PIC X(12).
05 CUSTOMER-ID PIC X(10).
05 EFFECTIVE-DATE PIC 9(8).
05 CHANGE-TYPE PIC X(03).
05 PREMIUM-AMOUNT PIC S9(7)V99 COMP-3.
05 REQUEST-CHANNEL PIC X(02).
05 AUDIT-USER PIC X(20).
05 RESPONSE-CODE PIC X(04).
05 RESPONSE-TEXT PIC X(80).
public final class PolicyHostAdapter {
private final CicsGateway gateway;
private final PolicyCopybookMapper mapper;
public PolicyChangeResult changePolicy(PolicyChangeCommand command) {
HostPolicyChangeRequest request = mapper.toHost(command);
HostResponse response = gateway.execute("POLC", request.toBytes());
if (response.isTechnicalFailure()) {
throw new HostUnavailableException(response.technicalCode());
}
if (response.isBusinessRejection()) {
return PolicyChangeResult.rejected(mapper.toDomainReason(response));
}
return PolicyChangeResult.accepted(response.correlationId());
}
}
//POLBATCH JOB (FIN),'POLICY CLOSE',CLASS=A,MSGCLASS=X
//STEP010 EXEC PGM=POLCLOSE
//INFILE DD DSN=PROD.POLICY.CHANGES,DISP=SHR
//OUTFILE DD DSN=PROD.POLICY.CLOSE.REPORT,DISP=(NEW,CATLG)
//SYSOUT DD SYSOUT=*
//CONDCHK EXEC PGM=RCHECK,COND=(4,LT,STEP010)
//SYSOUT DD SYSOUT=*
| Aspekt | Beschreibung |
|---|---|
| Fachliches Risiko | Unklare Verantwortung fuer Vertrag/Konto/Police fuehrt zu widerspruechlichen Entscheidungen zwischen Alt- und Neusystem. |
| Technisches Risiko | COBOL und angrenzende Komponenten werden isoliert betrachtet; Laufzeitkopplung bleibt verborgen. |
| Betriebsrisiko | Fehlerkanal, Monitoring, Restart oder manuelle Klaerung sind nicht ausreichend dokumentiert. |
| Migrationsrisiko | Neue Architektur uebernimmt Daten oder Schnittstellen, ohne fachliche Invarianten und historische Sonderfaelle abzusichern. |
| Pattern | Einsatz in diesem System |
|---|---|
| Strangler Fig Pattern | Neue Funktionalitaet vor das Altsystem setzen und Altanteile schrittweise herausloesen. |
| Anti-Corruption Layer | Altbegriffe, technische Codes und Datenformate vom neuen Domänenmodell trennen. |
| Facade | Komplexe Legacy-Operationen hinter klaren fachlichen Use-Case-Methoden kapseln. |
| Adapter | Protokolle und Formate wie SOAP, MQ, Copybook, SQL oder File in Ports uebersetzen. |
| Golden Master Test | Bestehendes Verhalten mit Referenzdaten erfassen und gegen neue Implementierung vergleichen. |
Nimm eine Host-Transaktion wie Vertragsaenderung. Dokumentiere Eingabefelder, Pflichtfelder, Encoding, Returncodes, fachliche Ablehnungen, technische Fehler, Batch-Nachwirkungen und Testdaten. Entwerfe danach eine moderne Facade-Schnittstelle.