On StackOverflow, someone asked a question about inhibiting get actions against a queue.
Here is a simple Java/MQ program that will set inhibit or allow for the GET and PUT attributes of a queue.
You can download the source code from here.
import java.text.SimpleDateFormat; import java.util.Date; import java.util.Hashtable; import com.ibm.mq.MQException; import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; import com.ibm.mq.constants.CMQC; /** * Program Name * MQTest15 * * Description * This java class will connect to a remote queue manager with the * MQ setting stored in a HashTable and set the queue's get & put attributes to * either inhibit or allow. * * Sample Command Line Parameters * -m MQA1 -h 127.0.0.1 -p 1414 -c TEST.CHL -q TEST.Q1 -i 0/1 -o 0/1 -u UserID -x Password * * @author Roger Lacroix */ public class MQTest15 { private static final SimpleDateFormat LOGGER_TIMESTAMP = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); private Hashtable<String,String> params; private Hashtable<String,Object> mqht; private String qMgrName; private String outputQName; private boolean getInhibit = false; private boolean putInhibit = false; /** * The constructor */ public MQTest15() { super(); params = new Hashtable<String,String>(); mqht = new Hashtable<String,Object>(); } /** * Make sure the required parameters are present. * @return true/false */ private boolean allParamsPresent() { boolean b = params.containsKey("-h") && params.containsKey("-p") && params.containsKey("-c") && params.containsKey("-m") && params.containsKey("-q") && params.containsKey("-i") && params.containsKey("-o") && params.containsKey("-u") && params.containsKey("-x"); if (b) { try { Integer.parseInt((String) params.get("-p")); Integer.parseInt((String) params.get("-i")); Integer.parseInt((String) params.get("-o")); } catch (NumberFormatException e) { b = false; } } return b; } /** * Extract the command-line parameters and initialize the MQ HashTable. * @param args * @throws IllegalArgumentException */ private void init(String[] args) throws IllegalArgumentException { int port = 1414; if (args.length > 0 && (args.length % 2) == 0) { for (int i = 0; i < args.length; i += 2) { params.put(args[i], args[i + 1]); } } else { throw new IllegalArgumentException(); } if (allParamsPresent()) { qMgrName = (String) params.get("-m"); outputQName = (String) params.get("-q"); try { port = Integer.parseInt((String) params.get("-p")); } catch (NumberFormatException e) { port = 1414; } try { int temp = Integer.parseInt((String) params.get("-i")); if (temp == 1) getInhibit = true; } catch (NumberFormatException e) { getInhibit = false; } try { int temp = Integer.parseInt((String) params.get("-o")); if (temp == 1) putInhibit = true; } catch (NumberFormatException e) { putInhibit = false; } mqht.put(CMQC.CHANNEL_PROPERTY, params.get("-c")); mqht.put(CMQC.HOST_NAME_PROPERTY, params.get("-h")); mqht.put(CMQC.PORT_PROPERTY, new Integer(port)); mqht.put(CMQC.USER_ID_PROPERTY, params.get("-u")); mqht.put(CMQC.PASSWORD_PROPERTY, params.get("-x")); // I don't want to see MQ exceptions at the console. MQException.log = null; } else { throw new IllegalArgumentException(); } } /** * Connect, open queue, set the queue's get & put attributes with * either inhibit or allow, close queue and disconnect. * */ private void doIt() { MQQueueManager qMgr = null; MQQueue queue = null; int openOptions = CMQC.MQOO_SET + CMQC.MQOO_FAIL_IF_QUIESCING; try { qMgr = new MQQueueManager(qMgrName, mqht); MQTest15.logger("successfully connected to "+ qMgrName); queue = qMgr.accessQueue(outputQName, openOptions); MQTest15.logger("successfully opened "+ outputQName); if (getInhibit) { queue.setInhibitGet(CMQC.MQQA_GET_INHIBITED); MQTest15.logger("Set inhibited get on queue: " +outputQName); } else { queue.setInhibitGet(CMQC.MQQA_GET_ALLOWED); MQTest15.logger("Set allowed get on queue: " +outputQName); } if (putInhibit) { queue.setInhibitPut(CMQC.MQQA_PUT_INHIBITED); MQTest15.logger("Set inhibited put on queue: " +outputQName); } else { queue.setInhibitPut(CMQC.MQQA_PUT_ALLOWED); MQTest15.logger("Set allowed put on queue: " +outputQName); } } catch (MQException e) { MQTest15.logger("CC=" +e.completionCode + " : RC=" + e.reasonCode); } finally { try { if (queue != null) { queue.close(); MQTest15.logger("closed: "+ outputQName); } } catch (MQException e) { MQTest15.logger("CC=" +e.completionCode + " : RC=" + e.reasonCode); } try { if (qMgr != null) { qMgr.disconnect(); MQTest15.logger("disconnected from "+ qMgrName); } } catch (MQException e) { MQTest15.logger("CC=" +e.completionCode + " : RC=" + e.reasonCode); } } } /** * A simple logger method * @param data */ public static void logger(String data) { String className = Thread.currentThread().getStackTrace()[2].getClassName(); // Remove the package info. if ( (className != null) && (className.lastIndexOf('.') != -1) ) className = className.substring(className.lastIndexOf('.')+1); System.out.println(LOGGER_TIMESTAMP.format(new Date())+" "+className+": "+Thread.currentThread().getStackTrace()[2].getMethodName()+": "+data); } /** * main line * @param args */ public static void main(String[] args) { MQTest15 write = new MQTest15(); try { write.init(args); write.doIt(); } catch (IllegalArgumentException e) { MQTest15.logger("Usage: java MQTest15 -m QueueManagerName -h host -p port -c channel -q QueueName -i 0/1 -o 0/1 -u UserID -x Password"); System.exit(1); } System.exit(0); } }
Regards,
Roger Lacroix
Capitalware Inc.