Rocket Software

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

SCHEDULE (Zeke)DAG
JOB (Zeke)Task / Operator
EVENT (Zeke POST)Airflow Dataset outlet
EVENT dependencyDataset-driven DAG schedule
CALENDAR (Zeke)Custom Airflow timetable
RESOURCE (Zeke)Airflow Pool
Zena ScheduleDAG with schedule_interval
Zena JobBashOperator / SSHOperator
Zena cross-product depExternalTaskSensor
Zena Restart logictrigger_rule='all_done' + XCom checkpoint

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

Related Migrations