A couple of days ago, I posted a Java/PCF program that would create a IBM MQ channel. So, if you require creating a channel via Java/PCF then you probably will need to delete a channel via Java/PCF.
If you are used to deleting an IBM MQ channel using runmqsc command then the following simple Java/PCF program will delete a IBM MQ channel based on the following runmqsc command:
DELETE CHL('TEST.CHL')
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 * MQDeleteChannel01 * * Description * This java class issues a PCF "delete channel" request message to delete a channel. * * This PCF code is equivalent to issuing the runmqsc command of: * DELETE CHL('TEST.CHL') * * Sample Command Line Parameters * -m MQA1 -z Channel_Name_to_be_deleted -h 127.0.0.1 -p 1414 -c TEST.CHL -u UserID -x Password * * @author Roger Lacroix */ public class MQDeleteChannel01 { 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 MQDeleteChannel01() { 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("-z") && 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 chlName = (String) params.get("-z"); 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-channel-delete-channel request = new PCFMessage(MQConstants.MQCMD_DELETE_CHANNEL); // Specify the channel name to be deleted. request.addParameter(MQConstants.MQCACH_CHANNEL_NAME, chlName); agent.send(request); logger("successfully deleted channel: " + chlName); } catch (PCFException pcfe) { if (pcfe.reasonCode == MQConstants.MQRC_UNKNOWN_OBJECT_NAME) logger("Error: The channel '" + chlName+ "' 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) { MQDeleteChannel01 mqcq = new MQDeleteChannel01(); try { mqcq.init(args); mqcq.doPCF(); } catch (IllegalArgumentException e) { logger("Usage: java MQDeleteChannel01 -m QueueManagerName -z Channel_Name_to_be_deleted -h host -p port -c channel -u UserID -x Password"); System.exit(1); } System.exit(0); } }
Regards,
Roger Lacroix
Capitalware Inc.