LINK will pass control to the next module and return the first module. This will hold the complete memory of all Linked modules.
XCTL will transfer control to next control & wont return back. This will wipe off the first module's resources while doing a XCTL.
Now i want to know more about START
Note1:START will invoke a transaction & it will continue with next statement in the module. My question is,
Note2: IF Program A issues START to invoke transaction ABCD, then ABCD will be invoked and Program A also continues processing.
Now what will happen to resources of Program A? Can anyone confirm that the resources of Program A will get wiped off, even though transaction ABCD is still under execution.
Reason i need this info is.
* We have a existing code whose flow is A---> B---> C---> D----->E, each of them are LINKed together.
Now we wrote a new module F, which is Linked by E. The problem is F uses lot of memory so CICS Team asked us to change the design to reduce memory.
We cannot go for XCTL from E to F.. Because based on E's processing, D will do something, based on D's processing, C will so something etc.
E do not want any data to be returned from F.
Now we planed to split F into 5 modules F1, F2, F3, F4, F5 each of them in turn called using XCTL. Now real problem is calling F1 from E with out using LINK and XCTL
So we found 2 options,
* Module E will place a data in TDQ. Whenever a data is placed in TDQ, a transaction (mapped to F1) will automatically invoke. This will allow E to return to D, etc.
* Module E uses START to invoke a transaction mapped to F1. (Considering Note1 to be true)
We are planning to use 2nd option, if Note1 & Note2 holds good. Can anyone confirm this?
Joined: 06 Jun 2008 Posts: 8697 Location: Dubuque, Iowa, USA
Quote:
IF Program A issues START to invoke transaction ABCD, then ABCD will be invoked and Program A also continues processing.
Whether or not this is true depends upon the START. If you issue a START tied to the terminal that program A is executing on, then transaction ABCD will do nothing until the current transaction is done and releases the terminal. If you issue a START not tied to a terminal (also called a background transaction), ABCD will begin executing immediately (or if interval controlled when the interval expires or if time controlled when the appropriate time is reached) but has no access to any of program A's resources (except any COMMAREA passed via the START command).
Your note 2 is also addressed by these comments -- whether or not program A's resources are released by CICS depends upon the type of START being executed and what program A does after the START. Program A will continue to execute until EXEC CICS RETURN is performed in your code.
Joined: 06 Jun 2008 Posts: 8697 Location: Dubuque, Iowa, USA
If ABCD is going to run as a background transaction, there cannot be any SEND MAP or RECEIVE MAP or RECEIVE or other terminal-oriented CICS command in the code. ABCD can use files and TS or TD queues, just no terminal activity.