Porting a COBOL/CICS/DB2 Airline System to IBM Cloud Wazi
An open-source COBOL airline management system taken from a Git clone to a fully working online + batch application on a fresh IBM z/OS 3.1 instance on IBM Cloud Wazi: 30+ deployment errors diagnosed across 11 phases, from VPN networking to CICS pseudo-conversational bugs. Demonstrated at a conference in Japan.
- Role:
- Sole engineer: networking, encoding, JCL, DB2 setup, CICS configuration, compilation, debugging
- Period:
- March 2026, independent project
- IBM z/OS 3.1
- IBM Cloud Wazi
- CICS TS 6.2
- DB2 v13
- Enterprise COBOL 6.5
- JCL
- BMS
- Zowe CLI
- TN3270
Context
An open-source COBOL/CICS/DB2 airline management system existed only as a Git repository: source files that had clearly once run on a mainframe, with none of the infrastructure that made them run. The goal: bring it to life on a real z/OS system. I provisioned a fresh IBM z/OS 3.1 Wazi Dev/Test instance on IBM Cloud (zero prior configuration) and took the application from clone to a working TN3270 green-screen system, then demonstrated it at a conference in Japan.
Architecture
The online side is a chain of CICS transactions (login with credential verification, flight search, ticket search, and a two-screen ticket sale) passing state between pseudo-conversational tasks via COMMAREA. Batch programs load employees, passengers, and flights into DB2 before the online system can do anything useful.
Key decisions
Standardize on Zowe CLI over FTP/SFTP. Plain SFTP transfers bytes exactly, which on z/OS means every uploaded source file arrived as unreadable ASCII in an EBCDIC world, and CRLF line endings silently ate a byte of each 80-column record. Zowe CLI's z/OSMF REST path converts codepages and writes PDS members natively, eliminating an entire class of encoding bugs in one move.
Treat networking as phase zero. The Wazi instance sat on a private IP inside a VPC. Before any mainframe work: OpenVPN into IBM Cloud, security-group rules for TN3270, SSH, and z/OSMF, which itself runs on non-standard port 10443 on this image, discovered the hard way.
Diagnose, don't guess. The 30+ resolved errors were each run to root cause rather than worked around: a DB2 catalog alias collision with a sample database, the COBOL compiler library not being APF-authorized, BMS assembly failures, JCL statements truncated at column 80, CICS pseudo-conversational state bugs that only appeared on the second screen, and terminal emulators that rendered the same BMS map differently.
Results
A fully working online + batch airline system on a clean z/OS instance: 12 PDS datasets, 10 DB2 tables, 6 CICS programs, 3 batch programs, and 5 BMS mapsets deployed via 20+ JCL jobs. The entire journey is captured in a 1,400-line deployment runbook that makes the port reproducible end to end, and the system was demonstrated live at a conference in Japan.
What I'd do differently
Script the whole pipeline with Zowe CLI from day one instead of discovering it mid-project, and treat dataset allocation and DB2 binds as code from the start rather than one-off ISPF panel work.