01.05.2013 Views

Mainframe Call Generator (MCG) Refresh - Micro Focus

Mainframe Call Generator (MCG) Refresh - Micro Focus

Mainframe Call Generator (MCG) Refresh - Micro Focus

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!