From Soe To Wapl
From Soe To Wapl
From Soe To Wapl
If your first exposure to either Scheduling Operational Environment (SOE) or Workload Automation
Programming Language for z/OS (WAPL) was with IBM Workload Scheduler for z/OS 9.3, then this
document will probably be of little interest to you.
If you’re still reading, then I will start with a little history to put things in context. SOE was first
developed as a strategic tool in 2007, with limited availability, only made available to customers with
specific needs and used in some projects to migrate customers to Workload Scheduler from other
ISV products. In 2009 SOE 2.4 was made publicly available as an unsupported tool, provided ASIS, to
aid with automating various Workload Automation processes. Under the covers it exploited the
published Program Interface (PIF), but was more consumable.
Though unsupported, the tool was updated with new features, support for new releases and fixes
for any issues discovered. A new version was released roughly every 12 months, with fix packs in
between as needed. Because of the unsupported nature of the tool, fixes were only ever applied to
the latest level of code, but in some cases customers could be advised how to make those fixes
themselves as early versions of the code were provided uncompiled, and some fixes were only in the
data map which was always delivered in the clear. From version 3.3 the tool was delivered as
compiled REXX, to allow customers with the REXX compiler to run it at a higher speed, and in
preparation for what was to come.
In 2014 it was announced that SOE would be officially delivered as part of the product from version
9.3, making SOE 3.3 Fix Pack A, delivered in August 2014, the final issue of SOE. A few months later
it was officially taken into the full product source and became known as WAPL. Since some of the
later changes included the IF/THEN and loop capability, the new name reflected both the
programming capability and helped distinguish the unsupported tool from the supported one. All
subsequent fixes to SOE have been applied to WAPL.
As the final version of SOE gets older, now almost 3 years old, it is extremely important to move to a
supported version of WAPL. When SOE 3.3 FP A was released the highest version of Workload
Scheduler available at that time was TWSz 9.2, and the highest operating system available was z/OS
2.1. It was not designed with changes in any higher releases in mind. This is vitally important for
anyone moving to z/OS 2.2, as this includes changes the way virtual addresses were resolved, which
was not compatible with the way SOE processed virtual addressing at start-up, making SOE unable to
work correctly on initiators above the line under z/OS 2.2.
Fortunately, WAPL has been available for 2 years now and is fully supported. WAPL becomes
compatible once this PTF is applied http://www-
01.ibm.com/support/docview.wss?crawler=1&uid=swg1PI69440. So ensure you have upgraded to
WAPL and applied this fix before moving to z/OS 2.2.
If you are an existing SOE user there are effectively two scenarios to upgrade to WAPL –
1. Stay at your existing level of Workload Scheduler and upgrade your SOE environment to the
latest version of WAPL.
2. Upgrade to IWS for z/OS 9.3, making allowances for element naming differences
What had to change for SOE to be supported (The Blue Wash)
To be included in the product officially, the SOE architecture had to be adapted to fit in with libraries
and naming conventions of IBM Workload Scheduler for z/OS. Largely it already did, with the main
touch points of the JCL procedure (EQQYXJCL) and the main entry point (EQQYXTOP) already having
EQQ prefixed names.
The libraries containing SOE elements were mapped either to mostly pre-existing product libraries,
or customisation libraries
Though the main programs and JCL in SOE already had an EQQ prefix, some members in the PARM
and SOEEXEC libraries did not originally have EQQ prefixed members. A WAPL sample job,
EQQWPLCO has been provided to create SOE versions of the PARM members.
Since the most popular SOEEXECs have been largely replaced with native WAPL commands, a similar
action was not taken with SOEEXEC members, to encourage evaluation of any SOEEXEC use and
either migrate to use the native WAPL command, or the new name.
No SOEEXECs were amended as part of the porting to WAPL (other than their name), so it is possible
to include the SOE 3.3 SOEEXEC library as the last library in the SYSPROC concatenation to run all
SOEEXECs exactly as they were under SOE, and then gradually migrate to the new names or
commands.
Other than those unavoidable naming differences WAPL is largely just the latest version of SOE.
If you are not upgrading your current subsystems to IWSz 9.3, then to obtain the WAPL code you
need to first install an instance of IWSz 9.3 under SMPE on a Sandbox system. You only need to get
as far the loading of the SEQQ libraries to get WAPL installed. Strictly speaking you do not need to
get as far as a working controller, but it is recommended to do that in the long term, so that in the
event of problems you can attempt to reproduce any problems in the 9.3 system, to determine
whether it is a core WAPL issue, or a cross version issue. This will aid problem resolution.
If you are not upgrading your subsystems to IWSz 9.3, then this is the code that needs porting to all
your subsystems. How you do this is entirely up to you, but if your current naming convention
includes version in the dataset name, then you might want to consider porting these datasets using
the names they would have when you eventually roll out version 9.3. For purposes of illustration
that is the convention I will be using in this document. Any maintenance applied to your IWSz 9.3
datasets should be rolled out to your other systems using whatever method works for you.
Also if not upgrading your subsystems, base WAPL requires a new load module, EQQSWARQ which is
not contained within any previous releases of IWSz. This module must reside within an authorised
library, I would recommend using your eventual intended name for IWSz 9.3 SEQQLMD0 and adding
that into your APF lists, but equally the member could be ported into an existing authorised library if
that suits your needs better. The library containing EQQSWARQ should be concatenated after the
version of IWSz you are communicating with.
In the IWSz Planning and Installation guide it recommends you run sample EQQWPLCO. This job
copies the EQQ prefixed members in SEQQWAPL to member names with their original SOE names.
Whether you run this in place on the SMPE controlled library, or copy the contents and run in a non-
SMPE controlled library depends upon your policy surrounding SMPE controlled libraries. Whichever
method you use ensure the end result contains both old and new member names, and this is the
library you use in the EQQYXJCL procedure. This allows you to gradually move over from old to new
names. Any updates to the SEQQWAPL library should be followed by running EQQWPLCO. It is
recommended that when you have completed the migration to EQQ names that you remove the
non-EQQ members and no longer run the EQQWPLCO job.
However, if you have existing SOE workload out there, want to set your own site defaults, or will be
wanting to run WAPL across versions of IWSz, then there are a few more customisations you will
need to apply.
Setting defaults
At the top of the procedure you will see the following defaults, and you might notice they use the
old SOE names. This is because the change to EQQ names only came towards the end of the
integration into the product. As all testing had been completed using these old defaults, it was
released this way so as not to invalidate the testing.
//EQQYXJCL PROC @=,
// ARGS='',
// CMD=EQQYXTOP,
// FILESPEC=FILENONE,
// LANG=EN,
// MOD='',
// OPTFILE='TWS.V930.SEQQWAPL',
// OPTS=OPTDEFLT,
// REF=REFERNCE,
// REG=4M,
// SUBSYS=WSMC,
// VER=V930,
// #=
At some point a future release of WAPL will correct these names to the modern EQQ prefixes. To
pre-empt this, and avoid copies of the old name escaping into the wild needing to be tidied up, it is
recommended you pre-empt that as follows.
//EQQYXJCL PROC @=,
// ARGS='',
// CMD=EQQYXTOP,
// FILESPEC=EQQFLNON,
// LANG=EN,
// MOD='',
// OPTFILE='TWS.V930.SEQQWAPL',
// OPTS=EQQOPDEF,
// REF=EQQREF,
// REG=4M,
// SUBSYS=WSMC,
// VER=V930,
// #=
If you want to set your own WAPL default options, you can create your own OPTIONS statement in a
member in a non-product library, and point to it by amending the OPTFILE and OPTS symbolic
parameters as appropriate. This member will be executed in WAPL before anything else, and is not
restricted to just OPTIONS statements, any statement is allowed e.g. VARSET MYVAR = “HELLO”.
Consider carefully what you put in this member as it will be executed by every WAPL job, so will
increase processing for every job, and consider the risk of changing it (in particular getting it wrong).
The EQQOPTS DD statement was an early SOE mechanism for allowing standard code to be executed
across multiple jobs. A later release of SOE introduced the INCLUDE statement which allows pre-
built members to be executed only when needed by the job, so is a much more efficient and safe
approach.
The EQQLANG DD statement can also be pre-empted to point at the new name, changing –
//EQQLANG DD DISP=SHR,DSN=TWS.V930.SEQQWAPL(LANG&LANG.)
to
//EQQLANG DD DISP=SHR,DSN=TWS.V930.SEQQWAPL(EQQLNG&LANG.)
1. The SEQQLMD0 that belongs to the version that the controller is using
2. The authorised library that you put EQQSWARQ in.
The EQQMLIB library should also point to the version belonging to the controller
//STEPLIB DD DISP=SHR,DSN=TWS.&VER..SEQQLMD0
// DD DISP=SHR,DSN=TWS.V930.SEQQLMD0
//EQQMLIB DD DISP=SHR,DSN=TWS.&VER..SEQQMSG0
Setting the VER= keyword to the actual version, e.g. VER=V910, will both tell WAPL what version is
running and set the correct STEPLIB and EQQMLIB. WAPL can accept many different formats of
version to suit your dataset naming convention, e.g. VER=V910, VER=910, VER=V9R1M0 etc.
From version 9.3 onwards the EQQSWARQ load module will be in every SEQQLMD0, so once you
have no controller lower than 9.3, you can remove the second DD statement from the STEPLIB.
All other DD statements referencing IWSz libraries should point explicitly to the version of WAPL that
you are running, not the controller. Only the load library and message library need to be pointed to
the version of the controller.
Ensure that no members in the USRREXX library begin with EQQ, unless you are exploiting the filter
exit, in which case your EQQYXU00 member is OK in this library. If you are not using the filter exit,
then there is no reason for any USRREXX members to override members in SEQQMISC, so you may
want to consider placing the SEQQMISC library first in the concatenation, to avoid accidental
overrides which may cause issues and complicate support of WAPL.
You may want to consider testing your “upgraded SOE” with only a few jobs to start with. If that is
the case do not place your new version of EQQYXJCL in the place you currently access the SOE
version from, instead placing it in a library that you can explicitly refer to it from a select number of
jobs using the JCLLIB statement.
Your systems programmer should know which mechanism you have in place, and hopefully it is link
listed. If not you will need to add either the compiler or alternate library to the bottom of the
STEPLIB.
If you don’t know where your REXX library is, SOE came with a copy of the alternate library,
SEAGALT, which you can use to get things working.