Mainframe Call Generator (MCG) Refresh - Micro Focus
Mainframe Call Generator (MCG) Refresh - Micro Focus
Mainframe Call Generator (MCG) Refresh - Micro Focus
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> (<strong>MCG</strong>) <strong>Refresh</strong><br />
Confidential - 1 - December 2004<br />
Randy Witek Revision 3a<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
Confidential - 2 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
Contents<br />
Introduction _____________________________________________________ 3<br />
<strong>MCG</strong> operation __________________________________________________ 5<br />
DB2 attachment__________________________________________________ 8<br />
Dumping support ________________________________________________ 11<br />
Termination of misbehaving <strong>MCG</strong> programs ___________________________ 12<br />
New startup parameter ___________________________________________ 13<br />
New messages _________________________________________________ 14<br />
Appendix A: IGZERRE entry conditions and return codes_________________ 17<br />
Appendix B: <strong>MCG</strong> setup checklist ___________________________________ 18<br />
Appendix C: Sample MFA Server trace of <strong>MCG</strong> processing _______________ 19<br />
Figures<br />
Figure 1 - <strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> overview __________________________ 3<br />
Figure 2 - MFA Server task structure for <strong>MCG</strong> operation __________________ 5<br />
Figure 3 - Selecting <strong>MCG</strong> DB2 support during stub generation______________ 8<br />
Figure 4 - Specifying <strong>MCG</strong> DB2 connection information at runtime___________ 9
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
Introduction<br />
This article describes changes to <strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> that are introduced by <strong>Mainframe</strong><br />
Access Server Version 3 software service. In order to use the features and operation as<br />
described in this article, MFA Server must be at the following minimum service level:<br />
MFA Server Version 3 + Service Pack 1 (SP1, July 2004) + FixPack 1a (FP1A, December 2004)<br />
-or-<br />
MFA Server Version 3 + Service Pack 2 (SP2, 1st quarter 2005)<br />
The <strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> (<strong>MCG</strong>) feature of <strong>Mainframe</strong> Express (MFE) provides a Remote<br />
Procedure <strong>Call</strong> (RPC) mechanism that allows PC-resident COBOL programs to transparently call<br />
z/OS-resident subprograms. <strong>Mainframe</strong> Access Server (MFA Server) provides the server-side<br />
support for the RPC and the called subprograms are dynamically loaded and executed by the<br />
server.<br />
<strong>Mainframe</strong> Express<br />
identification division.<br />
program-id. MYPCPROG.<br />
environment division.<br />
data division.<br />
working-storage section.<br />
01 ws-parm pic x(50).<br />
procedure division.<br />
move ’<strong>Call</strong>ing mainframe program’ to ws-parm.<br />
call ’MYMFPROG’ using ws-parm.<br />
display ws-parm.<br />
goback.<br />
Figure 1 - <strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> overview<br />
The <strong>MCG</strong> z/OS execution framework is redesigned and enhanced in MFA Server FixPack 1a.<br />
The new design resolves a problem documented in RPI 1054397 and other issues highlighted by<br />
informal field inquiries. The most difficult problems were related to MFA Server’s z/OS task<br />
sharing architecture. The efficiency of sharing a z/OS task among multiple user sessions<br />
conflicted with some IBM service architectures that depend on a separate task instance for each<br />
concurrent user. IBM’s COBOL runtime environment and IBM’s DB2 attachment facilities are<br />
notable examples of such services.<br />
Confidential - 3 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
<strong>Mainframe</strong><br />
<strong>Call</strong><br />
<strong>Generator</strong><br />
feature<br />
<strong>Mainframe</strong> Access Server<br />
identification division.<br />
program-id. MYMFPROG.<br />
environment division.<br />
data division.<br />
linkage section.<br />
01 lk-parm pic x(50).<br />
procedure division using lk-parm.<br />
move ’In MYMFPROG’ to lk-parm.<br />
display lk-parm.<br />
goback.
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
The solution is to manage the execution of each active <strong>MCG</strong> process in a subordinate z/OS task.<br />
This new <strong>MCG</strong> task is dedicated to one user’s <strong>MCG</strong> activity, but only for the duration of the user’s<br />
MFE-to-MFA Server <strong>MCG</strong> connection. The <strong>MCG</strong> user program executes as a separate z/OS<br />
work unit where program loops, excessive CPU consumption, long waits, etc. have little or no<br />
effect on other user activity. This also isolates the IBM COBOL runtime environment and/or DB2<br />
attachment for the user in that same task. Subordinate z/OS tasks are created on demand, one<br />
for each concurrent <strong>MCG</strong> user. When <strong>MCG</strong> activity for a user is completed, the subtask remains<br />
active, but waiting, to service the next <strong>MCG</strong> requester.<br />
This new design allows <strong>Mainframe</strong> Access Server Version 3 to support all of the <strong>MCG</strong> processing<br />
previously possible in <strong>Mainframe</strong> Access Version 2. In addition to merely supporting the old<br />
functionality, Version 3’s new design also improves the <strong>MCG</strong> feature with selectable DB2<br />
attachment, termination of looping and waiting <strong>MCG</strong> programs, improved diagnostic messaging,<br />
and detailed tracing of <strong>MCG</strong> activity. The FixPack maintenance description for this change<br />
summarizes the above discussion:<br />
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> (<strong>MCG</strong>) refresh (RPI 1054397)<br />
--------------------------------------------------------------------<br />
The <strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> (<strong>MCG</strong>) feature is corrected and enhanced<br />
with the following changes:<br />
- Maintaining a mainframe COBOL runtime environment across multiple<br />
remote calls to, possibly, multiple program load modules<br />
- Execution of <strong>MCG</strong> programs under a separate z/OS Task Control Block<br />
- Formatted dumping to SYSUDUMP/SYSMDUMP for user program failures<br />
- Termination for user programs that may be looping or stuck in<br />
a WAIT that cannot be satisfied.<br />
- Ability to perform detailed tracing of <strong>MCG</strong> program activity<br />
- Ability to select either <strong>Call</strong> Attach Facility (CAF) or the<br />
Recoverable Resource Attachment Facility (RRSAF) as the<br />
DB2 connection type for SQL processing.<br />
*** SPECIAL NOTE ***<br />
The new parameter MFA_<strong>MCG</strong>_DB2CONNECTION can be used to explicitly<br />
select the DB2 connection type for SQL processing. The valid<br />
values for this parameter are RRSAF or CAF. The default value<br />
is RRSAF.<br />
*** SPECIAL NOTE ***<br />
You will need to add a SYSUDUMP or SYSMDUMP DD statement to each of<br />
your <strong>Mainframe</strong> Access Server started task JCL procedures to enable<br />
the dumping support for user program ABENDs.<br />
The remainder of this document describes the <strong>MCG</strong> refresh in detail. Appendix B provides a<br />
handy checklist for <strong>MCG</strong> program preparation. The annotated sample trace in Appendix C<br />
contains excellent tutorial information that may be useful to technical support and customer<br />
personnel.<br />
Confidential - 4 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
<strong>MCG</strong> operation<br />
The following diagram depicts the MFA Server z/OS task structure for <strong>MCG</strong> processing. The<br />
message flow on the left summarizes the client-server exchanges for a simple <strong>MCG</strong> remote<br />
program execution. The description that follows is keyed to the numbering of the client-server<br />
requests in this diagram. The same request sequence and numbering is used in the annotated<br />
sample trace of a <strong>MCG</strong> session.<br />
Figure 2 - MFA Server task structure for <strong>MCG</strong> operation<br />
Confidential - 5 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
XDBMFADM task<br />
XDBMFADM task<br />
1 - MFA connect (“logon”)<br />
2 - LSC logon with authentication<br />
3 - LSC RPC request<br />
4 - RPC send parameters<br />
5 - RPC execute ATTACH<br />
6 - RPC fetch parameters<br />
7 - LSC RPC request<br />
8 - RPC send parameters<br />
9 - RPC execute (with CLEANUP flag)<br />
MFARPC00 module<br />
parameter data<br />
MD@<strong>MCG</strong>EX module<br />
inter-task<br />
messaging<br />
<strong>MCG</strong>EXEC task <strong>MCG</strong>EXEC task <strong>MCG</strong>EXEC task<br />
<strong>MCG</strong>EXEC module<br />
user program load<br />
module<br />
BASSM
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
1 - MFA connect (“logon”)<br />
The initial connection message is really client identification. The <strong>Mainframe</strong> Access client<br />
connects to MFA Server through a TCP/IP listener that is common to all of the MFA Server client<br />
types. The content of this first message is examined by the server to determine the client type.<br />
2 - LSC logon with authentication<br />
The second exchange contains the userid and password. The message is a Library Services<br />
Connectivity (LSC) type-252 (0xFC action code is imbedded in the request) logon request. SAF<br />
authentication is mandatory for MFA clients and the server performs SAF authentication for the<br />
userid and password combination.<br />
The MFA client usually sends in a pre-set server return code at offset eight (8) into the message<br />
body. The 2-byte value is preset to 0x3030 (ASCII zeroes), a value that indicates success. The<br />
server updates this return field before sending each response. A return value of 0x3030 indicates<br />
success and other values provide error code information used by the client in preparing an error<br />
notification to the end user. The first 0x6C bytes of each message are a File Control Descriptor<br />
(FCD) structure that identifies the request type. Data, if required for a particular request or<br />
response, follows the FCD.<br />
3 - LSC RPC request<br />
The third exchange signals the beginning of a <strong>MCG</strong> RPC operation. The server will expect an<br />
ordered sequence of RPC exchanges to follow. At this point, the server directs subsequent<br />
message arrivals to the MFARPC00 module for processing.<br />
4 - RPC send parameters<br />
The next exchange sends the RPC parameters from the client to the server. The name of the<br />
load module and the call parameters from the COBOL “CALL module USING …” statement are<br />
packaged in a structure and sent in to the server. This data is saved in a corresponding serverside<br />
data structure. Multiple exchanges may be used, if needed, to send large amounts of<br />
parameter data.<br />
5 - RPC execute<br />
When all parameter data has been received, the execute request starts the real server-side<br />
action for the RPC. MFA server locates the requested program module and LOADs it in to virtual<br />
storage from the program library(s) identified by the <strong>MCG</strong>LIB DD statement in the MFA Server<br />
started task JCL procedure. A special z/OS directed LOAD is used that allows loading of<br />
unauthorized programs from unauthorized program libraries. The server selects an available<br />
<strong>MCG</strong> processing subtask (a new subtask is started if none are available), allocates the subtask to<br />
the current RPC request, and passes the RPC parameters to the subtask. Processing up to this<br />
point has all occurred in the threaded execution environment of the XDBMFADM task.<br />
The <strong>MCG</strong>EXEC subtask executes the RPC request by first establishing an ESTAE routine to trap<br />
any ABENDs. Then a COBOL environment is established if this is the first call in this <strong>MCG</strong><br />
session. Otherwise, the existing COBOL environment is reused. IBM utility module IGZERRE is<br />
called to set up this COBOL environment and the overhead of this action is minimal. There is no<br />
requirement that the called program is a COBOL load module and the establishment (and<br />
maintenance of the environment across multiple calls during the <strong>MCG</strong> session) of the COBOL<br />
environment does not affect the execution of non-COBOL programs. Then register 1 is set with<br />
the parameter list address for the program and the program load module is branch entered. The<br />
BASSM branch instructions also sets the AMODE (24-bit or 31-bit addressing mode) required for<br />
Confidential - 6 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
specified load module. At this point the user program is in control of the <strong>MCG</strong>EXEC task and the<br />
XDBMFADM task is busy handling the threads of execution for other <strong>Mainframe</strong> Access clients.<br />
When the user program exits, the MFA Server support code in the <strong>MCG</strong>EXEC subtask receives<br />
control to complete the execution. The ESTAE protection is removed and the XDBMFADM task<br />
is signaled to complete the RPC execute request. The response to the client is sent indicating<br />
either successful execution (the user program was called and returned without ABENDing) or<br />
execution failure due to an ABEND or other server-side condition.<br />
In the above diagram, the MD@<strong>MCG</strong>EX module contains most of the server support logic for the<br />
execution phase. It is interesting to note that portions of this module execute as part of the<br />
XDBMFADM task, and other portions execute as part of the <strong>MCG</strong>EXEC subtask.<br />
6 - RPC fetch parameters<br />
The sixth client-server exchange is normally a fetch operation. When the client receives an<br />
indication of successful program execution, the fetch request is sent to retrieve the RPC<br />
parameters from the server. Any data areas in the RPC parameters that were updated by the<br />
called program can be seen in the returned RPC parameter structure.<br />
This fetch completes the first remote program execution. Repeated calls to a remote program in<br />
this <strong>MCG</strong> session would be seen as a series of<br />
- LSC RPC request<br />
- RPC send parameters<br />
- RPC execute<br />
- RPC fetch parameters<br />
7 - LSC RPC request<br />
In this simple example, there is only one call to a remote program. The final client-server<br />
exchanges appear to be the start of a second execution. The seventh exchange again signals<br />
the start of a <strong>MCG</strong> call operation.<br />
8 - RPC send parameters<br />
The eighth exchange is technically a “send parameters” request but there is no real parameter<br />
data.<br />
9 - RPC execute (with CLEANUP flag)<br />
The last exchange is an execute request. A special flag bit in the request data indicates that this<br />
is a request for an RPC cleanup operation. At this time, the <strong>MCG</strong>EXEC subtask is signaled to<br />
perform its cleanup and terminate the COBOL environment that was previously established.<br />
Successful completion of the cleanup marks the <strong>MCG</strong>EXEC subtask as available. This subtask<br />
can now be reassigned to a new <strong>MCG</strong> session of program calls initiated by any <strong>Mainframe</strong><br />
Access user.<br />
Confidential - 7 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
DB2 attachment<br />
The <strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> feature provides special support for z/OS subprograms that issue<br />
dynamic SQL calls to DB2. This DB2 support allows you to explicitly specify the DB2 subsystem<br />
and DB2 plan name used for the program’s attachment to DB2.<br />
The DB2 support is selected during <strong>MCG</strong> stub generation for the calling program in <strong>Mainframe</strong><br />
Express. The following screen print shows the “Uses DB2” check box in the calling program’s<br />
<strong>MCG</strong> properties dialog.<br />
Figure 3 - Selecting <strong>MCG</strong> DB2 support during stub generation<br />
Confidential - 8 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
During MFE runtime, the <strong>MCG</strong> support for this subprogram call will prompt the end user for the<br />
DB2 subsystem name and the DB2 plan name to be used during the call. A sample of the<br />
prompting dialog is shown in the following screen print.<br />
Figure 4 - Specifying <strong>MCG</strong> DB2 connection information at runtime<br />
The DB2 subsystem and plan names are sent to MFA Server in a special subprogram call issued<br />
by <strong>MCG</strong> runtime support. <strong>MCG</strong> runtime calls pseudo-program TRANSCAF immediately before<br />
issuing the call for the DB2-using program. MFA Server recognizes this reserved pseudoprogram<br />
name and uses the parameter data (the DB2 subsystem name and the DB2 plan name)<br />
to establish a connection to the desired DB2 subsystem. This connection is then active when the<br />
next <strong>MCG</strong> subprogram call request is received, the call to the requested DB2-using subprogram.<br />
<strong>MCG</strong> runtime also issues a pseudo-program call to end the DB2 connection at the completion of<br />
client-side program execution.<br />
Prior to FixPack 1a, MFA Server’s connection to a DB2 subsystem was always established using<br />
the DB2 Recoverable Resource Manager Services attachment facility (RRSAF). Previous<br />
support for the DB2 call attach facility (CAF) was not brought forward to MFA Server. Beginning<br />
with FixPack 1a, MFA Server now allows the DB2 connection type to be selected using a startup<br />
parameter. You may specify the connection type as RRSAF or CAF. The default is RRSAF if<br />
this parameter is not specified.<br />
IBM DB2 imposes a restriction on calling address spaces that limits callers to the use of only one<br />
attachment facility. This means that the MFA Server startup parameter setting will direct all <strong>MCG</strong><br />
DB2 calls to the selected attachment facility, either RRSAF or CAF. This is important to note<br />
because the attachment facility that is in use may conflict with the attachment facility specified<br />
during DB2 precompilation for a program. The situation is further complicated by the setting of<br />
the COBOL compiler DYNAM and NODYNAM option when compiling the program. The following<br />
table shows the result of <strong>MCG</strong> DB2 SQL execution for the various settings of these options.<br />
Confidential - 9 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
DB2 precompiler<br />
ATTACH option<br />
Confidential - 10 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
MFA Server<br />
attachment type<br />
COBOL compiler<br />
call option<br />
CAF RRSAF NODYNAM -991<br />
CAF RRSAF DYNAM -991<br />
CAF CAF DYNAM OK<br />
CAF CAF NODYNAM OK<br />
RRSAF RRSAF NODYNAM OK<br />
RRSAF RRSAF DYNAM OK<br />
RRSAF CAF DYNAM -981<br />
RRSAF CAF NODYNAM -981<br />
TSO RRSAF NODYNAM -927<br />
TSO RRSAF DYNAM OK<br />
TSO CAF DYNAM OK<br />
TSO CAF NODYNAM -927<br />
Not specified RRSAF NODYNAM -927<br />
Not specified RRSAF DYNAM OK<br />
Not specified CAF DYNAM OK<br />
Not specified CAF NODYNAM -927<br />
Explanation for SQL return codes:<br />
SQL result<br />
-981 The SQL statement failed because the RRSAF connection is not in a state that allows<br />
SQL operations.<br />
-927 The language interface was called when the connecting environment was not<br />
established. The program should be invoked under the DSN command.<br />
-991 <strong>Call</strong> attach was unable to establish an implicit connect or open to DB2.<br />
The table shows that the combination of the COBOL DYNAM option for dynamic program calls<br />
and the ATTACH(TSO) DB2 precompilation option (or simply omitting the ATTACH option)<br />
provides flexibility in the actual connection type. This is because the ATTACH(TSO) and<br />
ATTACH() specifications generate a call to entry point DSNHLI for SQL execution. MFA Server<br />
provides a dummy DSNHLI entry point that becomes the target of dynamic calls. The MFA<br />
Server DSNHLI routine routes the SQL execution to the attachment facility (RRSAF or CAF) that<br />
has been selected, or defaulted, at startup. The ATTACH(RRSAF) and ATTACH(CAF)<br />
specifications generate calls to DSNHLIR and DSNHLI2, respectively, and no dummy entry points<br />
are provided for these attachments. Therefore, the real DB2 interface routines are selected,<br />
either statically or dynamically, and these interface routines expect the required attachment to<br />
have been activated by MFA Server.
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
Dumping support<br />
MFA Server uses the z/OS SVCDUMP service to record software failures that occur in the server<br />
address spaces. This service provides high-speed recording of large amounts of system<br />
information that may be needed to resolve a server problem. The SVCDUMP mechanism is the<br />
ideal method of recording unexpected server programming failures that may involve z/OS<br />
component failures and/or failures in third-party software.<br />
The typical developer of <strong>MCG</strong>-based programs is used to analyzing program failures using<br />
formatted application program dumps captured by z/OS and recorded on SYSUDUMP (or<br />
SYSMDUMP, for machine-readable) files. The amount of system information captured is at the<br />
discretion of the customer systems programmer, but it is usually much less than is requested by<br />
our server SVCDUMPs.<br />
FixPack 1a expands the diagnostic dumping facilities provided by MFA Server’s ESTAE<br />
processing to include SYSUDUMP recording for <strong>MCG</strong> RPC program ABENDs. The ESTAE<br />
extension routine in module MD@<strong>MCG</strong>EX that intercepts <strong>MCG</strong> ABENDs uses new server<br />
ESTAE processing options to suppress the SVCDUMP and request the less rigorous<br />
SYSUDUMP. The new server ESTAE processing options for dumps are generalized and can be<br />
used in other MFA Server ESTAE extension routines in the future.<br />
No dump is produced for <strong>MCG</strong> program ABENDs unless an appropriate SYSUDUMP or<br />
SYSMDUMP DD statement is added to the server’s started task JCL procedure. The MFA<br />
Server started task JCL procedures, as distributed in the GA and Service Pack 1 samples prior to<br />
this FixPack, do not include the SYSUDUMP DD statement needed for this new dump recording.<br />
You must add the SYSUDUMP DD statement to any existing MFA Server JCL procedures.<br />
Confidential - 11 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
Termination of misbehaving <strong>MCG</strong> programs<br />
No restrictions are placed on the <strong>MCG</strong> RPC program logic and it is possible for a program to loop<br />
or enter a WAIT that will never be satisfied. In these cases, the end user only sees that the client<br />
is busy with a remote program call. Eventually, the client will be interrupted by a communications<br />
timeout and close the TCP/IP stream socket connection to the server.<br />
In previous implementations of the <strong>MCG</strong> RPC function (both <strong>Mainframe</strong> Access Version 2 and the<br />
original MFA Server Version 3), the socket close would not be recognized at the server. This is<br />
because the user program is in control of the task execution (either looping or waiting) and the<br />
server logic does not receive control to process communications events.<br />
In the new design, the user program execution in the <strong>MCG</strong>EXEC task is separated from the<br />
communications processing that now continues normally in the multi-threaded XDBMFADM task.<br />
MFA Server can respond to the client’s socket close and log the user off. The logoff cleanup<br />
processing for the user’s <strong>Mainframe</strong> Access session recognizes that a <strong>MCG</strong> subtask is still<br />
allocated to the user, and can force it down using the z/OS CALLRTM service to ABEND the<br />
subtask. The subtask is unconditionally ended with a User 201 ABEND code in this case. The<br />
end user can also force a program out using the “stop debugging” action before the expiration of<br />
the timeout period.<br />
The following excerpt from a test system shows a program starting at 14:40:53.2 hours. This test<br />
program enters an endless loop of processing and waiting. The MFE timeout value (a Windows<br />
environment variable) used in this test was set at 100 seconds and the socket connection was<br />
closed due to a communications error (a timeout) exactly 100 seconds later, at 14:42:33.2 hours.<br />
Message MFM0131E is issued during the cleanup processing to log the forced termination of the<br />
<strong>MCG</strong>EXEC task with a U201 ABEND.<br />
14:40:53.2 <strong>MCG</strong>EXEC 20 T<strong>MCG</strong>TEST - Input test name is "LOOP "<br />
14:42:33.2 XDBMFADM 19 MFM0112I SAF logoff for CSIRLW1 (sd=8 (13EDA970) rc=0 type=0)<br />
14:42:33.3 XDBMFADM 19 MFADirect close for sd=8 (13EDA970) ip=10.10.1.7 sent=8 rcvd=9<br />
14:42:33.3 XDBMFADM 19 MFM0131E Task <strong>MCG</strong>EXEC 13E99E28 TCB 008B7280 terminated U0201;<br />
callrtm rc=000<br />
Many cases of incorrect <strong>MCG</strong> program execution can be recognized and cleaned up using this<br />
forced termination. However, there are no restrictions placed on the user program and a <strong>MCG</strong><br />
program can possibly damage the server address space in such a way that simple task<br />
termination fails to provide adequate cleanup. For example, the program can overlay server<br />
control blocks and data areas, allocate excessive virtual storage without releasing it at the<br />
conclusion of processing, consume address space and/or system resources without releasing,<br />
etc. It is also possible for incorrect <strong>MCG</strong> program execution to cause the server address space to<br />
fail without warning. In all cases of program failure and recovery (that is what the forced<br />
termination actually is), it is advisable to shutdown and restart the server at the earliest<br />
convenient time.<br />
Confidential - 12 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
New startup parameter<br />
FixPack 1a introduces one new startup parameter to select the DB2 attachment facility used for<br />
<strong>MCG</strong> DB2 SQL calls.<br />
Parameter Description<br />
MFA_<strong>MCG</strong>_DB2CONNECTION<br />
Example<br />
...<br />
Confidential - 13 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
Controls which attachment facility is used by MFA<br />
Server for DB2 connections. Specify CAF to use the<br />
DB2 call attach facility. Specify RRSAF to use the DB2<br />
Recoverable Resource Manager Services attachment<br />
facility. RRSAF is the default if this parameter is<br />
omitted.<br />
CGMQOTMA LOGDD=SYSOUT --- CG production log DDname or "SYSOUT"<br />
WEB_ROOT=HLQ.WEBROOT<br />
*<br />
*--------------------------------------------------------------------*<br />
* <strong>Mainframe</strong> Access services parameters *<br />
*--------------------------------------------------------------------*<br />
*<br />
MFA_ENDEVOR_HISTORY=YES --- Endevor MFALOGE history (YES,NO)<br />
MFA_LIBRARIAN_HISTORY=YES --- Librarian MFALOG history (YES,NO)<br />
MFA_LIBRARIAN_UPD_MODULE=AFOLIBR - Librarian batch update module name<br />
MFA_PANVALET_HISTORY=YES --- Panvalet MFALOG history (YES,NO)<br />
MFA_PANVALET_UPD_MODULE=PAN#1 --- Panvalet batch update module name<br />
MFA_SAF_HISTORY=YES --- Data set access MFALOG history<br />
MFA_SYSOUT_CLASS=A --- MFALOG,MFALOGE,SNAPDUMP class<br />
MFA_SYSOUT_DEST=LOCAL --- MFALOG,MFALOGE,SNAPDUMP dest<br />
MFA_<strong>MCG</strong>_DB2CONNECTION=CAF --- Select DB2 call attach facility<br />
*<br />
*--------------------------------------------------------------------*<br />
* Services to be activated *<br />
*--------------------------------------------------------------------*<br />
*<br />
TCP LINK FEATURE=YES --- MFE SQL Option, Telnet client<br />
MFADIRECT=YES --- <strong>Mainframe</strong> Access services<br />
...
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
New messages<br />
New diagnostic messages and tracing messages make it easy to follow the execution of <strong>MCG</strong><br />
programs by reviewing MFA Server’s XDBOUT SYSOUT logging data set. When tracing is not<br />
active, new diagnostic messages are used to record program failures (for example, inability to<br />
load a requested program, ABENDs occurring within a <strong>MCG</strong> program, etc.) and exceptional<br />
conditions. When tracing is activated using the MFA Server "trace on" command, the new trace<br />
messages make it easy to examine the flow and content of client-server RPC data and the<br />
execution activity in the mainframe server.<br />
The new messages are presented here, grouped together with other new messages issued by<br />
the same module. The sample trace in Appendix C provides actual examples for most of the<br />
messages.<br />
Module MD@<strong>MCG</strong>EX messages<br />
This module provides support for <strong>MCG</strong> program execution and logic to interface between the<br />
MFA Server communications task (XDBMFADM) and the <strong>MCG</strong> program execution subtask<br />
(<strong>MCG</strong>EXEC).<br />
Messages for logging exceptional conditions<br />
MFM0128I <strong>MCG</strong> subtask <strong>MCG</strong>EXEC cc xxxxxxxx started for XDBMFADM cc xxxxxxxx<br />
This is a normal operational message to log the fact that a new subtask was started for <strong>MCG</strong><br />
program execution.<br />
MFM0128E <strong>MCG</strong> Non-zero return from IGZERRE set call; rc=ddd<br />
The IBM IGZERRE module was called to establish a COBOL runtime environment but has<br />
indicated there is a problem by returning with a non-zero return code. See Appendix A for a<br />
description of the return code values.<br />
MFM0128E <strong>MCG</strong> Module IGZERRE is not available for set call<br />
This message indicates that the IBM IGZERRE module was not loaded during startup and could<br />
therefore not be called to establish a COBOL runtime environment.<br />
MFM0128E <strong>MCG</strong> Non-zero return from IGZERRE reset call; rc=ddd<br />
The IBM IGZERRE module was called to terminate a COBOL runtime environment during <strong>MCG</strong><br />
cleanup but has indicated there is a problem by returning with a non-zero return code. See<br />
Appendix A for a description of the return code values.<br />
MFM0128E <strong>MCG</strong> No IGZERRE COBOL environment found for reset<br />
The <strong>MCG</strong> cleanup service found that no COBOL environment was previously established for the<br />
<strong>MCG</strong> session that is ending.<br />
Trace messages<br />
<strong>MCG</strong> COBOL environment set; IGZERRE rc=ddd<br />
The IBM IGZERRE module was successfully called to establish a COBOL runtime environment.<br />
Confidential - 14 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
<strong>MCG</strong> COBOL environment reset; IGZERRE rc=ddd<br />
The IBM IGZERRE module was successfully called to terminate a COBOL runtime environment<br />
during <strong>MCG</strong> cleanup.<br />
Module MFARPC00 messages<br />
This module is the driver for the <strong>MCG</strong> session. Processing of <strong>MCG</strong> client request messages<br />
starts in this driver module.<br />
Messages for logging exceptional conditions<br />
MFM0129E <strong>MCG</strong> Unable to execute user program cccccccc<br />
An execute request could not be completed for the named program. Preceding error messages<br />
will identify the exact cause.<br />
MFM0129E <strong>MCG</strong> Unable to find or load user program cccccccc<br />
The z/OS BLDL or LOAD operation for the named program failed. Preceding error messages will<br />
identify the exact cause.<br />
MFM0129E <strong>MCG</strong> Request message sequence error<br />
An unexpected <strong>MCG</strong> request message was received from the client. The <strong>MCG</strong> request is not<br />
appropriate for the current state of the remote execution operation. Start the MFA Server trace<br />
facility and recreate the problem to create a log of messages showing the sequence of messages<br />
being exchanged.<br />
MFM0129E <strong>MCG</strong> Request message not recognized<br />
An unexpected request message was received from the client. The request message could not<br />
be identified as a <strong>MCG</strong> request. Start the MFA Server trace facility and recreate the problem to<br />
log the erroneous message.<br />
Trace messages<br />
<strong>MCG</strong> program parameter list located at xxxxxxxx<br />
This trace message is issued just before calling the user program. The “xxxxxxxx” is the virtual<br />
storage address of the parameter list that passed to the program in Register 1. This trace<br />
message is followed by a formatted dump of the parameter list.<br />
<strong>MCG</strong> rpc data (program parms are embedded) located at xxxxxxxx (before)<br />
This trace message is issued before and after the call to the user program. The RPC data area<br />
contains the RPC parameter data that is passed back and forth between the client calling<br />
program and the mainframe called program. The RPC data area also contains control<br />
information used by MFA Server to manage the <strong>MCG</strong> operations. This message identifies the<br />
virtual storage address of the RPC data area and it is followed by a formatted dump of the RPC<br />
data. The addresses of parameters in the program parameter list can be resolved to data items<br />
that are imbedded in the RPC data area. The before trace of the RPC data shows what was<br />
received from the client and the after trace shows any changes to the data areas that have been<br />
made by the called program.<br />
Confidential - 15 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
<strong>MCG</strong> BLDL information for load module<br />
This trace message is issued following a successful BLDL and LOAD of the user program<br />
module. Each user program is loaded only once during a <strong>MCG</strong> operation. This message is<br />
followed by a formatted dump of the BLDL data area.<br />
<strong>MCG</strong> module xxxxxxxx starts at xxxxxxxx entry at xxxxxxxx<br />
This trace message is issued following a LOAD of the user program module. The starts at value<br />
gives the virtual storage address where the user load module begins. The entry at value gives<br />
the virtual storage address of the entry point that will be called. This address is also set to<br />
indicate the addressing mode in which the user program will receive control, either 24-bit mode<br />
(00xxxxxx actual entry address) or 31-bit mode (0x80000000 + actual entry address xxxxxxxx).<br />
<strong>MCG</strong> request received - FCD_ACT1/2 xxxx description<br />
This trace message is issued for each <strong>MCG</strong> request received from the client. The hexadecimal<br />
FCD action code bytes identify the type of <strong>MCG</strong> request message. The description field provides<br />
a descriptive name for the request type.<br />
Module <strong>MCG</strong>EXEC messages<br />
This module is the driver for <strong>MCG</strong> program execution, the actual call to the user program, in the<br />
<strong>MCG</strong>EXEC subtask.<br />
Messages for logging exceptional conditions<br />
MFM0130E <strong>MCG</strong> cccccccc ABENDed, System=Sxxxx Reason=xxxxxxxx User=Udddd<br />
This message is issued after the <strong>MCG</strong> ESTAE extension has trapped and recovered from an<br />
ABEND condition. The message provides the system (hexadecimal) or user (decimal) ABEND<br />
code. System reason codes are also logged for system ABENDs. If a SYSUDUMP (or<br />
SYSMDUMP) DD statement is available to the server, a dump is recorded for the ABEND.<br />
MFM0130E <strong>MCG</strong> unable to call cccccccc, iSvcRC=dddd iSvcRS=dddd<br />
This message is issued when server preparation for the <strong>MCG</strong> call operation encounters an<br />
internal logic error. The MD_<strong>MCG</strong>EXEC_RUN service was called to execute the user program<br />
but this service ended with an error indicated by the return code and reason code values.<br />
Preceding error messages identify the exact cause.<br />
MFM0130E <strong>MCG</strong> cleanup failed, iSvcRC=dddd iSvcRS=dddd<br />
This message is issued if the MD_<strong>MCG</strong>EXEC_CLEANUP service encounters an internal logic<br />
error. Preceding error messages identify the exact cause.<br />
Module SR@KILLT messages<br />
This module provides a generalized CALLRTM interface for MFA Server. This service is called to<br />
end “lost” <strong>MCG</strong>EXEC subtasks (for example, a looping user program).<br />
Messages for logging exceptional conditions<br />
MFM0131E Task cccccccc xxxxxxxx TCB xxxxxxxx terminated Udddd; callrtm rc=ddd<br />
This message is issued when a subtask is forcibly terminated by MFA Server. The Udddd user<br />
ABEND code will be U201 for forced terminations of a <strong>MCG</strong>EXEC subtask. This may occur when<br />
the end user logs off or terminates the MFE client while a <strong>MCG</strong> session is active.<br />
Confidential - 16 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
Appendix A: IGZERRE entry conditions and return codes<br />
In non-CICS environments, IBM’s IGZERRE entry point can be invoked to explicitly drive<br />
COBOL's initialization and termination functions to create or destroy a reusable run-time<br />
environment. Upon entry to IGZERRE, the following register contents must exist:<br />
Register Contents<br />
1<br />
If initializing: function code of 1<br />
If terminating: function code of 2<br />
If parm list form: address of pointer to a word containing<br />
function code as above<br />
13<br />
Pointer to standard register save area<br />
14<br />
Return address<br />
15<br />
IGZERRE’s entry address<br />
Upon return, register 15 will contain one of the following return codes:<br />
Return code Explanation<br />
0<br />
Function completed correctly<br />
4<br />
COBOL already initialized (applies to initialization function only)<br />
8<br />
Invalid function code in Register 1 or parameter list (not 1 or 2)<br />
12<br />
ILBOSTP0 not part of load module (applies to initialization of<br />
NORES only)<br />
16<br />
COBOL was not previously initialized (applies to termination<br />
function only)<br />
20<br />
COBTEST is being used (applies to termination of RES only)<br />
The originally requested function is performed only when the return code is 0.<br />
Confidential - 17 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
Appendix B: <strong>MCG</strong> setup checklist<br />
This appendix provides a concise checklist of the preparations and activities required, in MFE and<br />
in MFA Server, to enable a <strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> subprogram call. References are given to<br />
the more complete documentation that is available.<br />
Setup activity Description and References<br />
Enable <strong>MCG</strong> Create a Windows user environment variable named<br />
<strong>MCG</strong>ADMIN and set its value to any non-blank value<br />
<strong>Mainframe</strong> Express Administrator’s Guide<br />
Chapter 7: <strong>Call</strong>ing Program’s on the <strong>Mainframe</strong><br />
Define a NODE<br />
and a drive for<br />
SourceConnect<br />
Build the calling<br />
program<br />
Generate the <strong>MCG</strong><br />
stub<br />
Make the target<br />
mainframe load<br />
module available<br />
to MFA Server<br />
Run the calling<br />
program<br />
Confidential - 18 - December 2004<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
Use MFE Options Server Access Configuration to define<br />
the MFA Server node and a SourceConnect drive that<br />
maps to that server node.<br />
<strong>Mainframe</strong> Access Installation and Usage Guide<br />
Chapter 9: SourceConnect for <strong>Mainframe</strong> Express and Revolve<br />
Use MFE to build a COBOL program that contains a call to<br />
the target mainframe load module.<br />
<strong>Mainframe</strong> Express User’s Guide<br />
Use the MFE <strong>MCG</strong> feature to create a stub that<br />
communicates with MFA Server to execute the target<br />
mainframe load module when you run the calling program.<br />
Right click on the program.INT file in the Load Libraries<br />
folder found in the project’s Workgroup tab, select<br />
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong>… from the menu and use the<br />
<strong>MCG</strong> dialog to create the stub.<br />
<strong>Mainframe</strong> Express Administrator’s Guide<br />
Chapter 7: <strong>Call</strong>ing Program’s on the <strong>Mainframe</strong><br />
Add the target mainframe load module to a program library<br />
defined to MFA Server using the <strong>MCG</strong>LIB DD statement.<br />
<strong>Mainframe</strong> Access Administrator’s Guide<br />
Appendix D: <strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong><br />
Use MFE to run the calling program in the usual way.<br />
When a call to the target mainframe load module is<br />
encountered, MFE will execute the generated <strong>MCG</strong> stub.<br />
You are prompted for your mainframe userid and password<br />
if this is the first access to the mainframe. You are<br />
prompted for DB2 connection information if this program<br />
uses DB2.<br />
<strong>Mainframe</strong> Express Administrator’s Guide<br />
Chapter 7: <strong>Call</strong>ing Program’s on the <strong>Mainframe</strong>
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
Appendix C: Sample MFA Server trace of <strong>MCG</strong> processing<br />
The service level indication (fp1a) in the startup message confirms that this MFA Server is running with the FixPack containing the <strong>Mainframe</strong> <strong>Call</strong><br />
<strong>Generator</strong> <strong>Refresh</strong>.<br />
11/03/04 10:00:54.2 XDRMAIN 01 MFM0001I <strong>Mainframe</strong> Access V3.01 (fp1a) is active<br />
11/03/04 10:00:54.2 XDRMAIN 01<br />
This trace activity is in the common TCP/IP listener that receives the initial client connection message from all MFA Server clients. When a<br />
<strong>Mainframe</strong> Access client is identified, the stream socket connection is passed to one of the XDBMFADM communications tasks dedicated to MFA<br />
client processing.<br />
11/03/04 10:01:17.6 XDBTCPM0 0A Client connection on socket sd=7<br />
11/03/04 10:01:17.6 XDBTCPM0 0A Connection at 11/03/04 10:01:18 on sd=7 from ip=10.10.1.7<br />
11/03/04 10:01:17.6 XDBTCPM0 0A MFM0071E XDBTCPM access list check warning for client 10.10.1.7<br />
11/03/04 10:01:17.6 XDBTCPM0 0A Security OK at 11/03/04 10:01:18 on sd=7 from ip=10.10.1.7<br />
11/03/04 10:01:17.6 XDBTCPM0 0A Receive for sd=7, size=4 (0x0004) at 11/03/04 10:01:18<br />
11/03/04 10:01:17.6 XDBTCPM0 0A recv 0000 0000006C <br />
11/03/04 10:01:17.6 XDBTCPM0 0A Receive for sd=7, size=16 (0x0010) at 11/03/04 10:01:18<br />
11/03/04 10:01:17.6 XDBTCPM0 0A recv 0000 006C7F01 0000FF00 00004C53 43204E4F
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
11/03/04 10:01:17.7 XDBMFADM 19 MFA server initialization complete for sd=9 (13EDC970), tsa=13F36000, rc=0<br />
11/03/04 10:01:17.7 XDBMFADM 19 Client request from sd=9 (13EDC970) starting<br />
11/03/04 10:01:17.7 XDBMFADM 19 Receive for sd=9 (13EDC970), size=108 (0x006C) at 11/03/04 10:01:18<br />
11/03/04 10:01:17.7 XDBMFADM 19 recv 0000 006C7F01 0000FF00 00004C53 43204E4F <br />
11/03/04 10:01:17.7 XDBMFADM 19 MFA server msg processing starting for sd=9 (13EDC970)<br />
11/03/04 10:01:17.7 XDBMFADM 19 MFA server msg processing complete for sd=9 (13EDC970) rc=0<br />
11/03/04 10:01:17.7 XDBMFADM 19 Send for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:18<br />
11/03/04 10:01:17.7 XDBMFADM 19 send 0000 0000006C <br />
11/03/04 10:01:17.7 XDBMFADM 19 Send for sd=9 (13EDC970), size=108 (0x006C) at 11/03/04 10:01:18<br />
11/03/04 10:01:17.7 XDBMFADM 19 send 0000 006C7F01 0100FF00 30304C53 43204E4F
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
The userid begins at offset 0x73, “CSIRLW1” in this example. Password data at offset 0x87 is encrypted in the message flows and is replaced<br />
with a string of 0x7C in tracing messages. The MFM0111I message indicates successful SAF processing of the userid/password and a 0x3030<br />
success response is returned to the client.<br />
11/03/04 10:01:18.0 XDBMFADM 19 Receive for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:18<br />
11/03/04 10:01:18.0 XDBMFADM 19 recv 0000 000002BF <br />
11/03/04 10:01:18.0 XDBMFADM 19 Header received for sd=9 (13EDC970)<br />
11/03/04 10:01:18.0 XDBMFADM 19 Client request from sd=9 (13EDC970) starting<br />
11/03/04 10:01:18.1 XDBMFADM 19 Receive for sd=9 (13EDC970), size=167 (0x00A7) at 11/03/04 10:01:18<br />
11/03/04 10:01:18.1 XDBMFADM 19 recv 0000 02BF0000 0000FF14 30304C53 43204E4F <br />
11/03/04 10:01:18.1 XDBMFADM 19 recv 00C0 6C507D4D 5D5C4E6B 604B61F0 F1F2F3F4
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
11/03/04 10:01:18.1 XDBMFADM 19 recv 0250 75767778 797AA1BF D0DDDEAE 5EA3A5B7 <br />
11/03/04 10:01:18.1 XDBMFADM 19 recv 0260 A9A7B6BC BDBE5B5D AFA8B4D7 7B414243 <br />
11/03/04 10:01:18.1 XDBMFADM 19 recv 0270 44454647 4849ADF4 F6F2F3F5 7D4A4B4C <br />
11/03/04 10:01:18.1 XDBMFADM 19 Client request complete for sd=9 (13EDC970)<br />
3<br />
3 - LSC RPC request<br />
The third exchange signals the beginning of a <strong>MCG</strong> RPC operation. The server will expect an ordered sequence of RPC exchanges to follow. At<br />
this point, the server directs subsequent message arrivals to the MFARPC00 module for <strong>MCG</strong> processing.<br />
11/03/04 10:01:18.4 XDBMFADM 19 Receive for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:18<br />
11/03/04 10:01:18.4 XDBMFADM 19 recv 0000 000002BF <br />
11/03/04 10:01:18.4 XDBMFADM 19 Header received for sd=9 (13EDC970)<br />
11/03/04 10:01:18.4 XDBMFADM 19 Client request from sd=9 (13EDC970) starting<br />
11/03/04 10:01:18.4 XDBMFADM 19 Receive for sd=9 (13EDC970), size=167 (0x00A7) at 11/03/04 10:01:18<br />
11/03/04 10:01:18.4 XDBMFADM 19 recv 0000 02BF0000 0000FF14 30304C53 43204E4F
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
11/03/04 10:01:18.4 XDBMFADM 19 recv 0050 00000000 00000100 00000000 00000000 <br />
11/03/04 10:01:18.4 XDBMFADM 19 recv 0060 00109331 60002700 0000D3E2 00000300
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
11/03/04 10:01:18.4 XDBMFADM 19 send 0060 00109331 60002700 0000D3E2 <br />
11/03/04 10:01:18.6 XDBMFADM 19 recv 0070 4D565340 52504300 2CB300B4 20B900B8 <br />
11/03/04 10:01:18.6 XDBMFADM 19 recv 0080 00B400D4 C3C7C9C2 D4C340B3 0002B240 <br />
11/03/04 10:01:18.6 XDBMFADM 19 recv 0090 B3000AC6 99969440 D4C6C5B4 40B3000A <br />
11/03/04 10:01:18.6 XDBMFADM 19 recv 00A0 E396C285 C6899393 8584 <br />
11/03/04 10:01:18.6 XDBMFADM 19 MFA server msg processing starting for sd=9 (13EDC970)<br />
11/03/04 10:01:18.6 XDBMFADM 19 <strong>MCG</strong> request received - FCD_ACT1/2 FAF3 send parm<br />
11/03/04 10:01:18.6 XDBMFADM 19 MFA server msg processing complete for sd=9 (13EDC970) rc=0<br />
11/03/04 10:01:18.6 XDBMFADM 19 Send for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:19<br />
11/03/04 10:01:18.6 XDBMFADM 19 send 0000 0000006C <br />
11/03/04 10:01:18.6 XDBMFADM 19 Send for sd=9 (13EDC970), size=108 (0x006C) at 11/03/04 10:01:19<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
Confidential - 24 - December 2004
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
11/03/04 10:01:18.6 XDBMFADM 19 send 0000 006C0000 0100FAF3 30304C53 43204E4F
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
In the <strong>MCG</strong> operation diagram, the MD@<strong>MCG</strong>EX module is interesting to note because it contains most of the supporting program logic for the<br />
execution phase, and portions of this module execute as part of the XDBMFADM task and other portions execute as part of the <strong>MCG</strong>EXEC<br />
subtask.<br />
11/03/04 10:01:19.0 XDBMFADM 19 Receive for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:19<br />
11/03/04 10:01:19.0 XDBMFADM 19 recv 0000 0000006C <br />
11/03/04 10:01:19.0 XDBMFADM 19 Header received for sd=9 (13EDC970)<br />
11/03/04 10:01:19.0 XDBMFADM 19 Client request from sd=9 (13EDC970) starting<br />
11/03/04 10:01:19.0 XDBMFADM 19 Receive for sd=9 (13EDC970), size=108 (0x006C) at 11/03/04 10:01:19<br />
11/03/04 10:01:19.0 XDBMFADM 19 recv 0000 006C0000 0000FA0E 30304C53 43204E4F
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
and the entry point address are also shown in a trace message. The hi-bit of the entry address indicates the addressing mode for the program. In<br />
this example the module starts at 0x13E94200 and the entry address is the same at 0x939E94200. The hi-bit on in the entry address indicates<br />
the program will be entered in 31-bit addressing mode.<br />
11/03/04 10:01:19.0 XDBMFADM 19 <strong>MCG</strong> BLDL information for load module <strong>MCG</strong>IBMC<br />
11/03/04 10:01:19.0 XDBMFADM 19 bldl info 0000 0001004C D4C3C7C9 C2D4C340 00292400
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
At this point, the <strong>MCG</strong>EXEC subtask is idle, but still dedicated to this <strong>MCG</strong> session. The XDBMFADM communications task processes completion<br />
for the execute request. The display of the RPC data at this time will show any alterations made by the called program. In this example, the<br />
“ToBeFilled” parameter area was changed to “From IBMc “. The 0x3030 value in the response message sent to the client indicates that the<br />
remote call was successful.<br />
11/03/04 10:01:19.2 XDBMFADM 19 <strong>MCG</strong> execution complete for sd=9 (13EDC970)<br />
11/03/04 10:01:19.2 XDBMFADM 19 MFA server <strong>MCG</strong> completion starting for sd=9 (13EDC970)<br />
11/03/04 10:01:19.2 XDBMFADM 19 <strong>MCG</strong> rpc data (program parms are embedded) located at 00307AC8 (after)<br />
11/03/04 10:01:19.2 XDBMFADM 19 rpc data 0000 02000A00 4D565340 52504300 2C000000
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
- LSC RPC request<br />
- RPC send parameters<br />
- RPC execute<br />
- RPC fetch parameters<br />
11/03/04 10:01:19.5 XDBMFADM 19 Receive for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:20<br />
11/03/04 10:01:19.5 XDBMFADM 19 recv 0000 0000006C <br />
11/03/04 10:01:19.5 XDBMFADM 19 Header received for sd=9 (13EDC970)<br />
11/03/04 10:01:19.5 XDBMFADM 19 Client request from sd=9 (13EDC970) starting<br />
11/03/04 10:01:19.5 XDBMFADM 19 Receive for sd=9 (13EDC970), size=108 (0x006C) at 11/03/04 10:01:20<br />
11/03/04 10:01:19.5 XDBMFADM 19 recv 0000 006C0000 0000FAF5 30304C53 43204E4F <br />
11/03/04 10:01:19.5 XDBMFADM 19 send 0070 4D565340 52504300 2CB400B9 003078A0 <br />
11/03/04 10:01:19.5 XDBMFADM 19 send 0080 B70001B4 00D4C3C7 C9C2D4C3 40B30002 <br />
11/03/04 10:01:19.5 XDBMFADM 19 send 0090 B240B300 0AC69996 9440D4C6 C5B440B3 < @³..ñ @…ñ˜Ø@³><br />
11/03/04 10:01:19.5 XDBMFADM 19 send 00A0 000AC699 969440C9 C2D48300 <br />
11/03/04 10:01:19.5 XDBMFADM 19 Client request complete for sd=9 (13EDC970)<br />
7<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
Confidential - 29 - December 2004
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
7 - LSC RPC request<br />
In this simple example, there is only one call to a remote program. The final client-server exchanges appear to be the start of a second execution.<br />
The seventh exchange again signals the start of a <strong>MCG</strong> call operation.<br />
11/03/04 10:01:24.8 XDBMFADM 19 Receive for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:25<br />
11/03/04 10:01:24.8 XDBMFADM 19 recv 0000 000002BF <br />
11/03/04 10:01:24.8 XDBMFADM 19 Header received for sd=9 (13EDC970)<br />
11/03/04 10:01:24.8 XDBMFADM 19 Client request from sd=9 (13EDC970) starting<br />
11/03/04 10:01:24.8 XDBMFADM 19 Receive for sd=9 (13EDC970), size=167 (0x00A7) at 11/03/04 10:01:25<br />
11/03/04 10:01:24.8 XDBMFADM 19 recv 0000 02BF0000 0000FF14 30304C53 43204E4F
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
11/03/04 10:01:24.8 XDBMFADM 19 recv 0260 20202020 20202020 20202020 20202020 < ><br />
11/03/04 10:01:24.8 XDBMFADM 19 recv 0270 20202020 20202020 20202020 20202020 < ><br />
11/03/04 10:01:24.8 XDBMFADM 19 recv 0280 20202020 20202020 20202020 20202020 < ><br />
11/03/04 10:01:24.8 XDBMFADM 19 recv 0290 20202020 20202020 20202020 20202020 < ><br />
11/03/04 10:01:24.8 XDBMFADM 19 recv 02A0 20202020 20202020 20202020 00000000 < ....><br />
11/03/04 10:01:24.8 XDBMFADM 19 recv 02B0 03000000 00000000 00000030 000000 <br />
11/03/04 10:01:24.8 XDBMFADM 19 MFA server msg processing starting for sd=9 (13EDC970)<br />
11/03/04 10:01:24.8 XDBMFADM 19 <strong>MCG</strong> request received - FCD_ACT1/2 FF14 rpc start<br />
11/03/04 10:01:24.8 XDBMFADM 19 MFA server msg processing complete for sd=9 (13EDC970) rc=0<br />
11/03/04 10:01:24.8 XDBMFADM 19 Send for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:25<br />
11/03/04 10:01:24.8 XDBMFADM 19 send 0000 0000006C <br />
11/03/04 10:01:24.8 XDBMFADM 19 Send for sd=9 (13EDC970), size=108 (0x006C) at 11/03/04 10:01:25<br />
11/03/04 10:01:24.8 XDBMFADM 19 send 0000 006C0000 0100FF14 30304C53 43204E4F <br />
11/03/04 10:01:25.0 XDBMFADM 19 recv 0070 4D565340 525043B8 00B50001 B8003078 <br />
11/03/04 10:01:25.0 XDBMFADM 19 recv 0080 A0B70001 B400 < ·..Ø. ><br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
Confidential - 31 - December 2004
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
11/03/04 10:01:25.0 XDBMFADM 19 MFA server msg processing starting for sd=9 (13EDC970)<br />
11/03/04 10:01:25.0 XDBMFADM 19 <strong>MCG</strong> request received - FCD_ACT1/2 FAF3 send parm<br />
11/03/04 10:01:25.0 XDBMFADM 19 MFA server msg processing complete for sd=9 (13EDC970) rc=0<br />
11/03/04 10:01:25.1 XDBMFADM 19 Send for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:25<br />
11/03/04 10:01:25.1 XDBMFADM 19 send 0000 0000006C <br />
11/03/04 10:01:25.1 XDBMFADM 19 Send for sd=9 (13EDC970), size=108 (0x006C) at 11/03/04 10:01:25<br />
11/03/04 10:01:25.1 XDBMFADM 19 send 0000 006C0000 0100FAF3 30304C53 43204E4F <br />
11/03/04 10:01:25.3 XDBMFADM 19 MFA server msg processing starting for sd=9 (13EDC970)<br />
The cleanup flag is detected and this execute request is correctly identified as a “cleanup”.<br />
Randy Witek<br />
<strong>Micro</strong> <strong>Focus</strong> Development<br />
Confidential - 32 - December 2004
<strong>Mainframe</strong> <strong>Call</strong> <strong>Generator</strong> <strong>Refresh</strong><br />
11/03/04 10:01:25.3 XDBMFADM 19 <strong>MCG</strong> request received - FCD_ACT1/2 FA0E cleanup<br />
Here the <strong>MCG</strong>EXEC subtask releases the COBOL environment (by calling IBM’s IGZERRE utility) that was previously created for the <strong>MCG</strong><br />
session. When cleanup is successful, the subtask is available for reassignment to a new <strong>MCG</strong> session.<br />
11/03/04 10:01:25.3 <strong>MCG</strong>EXEC 20 Work popped (nwo=13BA9BA0 nwowhat=13)<br />
11/03/04 10:01:25.3 <strong>MCG</strong>EXEC 20 nwo 0000 D5E6D640 00000130 00000001 00000000 <br />
11/03/04 10:01:25.3 <strong>MCG</strong>EXEC 20 nwo 0010 00000000 0000000D 13F36000 00000000 <br />
11/03/04 10:01:25.3 <strong>MCG</strong>EXEC 20 nwo 0020 00000000 13E3337C 13EB38A0 00000000 <br />
11/03/04 10:01:25.3 <strong>MCG</strong>EXEC 20 Work is Mcgexec_Cleanup (Tsa=13F36000)<br />
11/03/04 10:01:25.4 <strong>MCG</strong>EXEC 20 <strong>MCG</strong> COBOL environment reset; IGZERRE rc=00000000<br />
11/03/04 10:01:25.4 <strong>MCG</strong>EXEC 20 <strong>MCG</strong> cleanup successful<br />
11/03/04 10:01:25.4 XDBMFADM 19 MFA server msg processing complete for sd=9 (13EDC970) rc=0<br />
11/03/04 10:01:25.4 XDBMFADM 19 Send for sd=9 (13EDC970), size=4 (0x0004) at 11/03/04 10:01:25<br />
11/03/04 10:01:25.4 XDBMFADM 19 send 0000 0000006C <br />
11/03/04 10:01:25.4 XDBMFADM 19 Send for sd=9 (13EDC970), size=108 (0x006C) at 11/03/04 10:01:25<br />
11/03/04 10:01:25.4 XDBMFADM 19 send 0000 006C0000 0100FA0E 30304C53 43204E4F