Can CEEOPTS DD be coded as "//CEEOPTS DD *" in an XCOM JCL?

Document ID : KB000014764
Last Modified Date : 14/02/2018
Show Technical Document Details
Question:

Can CEEOPTS DD be coded as "//CEEOPTS DD *" in an XCOM JCL?

Answer:

IBM Language Environment runtime allows the use of CEEOPTS DD to specify runtime options for any LE enclaves executed within any address space, which includes those used in several XCOM functionalities.

LE uses QSAM acces method to read from that ddname during enclave initialization, which normally would allow to define it as an instream DD (that is, //CEEOPTS DD *)

However, CEEOPTS DD can NOT be defined as instream in the JCL for an XCOM STC (EXEC PGM=XCOMXFER), although it CAN be defined this way for XCOM jobs (EXEC PGM=XCOMJOB) of whatever type (SCHEDULE, EXECUTE, INQUIRE, HISTORY...)

This is because, in the XCOM started task, there are multiple LE enclaves running concurrently within MVS subtasks to process parallel workload, which can result in several of them initializing at the same time and trying to read their options from CEEOPTS DD.

Since subsystem ddnames (those defined as DD * or as SYSOUT=) cannot be concurrently accessed from multiple MVS subtasks and Language Environment does not serialize access to CEEOPTS DD, this results in an open error like:

$HASP708 stcname CEEOPTS OPEN FAILED RC=03 DATA SET ALREADY OPENED DSNAME=dsn

Together with a S013-C0 abend (Open failure for a subsystem dataset)

This does NOT happen in XCOMJOB runs because they use a single LE enclave to perform its processing.