Yes.  Thanks!

The LE initialization using LINK caused high CPU consumption.

The alternative was to use the IBM BINDER to bind theirs and the called program 
together.

-----Original Message-----
From: IBM Mainframe Discussion List [mailto:IBM-MAIN@LISTSERV.UA.EDU] On Behalf 
Of Wayne Bickerdike
Sent: Monday, October 15, 2012 8:36 PM
To: IBM-MAIN@LISTSERV.UA.EDU
Subject: Re: COBOL Compiler Question

Great information Frank. Excellent, thanks.

On Sat, Oct 13, 2012 at 11:11 AM, Frank Swarbrick <frank.swarbr...@yahoo.com> 
wrote:
> What is CTRCOBMOD?
>
> If you do a COBOL static call, or even a COBOL dynamic call, you are for the 
> most part not using CICS services to invoke your routine.  For static I don't 
> think CICS knows or cares at all.  For a dynamic call I think a CICS service 
> is invoked by the COBOL/LE runtime to load the module, but from there its 
> basically COBOL.
>
> If you have no CICS commands inside the called module you don't have 
> to do anything special with the called module.  You compile it just as 
> a "batch" COBOL program.  (You still don't want to use things that 
> directly invoke MVS services, though, such as COBOL I/O, etc.)
>
> If you have CICS commands you have a couple options.  Others will probably 
> tell you about the way that I do not prefer.  What I prefer is the following:
>
> Place the following at the top of the called modules source code:
> PROCESS CICS('NOLINKAGE')
> (This assumes you're using the COBOL/CICS integrated preprocessor; if 
> you still use the CICS translator then specify the NOLINKAGE 
> translator option in the appropriate manner.)
>
> By doing this, the CICS translator/preprocessor will not add the implicit 
> DFHEIBLK and DFHCOMMAREA fields to the COBOL LINKAGE SECTION and PROCEDURE 
> DIVISION USING.  This allows you to do a COBOL CALL to the routine just like 
> you would in a batch program, i.e.:
>
> CALL 'MYSUBR' USING PARM-1, PARM-2, PARM-3.
>
> In your example below you could just do:
> CALL 'PROGRAM1' USING WS-COMMAREA
>
> Your called routine, if executing a CICS command, still needs to have the 
> DFHEIBLK area; you just have to add it explicitly.  Add the following to your 
> LINKAGE SECTION:
>
>      COPY DFHEIBLC.
>
> Then add the following to the beginning of your PROCEDURE DIVISION:
>      exec cics address
>          eib (address of dfheiblk)
>      end-exec
>
> You now have DFHEIBLK addressability without requiring it to be passed as a 
> parameter from your calling program.
>
> For the most part your called program can stay the same.  You must 
> eliminate any "EXEC CICS RETURN" statements, though, and replace them 
> with a COBOL GOBACK.  If you do EXEC CICS RETURN it behaves as if the 
> calling program executed it, and most likely will not be what you want 
> (which is to go back to the caller, not to return to CICS).  This is 
> because to CICS your calling program and your called program ARE THE 
> SAME PROGRAM.  With EXEC CICS LINK you go "up a level", and a RETURN 
> goes back down.  With COBOL CALL you do not go up a level, so if you 
> do RETURN you still go back a level, which is probably back to CICS 
> (unless your caller was LINKed to...)
>
> Anyway, once you get a few things straight there's not much to it.
> I'm sure that a static call gives the best performance.
> I believe a dynamic call is still "better" than a LINK because when you do a 
> LINK you enter and initialize a new LE enclave each time.
>
> Which brings up another caveat.  If you do a CALL to the same program from 
> the same program multiple times within a task it behaves exactly as how this 
> behaves in batch.  That is, your WORKING STORAGE section is initialized only 
> upon the first call.  This is different than CICS LINK where you get "fresh" 
> working-storage each time.  This can actually be quite an advantage, but you 
> have to make sure that your program that your currently LINKing to doesn't 
> depend on it.  If it does, there are a couple of things you can do:
> - Use the AS INITIAL clause of the COBOL PROGRAM-ID statement.
> - Do a COBOL CANCEL after each COBOL CALL (I don't recommend this, and I 
> don't think it even works if you do a static call).
> - Place any variables that you need initialized each time your program 
> is called in LOCAL-STORAGE SECTION rather than WORKING-STORAGE 
> SECTION.  (You could just put all of your variables in LOCAL STORAGE, 
> but I imagine this would have unwanted overhead.)
> - Leave everything in WORKING-STORAGE and add PROCEDURE DIVISION statements 
> to explicitly initialize any fields that require it.
>
> I would guess that options 3 (LOCAL STORAGE) or 4 (explicit initialization) 
> would give you the best performance.
>
> Have I forgotten anything?  Possibly.
>
> Have fun!
>
> Frank
>
>
>
>
>
>>________________________________
>> From: John Weber <j...@fiteq.com>
>>To: IBM-MAIN@LISTSERV.UA.EDU
>>Sent: Friday, October 12, 2012 5:21 PM
>>Subject: COBOL Compiler Question
>>
>>We have a COBOL CICS module being called using the LINK command.
>>
>>Here is the interface call:
>>
>>EXEC CICS
>>                LINK PROGRAM('PROGRAM1')
>>                RESP(WS-RESP)
>>                COMMAREA(WS-COMMAREA)
>>END-EXEC
>>
>>However, it has been brought up that creating  a bound module instead of 
>>using LINK can speed up response time.
>>
>>Is this binding compiler in question CTRCOBMOD?  If so, is this worth 
>>pursuing?
>>
>>Thanks a lot...
>>
>>John
>>
>>----------------------------------------------------------------------
>>For IBM-MAIN subscribe / signoff / archive access instructions, send 
>>email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN
>>
>>
>>
>
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions, send 
> email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN



--
Wayne V. Bickerdike

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

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

Reply via email to