The Queue Attributes sample
The Queue Attributes sample is a conversational-mode CICS® application that demonstrates the use of the MQINQ and MQSET calls.
It shows how to inquire about the values of the InhibitPut
and InhibitGet
attributes of queues, and how to change them so that programs cannot put messages on, or get messages from, a queue. You might want to lock a queue in this way when you are testing a program.
To prevent accidental interference with your own queues, this sample works only on a queue object that has the characters CSQ4SAMP in the first 8 bytes of its name. However, the source code includes comments to show you how to remove this restriction.
Source programs are supplied in the COBOL, assembler, and C languages (see Table 2 ).
CALL MQCONN,(NAME,HCONN,COMPCODE,REASON),MF=(E,PARMAREA),VL
(The VL keyword means that you can use the CICS Execution Diagnostic Facility (CEDF) supplied transaction for debugging the program.) For more information about writing reenterable programs, see Coding in System/390 assembler language.
- For COBOL, MVC1
- For assembler language, MAC1
- For C, MCC1
Design of the sample
- Name of the queue
- User request (valid actions are: inquire, allow, or inhibit)
- Current status of put operations for the queue
- Current status of get operations for the queue
The application validates the values that you enter in the first two fields. It checks that the queue name starts with the characters CSQ4SAMP
and that you entered one of the three valid requests in the Action field. The application converts all your input to uppercase, so you cannot use any queues with names that contain lowercase characters.
inquire
in the Action field, the flow through the program logic is:- Open the queue using the MQOPEN call with the MQOO_INQUIRE option
- Call MQINQ using the selectors MQIA_INHIBIT_GET and MQIA_INHIBIT_PUT
- Close the queue using the MQCLOSE call
- Analyze the attributes that are returned in the
IntAttrs
parameter of the MQINQ call and move the words INHIBITED or ALLOWED, as appropriate, to the relevant screen fields
inhibit
in the Action field, the flow through the program logic is:- Open the queue using the MQOPEN call with the MQOO_SET option
- Call MQSET using the selectors MQIA_INHIBIT_GET and MQIA_INHIBIT_PUT, and with the values MQQA_GET_INHIBITED and MQQA_PUT_INHIBITED in the
IntAttrs
parameter - Close the queue using the MQCLOSE call
- Move the word INHIBITED to the relevant screen fields
If you enter allow
in the Action field, the application performs similar processing to that for an inhibit request. The only differences are the settings of the attributes and the words displayed on the screen.
- The application is not connected to the queue manager
- The queue does not exist
- The user is not authorized to access the queue
- The application is not authorized to open the queue