Librarian Subsystem capabilities and things you should be aware of
Librarian has a Subsystem Option called LAM that reads Librarian Master files. This option allows users to have Librarian Master files specified in a SYSLIB DD concatenation during compiles. The Librarian Subsystem, LAM, handles only BSAM /BPAM logic and any deviation from this will fail because the I/O requests do not allow the Librarian Subsystem to get control.
The Librarian Subsystem has been used with utility programs such as IEBGENER, IDCAMS and others. Language Compilers will work as long as the calling sequence to access a member is strictly BSAM /BPAM logic.
How this process works is that the SYSLIB DD data sets are handled and allocated by Librarian using the SUBSYS=LAM parameter. Even non-librarian data sets have to have the SUBSYS parameter specified when a librarian data set is present in a SYSLIB concatenation. When an OPEN, FIND, READ etc. is issued by the compiler, provided the SUBSYS=LAM parameter has been supplied, LAM checks if the Data set in the SYSLIB concatenation is a Librarian Master and if so it handles the request for that Data set. If the requested member is found and it happens to be a Librarian Master file, LAM sets up for reading that member from the Librarian Master file and passes the records to the compiler on subsequent READ requests. Without this functionality, COPYBOOK members imbedded within a Librarian main member and residing in an Librarian Master file would have to be written out to a PDS before attempting to compile the main member. This would require an extra step before compiling a member that has COPYBOOK members in an Librarian Master file.
Due to many environment changes with z/OS be sure you have the most current fixes for Librarian Subsystem LAM. In addition make sure you also have IBM most current fixes for z/OS 1.5 and higher, specifically APAR PQ90312 and APAR OA08754. If you are using SUBSYS=LAM abends can occur without these fixes.
Here is an example of using SUBSYS=LAM parameters to compile a member that resides in a Librarian Master as well as COPYBOOKS that the main member includes which are also in a Librarian Master.
//ASM EXEC PGM=ASMA90,REGION=0M,
// PARM=('OBJECT,NODECK,LIST')
//SYSLIB DD DSN=A.LIBRARIAN.FILE,DISP=SHR,SUBSYS=LAM
// DD DSN=SYS2.MCALIB,DISP=SHR,SUBSYS=LAM
// DD DSN=SYS1.MACLIB,DISP=SHR,SUBSYS=LAM
//SYSUT1 DD DSN=&&SYSUT1,UNIT=VIO,SPACE=(1700,(1000,500))
//SYSUT2 DD DSN=&&SYSUT2,UNIT=VIO,SPACE=(1700,(500,500))
//SYSUT3 DD DSN=&&SYSUT3,UNIT=VIO,SPACE=(1700,(500,500))
//SYSTERM DD SYSOUT=*,DCB=BLKSIZE=1089
//SYSLIN DD DSN=&&TEMP1,
// UNIT=VIO,SPACE=(3200,(15,15)),DISP=(NEW,PASS,DELETE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200)
//SYSIN DD DSN=A.LIBRARIAN.FILE(PGM001),DISP=SHR,SUBSYS=LAM
//SYSPRINT DD SYSOUT=*,DCB=BLKSIZE=1089