Hi Lizette.

Definitely food for thought.

We come from the VSE world, being on z/OS only since 2010, so I still have a 
VSE mindset in many ways.  In VSE there is a JCL card called LIBDEF, which has 
parameters PROC, PHASE, SOURCE, OBJ, and DUMP.  For example:


// LIBDEF PROC,SEARCH=([system libraries here],USER.PROD),PERM
// LIBDEF PHASE,SEARCH=([system libraries here],USER.PROD),PERM
// LIBDEF SOURCE,SEARCH=([...]),PERM
// LIBDEF OBJ,SEARCH=([...]),PERM

If TEMP is specified instead of PERM (both are omitted; TEMP being the default) 
the the LIBDEF is only in place for the duration of the job.  With PERM 
specified the LIBDEF becomes the default for the partition (class) in which it 
was submitted.  So at IPL something like the above is submitted to each 
partition.  This allows jobs to have no LIBDEF statement at all, if only the 
default libraries are desired.

If a developer wishes to have a "private" library search first all they need to 
do is add a TEMP LIBDEF to their test JCL, e.g.:

// LIBDEF *,SEARCH=FJS.MYLIB

"* Indicates that the LIBDEF statement applies to all member types except DUMP 
and user types".  (Hmm, "user types"?  Hadn't heard of that before.  Sounds 
interesting!)

So in essence, I am trying to get as close to that functionality in z/OS as I 
can.  It's a struggle.  At this point all of our application jobs have the 
following immediately following the JOB card:

