A standard external writer is designed to request work and perform
disposition processing of work to each JES in the following ways:
- It is initiated from the user's address space
Therefore, it
is a completely separate MVS™ job.
This separation allows for processing overlap and address space integrity.
In JES3, because the SSI is involved for scheduling communication,
the external writers may exist on local processors as well as the
global processor.
- It is functionally independent of JES
There is neither a print
processor running in the JES2 address space, nor a writer DSP running
in the JES3 global address space.
- It is not automatically started by JES
MVS does not supply an automatic facility to create
this address space. If the external writer is running as a started
task, you can use an operator START command to create this address
space or you can submit a batch job. Your application (external writer)
makes this decision. Your external writer should also have a mechanism
to end itself.
- It may drive a non-JES supported device
This is the primary
purpose of the external writer. If the SYSOUT data set deals with
plotting, for instance, a special code in the data may indicate to
use the red pen instead of the blue pen. Your external writer can
recognize this code as a control sequence, and perform the appropriate
actions according to the output device.
- It allows the installation to control the selection of work
Standard
external writers select work through a SYSOUT class dedicated to external
writers or a writer name. JES2 and JES3 handle external writer processing
differently.
JES2: The work to be processed
is located on the output queue, and has an OUTDISP of WRITE or KEEP.
However, conversational data sets, which include data sets located
on the output queue with an OUTDISP of HOLD or LEAVE, are not processed
in JES2 by the standard external writer. These data sets are destined
to be processed by TSO/E users through the OUTPUT command.
JES3: The work to be processed is located on either
the WRITER queue, or the HOLD queue. However, IBM® recommends that you process only data sets on
the HOLD queue (either by specific SYSOUT class specification as defined
on the initialization statement, or by writer name).
Note: Work destined for TSO/E users (through HOLD=TSO on the specific
SYSOUT class initialization statement) is not processed because those
data sets are destined to be processed by TSO/E users through the
OUTPUT command.
- It does not handle simultaneous multi-tasking within an address
space
The external writer facility in JES does not support concurrent
subtasking of work. Unpredictable results will occur if attempted.
Once an external writer begins the IEFSSREQ process the first time,
calls through the IEFSSREQ are not allowed from any other subtask
in the same address space until the first subtask has finished issuing
its final call through (SSSOCTRL) IEFSSREQ.
- It interacts with JES by requesting work
The external writer
makes a request of JES for work by using the selection criteria, and
then uses dynamic allocation to allocate a returned SYSOUT data set
for processing.
- It handles retrieval requests
Both JES2 and JES3 support retrieval
requests. That is, the external writer issues the IEFSSREQ macro asking
JES to supply the name of a selectable SYSOUT data set. The external
writer processes that data set through dynamic allocation. See Processing Flow for Single Data Set Requests for more information on the processing flow.
Updates
to selected attributes for a particular data set (such as destination
and class change) can be made through the unallocation facility as
described within this documentation.
- It handles update requests
An update request is allowable only
for JES3.
JES3 allows update requests through the IEFSSREQ
macro for one or more data sets whose selection criteria matches the
criteria supplied by the external writer directly through the IEFSSREQ
macro.
However, individual data sets obtained through the IEFSSREQ
retrieval/allocation process should have their attributes changed
during the dynamic unallocation as described in the retrieval information
above.
Update requests may be performed on more than one data
set at a time when the external writer:
- Issues the IEFSSREQ macro
- Does not specify a specific data set name within the SSSO control
block.
This is a powerful facility. However, you should be
careful when using it, as the scope of such a modification may be
large when more than one data set is involved.
- It uses MVS services to communicate
to JES
SSI function code 1 schedules work by allowing the external
writer to indicate which types of data sets it wishes to process and
then asking JES to return the name of a SYSOUT data set to the external
writer. Dynamic allocation of this spooled data set is performed
through dynamic allocation (DYNALLOC). The records of the spooled
data set may be obtained through sequential access methods (SAM GETs).
A dynamic unallocation is used to deallocate the SYSOUT data set (upon
EODAD), which optionally changes some of its attributes.
- Spool access is provided by sequential access methods
SAM is
used to obtain the records of the SYSOUT data set from the spool.
This implies familiar coding techniques, such as OPENs, GETs, and
CLOSEs.
- It handles all data record processing
Once a record is supplied
to the external writer on a GET, the external writer has control of
the record. For example, it can print the record or archive the record,
depending on the purpose of the external writer.
- It may wait for JES to post it for new work if idle
When JES
sends a no-work-available notice to the external writer, it may sit
idle until it receives a POST from JES, telling it that work is available.
It may then ask JES again for the newly available work.
This
process uses WAIT and POST logic with an ECB returned to the external
writer.
JES2 does not POST the external writer if invoked from
a batch job; it must be a started task for such posting to occur.