En esta última parte, vamos a crear los nodos de VTAM que necesita el OPC para establecer la comunicación entre el controller y el tracker. También corregiremos algunos detalles de la instalación que han quedado pendientes. Una vez hecho esto, daremos por finalizada la implementación básica de OPC. En otras entradas del blog, veremos cómo crear workstations, aplicaciones, calendarios, etc.
Empezamos yendo a la librería TWS860.SEQQSKL0 para editar el miembro EQQLMTAB.
Como el job no tiene cabecera (jobcard), se la añadimos:
//OPCINSTA JOB (9999),'OPCSAMPLES',CLASS=A,MSGCLASS=Q,
// MSGLEVEL=(1,1),REGION=0M,NOTIFY=&SYSUID
Al final del JCL, modificamos la librería de la DD SYSLMOD indicando nuestra librería VTAMLIB del sistema. En este caso es ADCD.Z113.VTAMLIB. Una vez modificado, submitimos.
Vamos a la libreria ADCD.Z113.VTAMLIB y vemos que aparece el miembro EQQLMTAB.
Vamos a empezar a crear los nodos de VTAM. Entramos en la librería ADCD.Z113.VTAMLST y creamos los siguientes miembros:
Miembro AOP1C
Añadimos la siguiente información:
VBUILD TYPE=APPL
TEAM1CTL APPL ACBNAME=TEAM1CTL, X
MODETAB=EQQLMTAB, X
DLOGMOD=NCFSPARM
NOTA: Prestad especial atención a la imagen, ya que os debe quedar de la misma forma (la posición de VBUILD TYPE=APPL, las "x" del final de las líneas, etc.)
Miembro AOP1T
Añadimos la siguiente información:
VBUILD TYPE=APPL
TEAM1TRK APPL ACBNAME=TEAM1TRK, X
MODETAB=EQQLMTAB, X
DLOGMOD=NCFSPARM
NOTA: Prestad especial atención a la imagen, ya que os debe quedar de la misma forma (la posición de VBUILD TYPE=APPL, las "x" del final de las líneas, etc.)
Miembro DOP1C
Añadimos la siguiente información:
VBUILD TYPE=CDRSC
TEAM1TRK CDRSC CDRM=IS1MVS2
Miembro DOP1T
Añadimos la siguiente información:
VBUILD TYPE=CDRSC
TEAM1CTL CDRSC CDRM=IS1MVS1
Miembro FLAPPL
Añadimos la siguiente información:
*=================================================================*
* APPL FOR OPC CONTROLLER FETCH LOG TASK *
*=================================================================*
VBUILD TYPE=APPL
FL1LU01 APPL ACBNAME=FL1LU01, X
MODETAB=EQQLMTAB, X
DLOGMOD=NCFSPARM
NOTA: Prestad especial atención a la imagen, ya que os debe quedar de la misma forma (la posición de VBUILD TYPE=APPL, las "x" del final de las líneas, etc.)
Miembro FNAPPL
Añadimos la siguiente información:
*===============================================================*
* APPL FOR DATA STORE COMMUNICATION TASK
*===============================================================*
VBUILD TYPE=APPL
FN1LU01 APPL ACBNAME=FN1LU01, X
MODETAB=EQQLMTAB, X
DLOGMOD=NCFSPARM
NOTA: Prestad especial atención a la imagen, ya que os debe quedar de la misma forma (la posición de VBUILD TYPE=APPL, las "x" del final de las líneas, etc.)
Ya hemos creado los nodos de VTAM necesarios. Ahora vamos a hacer las ultimas correcciones en algunas librerías para que todo funcione correctamente.
Copiamos la librería OPC.OP1C.MLOG y le ponemos el nombre OPC.OP1T.MLOG.
Ahora, copiamos la librería OPC.OP1C.EQQDUMP con el nombre OPC.OP1T.EQQDUMP.
Una vez hemos creado la librería, vamos al miembro OP1T de la librería ADCD.Z113.PROCLIB y lo editamos.
Modificamos las siguientes línea:
//EQQMLOG DD DISP=SHR,DSN=OPC.OP1T.MLOG
//EQQDUMP DD DISP=SHR,DSN=OPC.OP1T.EQQDUMP
El paso siguiente es muy importante porque activaremos la EXIT7 y la EXIT51, para que funcione correctamente el OPC. Vamos a la librería ADCD.Z113.PARMLIB y editamos el miembro JES2PARM.
Añadiremos la siguiente información, antes de la definición de los iniciadores, teniendo especial cuidado con las líneas que deben estar comentadas y las que no.
LOAD(OPCAXIT7)
EXIT(7) ROUTINES=OPCAENT7,STATUS=ENABLED
LOAD(TWSXIT51)
EXIT(51) ROUTINES=TWSENT51,STATUS=ENABLED
Ahora vamos a crear el miembro EQQGJCCT, para que cuando arranquemos el OPC no de error, que es la tabla de mensajes del JOB COMPLETION CHECKER.
Más información sobre la tabla de mensajes aquí.
Para crearlo, creamos un nuevo JCL en cualquier librería, yo me he creado una librería llamada IBMUSER.JCLS, y ponemos lo siguiente:
//OPCINSTA JOB (9999),'OPCSAMPLES',CLASS=A,MSGCLASS=Q,
// MSGLEVEL=(1,1),REGION=0M,NOTIFY=&SYSUID
//ASMH EXEC PGM=ASMA90
//SYSPRINT DD SYSOUT=*
//SYSLIB DD DISP=SHR,DSN=TWS860.SEQQMAC0(EQQJCCT)
//SYSLIN DD DISP=SHR,DSN=OPC.OP1C.JCLIB(EQQGJCCT)
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(2,1))
//SYSIN DD *
EQQJCCT S=1,T=SKIPSTA,M='IDCAMS SYSTEM SERVICES'
END
/*
NOTA: La librería de la DD SYSLIB tiene que ser la librería donde se encuentra el miembro EQQJCCT y la librería de salida (SYSLIN) la librería JCLIB de nuestra instalación
Submitimos el job, que finalizará correctamente.
El job EQQPCS01 de la librería OPC.OP1C.SAMPJCL, crea unos ficheros VSAM, pero el JCL no es correcto, porque crea ficheros VSAM sin separar el ".DATA" y ".INDEX" del nombre. Por ejemplo, crea la librería OPC.OP1CV.ADDATA, en vez de ser OPC.OP1CV.AD.DATA. Para corregirlo, simplemente modificamos las líneas donde se crean los ficheros VSAM y ponemos el nombre correcto. Si ya tenemos las librerías creadas, podemos borrarlas quitando los comentarios de los DELETE.
Ya que el JCL tiene más pasos, para evitar cortar el JCL, copiamos las líneas del primer paso (donde se crean los ficheros VSAM) y creamos en nuevo miembro.
Ahora editamos y submitimos el nuevo miembro creado.
Una vez hecho todo esto, es necesario hacer IPL para que carguen todas las modificaciones que hemos hecho en el sistema.
Una vez arrancado el sistema, vamos a la consola y ponemos los siguientes comandos, para activar las LUs que hemos creado:
v net,act,id=AOP1C
v net,act,id=AOP1T
v net,act,id=FLAPPL
v net,act,id=FNAPPL
v net,act,id=TEAM1CTL
v net,act,id=TEAM1TRK
Ahora arrancamos el controller con el comando:
S OP1C
NOTA: Para pararlo, se usa el comando "P OP1C".
Aunque salga el mensaje “STC00036 IEFC452I OSER - JOB NOT RUN - JCL ERROR” el Controller quedará arrancado.
Ahora hay que arrancar el tracker usando el comando:
S OP1T
NOTA: Para pararlo, se usa el comando "P OP1T".
Los mensajes son debidos a que no está creado el Long Term Plan ni el Current Plan en OPC. Si queremos, podemos dejar parado el tracker hasta haber creado todos los recursos necesarios en OPC.
05.54.08 STC00003 IST663I INIT OTHER REQUEST FAILED, SENSE=08570002
IST664I REAL OLU=NETD.TEAM1TRK REAL DLU=NETD.TEAM1CTL
IST889I SID = D2B3FE1128F22F6B
IST264I REQUIRED RESOURCE TEAM1CTL NOT ACTIVE
IST314I END
05.54.28 STC00040 EQQV019E SESSION SETUP FAILED - PLU=TEAM1CTL NOT
AVAILABLE
NOTA: Cuando arranquemos por primera vez el controller y el tracker pueden aparecer mensajes indicando que alguna librería se ha llenado (B37), si se para el controller o el tracker, rearrancar sin hacer nada más. Debería quedar correctamente.
Si al intentar arrancarlos una de las dos tareas se queda WAITING FOR DATASETS, es debido a que estamos usando la misma librería SYSDUMP en los miembros OP1C y OP1T de la librería ADCD.Z113.PROCLIB. Para solucionarlo, crear una librería distinta, por ejemplo OPC.OP1T.SYSDUMP, para el miembro OP1T.
Si todo ha arracando correctamente, vamos al menú principal de ISPF y entramos a OPC para configurar el controller.
Entramos en la opción 0.
Vamos a la opción 1.
Marcamos con una barra "/" la opción que pone "OPC on same MVS" y ponemos el nombre del controller, en este caso, OP1C.
Hasta aquí llega esta guía básica para implementar OPC y que funcione.