JCL Exported Symbols: Submission-Time Resolution, Region Scoping, and IEFSJSYM Limits
Enterprise Server JCL symbol substitution distinguishes submission-time exported values from execution-time system values. IEASYM00 refresh, region scoping, in-stream replacement, and IEFSJSYM cleanup each affect operational correctness. [1] [2]
Read the full briefing
JCL Exported Symbols: Submission-Time Values Versus Execution-Time Values
Scope: Rocket Enterprise Developer 12.0 for Eclipse (UNIX), documenting Enterprise Server MVS JCL emulation.
Enterprise Server supports exported JCL symbols in in-stream data and can pass those symbols to a job submitted through the Internal Reader. The operational distinction is when a value is resolved: exported JCL symbol values are resolved at job submission, while static system symbols not exported as JCL symbols are resolved when the job runs. This distinction matters when a queued job might execute after its submission context changes. See JCL Exported Symbols.
Defining and refreshing system symbols
System-wide symbols can be defined in SYS1.PARMLIB(IEASYM00). Enterprise Server reads this dataset at system startup, so values added afterward are not automatically available. Set MFJ_RELOAD_IEASYM00=Y to force a reread at each job submission. This is a documented refresh mechanism, not an instruction to edit running jobs.
The LPARNAME field scopes a SYSDEF group to a specific Enterprise Server region name. An empty or absent LPARNAME applies to all regions; when supplied, it should be the first entry after SYSDEF. This permits region-specific symbol definitions without requiring different symbol-consuming JCL. See JCL Exported Symbols.
Resolving symbols in in-stream data
Rocket's JCL - Symbols sample includes SYMBOL6.JCL, which demonstrates static SYSNAME, dynamic SYSJOBNM, SYSJOBID, and SYS_CORR_CURRJOB, plus exported job symbols. In its IEBGENER step, values in SYSUT1 are substituted into SYSUT2. The sample uses SYMBOLS=(JCLONLY,MYLOG) on SYSUT1; MYLOG records substitutions line by line. An undefined symbol, &SYS_JOB_NOTIFY, remains unchanged.
The supported MVS JCL statement list includes EXPORT for exporting symbols, SET for defining symbolic values, and SYMLIST for exported-symbol replacement in in-stream data. See MVS JCL Statements.
Interfaces and limitations
The sample CALLMFJZ.cbl calls IEFSJSYM to list symbols available at a job step. After processing the returned memory, the caller must invoke the 88-func-freemem function; Rocket warns that failure can leak memory and ultimately destabilize the system. The companion MFJUXIT.cbl demonstrates job-correlator and user-data handling through a JCL user exit. On UNIX, the sample modules are compiled as shared objects, made loadable through $CAS_BATCH_PATH, and the region's MFJUXIT variable names the compiled exit.
There are important compatibility boundaries: IAZSYMBL is not implemented and returns 12; IEFSJSYM GETBYNAME is unsupported and returns 8 with reason code x'00000818'. Rocket also documents no behavioral difference between SYMBOLS=EXECSYS and SYMBOLS=CNVTSYS in this implementation. See JCL Exported Symbols.
Takeaway: For predictable JCL substitution, design around submission-time versus execution-time resolution, and explicitly release memory returned by IEFSJSYM.