REFRESH USEREXIT command

Use the type-2 REFRESH USEREXIT command to refresh the user exit modules that are defined in the USER_EXITS section of the DFSDFxxx member. When the command is processed, IMS rereads the DFSDFxxx member and processes the USER_EXITS section.

Subsections:

Environment

The following table lists the environments (DB/DC, DBCTL, and DCCTL) from which the REFRESH command and keywords can be issued.

Table 1. Valid environments for the REFRESH USEREXIT command and keywords
Command / keywords DB/DC DBCTL DCCTL
REFRESH USEREXIT X X X
TYPE X X X
MEMBER X X X

Syntax

Read syntax diagramSkip visual syntax diagram REFRESH USEREXIT TYPE(,exit_type)MEMBER( suffix)

Keywords

The following keyword is valid for the REFRESH USEREXIT command:

TYPE(exit_type)
Specifies the user exit type or types that you want to be refreshed. You can specify a single user exit type or a list of user exit types separated by commas. The valid user exit types are the following:
AOIE
Type-2 Automated Operator User Exit
BSEX
Build Security Environment user exit
ICQSEVNT
IMS CQS Event user exit
ICQSSTEV
IMS CQS Structure Event user exit
IMSMON
IMS Monitor user exit
INITTERM
Initialization/Termination user exit
LOGEDIT
Log Edit user exit
LOGWRT
Logger user exit
NDMX
Non-Discardable Messages user exit
OTMAIOED
OTMA Input/Output Edit user exit
OTMAYPRX
OTMA Destination Resolution user exit
OTMARTUX
OTMA Resume TPIPE Security user exit
Start of changePGMCREATEnd of change
Start of changePGMCREAT user exitEnd of change
PPUE
Partner Product user exit
RASE
Resource Access Security user exit
RESTART
Restart user exit

If an exit type is specified more than once, it is refreshed only once and no error message is issued.

Restriction: Start of changeThe FASTMON user exit type is not refreshable. It is invalid if specified in the TYPE() parameter of the REFRESH USEREXIT command.End of change
MEMBER(suffix)
Specifies a 1- to 3-alphanumeric character value that represents the suffix to a DFSDFxxx member name. The identified DFSDFxxx member is read in and parsed for the EXITDEF statements for the requested user exit types. If the keyword is not specified, the DFSDFxxx member specified for system initialization is used as the default. The DFSDFxxx member specified on system initialization can be determined from message DFS1929I on the system console or log. The command fails if the MEMBER keyword is specified with an invalid xxx value or if the DFSDFxxx member is not found.

This keyword is optional. Normally, the DFSDFxxx member specified on system initialization should be the only one available. The purpose of this keyword is to provide the capability of having the command point to an alternate DFSDFxxx member (different from the system default) for test purposes. Outside of testing, IMS expects the MEMBER keyword to be omitted.

Note: These changes are not saved across a restart. If you refresh your user exits from a DFSDFxxx member that is not the member specified on IMS initialization and you do not update your initialization DFSDFxxx member, the user exit changes will be lost when IMS restarts.

If the MEMBER parameter is specified without any value (MEMBER()), it is treated as if MEMBER is not specified. The DFSDFxxx member specified for initialization will be used.

Usage notes

You can issue this command only through the Operations Manager (OM) API.

The output of this command is defined in XML and is available to automation programs that communicate with OM.

When the REFRESH USEREXIT command is entered, IMS performs the following steps:
  1. Reads the DFSDFxxx member and process the USER_EXITS section of the DFSDFxxx member.
  2. Loads the user exit modules specified in the USER_EXITS section for the exit types specified in the command.
  3. Updates the internal IMS control block with pointers to the new user exit modules. Any subsequent calls to the user exit modules will now call the new modules.
  4. When the processing has completed in the old exit modules, the old modules will be deleted.

IMS loads the new user exit modules before deleting the old modules. If an error occurs during this process (for example, a module could not be loaded), IMS fails the command for the particular user exit type and leaves the current modules of the user exit type in effect. All modules of the specified user exit type must be loaded successfully for the command to complete successfully.

If your IMSplex has multiple IMS systems, you can refresh the user exit modules in all of the IMS systems in the IMSplex by using the default routing for the command. This sends the REFRESH USEREXIT command to all of the IMS systems in the IMSplex and the user exit modules are refreshed in each of the IMS systems. If the refresh fails on one or more IMS systems, you must resolve the problem that caused the command to fail and reenter the command.

You can use the REFRESH USEREXIT command to add a user exit type to IMS, delete a user exit type, or migrate an existing user exit to be dynamically refreshable:
  • To add a user exit type, insert EXITDEF statements into the USER_EXITS section of the DFSDFxxx member for the user exit type you want to add and then enter the REFRESH USEREXIT command for that exit type. If the user exit has an initialization function, the user exit is called with the initialization function before the user exit is made available to IMS.
  • To delete a user exit type, remove the EXITDEF statements from the USER_EXITS section of the DFSDFxxx member for the user exit type you want to delete and then enter the REFRESH USEREXIT command for that exit type.
  • To migrate an existing user exit, specify the exit routines on the EXITDEF parameter in the USER_EXITS section of the DFSDFxxx member and then enter the REFRESH USEREXIT command for that exit type.

Refreshes are performed at the exit type level, so when an exit routine of a certain exit type is modified, every exit routine of that exit type is refreshed.

Certain messages contain the short form of the command to which the message refers. Because the REFRESH USEREXIT command does not have a short form, the first four characters of the command (REFR) are specified in the message. These four characters are also used to define the command security.

Output fields

The following table shows the REFRESH USEREXIT output fields. The columns in the table are:

Short label
Contains the short label that is generated in the XML output.
Long label
Contains the long label generated in the XML output.
Keyword
Identifies the keyword on the command that caused the field to be generated. N/A (not applicable) appears for output fields that are always returned.
Scope
Identifies the scope of the output field.
Meaning
Provides a brief description of the output field.
Table 2. Output fields for the REFRESH command
Short label Long label Keyword Scope Meaning
CC CC N/A N/A Completion code for the line of output. The completion code is always returned.
CCTXT CCText N/A N/A Completion code text that briefly explains the meaning of the non-zero completion code.
MBR MbrName N/A N/A IMSplex member that built the output line. Member name is always returned.
TYPE ExitType TYPE LCL User exit type requested by the REFRESH USEREXIT command. User exit type is always returned.
NAME ModName N/A LCL Exit routine name that was loaded by this REFRESH USEREXIT command.

Return, reason, and completion codes

The return and reason codes that can be returned as a result of the REFRESH USEREXIT command are standard for all commands entered through the OM API. For a list of the codes and their meaning, see CSLOMCMD: command request.

The following table contains the return, reason, and completion codes for the REFRESH USEREXIT command. Included in the tables is a brief explanation of the codes.

Table 3. Return and reason codes for the REFRESH USEREXIT command
Return code Reason code Meaning
X'00000000' X'00000000' The REFRESH USEREXIT command completed successfully.
X'00000004' X'00001024' The REFRESH USEREXIT command completed successfully and a message was issued.
X'00000008' X'00002014' The DFSDFxxx suffix specified in the MEMBER parameter contains an invalid character.
X'0000000C' X'00003000' The REFRESH USEREXIT command was successful for at least one user exit type. The REFRESH command was not successful for one or more user exit types. The completion code indicates the reason for the error with the user exit type. The completion codes that can be returned by the REFRESH command are listed in Table 4.
X'0000000C' X'00003004' The REFRESH USEREXIT command was not successful for any of the user exit types specified. The completion code indicates the reason for the error with the user exit type. The completion codes that can be returned by the REFRESH command are listed in Table 4.
X'00000014' X'00005004' The REFRESH USEREXIT command processing terminated, because a DFSOCMD response buffer could not be obtained.
X'00000014' X'00005FFF' The REFRESH USEREXIT command processing terminated because of an internal error.

Errors that are unique to the processing of this command are returned as completion codes. A completion code is returned for each action against an individual resource.

The following table contains completion codes that can be returned on a REFRESH USEREXIT command.

Table 4. Completion codes for the REFRESH USEREXIT command
Completion code Meaning
0 The REFRESH USEREXIT command completed successfully for the user exit type.
92 An Error was encountered while processing the REFRESH USEREXIT command. Check the messages that are returned with the command output for additional information about the error.
148 The specified user exit type was successfully deleted and a message was issued.
14E The specified user exit type is deleted and will no longer be called.
14F The specified user exit type could not be added because there was no EXITDEF for the user exit type in the DFSDFxxx member or because no log record types existed in the DFSVSMxx member (message DFS4586E).

Examples

The following are examples of the REFRESH USEREXIT command:

Example 1 for REFRESH command

TSO SPOC input:

REFRESH USEREXIT TYPE(ICQSEVNT)

TSO SPOC output:

ExitType ModName  MbrName   CC
ICQSEVNT DFSCQEX0 SYS3       0
ICQSEVNT DFSCQEX1 SYS3       0
ICQSEVNT DFSCQEX2 SYS3       0 

OM API input:

<imsout> 
<ctl>                                        
<omname>OM1OM   </omname>                    
<omvsn>1.5.0</omvsn>                         
<xmlvsn>20  </xmlvsn>                        
<statime>2012.061 20:33:01.174845</statime>  
<stotime>2012.061 20:33:01.330060</stotime>  
<staseq>C9344A682C43D7AA</staseq>                                
<stoseq>C9344A685228CD2C</stoseq>                                
<rqsttkn1>USRT002 10123301</rqsttkn1>                            
<rc>00000000</rc>                                                
<rsn>00000000</rsn>                                              
</ctl>                                                           
<cmd>                                                            
<master>SYS3    </master>                                        
<userid>USRT002 </userid>                                        
<verb>REFR</verb>                                                
<kwd>USEREXIT        </kwd>                                      
<input>REFRESH USEREXIT TYPE(ICQSEVNT) </input>                  
</cmd>                                                           
<cmdrsphdr>                                                      
<hdr slbl="TYPE" llbl="ExitType" scope="LCL" key="YES" len="8"   
 dtype="CHAR" align="left" />                                    
<hdr slbl="NAME" llbl="ModName" scope="LCL" key="YES" len="8"    
 dtype="CHAR" align="left" />                                    
<hdr slbl="MBR" llbl="MbrName" scope="LCL" key="NO" len="4"      
 dtype="CHAR" align="left" />                                    
<hdr slbl="CC" llbl="CC" scope="LCL" key="NO" len="4" dtype="INT"
 align="right" />                                                
<hdr slbl="CCTXT" llbl="CCText" scope="LCL" sort="n" key="0"     
scroll="yes" len="*" dtype="CHAR" align="left" skipb="yes" />               
</cmdrsphdr>                                                                 
<cmdrspdata>                                                                 
<rsp>TYPE(ICQSEVNT) NAME(DFSCQEX1) MBR(SYS3) CC(   0) </rsp>                 
<rsp>TYPE(ICQSEVNT) NAME(DFSCQEX2) MBR(SYS3) CC(   0) </rsp>                 
<rsp>TYPE(ICQSEVNT) NAME(DFSCQEX0) MBR(SYS3) CC(   0) </rsp>                 
</cmdrspdata>                                                                
</imsout>                                                                    

Explanation: ICQSEVNT exit types are refreshed.

Start of change

Example 2 for REFRESH command

TSO SPOC input:

REFRESH USEREXIT TYPE(PGMCREAT)

TSO SPOC output:


ExitType ModName  MbrName   CC
PGMCREAT DFSDFPX0 IMS1       0 
End of change