Re: SQLCODE=-904 during RUN
>Dropping any table required by a package will invalidate that package. And >creating a new table, even if it has the same name, will not right your >>package, because that new table is a _different_ object. >Why not simply TRUNCATE your tables if you want to empty them out before your >test run? >Cheers, >Jantje. Jan! Thanks! Replacement the DROP/CREATE with the TRUNCATE statement has allowed the process to complete succesfully! Thank you so much! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: SQLCODE=-904 during RUN
>HI Janet, >I noticed that the bind is binding DALLASA.DB2ZP.ZPDB2 >but the error is for DB2ZP.ZPDB2.1A320A2A009C519E. >It looks like a mis-match between local and remote versions of the package. >Regards, > Ron I've been looking for a way to have both the BIND and the RUN statements agree on the location of the package. The BIND statement has this syntax BIND PACKAGE__(_ ___ _.collection-id)__ _ _> | | |_location-name_| |_OWNER(authorization-id)_| | where I could specify a location-name on the collection id. But DALLASA is the correct location so I don't need to change the BIND statement. The RUN STATEMENT doesn't even specify a collection-id and has no syntax to specify the location | >>__RUN__ _PROGRAM(program-name)__ _ _ __> | | ||_PLAN(plan-name)_| || | |_CP__PLAN(plan-name)|| || | >__ ___ __ _ ___>< | ||_LIBRARY(library-name)_| |_PARMS(parameter-string)_| | So how do I get the RUN statement to use the right package? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: SQLCODE=-904 during RUN
>I am not getting the DROP/CREATE table part here... Are these the tables that >are used in your program? Because if they are, then dropping them >will >invalidate all packages accessing them. And re-creating the tables will *not* >rebind your packages. After all, even if they have the same name, >your tables >will be different, new objects. And any program that uses the invalidated >packages will fail... >Cheers, >Jantje. Jan, Yes this is part of my test automation so to make sure the result sets are clean I am dropping and recreating the tables every time through. Are you saying I need to sequence this? So the Drop/Create is done and THEN then BIND? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: SQLCODE=-904 during RUN
>HI Janet, >I noticed that the bind is binding DALLASA.DB2ZP.ZPDB2 >but the error is for DB2ZP.ZPDB2.1A320A2A009C519E. > >It looks like a mis-match between local and remote versions of the package. > >Regards, > Ron Ron, What step do I fix that on and what keyword do I specify? Thanks! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: SQLCODE=-904 during RUN
>On Fri, 28 Oct 2016 18:12:01 -0500, Janet Graff <janet.gr...@yahoo.com> wrote: >>I have the program pre-compile, compile, pre-linking, linking and binding all >>with return code zeros. >Can we see the JCL, or better still, the entire job log? ... >Jantje. Here's the output from the bind Again JES data truncated on the right 13.57.58 JOB03253 MONDAY,31 OCT 2016 13.57.58 JOB03253 IRR010I USERID JIG IS ASSIGNED TO THIS JOB. 13.57.59 JOB03253 ICH70001I JIG LAST ACCESS AT 13:57:42 ON MONDAY, OCTOBER 13.57.59 JOB03253 $HASP373 JIGDB2 STARTED - INIT 2- CLASS A - SYS S0W1 13.58.00 JOB03253 - -TIMINGS (MINS.)-- 13.58.00 JOB03253 -STEPNAME PROCSTEPRC EXCP CONN TCB SRB C 13.58.00 JOB03253 -RUN 00212 30 .00 .00 13.58.00 JOB03253 -JIGDB2 ENDED. NAME- TOTAL TCB CPU TIM 13.58.00 JOB03253 $HASP395 JIGDB2 ENDED -- JES2 JOB STATISTICS -- 31 OCT 2016 JOB EXECUTION DATE 39 CARDS READ 174 SYSOUT PRINT RECORDS 0 SYSOUT PUNCH RECORDS 7 SYSOUT SPOOL KBYTES 0.01 MINUTES EXECUTION TIME 1 //JIGDB2 JOB MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY= IEFC653I SUBSTITUTION JCL - MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=JIG 2 //RUN EXEC PGM=IKJEFT01,DYNAMNBR=20,COND=(4,LT) 3 //STEPLIB DD DISP=SHR,DSN=DSNA10.DBAG.RUNLIB.LOAD 4 //SYSLIBDD DISP=SHR,DSN=JIG.BASE710.LOAD 5 // DD DISP=SHR,DSN=DSNA10.DBAG.RUNLIB.LOAD 6 //DBRMLIB DD DISP=SHR,DSN=JIG.DBAG.DBRMLIB.DATA 7 //SYSTSPRT DD SYSOUT=* 8 //SYSPRINT DD SYSOUT=* 9 //CEEDUMP DD SYSOUT=* //*SYSUDUMP DD SYSOUT=* 10 //ZPIDWAGA DD SYSOUT=* 11 //SYSOUTDD SYSOUT=* 12 //REPORTDD SYSOUT=* 13 //SYSIN DD * //* 14 //SYSTSIN DD * //* ICH70001I JIG LAST ACCESS AT 13:57:42 ON MONDAY, OCTOBER 31, 2016 IEF236I ALLOC. FOR JIGDB2 RUN IEF237I 18C7 ALLOCATED TO STEPLIB IEF237I 0D39 ALLOCATED TO SYSLIB IEF237I 18C7 ALLOCATED TO IEF237I 0D37 ALLOCATED TO DBRMLIB IEF237I JES2 ALLOCATED TO SYSTSPRT IEF237I JES2 ALLOCATED TO SYSPRINT IEF237I JES2 ALLOCATED TO CEEDUMP IEF237I JES2 ALLOCATED TO ZPIDWAGA IEF237I JES2 ALLOCATED TO SYSOUT IEF237I JES2 ALLOCATED TO REPORT IEF237I JES2 ALLOCATED TO SYSIN IEF237I JES2 ALLOCATED TO SYSTSIN IEF237I 18C7 ALLOCATED TO SYS1 IEF285I DSNA10.DBAG.RUNLIB.LOAD KEPT IEF285I VOL SER NOS= VPDA1D. IEF142I JIGDB2 RUN - STEP WAS EXECUTED - COND CODE IEF285I DSNA10.DBAG.RUNLIB.LOAD KEPT IEF285I VOL SER NOS= VPDA1D. IEF285I JIG.BASE710.LOAD KEPT IEF285I VOL SER NOS= VPWRKJ. IEF285I DSNA10.DBAG.RUNLIB.LOAD KEPT IEF285I VOL SER NOS= VPDA1D. IEF285I J
Re: SQLCODE=-904 during RUN
>On Fri, 28 Oct 2016 18:12:01 -0500, Janet Graff <janet.gr...@yahoo.com> wrote: >>I have the program pre-compile, compile, pre-linking, linking and binding all >>with return code zeros. >Can we see the JCL, or better still, the entire job log? >> >>But when I try to RUN I get a -904 indicating that the resource is >>unavailable because the package is in a non-executable state. Since the BIND >>>output all says it completed successfully I must be misspecifying something. >> >Same thing: can we see the complete run? >Cheers, >Jantje. Truncations on the right side of the JES output, let me know if you need that data J E S 2 J O B L O G -- S Y S T E M S 0 W 1 -- N O D E 14.00.14 JOB03255 MONDAY,31 OCT 2016 14.00.14 JOB03255 IRR010I USERID JIG IS ASSIGNED TO THIS JOB. 14.00.14 JOB03255 ICH70001I JIG LAST ACCESS AT 13:59:56 ON MONDAY, OCTOBER 14.00.14 JOB03255 $HASP373 JIGDB2R STARTED - INIT 2- CLASS A - SYS S0W1 14.00.16 JOB03255 - -TIMINGS (MINS.)-- 14.00.16 JOB03255 -STEPNAME PROCSTEPRC EXCP CONN TCB SRB C 14.00.16 JOB03255 -RUN 00 2757528 .00 .00 14.00.16 JOB03255 -JIGDB2R ENDED. NAME- TOTAL TCB CPU TIM 14.00.16 JOB03255 $HASP395 JIGDB2R ENDED -- JES2 JOB STATISTICS -- 31 OCT 2016 JOB EXECUTION DATE 31 CARDS READ 107 SYSOUT PRINT RECORDS 0 SYSOUT PUNCH RECORDS 7 SYSOUT SPOOL KBYTES 0.02 MINUTES EXECUTION TIME 1 //JIGDB2R JOB MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=,REGION=0M //* IEFC653I SUBSTITUTION JCL - MSGCLASS=H,MSGLEVEL=(1,1),NOTIFY=JIG,REGIO 2 //JOBLIB DD DSN=DSNA10.SDSNLOAD,DISP=SHR 3 //DD DSN=CEE.SCEERUN,DISP=SHR //* //* GRANT AND CREATE TABLE //* SEPARATE FROM EXECUTION OF PROGRAM //* //* 4 //RUN EXEC PGM=IKJEFT01,DYNAMNBR=20,COND=(4,LT) //*SYSLIBDD DISP=SHR,DSN=JIG.BASE710.LOAD //* DD DISP=SHR,DSN=DSNA10.DBAG.RUNLIB.LOAD 5 //SYSLIBDD DISP=SHR,DSN=DSNA10.DBAG.RUNLIB.LOAD 6 //DBRMLIB DD DISP=SHR,DSN=JIG.DBAG.DBRMLIB.DATA //*DBRMLIB DD DISP=SHR,DSN=DSNA10.DBAG.DBRMLIB.DATA 7 //SYSTSPRT DD SYSOUT=* 8 //SYSPRINT DD SYSOUT=* 9 //CEEDUMP DD SYSOUT=* J E S 2 J O B L O G -- S Y S T E M S 0 W 1 -- N O D E 14.00.14 JOB03255 MONDAY,31 OCT 2016 14.00.14 JOB03255 IRR010I USERID JIG IS ASSIGNED TO THIS JOB. 14.00.14 JOB03255 ICH70001I JIG LAST ACCESS AT 13:59:56 ON MONDAY, OCTOBER 14.00.14 JOB03255 $HASP373 JIGDB2R STARTED - INIT 2- CLASS A - SYS S0W1 14.00.16 JOB03255 - -TIMINGS (MINS.)-- 14.00.16 JOB03255 -STEPNAME PROCSTEPRC EXCP CONN TCB SRB C 14.00.16 JOB03255 -RUN 00 2757528 .00 .00 14.00.16 JOB03255 -JIGDB2R ENDED. NAME- TOTAL TCB CPU TIM 14.00.16 JOB03255 $HASP395 JIGDB2R ENDED -- JES2 JOB STATISTICS -- 31 OCT 2016 JOB EXECUTION DATE 31 CARDS READ 107 SYSOUT PRINT RECORDS 0 SYSOUT PUNCH RECORDS 7 SYSOUT SPOOL K
SQLCODE=-904 during RUN
I have written a simple DB2 program that I'd like to run from Batch. I'm on IBM's Dallas service so I have a limited access to certain datasets. I have the program pre-compile, compile, pre-linking, linking and binding all with return code zeros. But when I try to RUN I get a -904 indicating that the resource is unavailable because the package is in a non-executable state. Since the BIND output all says it completed successfully I must be misspecifying something. Here's the error SQLCODE=446704536 -904 DSNT408I SQLCODE = -904, ERROR: UNSUCCESSFUL EXECUTION CAUSED BY AN UNAVAILABLE RESOURCE. REASON 00E30305, TYPE OF RESOURCE 0801, AND RESOURCE NAME DB2ZP.ZPDB2.1A320A2A009C519E DSNT418I SQLSTATE = 57011 SQLSTATE RETURN CODE DSNT415I SQLERRP= DSNXEAAL SQL PROCEDURE DETECTING ERROR DSNT416I SQLERRD= -160 0 0 -1 0 0 SQL DIAGNOSTIC INFORMATION DSNT416I SQLERRD= X'FF60' X'' X'' X'' X'' X'' SQL DIAGNOSTIC INFORMATION These are the run statements DSN SYSTEM(DBAG) RUN PROGRAM(ZPDB2) PLAN(DB2ZP) - LIB('JIG.BASE710.LOAD') END Here's the bind output READY DSN SYSTEM(DBAG) DSN BIND PACKAGE(DB2ZP) MEMBER(ZPDB2) ACT(REP) ISO(CS) CURRENTDATA(YES) ENCODING(EBCDIC) DSNT254I -DBAG DSNTBCM2 BIND OPTIONS FOR PACKAGE = DALLASA.DB2ZP.ZPDB2.() ACTIONREPLACE OWNER JIG QUALIFIER JIG VALIDATE RUN EXPLAIN NO ISOLATION CS RELEASE COPY APREUSE APCOMPARE APRETAINDUP QUERYACCELERATION GETACCELARCHIVE DSNT255I -DBAG DSNTBCM2 BIND OPTIONS FOR PACKAGE = DALLASA.DB2ZP.ZPDB2.() SQLERROR NOPACKAGE CURRENTDATA YES DEGREE1 DYNAMICRULES DEFER NOREOPT VARS KEEPDYNAMIC NO IMMEDWRITEINHERITFROMPLAN DBPROTOCOLDRDA OPTHINT ENCODING EBCDIC(01047) PLANMGMT OFF PLANMGMTSCOPE STATIC CONCURRENTACCESSRESOLUTION EXTENDEDINDICATOR PATH DSNT232I -DBAG SUCCESSFUL BIND FOR PACKAGE = DALLASA.DB2ZP.ZPDB2.() DSN BIND PLAN(DB2ZP) PKLIST(DB2ZP.*) ACT(REP) ISO(CS) CURRENTDATA(YES) ENCODING(EBCDIC) DSNT252I -DBAG DSNTBCM1 BIND OPTIONS FOR PLAN DB2ZP ACTIONREPLACE OWNER JIG VALIDATE RUN ISOLATION CS ACQUIRE USE RELEASE COMMIT EXPLAIN NO DYNAMICRULES RUN DSNT253I -DBAG DSNTBCM1 BIND OPTIONS FOR PLAN DB2ZP NODEFER PREPARE CACHESIZE 3072 QUALIFIER JIG 1 CURRENTSERVER CURRENTDATA YES DEGREE1 SQLRULES
Re: Changing the primary AUTHID using RACROUTE
>For simplicity and safety,you could attach a subtask, and do the VERIFY (and >the cross-memory call) from that subtask. Then, on the VERIFY, if you >omit >the ACEE parameter RACF will (as documented in the RACROUTE book) put the ACEE >address into TCBSENV for you. If the cross-memory server >is setup correctly >it should find the ACEE there. >-- >Walt Walt (and everyone else!) Thank you so much! That did it. My test program is exhibiting the same behaviors that I get when invoking my system level task from CICS etc. I can't thank you enough for all your help! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Changing the primary AUTHID using RACROUTE
>I'm afraid we still don't know enough about how your cross-memory server is >operating. In an earlier post you implied that it will choose whether to >use >the primary or secondary ID. How does it make that choice? And how does it >find both of them. >If you change ASXBSENV you are changing the primary ID, not creating a >secondary one as (I think) you mentioned. That is dangerous and may ?>have >side effects you haven't thought about. >For simplicity and safety,you could attach a subtask, and do the VERIFY (and >the cross-memory call) from that subtask. Then, on the VERIFY, if you >omit >the ACEE parameter RACF will (as documented in the RACROUTE book) put the ACEE >address into TCBSENV for you. If the cross-memory server >is setup correctly >it should find the ACEE there. >-- >Walt Thanks Walt! The cross memory server is designed to handle callers from CICS, IDMS and other environments like that. For my test program I want to simulate the secondary ACEE that occurs in those environments without the test harness overhead of using those actual environments. So really do need a primary ACEE and a secondary ACEE. I will code up the attached subtask. For my clarification, I current have just the one main task that does a RACROUTE REQUEST=VERIFY,ENVIR=CREATE that specifies the USERID, PASSWORD and the ACEE as follows RACROUTE REQUEST=VERIFY,WORKA=(R7),SYSTEM=YES,PASSCHK=YES,X ENVIR=CREATE,USERID=(R5),PASSWRD=(R6),ACEE=(R8),X GROUP=(R10),X RELEASE=1.9.2,MF=(E,RACRWORK) And you are advising me to put this in an attached subtask to my test program and remove the ACEE parameter? Will I need to specify additional parameters in that case? ISTR that without the ACEE parameter I was getting the '*' in the ACEE's userid as per the doc (sort of), but that was when I was running the VERIFY in the main task. "1. If you omit USERID, GROUP, and PASSWRD and if you code ENVIR=CREATE or if ENVIR=CREATE is used as the default, you receive a return code of X'00' and obtain an ACEE that contains an asterisk (*) (X'5C') in place of the USERID and group name. " Thanks! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Changing the primary AUTHID using RACROUTE
>>Put the address of the new ACEE in ASCBSENV and/or TCBSENV as appropriate? >>J R >I think it's ASXBSENV. >For my test application TCBSENV is 0. >I get a S0C4 when I do attempt to replace ASXBSENV despite being authorized >and in supervisor mode. It feels like there is a RACROUTE macro or >>equivalent that says "start using this ACEE" which will put the value in >ASXBSENV and probably update ASXBUSER? >I see references to the RACINIT macro which has similar parameters but it >appears to be a parallel function to RACROUTE ENVIR=CREATE and not a >>sequencing thing, that is you aren't supposed to do RACROUTE ENVIR=CREATE and >then RACINIT ENVIR=CREATE. >For what I'm trying to do, that is create a new secondary ACEE and run under >this new ACEE's authority, would the RACINIT macro be more >appropriate? >Janet Aha, I just released I have to be in Key 0 to store into the ASXB. Can someone confirm that to change the ACEE in use, I have to update ASXBSENV? That there is no macro that will do this for me? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Changing the primary AUTHID using RACROUTE
>Put the address of the new ACEE in ASCBSENV and/or TCBSENV as appropriate? >J R I think it's ASXBSENV. For my test application TCBSENV is 0. I get a S0C4 when I do attempt to replace ASXBSENV despite being authorized and in supervisor mode. It feels like there is a RACROUTE macro or equivalent that says "start using this ACEE" which will put the value in ASXBSENV and probably update ASXBUSER? I see references to the RACINIT macro which has similar parameters but it appears to be a parallel function to RACROUTE ENVIR=CREATE and not a sequencing thing, that is you aren't supposed to do RACROUTE ENVIR=CREATE and then RACINIT ENVIR=CREATE. For what I'm trying to do, that is create a new secondary ACEE and run under this new ACEE's authority, would the RACINIT macro be more appropriate? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Changing the primary AUTHID using RACROUTE
>Thanks for the info. It helps a bit, but not enough. >First, just to make sure you know, you can't do a RACROUTE REQUEST=VERIFY >while running in cross-memory mode. You would need to create a >request for >another task running in your server primary, queue the request to the task, >and suspend the cross-memory task until you have an >answer. >Next, doing a VERIFY for a user ID is not really sufficient in the general >case, as there are many other aspects of the user's security environment >that >could affect the answer to an authorization check (group name, terminal name >or other port of entry, SECLABEL etc.). At a minimum you should >use the >UTOKEN as input to the VERIFY (if you have to create a new ACEE) but even that >is not sufficient in some cases. So, if you're doing this for a >product (as >opposed to a bit of home-grown code just for your own company's use) then you >need to rethink how much data you capture. For >example, it may be much better >to use a RACROUTE REQUEST=EXTRACT TYPE=ENVRXTR to get a copy of the user's >ACEE, and then recreate it in >your address space using RACROUTE >REQUEST=VERIFY that specifies ENVIRIN. >But even before that, what kind of checks do you plan to make using the ACEE >once you have it? (What resource class, for example?) If you're lucky >they >will be checks that you could perform using the existing user's ACEE rather >than rebuilding one. That would be both more efficient, and give you >a much >simpler overall design. -- >Walt Walt, Thanks for the reply! The cross memory mode for the system level task code is all written and has been in the field for many years. (chances are I'm going to bolix up this explanation but I'll give it a go) The system level code uses an RACROUTE FASTAUTH or AUTH to verify General Resource Profiles with a pointer to the callers ACEE for it's own use. It doesn't EXTRACT anything from the ACEE but uses it for authorization checks. In any case my little test program doesn't get involved in all that. What I'm trying to write is a stand alone assembler test program, that runs in Batch under a userid. The test program creates a secondary ACEE using a hard coded userid and password that is just used for testing purposes. Then using this secondary ACEE it invokes the cross memory services support to the system level task that will eventually use either the primary or the secondary ACEE to validate access to resources. So I've got the return zero creating the secondary ACEE, but it appears that after that, when I invoke the cross memory services it's done using the ACEE from the primary id. What do I have to do to switch to using the secondary ACEE? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Changing the primary AUTHID using RACROUTE
>It would help to know why you want to do that, and what you intend to do after >you have the ACEE. It's possible that there are alternatives that >would be >better, which we might recommend if we had some more information. >However, you don't _need_ a TERMID unless you're doing a RACROUTE >REQUEST=VERIFY for a user's TSO session. It's certainly not related to the >>error message you're getting, which is quite clearly due to an invalid user >ID. You probably got that error message because you've said that the >ength of >the user ID is 8, but MYUSER is only 6 characters long. That won't work. >-- >Walt Walt, I am writing a test program for a system level task. The system level task accepts cross memory service calls from various address spaces including CICS, IDMS and IMS so it needs to be able to handle secondary ACEEs. Instead of bringing up a more complicated subsystem in my automation tests I'd like to write a neat standalone assembler program that creates a secondary ACEE and then uses it to make the cross memory services call. With your's and Charles' help I now have the ENVIR=CREATE working and I've determined that the ENVIR=CHANGE does me no good because it can only modify the GROUP and the not the userid. I expected that the ENVIR=CREATE would create the ACEE and start using it. However I'm still getting indications after the ENVIR=CREATE that the cross memory services call is still using the initial userid and not the userid from the secondary ACEE. Is there another step I should do before performing the cross memory services call to make the new ACEE active? I also expected to get a message from RACF indicating the switch to the new ACEE with maybe an ICH message showing the new userid, which I'm not getting and is leading me to believe that I haven't actually switched to the new ACEE. Thanks! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Changing the primary AUTHID using RACROUTE
>From your current ACEE? >http://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.ichb200/ich2b2_ACEE_and_related_control_blocks.htm > >52 (34) ADDRESS 4 ACEETRMP Address that points to the terminal ID. The field is >zero for non-terminal users. >Charles Yes, the Batch job is run under the job's userid. I want to then programmatically change to a second userid and create an ACEE. Do I have to get hold of my current ACEE and update the USERID/PASSWRD/GROUP fields or can I just issue the code I specified in my original post? I changed the TERMID to point to a D'0' but I'm getting the same error message ICH408I JOB(JIGRACF ) STEP(RUN ) 944 LOGON/JOB INITIATION - USER AT TERMINAL NOT RACF-DEFINED IRR012I VERIFICATION FAILED. USER PROFILE NOT FOUND. Which I think implies that it thinks I'm a terminal user, even though it has binary zeros for the TERMINAL value in the ICH408I message. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Changing the primary AUTHID using RACROUTE
I have an application and I want to change the the userid. I have the RACF macros coded but I'm having trouble coming up with the source of TERMID. Where do I get the TERMID? The code in question looks like this: MODESET MODE=SUP LAR7,RACFWORK MVC RACRWORK,RACRLIST MVC USERLEN,8 MVC USERID,=CL8'MYUSER ' MVC PSWLEN,8 MVC PASSWD,=CL8'' MVC MYACEE,=F'0' MVC MYTERM,=CL8'' < clearly I need a value here LAR5,USERLEN LAR6,PSWLEN LAR8,MYACEE LAR9,MYTERM RACROUTE REQUEST=VERIFY,WORKA=(R7),SYSTEM=YES,PASSCHK=YES,X ENVIR=CREATE,USERID=(R5),PASSWRD=(R6),ACEE=(R8), X TERMID=(R9), X RELEASE=1.9.2,MF=(E,RACRWORK) STR15,RC ... MVC RACRWORK,RACRLIS2 LAR8,MYACEE RACROUTE REQUEST=VERIFY,WORKA=(R7),SYSTEM=YES,PASSCHK=NO, X ENVIR=CHANGE,ACEE=(R8), X RELEASE=1.9.2,MF=(E,RACRWORK) STR15,RC MODESET MODE=PROB The error I'm getting is this ICH408I JOB(JIGRACF ) STEP(RUN ) 790 LOGON/JOB INITIATION - USER AT TERMINAL NOT RACF-DEFINED Which clearly says I need to provide a TERMID (or equivalent) on the ENVIR=CREATE. Where do I get the TERMID? Also I suspect I might be archaic by using RELEASE=1.9.2, is there a more appropriate value for this decade? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Dump in 64 bit mode "Storage around GPR2 is invalid."
Charles, It doesn't appear that the register conventions for XPLINK and non-XPLINK are compatible. If one were marketing an Assembler API would you have to deliver two versions? One XPLINK and one non-XPLINK? Janet >@Janet, it occurred to me that you are talking about both C and "XGR." That to >me implies that you are calling assembler from C (or perhaps vice >versa) -- >is that right? >If so, do you know that XPLINK (which I believe is implied by AMODE 64) is >something you *do* have to know about? It's another brave new world: >you >can't just do STM R14,R12,12(R13) any more. >Search the KC for EDCXPRLG. >Charles -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Dump in 64 bit mode "Storage around GPR2 is invalid."
Thanks Charles! >Why are you using the AIX compiler reference? There is a z/OS compiler >reference manual, you know. Covers USS as well as legacy MVS. >http://www-01.ibm.com/support/docview.wss?uid=swg27036892 >Charles -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Dump in 64 bit mode "Storage around GPR2 is invalid."
I don't know if I'm XPLINK or standard linkage. I'm using the following command to link xlc -o MY64.exe -q64 VSHVOLTG.o VSHVOLT.o VSHMSG.o MY64.o where would I look to see if XPLINK is turned on? How would I turn it off? I can't find XPLINK mentioned in the Compiler Reference V10.1 IBM XL C for AIX, V10.1 http://www-01.ibm.com/support/docview.wss?uid=swg27012874=1. Regarding overlays, anything is possible but it's highly unlikely. I've been forcing dumps every couple of instructions to make sure things are clean. The registers in the downstack area don't all reflect the actual state of things when I force the abends. Can do a LA R5,186 and the dump will still show R5 containing all Beees. I wish I could use TSO TEST but I don't know how to get it to run on a USS executable. Janet >Are you XPLINK or standard linkage? >Any *possibility* that you have overlaid the stacked save areas in your code? >R12:R15 = 404040... looks mighty suspicious to me. >Charles -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Dump in 64 bit mode "Storage around GPR2 is invalid."
Here's an example Parameters, Registers, and Variables for Active Routines: main (DSA address 0048082FEA20): DOWNSTACK DSA Saved Registers: GPR0. GPR1. GPR2. * GPR3. GPR4. 0048082FEA20 GPR5. GPR6. 1AC0E618 GPR7. 0048082FF2C8 GPR8. 0005 GPR9. GPR10 0001 GPR11 0004 GPR12 4040404040404040 GPR13 4040404040404040 GPR14 4040404040404040 GPR15 4040404040404040 ... GPREG STORAGE: Storage around GPR0 is invalid. Storage around GPR1 is invalid. Storage around GPR2 is invalid. Storage around GPR3 is invalid. Storage around GPR4 (0048082FEA20) +0800 0048082FF220 0048 082FF260 0048 08600060 |..2-.. I have XGR'd GPR2 and GPR3 before the abend and GPR5 definitely does not contain a bunch Beees. The program was compiled using xlc on the USS side. The other issue I have is that the top of stack is not my main() so the PSW and "Storage dump near condition, beginning at location" is of CEEHDSP instead of main so I can't see what instruction in my program caused the abend. I assume the registers are modified up stack which is why I can't see them. Can I get the dump at the actual abend location? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Dump in 64 bit mode "Storage around GPR2 is invalid."
When I get a CEEDUMP while running in 64 bit mode some of the register summary shows things like "GPR2. ". Why does this happen and how do I get the value of the register? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Loading Java dump into IPCS
Thanks Eileen! Janet > -X options would probably go into the the STDENV IBM_JAVA_OPTIONS parm >Eileen -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Loading Java dump into IPCS
When running from the USS command line I can specifiy -Xdump:none and suppress the Java dumps and traces. Then if I get an abend I get the CEEDUMP which is much more useful. Where do I specify -Xdump:none in the EXEC=JVMLDM66 JCL? Does it go in the STDENV or is it an argument? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Loading Java dump into IPCS
Aha! I found an operator message with an MVS file name that I could load into IPCS. It doesn't have an abend summary though. Can someone point me to a manual on how to read a JVM dump? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Loading Java dump into IPCS
I abended a Java/JNI/Assembler program and it generated a few output files. They are named - Snap.20160822.132237.65637.0003.trc - javacore.20160822.132237.65637.0002.txt The Snap looks like an IPCS Snap trace but I don't know how to load the dump into IPCS. It doesn't appear to take USS filenames or paths. Any help? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: JZOS calling a 64 bit class
Kirk, Wonderful! It JVMLDM66 is indeed in the mvstools directory. Thank you! That will save me time! Janet >You say that you have the Unix directory for the 64-bit SDK, so depending >on how it was installed you may also have the JVMLDMx6 module in the >"mvstools" subdirectory. >You can use this by copying this to your own PDSE load module library: >cp -X JVMLDM76 "//'HLQ.MY.PDSE.LOADLIB'" >Kirk Wolf -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: JZOS calling a 64 bit class
The class libraries were successfully created with the 64 bit Java libraries on the USS side. When run they report the bitmode as 64 bit and load the appropriate .so library containing my 64 bit JNI code. I can run the class from the USS prompt but I can't run it from batch using JVMLDM* because I only have the 32 bit load module JVMLDM60 in my JVA*.SIEALNKE library. I am waiting for my sysprog to install the 64 bit JVM load modules. Janet >I wondered what Janet meant by that, but figured I'd missed one of the >many changes going on in the Java world lately. She said "The class >I'm invoking is definitely 64 bit and I've confirmed that by printing >out the bitmode in the program and running it from the USS command >prompt." So what does this mean? >Tony H. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: JZOS calling a 64 bit class
Edward, Thank you! My STEPLIB only contains JVMLDM60 so I'll get with the sysprogs to get the 64 bit version installed. Thanks! Janet >On 8/17/2016 4:42 PM, Janet Graff wrote: >> JAVAJVM EXEC PGM=JVMLDM60 >When you run a 64-bit JVM, the JZOS launcher name must end with six >('6') not zero ('0'). Try JVMLDM66 instead. >BTW, that's the launcher for Java 6 -- a pretty darn slow release. We're >using JVMLDM86 for Java 8. >-- >Edward E Jaffe -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: JZOS calling a 64 bit class
JAVAJVM EXEC PGM=JVMLDM60 >What program name are you invoking on EXEC PGM= ? >-- >Edward E Jaffe -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
JZOS calling a 64 bit class
I have Batch JCL to call the JVM to invoke 31 bit java classes. I have generated the 64 bit version of the java classes and I'm trying to convert my JCL to invoke the 64 bit class. I am getting this error CEE3588S A call was made to a function in the AMODE 64 DLL libjvm.so from an AMODE 31 caller. From entry point JzosVM::initializeVMArgs() at compile unit offset +0094 at entry offset +0094 at address 1AA03D2C. so it looks like the jvm is 64 bit. The class I'm invoking is definitely 64 bit and I've confirmed that by printing out the bitmode in the program and running it from the USS command prompt. Is there anything special I have to do to convert the 31 bit java invocation JCL to 64 bit other than change all the paths to point to the 64 bit java libraries and to point to my 64 bit java classes? Is there any way to tell from the CEEDUMP what AMODE 31 caller is causing the problem? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: C/C++ maximum number of arguments on a function prototype
z/OS 2.1 - V1.12 z/OS XL C Janet >What version of the compiler are you running? >What OS and OS Level? >Lizette -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
C/C++ maximum number of arguments on a function prototype
Is there a maximum number of arguments on a function/function prototype? I am getting a CCN3099 on the 276th parameter of a function that crazily takes 303 parameters. I don't see anything wrong but I wonder if the compiler just can't handle that many parameters? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
codepage restrictions on IBM applications
I understand that IBM left it up to the product owners to decide what NLS support meant to their products. Can anyone give me information on how codepages are supported by some of the more popular products ( like DB2, IMS, CICS)? Since WTO is restricted to CP-37 displayable EBCDIC characters this means that the system console messages, and the job log messages are restricted to readable EBCDIC characters. That codepage does define accented and non-English characters so this would mean that some of these products could issue latin codepage messages that were non-English. Can anyone confirm that they do that? If configured properly, will DB2/IMS/CICS issue non-English messages to the console or job logs? In the local output files (non-console or job log) for the products do they go beyond CP-37? Do they have output in non-latin codepages? Might they contain DBCS? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: codepage restrictions on the system console
John, Thanks, I looked up WTO and for the TEXT parameter it says "only standard printable EBCDIC characters are passed to MCS-managed display devices. " Not quite at the codepage level but good enough for me. Janet >On Mon, Jul 25, 2016 at 3:03 PM, Janet Graff < >004dc9e91b6d-dmarc-requ...@listserv.ua.edu> wrote: >> I have a theory question rather than a how-to-implement question. >> >> Does anyone know what the codepage restrictions are on the system console? >> Can you have a French console and have messages containing letters with >> french accents? >> What about non-latin codepages? Can you have a Kanji, Katakana or Urdu >> system console with those non-latin characters? >> How about DBCS? Can you have Kanji DBCS system messages on the console >> and have them readable? >> >You talking z/OS? As I recall, the WTO interface in z/OS only allows >"printable" CP-037 characters. >> >> >> Thanks! > Janet >> -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
codepage restrictions on the system console
I have a theory question rather than a how-to-implement question. Does anyone know what the codepage restrictions are on the system console? Can you have a French console and have messages containing letters with french accents? What about non-latin codepages? Can you have a Kanji, Katakana or Urdu system console with those non-latin characters? How about DBCS? Can you have Kanji DBCS system messages on the console and have them readable? Thanks! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
S0D6 RC=27 using Latches
I have an application that is using latches. In general it appears to be working fine. The latch set is kept in an LE C global variable in a subroutine that is used to manage the locking functions. At some point in the code I rebuild a bunch of my data structures and (not the first after I rebuild the data structures) a following ISGLOBT fails with a S0D6 RC=27. After I rebuild the data structures I reattempt the ISGLCRT which gets an RC=4. I then call lSGLPRG in case there are any left over latches from the previous execution. The ISGLPRG gets a return code 0. The Obtain Latch that fails is for a latch that has been obtained and released several times since the recreation of the data structures. I don't see how my managing of my other data structures has affected the the PC number used by the code underlying the ISGLOBT. And why is the PC number good for several obtain and release cycles and then suddenly fails? Does anyone have any ideas? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: JVM FindClass returning Null
Ray, Thank you! I also figured out I wasn't in the working directory I thought I was in. The code now looks like this: chdir("/u/vendor/jig/DOMYAPI3"); dirPtr = getcwd(mydir,sizeof(mydir)); printf("current working directory is %s'\n", mydir); printf("calling FindClass\n"); #pragma convert(819) zprotect_class = (*env)->FindClass(env, "com/mycomp/mysetset/enterprise/zclass"); #pragma convert(0) if (zprotect_class == NULL) { (*env)->ExceptionDescribe(env); printf("findClass returned NULL\n"); rc = ERR_NO_CLASS; } the output in SYSPRINT looks like this current working directory is /u/vendor/jig/DOMYAPI3' calling FindClass findClass returned NULL I'm not sure what I should be fiddling with at this point. Is this affected by the classpath? Is there a way to list all the available classes? Janet >The class name needs to be fully qualified (but *without* that leading /) >It might be easier to use #pragma convert(819) to get a UTF-8 string. >#pragma convert(819) >zclass_class = (*env)->FindClass(env, "com/mycomp/mysetset/enterprise/zclass"); >#pragma convert(0) -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Running an MVS executable using a .so library
This was the problem. Apparently I didn't need to specify a classpath. I changed the code to JNIEnv* create_vm(JavaVM **jvm) { JNIEnv* env; JavaVMInitArgs args; JavaVMOption options; args.version = JNI_VERSION_1_6; args.nOptions = 0; args.options = args.ignoreUnrecognized = 0; int rv; rv = JNI_CreateJavaVM(jvm, (void**), ); if (rv < 0 || !env) printf("Unable to Launch JVM %d\n",rv); else printf("Launched JVM! :)\n"); return env; } and now the JVM comes up! Thank you all for your help! Janet >Why does the JNI_CreateJavaVM have a classpath? Isn't there one already >specified in the _CEE_ENVFILE? Maybe I don't need this? -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Running an MVS executable using a .so library
Heres' the C source code calling JNI_CreateJavaVM that is getting the "Unable to Launch JVM -6". I pretty much copied it from various web pages on "how to call JNI from C". Why does the JNI_CreateJavaVM have a classpath? Isn't there one already specified in the _CEE_ENVFILE? Maybe I don't need this? JNIEnv* create_vm(JavaVM **jvm) { JNIEnv* env; JavaVMInitArgs args; JavaVMOption options; args.version = JNI_VERSION_1_6; args.nOptions = 1; options.optionString = "-Djava.class.path=.:/u/vendor/jig/DOZAPI3"; args.options = args.ignoreUnrecognized = 0; int rv; rv = JNI_CreateJavaVM(jvm, (void**), ); if (rv < 0 || !env) printf("Unable to Launch JVM %d\n",rv); else printf("Launched JVM! :)\n"); return env; } Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Running an MVS executable using a .so library
clearly not as that constant isn't even defined in the jni.h. I'll stick with JNI_VERSION_1_6. Janet >ooh my JNI_CreateJavaVM has a options string. I'm currently passing >args.version = JNI_VERSION_1_6; >maybe that's was JNI_ENOINVAL? >How do I determine what the proper version is of this call? >Since my classpath has /u/Java6_31/J6.0... I'm assuming I'm running >JNI_VERSION_6_31 but I've no idea if that's actually how these things work. >Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Running an MVS executable using a .so library
David, my _CEE_ENVFILE file contains export JAVA_HOME=/u/Java6_31/J6.0 I'm not sure if the export statement is necessary here. Janet >Do you need to set the JAVA_HOME environment variable to point to the JVM? -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Running an MVS executable using a .so library
ooh my JNI_CreateJavaVM has a options string. I'm currently passing args.version = JNI_VERSION_1_6; maybe that's was JNI_ENOINVAL? How do I determine what the proper version is of this call? Since my classpath has /u/Java6_31/J6.0... I'm assuming I'm running JNI_VERSION_6_31 but I've no idea if that's actually how these things work. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Running an MVS executable using a .so library
Frank, That's the right idea, unfortuantely it was the JNI_CreateJavaVM() invocation that got the JNI_EINVAL. So I'm lost how, on z/OS, to get the JNI_CreateJavaVM() call to work. Janet >Does this help? >http://www.developer.com/java/data/how-to-create-a-jvm-instance-in-jni.html -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Running an MVS executable using a .so library
Frank, That was magnificent and got me past my problem. Unfortunately I now get "Unable to Launch JVM -6 ". Which I believe is JNI_EINVAL which I believe means the JVM isn't running. I've been googling around and I haven't found how to tell if the JVM is running on z/OS. When I installed Rational Developer I made sure that RSED and some other job was running but clearly I missed the JVM itself? Can someone point me to the z/OS JVM manual? Janet >I think you need a LIBPATH environment variable to point to it >I got the following from the Enterprise COBOL manual: >http://www.ibm.com/support/knowledgecenter/SS6SG3_4.2.0/com.ibm.entcobol.doc_4.2/PGandLR/ref/rpooo10e.htm >http://www.ibm.com/support/knowledgecenter/SS6SG3_4.2.0/com.ibm.entcobol.doc_4.2/PGandLR/tasks/tpooo08.htm >//RUN EXEC PGM=CALLJAVA,REGION=0M,COND=(4,LT), >// PARM='ENVAR("_CEE_ENVFILE=/u/userid/javaenv") POSIX(ON)/' >//STEPLIB DD DISP=SHR,DSN=JIG.BASE710.LOAD >// DD DISP=SHR,DSN=CEE.SCEERUN >// DD DISP=SHR,DSN=CEE.SCEERUN2 >/u/userid/javaenv would be a Unix file with something like the following: >PATH=/bin:/u/Java6_31/J6.0/bin >LIBPATH=/lib:/usr/lib:/u/Java6_31/J6.0/bin:/u/Java6_31/J6.0/bin/j9vm >CLASSPATH=/u/userid/[something] >Note that I added SCEERUN2 to your STEPLIB. Not sure if it's necessary, but >its in the example. >Looks like you may also need to have DD's named JAVAIN, JAVAOUT and JAVAERR, >as detailed in the second link above. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Running an MVS executable using a .so library
I am writing a C program to invoke the JVM to call an existing JNI package. I have the program compiled and linked but I am having trouble getting libjvm.so loaded at run time. Is this the right STEPLIB? ISTR that mixing MVS and USS files on a DD allocation is not allowed but I'm not sure how else to do this? //RUN EXEC PGM=CALLJAVA,REGION=0M,COND=(4,LT), //PARM='POSIX(ON)/' //STEPLIB DD DISP=SHR,DSN=JIG.BASE710.LOAD // DD DISP=SHR,DSN=CEE.SCEERUN // DD PATH='/u/Java6_31/J6.0/bin/j9vm/', // PATHDISP=(KEEP,KEEP) //SYSTSPRT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //STDERR DD SYSOUT=* CEE3501S The module libjvm.so was not found. Also I'm not sure if the ending slash is necessary. I get the same result whether it's there or not. Is there a run time option that affects this? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving JNI_CreateJavaVM
It turns out I was missing the DLL option on the compile step. Thanks for everyone's help! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving JNI_CreateJavaVM
I switched to LIST(IMP) >Try running LIST(IMP) to see that the binder is reading the side deck >correctly. z/OS V1 R12 BINDER 13:45:21 THURSDAY MARCH 24, 2016 BATCH EMULATOR JOB(JIGJAVA ) STEP(LKED) PGM= IEWBLINK IEW2278I B352 INVOCATION PARAMETERS - LIST(IMP),AMODE=31,MAP,RENT,DYNAM(DLL), IEW2292E B403 OPTION VALUE MISSING OR INVALID FOR OPTION LIST. IEW2322I 1220 1INCLUDE '/u/Java6_31/J6.0/bin/j9vm/libjvm.x' IEW2322I 1220 2IMPORT CODE,'libjvm.so','addHarmonyPortLibToVMArgs' ... IEW2322I 1220 52IMPORT CODE,'libjvm.so','JNI_CreateJavaVM' ... IEW2322I 1220 157IMPORT CODE,'libjvm.so','JVM_Write' IEW2322I 1220 158IMPORT CODE,'libjvm.so','JVM_ZipHook' IEW2322I 1220 159IMPORT CODE,'libjvm.so','NewStringPlatform' IEW2322I 1220 160INCLUDE OBJECT IEW2322I 1220 161NAMECALLJAVA(R) IEW2456E 9207 SYMBOL JNI_CreateJavaVM UNRESOLVED. MEMBER COULD NOT BE INCLUDED FROM THE DESIGNATED CALL LIBRARY. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving JNI_CreateJavaVM
Frank, I added CASE(MIXED) but got the same result IEW2278I B352 INVOCATION PARAMETERS - LIST(NOIMP),AMODE=31,MAP,RENT,DYNAM(DLL),CASE(MIXED) IEW2322I 1220 1INCLUDE'/u/Java6_31/J6.0/bin/j9vm/libjvm.x' IEW2322I 1220 160INCLUDE OBJECT IEW2322I 1220 161NAMECALLJAVA(R) IEW2456E 9207 SYMBOL JNI_CreateJavaVM UNRESOLVED. MEMBER COULD NOT BE INCLUDED FROM THE DESIGNATED CALL LIBRARY. I looked at the file and it didn't seem to contain any line endings. But this statement is in the file IMPORT CODE,'libjvm.so','JNI_CreateJavaVM' Here's a complete list of my active binder options ALIASES NO ALIGN2 NO AMODE31 CALLYES CASEMIXED COMPAT UNSPECIFIED COMPRESSAUTO DCBSNO DYNAM DLL EXTATTR UNSPECIFIED EXITS: NONE FILLNONE GID UNSPECIFIED HOBSET NO INFONO LET 04 LINECT 060 LISTSUMMARY LISTPRIVNO LONGPARMNO MAP YES MAXBLK 032760 MODMAP NO MSGLEVEL00 OVLYNO PRINT YES RES NO REUSABILITY REENTRANT RMODE UNSPECIFIED SIGNNO STORENX NOREPLACE STRIPCL NO STRIPSECNO TERMNO TRAPON UID UNSPECIFIED UPCASE NO WKSPACE 00K,00K XCALNO XREFNO Thank you! Janet >Try adding CASE(MIXED) to your binder parms. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving JNI_CreateJavaVM
Thanks Don! I switched the SYSLIN to include the .x file //SYSLIN DD * INCLUDE '/u/Java6_31/J6.0/bin/j9vm/libjvm.x' INCLUDE OBJECT NAMECALLJAVA(R) //* The binder output shows this now IEW2278I B352 INVOCATION PARAMETERS - LIST(NOIMP),AMODE=31,MAP,RENT,DYNAM(DLL) IEW2322I 1220 1INCLUDE '/u/Java6_31/J6.0/bin/j9vm/libjvm.x' IEW2322I 1220 160INCLUDE OBJECT IEW2322I 1220 161NAMECALLJAVA(R) IEW2456E 9207 SYMBOL JNI_CreateJavaVM UNRESOLVED. MEMBER COULD NOT BE INCLUDED Why isn't JNI_CreateJavaVM resolved by libjvm.x? Janet >It's the .x file that needs to be included in SYSLIN. I've never heard of >SIDEFILE as a DD name. The .so file is the "shared object" or DLL file. >That's only needed at run-time. If you're using some Apace SDK, I would >look for a side file that comes with it. Again, you'd also need the Apache >.so file available somewhere at run-time. Make sure you set the DYNAM(DLL) >binder option. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving JNI_CreateJavaVM
Actually I've had the JNI code finished for a while. I'm trying to call the JNI Code from a C program at this point. Janet >It sounds like you're trying to build a JNI program that hasn't been ported >to z/OS rather than just writing new code. This can be very complex and you >should probably start with getting a JNI "hello world" program working. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving JNI_CreateJavaVM
Don, That helped! I added //SIDEFILE DD PATH='/u/Java6_31/J6.0/bin/j9vm/libjvm.x', //PATHDISP=(KEEP,KEEP) //SYSLIN DD * INCLUDE '/u/Java6_31/J6.0/bin/j9vm/libjvm.so' INCLUDE OBJECT NAMECALLJAVA(R) //* which adds the sidefile and the library Unfortunately this results in unresolved on things like atoe_printf which gather are apache function in the apache version of stdio? ref http://svn.apache.org/repos/asf/harmony/enhanced/java/trunk/classlib/modules/portlib/src/main/native/a2e/unix/headers/stdio.h Is there a manual on how to do this (i.e. Have LE C call Java on z/OS) and resolve all my linkedit issues? Janet >That function lives in a DLL. So you just need the side file for the >ink. libjvm.x is the side file. Something like: >INCLUDE '/java16_64/bin/j9vm/libjvm.x' >ENTRY CELQSTRT >NAME MYPROG(R) >-- >Don Poitras -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Rational Developer for z Systems and Java Maven integration
What version of Rational Developer for z/OS do you have. Mine doesn't have a Maven plugin. Or alternatively, where do you get the Maven plugin for Rational Developer for z/OS? Janet >I use RDz and I just installed the maven plugin. Works great. >David -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Resolving JNI_CreateJavaVM
I am writing an application in C that calls Java methods. I have followed the instructions for load the library and gaining access to the methods and this is all compiling great. I need help on the link. What library would JNI_CreateJavaVM be in? It seems like it would be in a C library somewhere but I no finding it in my LE SCEELKED libraries. It doesn't make sense to me that this would be in a /u/lpp/java* library as this should be a C resolution. Can anyone help direct me to the product that contains the binder resolutions for the JVM? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Rational Developer for z Systems and Java Maven integration
I want to build a java package on the mainframe. The code comes supplied with a maven build. I have Rational Developer 9.5.1. This page says Rational Developer has maven support, http://www.ibm.com/developerworks/rational/library/rational-ide-v9/ as of V9. Is this only for Windows and *nix? I don't see the Maven import for the Rational Developer for z Systems. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving Java import statements
Andrew, Yes! that fixed it. I knew if I had it in a script I'd need that. I didn't realize doing this from the command line would require the export command. Thank you! Janet >You probably need to export the CLASSPATH definition: >export >CLASSPATH=$CLASSPATH:/usr/lpp/zWebSphere/V7R0/optionalLibraries/Apache/Struts/1.1/commons-logging.jar >Due to the idiosyncrasies of unix shells, without "export" it only >creates the variable in the sub-process running the command which ends >as soon as the CLASSPATH= command ends. "export" makes it stick for >subsequent commands. >Adding $CLASSPATH to the start will add the jar to the end of any >existing definition instead of replacing it. >Andrew Rowley -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving Java import statements
Andrew, Thank you all so much for your help. I searched for commons-logging*.jar and found several copies. I tried the following in the directory with the .java file CLASSPATH=/usr/lpp/zWebSphere/V7R0/optionalLibraries/Apache/Struts/1.1/commons-logging.jar javac RemoteServer.java which resulted in the same error message RemoteServer.java:19: package org.apache.commons.logging does not exist import org.apache.commons.logging.Log; I then downloaded the jar from the web site to my windows machine, then I uploaded it to the mainframe in binary to the same directory as my .java file CLASSPATH=/u/vendor/jig/jrobotremoteserver-master/commons-logging-1.2.jar javac RemoteServer.java and got the same error message. I'm doing something wrong I know it. Any help? Janet >Apache Commons is a project creating various reusable Java components. >It's not part of the Apache web server. It doesn't surprise me if most >of Apache Commons is not distributed with z/OS (I'm more surprised if >much is). >I wouldn't expect to find logging in the org.apache.commons.codec jar. >Codec is various encoders and decoders. The logging jar should be called >commons-logging*.jar. >You may have to download it from Apache Commons. Apache commons is at: >https://commons.apache.org/ >Apache Commons logging is at >https://commons.apache.org/proper/commons-logging/ >Being Java, you should be able to just download the jar, do a binary >transfer to z/OS and it should work. >Andrew Rowley -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving Java import statements
Janet Graff wrote: > I set my CLASSPATH to one of the directories (the last as it happens) > > CLASSPATH=/usr/lpp/zWebSphere_OM/V7R0/FPW20M/web2mobilefep_1.1/optionalLibraries/jaxrs_1.X jars themselves don't get added to classpath by their dir being added to classpath Jack, Sorry for not following you here. I finally found a web page that explained that this was a batch job filling in the STDENV DD as indicated on this page http://www.ibm.com/developerworks/systems/library/es-java-batchz.html. I was actually logged on to the USS side and couldn't figure out where this script would go. I was planning on a make file with the classpath statically filled in and was somewhat daunted by the idea of specifying every single jar file that I might need. Is this easier to do in batch than native USS because of this scripting? Janet >Each jar must appear in the classpath. >Either add all the jars in your apache dir to the classpath, e.g, in a script: >for jar in /somedir/*.jar > do > export CLASSPATH=$CLASSPATH:$jar > done >or use the jar tool to look for the missing class and add the jar you find it >in to CLASSPATH, e.g., >for jar in /somedir/*.jar >do > echo $jar > jar tf $jar | grep someclass > echo "***" >done >-- >Jack J. Woehr -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving Java import statements
I searched for the commons-code*.class files and didn't find them. Does WebSphere and/or Rational Developer not provide the class files for these common java routines? Janet >Hi Janet, >yes the individual jars need to be on the classpath. The directory only works >if the individual *.class files are in the directory tree and not in the jars. >A >directory on the classpath is never searched for jars. >dg -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Resolving Java import statements
Sorry Jack, not following the intent. Are you saying I need to add the individual jar files to the CLASSPATH definition? The CLASSPATH does have the directory containing the required jar file. Janet >Jack J. Woehr wrote: >> for jar in /somedir/*.jar >>do >> export CLASSPATH=$CLASSPATH:$jar >>done >Oops, this should say export CLASSPATH=$CLASSPATH:/somedir/$jar >-- >Jack J. Woehr -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
RobotFramework Java XML-RPC server
I need to run the Java XML-RPC server on z/OS to support a windows based RobotFramework testing of my z/OS system. I have downloaded jrobotremoteserver-3.0-standalone.jar. I understand that I'll most likely have to update it to do the ASCII/EBCDIC translations on the HTTP sends and receives. It's Java so it should on z/OS work at some level but looking through some sample programs I have some concerns. Does anyone else have the Java XML-RPC server running on z/OS? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
What STOGROUP does a table belong to
I've been combing through the SYSIBM tables looking for this answer. I need to figure out what STOGROUP my tables belong to. I realize SYSTABLES has TSNAME to tell me what TABLESPACE the table belongs to. But I can't get from TABLESPACE to STOGROUP. How do I figure out what STOGROUP my tables are allocated in? Thank you! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: What STOGROUP does a table belong to
Thanks Jan! I'll look into that. Janet >I think the column STORNAME in SYSTABLEPART is what you're looking for. This >also implies that an entire tablespace doesn't necessarily reside in a >single >storage group. >Regards, >Jan -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: memory leak doing gsk_environment_open()
That was an awesome suggestion! I am having a great time going through my code and finding a couple of leaks. I do note that I have several leaks on setlocale(). It's only 828 bytes but since I call it once per thread it might add up. I have another leak on dllinit() for 155CC0 bytes Does anyone have any suggestions for freeing that memory? Janet >Try the following runtime option HEAPCHK(ON,1,0,10,10). It will produce >a dump with a trace of all memory allocations that have no free. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
memory leak doing gsk_environment_open()
I have a long running STC that does an HTTP sequence using secure sockets. I can monitor the memory usage throughout my calls. I note that my above the line storage shows a 1M increase after the gsk_environement_open(). That memory is not freed after the gsk_environment_shutdown(), gsk_environment_close() or any of the other APIs that close the socket. Has anyone else noticed this? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: memory leak doing gsk_environment_open()
I have run RPTSTG on the application several times in the past and tuned things. I can do this again. However I can see this leak every time I run through an HTTP creation of socket, request, and socket termination. Which is what makes me believe that either the memory isn't cleaned up or the sequence of functions I am calling is incorrect. I see the memory usage on every gsk_environment_open() but I never see the memory freed on any of the close or shutdown calls. This is indeed C. Janet replied to message --- Janet, I assume this is a C application by the long and lower-case function names you mentioned. Have you run it with the LE RPTSTG option turned on? Maybe your HEAP parameters cause LE to request that 1M storage as a secondary heap chunk because the "gsk_*" routines need some heap storage, and I do not believe that heap chunks are freed until termination of the enclave, even if there are no current storage allocations in the chunk(s). RPTSTG output may help you tune the initial heap size so that secondary chunks are not needed. Just a thought. Peter -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
SRB Mode and C functions
We recently found that a pthread_mutex_lock() issues an SVC under the covers which causes our code in SRB Mode to abend with a S0F8-004. Does anyone have a list of C functions (POSIX as well as stdlib) that are illegal in SRB Mode? Thanks! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: SMFxTME field
Sorry, I don't see how to quote a prior message. This is what worked for me from Charles. "Divide by 100 -- remainder is hundredths of a second. Divide quotient by 60 -- remainder is seconds. Divide quotient by 60 -- remainder is minutes. Quotient is hours (24 hour clock). SMFxxDTE is in an amusing packed format: 0cyydddF where c is the century offset by 19 -- that is, 01 => 2000; yy is the low order digits of the year; and ddd is the "Julian" day number of the year: 001 = January 1, ... 365 = December 31 (366 for leap years). " Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: SMFxTME field
That worked. Now I have the time formatted very nicely. Thank you! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: SMFxTME field
What macro would we use to convert TIME BIN to a readable DATE TIME? It doesn't look like STCKCONV to CONVTOD take input of a 32-bit unsigned binary. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: PL/I and optional parameters
Jon, Is there a way to keep the type checking on the required parameters and also allow the trailing parameters to not be specified? The type checking is extremely useful to my customers and I'd hate to lose it completely. I'd prefer some syntax where I can say 99(char (*) optional, char (*) optional, Fixed Bin(31) optional) or some variation that keeps both the type checking and the number of parameters checking. I can live with losing the type checking on the optional parameters, as long as I can keep the type checking on the required parameters. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
BIND PACKAGE running application with FIELDPROC
When executing a BIND PACKAGE against a program that performs Inserts into a table where the columns are defined with FIELDPROC. The program is run. I don't see an option on the BIND PACKAGE for this and the detail information about when a FIELDPROC is run does not include BIND time. What am I missing? If I define the table without FIELDPROC on the columns, then issue BIND PACKAGE, the Inserts do not happen into the table, so I conclude that the program is not run. Why would the BIND PACKAGE with FIELDPROC run the program? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
PL/I and optional parameters
I have a PL/I subroutine call that has 297 optional parameters. That is the function has a parameter list with up to 100 tuples of parameters. The first tuple is required, and tuple 2 through 100 are optional. In C the function signature looks like this int myFunc( int *numDescriptorEntries, int *numBufferEntries, char *errorBuffer, char *descriptor, char *Buffer, int *Length, ...); In PL/I I'd like to do this Declare myFunc External('VSHPARR') Entry( Fixed Bin(31) byaddr, /* Number of Descriptors */ Fixed Bin(31) byaddr,/* Number of Entries */ Char(*) byaddr, /* Error msg buffer */ Char (*) byaddr, /* descriptor*/ Char (*) byaddr, /*Buffer */ Fixed Bin(31) byaddr, /* Length */ * optional, ) returns( byvalue Fixed Bin(31) ) /* Return code */ options ( nodescriptor, linkage(system) ); But PL/I flags this call as an error because I need all three "*optional" declarations rc = myFunc (numDescriptorEntries, numBufferEntries, error, Descriptor1, Buffer1, Length1, Descriptor2, Buffer2, Length2); Which means I have to declare this Declare myFunc External('VSHPARR') Entry( Fixed Bin(31) byaddr, /* Number of Descriptors */ Fixed Bin(31) byaddr,/* Number of Entries */ Char(*) byaddr, /* Error msg buffer */ Char (*) byaddr, /* descriptor*/ Char (*) byaddr, /*Buffer */ Fixed Bin(31) byaddr, /* Length */ * optional, * optional, * optional ) returns( byvalue Fixed Bin(31) ) /* Return code */ options ( nodescriptor, linkage(system) ); So for 100 repeats of the tuple, this function declaration is going to get quite lengthy with loads of "* optional" parameters. Is there a shorter way of declaring 297 optional parameters in PL/I? Thank you! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: AMASPZAP to C main marked as $private
I found the solution. The C Compile parameter NOCSECT was turned on. Using CSECT named the CSECT which allows me to zap it. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: AMASPZAP to C main marked as $private
NAME TESTDCAL * C_CODE VER 01DE 5820,3208 AMA106I ATTEMPTING TO VER/REP OUTSIDE LIMITS OF SECTION You can't zap a module using a CSECT of *. * is a generic CSECT indicator and there are multiple CSECTS in the load module. I just want to get $PRIVATE or alternatively, name the main CSECT something other than $PRIVATE. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
AMASPZAP to C main marked as $private
I'm trying to create a zap for a C main. The binder has designated the C main is in a $private code. What's the AMASPZAP NAME card for private code? Alternatively can I force a name on the CSECT? Here's the link map output from the binder OFFSET OFFSET NAMETYPELENGTH DDNAME SEQ MEMBER 0 $PRIV10CSECT 410 XMLRPC01 TESTDCAL 88 88 main LABEL The name card should be something like NAME TESTDCAL TESTDCAL C_CODE but that doesn't work. A CSECT name of $PRIVATE, $PRIV10, or anything else I can think of doesn't work either. Can anyone help? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: AMASPZAP to C main marked as $private
AMBLIST says that the Control Section is $PRIV10. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: AMASPZAP to C main marked as $private
A DUMPT of the module of all the C_CODE CSECTSs shows the CSECT I want as **RECORD LENGTH: 04C0 CLASS: C_CODE MEMBER NAME: TESTDCAL CSECT NAME: $PRIVATE CODE F2F0 F1F5 F0F9 F0F8 F1F4 F0F4 F3F5 F0F1 F1F2 F0F0 0070 0802 But I don't know how to specify $PRIVATE CODE on the NAME card. Nothing I've tried works. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Python FTP binary object file upload
Sadly, python rejected the quote prefix for the site command. *cmd* 'QUOTE SITE RECFM=FM LRECL=80 BLKSIZE=3200' *put* 'QUOTE SITE RECFM=FM LRECL=80 BLKSIZE=3200'\r\n *get* '500 unknown command QUOTE' *resp* '500 unkown command QUOTE' Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Python FTP binary object file upload
I am using a cross compiler to produce Object files on Windows.My automation uses OOREXX to upload the files via FTP to z/OS to an object PDS.I am upgrading my automation to be run by RobotFramework using Python and I am having trouble converting the OOREXX to use the Python ftplib storbinary. The file upload properly as binary but I cannot get the blocking to work properly. The first 14 records are blocked correctly but then the following lines are off by 3 bytes. The file being uploaded is the same for the OOREXX and the python so the problem isn’t in the source dataset. My python looks like this (leaving out the error handling and the local file opening) ftp = FTP(ZOS_IPADDR, ZOS_USERID, ZOS_PASSWORD) ftp.sendcmd('SITE RECFM=FB LRECL=80 BLKSIZE=3200') ftp.storbinary('STOR '+member_name, temp_handle, 3200) The Python trace shows this (somewhat sanitized to remove userid and IP address) *cmd* 'PWD'*put* 'PWD\r\n'*get* '257 \'XXX.\' is working directory.\r\n'*resp* '257 \'XXX.\' is working directory.'*cmd* uCWD 'XXX.CUNIT.OBJECT'*put* uCWD 'XXX.CUNIT.OBJECT'\r\n*get* '250 The working directory XXX.CUNIT.OBJECT is a partitioned data set\r\n'*resp* '250 The working directory XXX.CUNIT.OBJECT is a partitioned data set'*cmd* 'SITE RECFM=FB LRECL=80 BLKSIZE=3200'*put* 'SITE RECFM=FB LRECL=80 BLKSIZE=3200\r\n'*get* '200 SITE command was accepted\r\n'*resp* '200 SITE command was accepted'*cmd* 'TYPE I' *put* 'TYPE I\r\n'*get* '200 Representation type is Image\r\n'*resp* '200 Representation type is Image'*cmd* 'PASV' *put* 'PASV\r\n'*get* '227 Entering Passive Mode (192,nn,nn,nn,19,248)\r\n'*resp* '227 Entering Passive Mode (192,nn,nn,nn,19,248)'*cmd* u'STOR HTODECKS' *put* u'STOR HTODECKS\r\n'*get* '125 Storing data set XXX.CUNIT.OBJECT(HTODECKS)\r\n'*resp* '125 Storing data set XXX.CUNIT.OBJECT(HTODECKS)'*get* '250 Transfer completed successfully.\r\n'*resp* '250 Transfer completed successfully.' done storing file HTODECKS*cmd* 'QUIT' *put* 'QUIT\r\n'*get* '221 Quit command received. Goodbye.\r\n'*resp* '221 Quit command received. Goodbye.' Does anyone else have experience with this? I’ve tried it with the blocking on the storbinary as 3200, 80, and default and it doesn’t see to affect the output. The DCB information for the target dataset is correct. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Python FTP binary object file upload
John I am ftp.sendcmd('SITE RECFM=FB LRECL=80 BLKSIZE=3200') I just looked back at my original post and I apologize that the formatting is so messed up. I'll try again and see if it looks better -- My python looks like this (leaving out the error handling and the local file opening) ftp = FTP(ZOS_IPADDR, ZOS_USERID, ZOS_PASSWORD) ftp.sendcmd('SITE RECFM=FB LRECL=80 BLKSIZE=3200') ftp.storbinary('STOR '+member_name, temp_handle, 3200) The Python trace shows this (somewhat sanitized to remove userid and IP address) *cmd* 'PWD'*put* 'PWD\r\n' *get* '257 \'XXX.\' is working directory.\r\n' *resp* '257 \'XXX.\' is working directory.' *cmd* uCWD 'XXX.CUNIT.OBJECT' *put* uCWD 'XXX.CUNIT.OBJECT'\r\n *get* '250 The working directory XXX.CUNIT.OBJECT is a partitioned data set\r\n' *resp* '250 The working directory XXX.CUNIT.OBJECT is a partitioned data set *cmd* 'SITE RECFM=FB LRECL=80 BLKSIZE=3200' *put* 'SITE RECFM=FB LRECL=80 BLKSIZE=3200\r\n' *get* '200 SITE command was accepted\r\n' *resp* '200 SITE command was accepted' *cmd* 'TYPE I' *put* 'TYPE I\r\n' *get* '200 Representation type is Image\r\n' *resp* '200 Representation type is Image' *cmd* 'PASV' *put* 'PASV\r\n' *get* '227 Entering Passive Mode (192,nn,nn,nn,19,248)\r\n' *resp* '227 Entering Passive Mode (192,nn,nn,nn,19,248)' *cmd* u'STOR HTODECKS' *put* u'STOR HTODECKS\r\n' *get* '125 Storing data set XXX.CUNIT.OBJECT(HTODECKS)\r\n' *resp* '125 Storing data set XXX.CUNIT.OBJECT(HTODECKS)' *get* '250 Transfer completed successfully.\r\n' *resp* '250 Transfer completed successfully.' done storing file HTODECKS *cmd* 'QUIT' *put* 'QUIT\r\n' *get* '221 Quit command received. Goodbye.\r\n' *resp* '221 Quit command received. Goodbye.' The blocking on the target file is incorrect. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Python FTP binary object file upload
John, Fantastic! That fixed the problem. I was opening the local file with 'r'. When I switched to 'rb' it was fixed. Thank you! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: STCK question
As these things go, I have found new uses for my little routine. It's strong enough to find the elapsed time for larger numbers than I intended. So much so, I thought I'd add a function to show the elapsed time since the beginning of my started task. The time is working wonderfully but when I cross the more than a day boundary I'd like to display the number of days since the start of the program. I wound up using the STCK-STCK difference in times since the start of the started task + 1972/01/01 add in base STCK time to get a STCK value again STCKCONV convert that to DATE=MMDD TIME=DEC ED make it character based sequence so I have 1972/01/03 23:15:06.238744 What I'd like is 2 days 23:15:06.238744 I can calculate the date difference by hand (in C based off of the character representation of the date) of course. Unless someone knows of a nifty method to get the elapsed number of days from the data that I have? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: STCK question
Ooh I am liking the ED instruction. But I'm missing something. My pattern is this =XL15'20207A20207A20204B202020202020' My data is this =XL8'00308208' And the result I'm getting is this ' 308208' What I want is this ' 0.308208' What can I do to the pattern mask to force the decimal point, and at the least the zeros between the decimal and the first significant digit, and maybe one zero before the decimal point? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: STCK question
Thank you Charles, both were excellent suggestions that worked wonderfully! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: STCK question
Thanks for everyone's suggestions! I did ask for formatting so the output looks like time but I think the decimal output will be useful as well. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
STCK question
I need my product to report on the amount of clock time aprocedure took. I have captured the STCK before and after theprocedure. The procedures take very little time and I want to show theelapsed time to the end user. As two examples Start Time CF115F56BCCEB945 End Time CF115F57 1ED82BC3 difference 6209727E Start Time CF115F58 19228AC5 End Time CF115F582B2F8951 difference 120CFE8C I’d like to display this elapsed time in my job log as anice readable value but I am unsure how this difference in STCK should beformatted. Since it’s the difference between two STCK a STCKCONV doesn’tseem appropriate anymore. I’d like to show this as “Your procedure took nn.nn.n.n microseconds”,or some variation on this theme. Any suggestions? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Steps for diagnosing a S378
What’s the best method for diagnosing a S378-14? I’vetried looking at dumps for various getmain/freemain failures and I have troublenarrowing down the code that was executing when the failure happens. If Iget a SYSMDUMP what’s the quickest sequence for locating the abending FREEMAIN? Janet Graff -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Steps for diagnosing a S378
I've asked the customer to send me an IPCS SYSMDUMP. I will try all these suggestions when I get it. Once I find which STORAGE RELEASE is causing the abend is there an easy way to tell what address was being released? Would I have the registers at the time of the STORAGE RELEASE? Janet Graff -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: _FEEDBACK tok_isi interpretation
I thank Tony and Lizette. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: _FEEDBACK tok_isi interpretation
My apologies. I'm not trying to solve the U121. I generated that on purpose. I'm working on writing a robust abend handler. It's reporting S0C4 abends nicely but this User abend is coming out as a CEE3250C. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: _FEEDBACK tok_isi interpretation
Thanks! I will look into that. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
_FEEDBACK tok_isi interpretation
I have an abend handler that is catching a U121 abend. The LE Abend Handler is telling me that the facility_id is CEE and the tok_msgno is 3250 giving me CEE3250C The system or user abend abend-code was issued. abend-code in the message description is in italics in the LE Run-time Messages manual which makes me think I can get hold of the actual U121 abend code. Looking at the _FEEDBACK structure I see a field tok_isi which is documented as the instance specific information (ISI) but I can't find any doc that tells me how this 64 byte field is formatted. Does anyone know what the tok_isi contains and how to translate it to get the instance specific information? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: CEE3SRP/CEEMRCE example in LE C?
thank Charles. I have various other LE calls working but I was off an addressing level of the parameters to CEE3SRP and CEEMRCE and a C example would have helped tremendously. I'm pretty sure I have it with: /* my structure that I want to pass back and forth between main line and abend handler */ struct tokenStruct { inthandled; _INT4 resumePoint; }; void badHandler(_FEEDBACK *cond, _INT4 *input_token, _INT4 *result, _FEEDBACK *new_cond) { _FEEDBACK fc; ... struct tokenStruct **tokenStructPtr = (struct tokenStruct **)input_token; struct tokenStruct *tokenStruct = *input_token; /* logic to decide whether to RESUME or not */ *result = 10;/* 10 = RESUME right after CEE3SRP call */ tokenStruct-handled = tokenStruct-handled + 1; CEEMRCE((tokenStruct-resumePoint), fc); } int main() { _FEEDBACK feedback; struct tokenStruct myTokenStruct; struct tokenStruct *tokenPtr = myTokenStruct; tokenPtr = myTokenStruct; _ENTRY pgmptr; pgmptr.address = (_POINTER)badHandler; pgmptr.nesting = NULL; tokenPtr-handled = 0; CEE3SRP((tokenPtr-resumePoint), feedback); CEEHDLR(pgmptr, tokenPtr, feedback); if (tokenPtr-handled 0) { /* code to handle abend and get this program moving on it's way */ } /* execute code that abends here */ CEEHDLU(pgmptr, feedback); return 0; } -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: SMFxTME field
Thank you to everyone for your help. It turns out my content was correct but my timing was off. I was filling in the SMFxTME with the correct Time component of TIME BIN but I was doing it when my server started. I need to change my code to fill in the SMFxTME with the correct Time component of TIME BIN at the time the SMF record is written. -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
CEE3SRP/CEEMRCE example in LE C?
The LE Programming Guide has examples of using CEE3SRP and CEEMRCE in Cobol and PL/I. I have mine coded in C. Does anyone have a sample of calling for a resume in C that I can compare my attempt to? I've got something funky about my addressing. The proper token address is passed to the abend handler and the token points to my structure but my structure elements aren't formatted properly in the abend handler. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
SMFxTME field
We just noticed our product was setting the SMFxTME field inappropriately using the TIME BIN macro. What should we be using to set the SMFxTME field? The doc says 06 06 SMFxTME4binary Time since midnight, in hundredths of a second, record was moved into the SMF buffer. In record types 2 and 3 this field indicates the time that the record was moved to the dump data set. TIME MIC appears to be the right information but it produces 8 bytes and not 4 bytes of information. Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: Dynalloc with FREE=CLOSE,SPIN=UNALLOC
I have it working now but I have to say, examples of calling dynalloc() from C code using text units is a decidedly badly documented interface. For anyone who attempts this in the future, here is a sample, this subroutine takes a char * containing the intended ddname like, DD:LOG01. It must remove the DD: before calling dynalloc()/dynfree(). The RBX is what allows the IKJ messages to be printed to the JESYSMSG (which is really handy). Note that the DUNSPIN text unit is only useful on the dynfree() call and will give an error (900) if specified on the dynalloc() call. Some of the parameters I have specified on the dynfree are probably unnecessary but I left them there for documentation purposes. By the way this line ip.__miscitems = miscitems; gets a compiler warning for imcompatible pointers. Anyone who can tell me how to cast this properly I'll be very grateful. void myDynFree(char *ddname) { __dyn_t ip; __S99rbx_t myrbx; memcpy(myrbx.__S99EID, S99RBX, 6); myrbx.__S99EVER = 0x01; myrbx.__S99EOPTS = 0x84; myrbx.__S99ESUBP = 0x00; myrbx.__S99EKEY = 0x00; myrbx.__S99EMGSV = 0x00; myrbx.__S99ENMSG = 0x00; myrbx.__S99ECPPL = 0; myrbx.__S99ERES = 0x00; myrbx.__S99ERCO = 0x00; myrbx.__S99ERCF = 0x00; myrbx.__S99EWRC = 0; myrbx.__S99EMSGP = 0; myrbx.__S99EERR = (short)0; myrbx.__S99EINFO = (short)0; int textUnitSpin1 = 0x80130001; /* DUNSPIN text unit*/ int textUnitSpin2 = 0x00018000; int textUnitUnalc = 0x0007; /* DUNUNALC text unit*/ int miscitems[2]; miscitems[0] = (int)textUnitUnalc; miscitems[0]= miscitems[0] | 0x8000; dyninit(ip); ip.__rbx = myrbx; ip.__sysout = 'H'; ip.__ddname = ddname+3;/* passed in DD name without the DD: prefix */ ip.__misc_flags = __RELEASE __CONTIG __CLOSE; /* RLSE,CONTIG, CLOSE) */ ip.__dsorg = __DSORG_PO; /* DCB=(DSORG=PO, */ ip.__recfm = _F_ + _B_;/*RECFM=FB, */ ip.__lrecl = 255;/* LRECL=255, */ ip.__blksize = 25500;/* BLKSIZE=25500) */ ip.__miscitems = miscitems; dynfree(ip); } Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Dynalloc with FREE=CLOSE,SPIN=UNALLOC
I have a Started Task with a log file. I'd like to SPIN off the log files from my C program and allow the users to delete them when there is too much spool output or the log file is no longer needed. The C program is calling dynalloc() to allocate the file but I don't see any flags for SPIN=UNALLOC. I am currently using ip.__misc_flags = __RELEASE __CONTIG __CLOSE; but that leaves the DD associated with the running step and not purgable/deletable. Does anyone know whether dynalloc() supports FREE=CLOSE,SPIN=UNALLOC? Janet Graff -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: using ./Configure to generate listing files
Kirk, Yes! That excellent thread is what enabled me to get as far as I did and produce my needed libcrypto.a library. I've been through that thread multiple times in the last three weeks but I don't recall a discussion of changing the ./Configure settings to produce listing files for every source code module compiled during the make phase. Do you know that there is a reference to listing files in that thread (in which case I will go back through the thread again line by line) or was that a reference to general topic equivalence? Thanks! Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: using ./Configure to generate listing files
Mike, This particular usage of openssl is specifically for the bignum support. AT-TLS is for the SSL support which we aren't using. Do you know of a bignum replacement for openssl for z/OS? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
Re: using ./Configure to generate listing files
The -Wc,LIST(filename) option would work fine to indicate that I want a listing file. But without a file name it defaults to STDOUT. The specific filename doesn't adjust for different source code files. Is there a replacement variable for ./Configure that says use the source code file name so that I can add something like -Wc,LIST(${source}) to my options and get a seperate listing file for each source file? Janet -- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN