Rocket Zeke / Zena → Apache Airflow
Zeke runs the batch on z/OS. Zena runs the batch off z/OS. BatchFoundry handles both — converting event chains, calendars, and resource pools into Airflow DAGs that respect the original semantics.
Rocket Zeke and Zena are complementary schedulers — Zeke managing z/OS batch, Zena managing distributed workloads — often deployed together in organisations with a mainframe heritage. Customers consolidating on Apache Airflow as their single orchestration plane need a migration that respects the event-chain model both products use, preserves calendar fidelity, and either eliminates z/OS execution or pairs it with a rehosted COBOL runtime. BatchFoundry has the mainframe literacy and distributed-systems depth to handle both sides of the migration.
Concept Mapping
The Hard Parts We Handle
- Event chains (POST EVENT abc.complete) encoded as Airflow Datasets or ExternalTaskSensor depending on scope
- Zeke calendars (working days, fiscal periods, regional holidays) extracted into reusable Airflow timetables
- Zeke z/OS execution paired with Mainframe Rehost solution for customers retaining z/OS
- Zena restart-from-step semantics mapped to trigger_rule='all_done' plus XCom-based state checkpointing
- Building a unified dependency graph across both Zeke and Zena before generating any DAGs
- Skills-gap training: Airflow for engineers who have only ever used Zeke/Zena
Zeke schedule to Airflow DAG
Before
// Zeke schedule SCHEDULE NAME=NIGHTLY_GL JOB GL_EXTRACT CALENDAR=BANK_WORKING JOB GL_LOAD PRED=GL_EXTRACT POST EVENT GL.LOADED ON SUCCESS
After (Airflow)
# Airflow DAG: nightly_gl
from airflow import Dataset
from airflow.decorators import dag
from airflow.operators.bash import BashOperator
from pendulum import datetime
gl_loaded = Dataset("gl.loaded")
@dag(schedule="0 23 * * 1-5", start_date=datetime(2025, 1, 1), catchup=False)
def nightly_gl():
extract = BashOperator(task_id="gl_extract",
bash_command="/jobs/gl_extract.sh")
load = BashOperator(task_id="gl_load",
bash_command="/jobs/gl_load.sh",
outlets=[gl_loaded])
extract >> load
nightly_gl()Ready to migrate from Rocket Zeke / Zena?
Talk to a BatchFoundry engineer about your workload estate.
Talk to an Engineer