/*JOBPARM  PROCLIB=APPL         
//         SET LOADENV=PROD     
//         INCLUDE MEMBER=JOBLIB

JOBPARM PROCLIB is obviously used to point to the JES2 PROCLIB APPL 
concatentation.  If a developer wishes to have a private library searched first 
they can just add a JCLLIB statement.

We've been running this way, as mentioned, since May of 2010 and I don't 
believe we've ever run in to any issues with compressing our PDS proclibs.  And 
as I stated above, its simple to add a JCLLIB for personal libraries.

The member JOBLIB is in one of the libraries that is included in the APPL 
PROCLIB concatentation.  The development one looks like this:

//         SET IMSID=IMD1                          
//JOBLIB   DD DSN=&LOADENV..APPLIB.LOAD,DISP=SHR   
//         DD DSN=PGMR.APPLIB.LOAD,DISP=SHR        
//         DD DSN=PROD.APPLIB.LOAD,DISP=SHR        
//         DD DSN=PROD.PEPLIB.LOAD,DISP=SHR        
//         DD DSN=PROD.UTILLIB.LOAD,DISP=SHR       
//         DD DSN=SYS3.BMC.IMS.IMLIB,DISP=SHR      
//         DD DSN=SYS3.BMC.IMS.BMCPSWD,DISP=SHR    
//         DD DSN=SYS6.IMD1.SDFSRESL,DISP=SHR      
//         DD DSN=SYS6.IMD1.DYNLIB.BATCH,DISP=SHR  
//         DD DSN=SYS3.MBC.LOAD,DISP=SHR           
//         DD DSN=CICS.SDFHEXCI,DISP=SHR           


The DD's specified are:
- A parametrized "private" load library. See note below
- A shared programmer test load library
- The three production application load libraries
- Some system load libraries that are not present in LNKLST

If a developer wants to execute a non-production executable they compile it to 
their <pgmrhlq>.APPLIB.LOAD library and they change the "SET LOADENV" to 
specify their personal HLQ.

Our production JOBLIB is something like this:
//         SET IMSID=IMP1                       
//JOBLIB   DD DSN=EMER.APPLIB.LOAD,DISP=SHR     
//         DD DSN=EMER.PEPLIB.LOAD,DISP=SHR     
//         DD DSN=PROD.APPLIB.LOAD,DISP=SHR     
//         DD DSN=PROD.PEPLIB.LOAD,DISP=SHR     
//         DD DSN=PROD.UTILLIB.LOAD,DISP=SHR    
//         DD DSN=SYS6.IMP1.SDFSRESL,DISP=SHR   
//         DD DSN=SYS6.IMP1.DYNLIB.BTCH,DISP=SHR
//         DD DSN=SYS3.DSN910.SDSNEXIT,DISP=SHR 
//         DD DSN=SYS3.DSN910.SDSNLOAD,DISP=SHR 
//         DD DSN=SYS3.MBC.LOAD,DISP=SHR        
//         DD DSN=CICS.SDFHEXCI,DISP=SHR        


Similar, but it includes our EMER libraries, and does not include our PGMR test 
library nor (intentionally!) any way of specifying a user's personal library.


All of this works, but I am still not really happy with it.  It seems to be 
kind of 'ad-hoc'.  In VSE the systems programmers were in charge of changing 
their IPL proc specified PERM LIBDEF statements if they want to add a system 
library (like SDFHEXCI, for example) for use by applications, or if they want 
to implement a new version that exists in a different library.  (That's 
somewhat less important now, because where we previously had something like 
CICS.V410.SDFHEXCI, they have now specified an ALIAS CICS.SDFHEXCI that is to 
always point at the desired version.  We'll see how well that works when we 
upgrade to CICS TS 5.1.)  Anyway, my point here is that even though systems 
would install a new version (of McKinney Batch to CICS, for example), our 
applications would not use it until we changed the name in the JOBLIB member.  
Since technically that member was an "applications member" they didn't want to 
touch it; they had us do it.  But as I
 said, hopefully the use of aliases will mitigate this issue.

I do find it a bit of a "kludge" the way we implemented the use of a JCL 
parameter (LOADENV) so we can use this include member and still be able to 
override it.  It doesn't work at all if one wants to specify two test libraries 
(or even one that does not meet the standard naming convention).  I imagine we 
could make the JOBLIB include something like this:

//         DD DSN=PGMR.APPLIB.LOAD,DISP=SHR        
//         DD DSN=PROD.APPLIB.LOAD,DISP=SHR        
//         DD DSN=PROD.PEPLIB.LOAD,DISP=SHR        
//         DD DSN=PROD.UTILLIB.LOAD,DISP=SHR       
//         DD DSN=SYS3.BMC.IMS.IMLIB,DISP=SHR      
//         DD DSN=SYS3.BMC.IMS.BMCPSWD,DISP=SHR    
//         DD DSN=SYS6.IMD1.SDFSRESL,DISP=SHR      
//         DD DSN=SYS6.IMD1.DYNLIB.BATCH,DISP=SHR  
//         DD DSN=SYS3.MBC.LOAD,DISP=SHR           
//         DD DSN=CICS.SDFHEXCI,DISP=SHR           


And the jobs could have this:

/*JOBPARM  PROCLIB=APPL

//JOBLIB   DD DISP=SHR,DSN=PROD.DUMMY.LOAD
//         INCLUDE MEMBER=JOBLIB

That's a little more flexible, since one can specify whatever name they want in 
place of "PROD.DUMMY.LOAD", and can add additional DD statements as well.  To 
be honest I'm not sure why I didn't decide to go this way.  I'm not a fan of 
the "dummy" library, but I think it would be necessary to get this to work as I 
want.  Doing a conversion to this shouldn't be too difficult using some REXX 
automation.


But in the end I would prefer to not have any of these lines in production 
JCL.  I can't eliminate the JOBLIB related stuff, because there is no way to 
specify default execution libraries, other than using methods that systems 
won't let us use (LNKLST, etc.).  I would actually love to have something like 
the default JES2 PROCLIBs for application load modules.

Anyway, I am really rambling.  But I hope I've made some of my desires, and the 
reasons behind them, clear.  I am always up for any good suggestions.


Frank





>________________________________
> From: Lizette Koehler <stars...@mindspring.com>
>To: IBM-MAIN@LISTSERV.UA.EDU 
>Sent: Thursday, August 30, 2012 7:17 AM
>Subject: Re: JES2 JOBCLASS PROCLIB
> 
>Frank,
>
>You need to be thinking about support vs. micromanagement.
>
>In large shops the use of JCLLIBs are controlled via the Change control
>Process (Changeman, Endevor, Homegrown) or products like JCLPLUS or PROJCL,
>etc...  And job scheduling Software could also be impacted.
>
>With JCLLIBs you can allow the programmers to not be bothering the sysprogs
>every time they need a new proclib added or compress a proclib dataset.
>
>This is particularly helpful during Q/A, Testing or other processes used
>prior to going to production.
>
>However, as I said, the 00/nn is only numeric.  And you will need to get the
>sysprogs to agree to this process.  I know your shop is not large so it will
>probably work.  But since JCLLIB is documented, at some point a clever
>programmer will find it and start using it without you seeing it.  Then you
>will need to determine how to control that usage.
>
>Lizette
>
>
>> -----Original Message-----
>> From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On
>Behalf
>> Of Frank Swarbrick
>> Sent: Thursday, August 30, 2012 3:48 AM
>> To: IBM-MAIN@LISTSERV.UA.EDU
>> Subject: Re: JES2 JOBCLASS PROCLIB
>> 
>> I prefer JCLLIB to be used only for proclib overrides.  For our standard
>set of
>> application procs I prefer they either not be specified explicitly at all
>(JES2 class
>> default), or at the very least be specified simply (using the JOBLIB
>PROCLIB
>> statement).  That way we don't have people not using the standard set of
>application
>> proclibs.
>> Frank
>> 
>> 
>> 
>> 
>> >________________________________
>> > From: Lizette Koehler <stars...@mindspring.com>
>> >To: IBM-MAIN@LISTSERV.UA.EDU
>> >Sent: Wednesday, August 29, 2012 6:38 PM
>> >Subject: Re: JES2 JOBCLASS PROCLIB
>> >
>> >Frank,
>> >
>> >You do not need to put PROCLIBs in JES2 if you do not want to.
>> >
>> >Instead look at the JCLLIB statement in JCL.
>> >
>> >Or do you require the use of the PROCLIB statements?
>> >
>> >For application users, I prefer they use JCLLIBs rather than relying on
>> >JES2 Proclibs
>> >
>> >Lizette
>> >
>> >
>> >> -----Original Message-----
>> >> From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU]
>> >> On
>> >Behalf
>> >> Of Frank Swarbrick
>> >> Sent: Wednesday, August 29, 2012 4:10 PM
>> >> To: IBM-MAIN@LISTSERV.UA.EDU
>> >> Subject: JES2 JOBCLASS PROCLIB
>> >>
>> >> We have the following:
>> >>
>> >> JOBCLASS(?) AUTH=ALL,        /* All commnds accepted
>> >>    [...]
>> >>          PROCLIB=00,
>> >>    [...]
>> >>
>> >> PROCLIB(PROC00) DD(1)=(DSNAME=SYS2.&SYSNAME..PROCLIB),
>> >>    [...]
>> >>
>> >> PROCLIB(APPL)    DD(1)=(DSNAME=DEV.APPLIB.INCLUDE),
>> >>    [...]
>> >>
>> >> In our "application" jobs we specify:
>> >> /*JOBPARM  PROCLIB=APPL
>> >>
>> >> It looks like in the JES2 parmlib member the following limitation is
>> >> in
>> >place:
>> >> PROCLIB=nn|00
>> >>   Specifies the default procedure library number (00-99) which is to
>> >> be
>> >used for this
>> >> job class.
>> >>
>> >> Am I missing something, or is the use of the JOBPARM JES2 JCL
>> >> statement
>> >the only
>> >> way that a non-numeric JES2 PROCLIB concatentation can be referred to?
>> >>
>> >> Obviously we could just rename PROCLIB(APPL) to something like
>> >> PROCLIB(10)
>> >and
>> >> then add something like JOBCLASS(A) PROCLIB=10, so any job executing
>> >> in
>> >CLASS=A
>> >> will use the "applications" proclib, PROCLIB=10.  I would prefer
>> >> being
>> >able to say
>> >> PROCLIB=APPL or something, because "APPL" has more implicit meaning
>> >> than
>> >"10".
>> >>
>> >> I am not a sysprog and cannot test this out myself.  I want to
>> >> suggest it
>> >to our
>> >> sysprogs, but I want to make sure I am suggesting something that can
>> >> be
>> >done.
>> >>
>> >> Thanks!
>> >> Frank
>> >>
>> >
>> >----------------------------------------------------------------------
>> >For IBM-MAIN subscribe / signoff / archive access instructions, send
>> >email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>> >
>> >
>> >
>> 
>> ----------------------------------------------------------------------
>> For IBM-MAIN subscribe / signoff / archive access instructions, send email
>to
>> lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>
>----------------------------------------------------------------------
>For IBM-MAIN subscribe / signoff / archive access instructions,
>send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>
>
>

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to