A couple of days ago, I posted a Java/PCF program that would create a IBM MQ queue. So, if you require creating a queue via Java/PCF then you probably will need to delete a queue via Java/PCF.
If you are used to deleting an IBM MQ queue using runmqsc command then the following simple Java/PCF program will delete a IBM MQ queue based on the following runmqsc command:
DELETE QL('TEST.QUEUE') AUTHREC(YES) PURGE
You can download the source code from here.
import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Hashtable; import com.ibm.mq.MQException; import com.ibm.mq.MQQueueManager; import com.ibm.mq.constants.CMQC; import com.ibm.mq.constants.MQConstants; import com.ibm.mq.headers.MQDataException; import com.ibm.mq.headers.pcf.PCFException; import com.ibm.mq.headers.pcf.PCFMessage; import com.ibm.mq.headers.pcf.PCFMessageAgent; /** * Program Name * MQDeleteQueue01 * * Description * This java class issues a PCF "delete queue" request message to delete a queue. * * This PCF code is equivalent to issuing the runmqsc command of: * DELETE QL('TEST.QUEUE') AUTHREC(YES) PURGE * * Sample Command Line Parameters * -m MQA1 -q Queue_Name -h 127.0.0.1 -p 1414 -c TEST.CHL -u UserID -x Password * * @author Roger Lacroix */ public class MQDeleteQueue01 { 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; public MQDeleteQueue01() { 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("-u") && params.containsKey("-x"); if (b) { try { Integer.parseInt((String) params.get("-p")); } 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()) { try { port = Integer.parseInt((String) params.get("-p")); } catch (NumberFormatException e) { port = 1414; } 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(); } } /** * Handle connecting to the queue manager, issuing PCF command then * disconnect from the queue manager. */ private void doPCF() { String qMgrName = (String) params.get("-m"); String qName = (String) params.get("-q"); MQQueueManager qMgr = null; PCFMessageAgent agent = null; PCFMessage request = null; try { qMgr = new MQQueueManager(qMgrName, mqht); logger("successfully connected to "+ qMgrName); agent = new PCFMessageAgent(qMgr); logger("successfully created agent"); // https://www.ibm.com/docs/en/ibm-mq/latest?topic=formats-mqcmd-delete-q-delete-queue request = new PCFMessage(MQConstants.MQCMD_DELETE_Q); // Specify the queue name to be deleted. request.addParameter(MQConstants.MQCA_Q_NAME, qName); // Specify that the associated authority record is to be deleted too. // Does not apply to z/OS queue managers. request.addParameter(MQConstants.MQIACF_REMOVE_AUTHREC, MQConstants.MQRAR_YES); // Specify that the queue is to be deleted even if it contains messages. request.addParameter(MQConstants.MQIACF_PURGE, MQConstants.MQPO_YES); agent.send(request); logger("successfully deleted queue: " + qName); } catch (PCFException pcfe) { if (pcfe.reasonCode == MQConstants.MQRC_UNKNOWN_OBJECT_NAME) logger("Error: The queue '" + qName+ "' does not exists on the queue manager '" + qMgrName + "'."); else logger("CC=" +pcfe.completionCode + " [" + MQConstants.lookupCompCode(pcfe.completionCode) + "] : RC=" + pcfe.reasonCode + " ["+MQConstants.lookupReasonCode(pcfe.reasonCode)+"]"); } catch (MQException e) { logger("CC=" +e.completionCode + " [" + MQConstants.lookupCompCode(e.completionCode) + "] : RC=" + e.reasonCode + " ["+MQConstants.lookupReasonCode(e.reasonCode)+"]"); } catch (IOException e) { logger("IOException:" +e.getLocalizedMessage()); } catch (MQDataException e) { logger("MQDataException:" +e.getLocalizedMessage()); } catch (Exception e) { logger("Exception:" +e.getLocalizedMessage()); } finally { try { if (agent != null) { agent.disconnect(); logger("disconnected from agent"); } } catch (MQDataException e) { logger("CC=" +e.completionCode + " : RC=" + e.reasonCode); } try { if (qMgr != null) { qMgr.disconnect(); logger("disconnected from "+ qMgrName); } } catch (MQException e) { 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); } public static void main(String[] args) { MQDeleteQueue01 mqcq = new MQDeleteQueue01(); try { mqcq.init(args); mqcq.doPCF(); } catch (IllegalArgumentException e) { logger("Usage: java MQDeleteQueue01 -m QueueManagerName -q Queue_Name -h host -p port -c channel -u UserID -x Password"); System.exit(1); } System.exit(0); } }
Regards,
Roger Lacroix
Capitalware Inc.