https://www.techtarget.com/searchdatacenter/tip/Troubleshooting-PGMIDERR-AEI0-ABEND-in-CICS-Transaction-Gateway
The CICS Transaction Gateway (CTG) offers Java clients a simplified means for communicating with CICS. It is, for the most part, a black box that talks to CICS through the External Call Interface, which sometimes makes problem diagnosis a little difficult. This column deals with a particular type of error, the program not found (PGMIDERR) and AEI0 ABEND.
Receiving the initial PGMIDERR/AEI0 ABEND error in CTG
A CTG client gets to CICS by specifying a uniform resource locator (URL) and a target program name.
A client has the option to include a transaction and CICS application ID. Any transaction driven
through CTG must define the CICS mirror program (DFHMIRS) as its initial program.
When a message arrives, CICS attaches the target transaction and calls DFHMIRS. DFHMIRS plucks the application program name from the header and attempts to link to it, passing the payload in a communications area. If the program is executable, everything proceeds as planned. If there is a problem, DFHMIRS returns the error to the client as "program not found" (or PGMIDERR) and AEI0 ABEND. Eventually, this gets to the client when it sees variable eci_abend_code set to AEI0.
Steps for diagnosing PGMIDERR/AEI0 ABEND
At first, this sounds pretty easy to diagnose, but there are a several problems when attempting to
find out what's gone wrong. When DFHMIRS fails to link to the target program, it quietly sends the
error back to CTG without writing any messages to the CICS log. CTG is wise enough to recognize the
problem, but, at the default level of tracing, it isn't logged anywhere except in its own internal
trace table. Lastly, in a CICSPlex environment with multiple CTGs and routing regions, there's no
telling where the error occurred.
The first step for troubleshooting this problem involves isolating the offending client message from the one that may be able to get the program name. There are several choices to get the message:
No matter the method, with the program name in hand, the mystery should be solved quickly. Or
will it be? There are a couple of obvious reasons why the program name may be invalid. For
instance, the name in the message may contain illegal characters or end with a null character
(x'00') instead of a blank. If the program name appears to be valid, finding the error comes down
to a two-step process:
It turns out that there are many reasons for AEI0 ABENDs, including, but not limited to, the following:
To get to the bottom of the above types of errors, the only recourse is a CICS trace, unless
other diagnostic information is available.
Even though CICS and CTG silently conspire to hide the error, there are places a user can log the
event. For instance, a shop with a custom dynamic routing program can log messages when called
after a routing error and the DTR error field is set to c'7'. There are also some global user exits
where the event can be observed and logged. The final option is to make sure the error never
happens again.
ABOUT THE AUTHOR: For 24 years, Robert Crawford has worked off and on as a CICS systems programmer. He is experienced in debugging and tuning applications and has written in COBOL, Assembler and C++ using VSAM, DLI and DB2.
What did you think of this feature? Write to SearchDataCenter.com's Matt Stansberry about
your data center concerns at [email protected].
14 Apr 2010