WebSphere MQ的配置请参考配置IBM WEBSPHERE MQ触发器中的方法二,唯一要改的是定义进程,定义进程改为如下:
DEFINE PROCESS('JAVA.PROCESS') REPLACE + DESCR('Process to test triggering') + APPLICID('java -classpath E:/MQTrigger/MQTrigger.jar com.bijian.study.JavaTrigger')
由java -classpath E:/MQTrigger/MQTrigger.jar com.bijian.study.JavaTrigger可知,我将如下工程代码导出为MQTrigger.jar放到了E盘的MQTrigger目录下。
JavaTrigger.java
package com.bijian.study; import java.io.IOException; import com.ibm.mq.MQC; import com.ibm.mq.MQException; import com.ibm.mq.MQGetMessageOptions; import com.ibm.mq.MQMessage; import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class JavaTrigger { private static Logger logger = LogManager.getLogger(JavaTrigger.class.getName()); private MQQueueManager qMgr; public static void main(String args[]) throws IOException { if (args.length < 1) { logger.info("This must be a triggered application"); } else { JavaTrigger jt = new JavaTrigger(); jt.start(args); } System.exit(0); } public void start(String args[]) { try { MQException.log = null; /******************************************************/ /* Create a MQTrigger class object to read the MQTMC2 */ /* structure into the correct attribute. */ /******************************************************/ MQTrigger tmc = new MQTrigger(args[0]); /******************************************************/ /* Connect to the queue manager identified by the */ /* trigger. */ /******************************************************/ qMgr = new MQQueueManager(tmc.getQueueManagerName()); /******************************************************/ /* Open the queue identified by the trigger. */ /******************************************************/ int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_FAIL_IF_QUIESCING; MQQueue triggerQueue = qMgr.accessQueue(tmc.getQueueName(), openOptions, null, null, null); /******************************************************/ /* Set up our options to get the first message */ /* Wait 5 seconds to be cetain all messages are */ /* processed. */ /******************************************************/ MQGetMessageOptions gmo = new MQGetMessageOptions(); gmo.options = MQC.MQGMO_WAIT | MQC.MQGMO_CONVERT; gmo.waitInterval = 5000; MQMessage triggerMessage = new MQMessage(); /*****************************************************/ /* Read each message from the queue until there are */ /* no more messages to get. */ /*****************************************************/ long rc = 0; do { rc = 0; try { /***********************************************/ /* Set the messageId and correlationId to none */ /* to get all messages with no message */ /* selection. */ /***********************************************/ triggerMessage.clearMessage(); triggerMessage.correlationId = MQC.MQCI_NONE; triggerMessage.messageId = MQC.MQMI_NONE; triggerQueue.get(triggerMessage, gmo); String msg = triggerMessage.readString(triggerMessage.getMessageLength()); /***********************************************/ /* Insert business logic for the message here. */ /* For this sample, echo the first 20 */ /* characters of the message. */ /***********************************************/ if (msg.length() > 20) { logger.info("Message: " + msg.substring(0, 20)); } else { logger.info("Message: " + msg); } } catch (MQException mqEx) { rc = mqEx.reasonCode; if (rc != MQException.MQRC_NO_MSG_AVAILABLE) { logger.info(" PUT Message failed with rc = " + rc); } } catch (Exception ex) { logger.info("Generic exception: " + ex); rc = 1; } } while (rc == 0); /**********************************************************/ /* Cleanup MQ resources prior to exiting. */ /**********************************************************/ triggerQueue.close(); qMgr.disconnect(); } catch (MQException mqEx) { logger.info("MQ failed with completion code = " + mqEx.completionCode + " and reason code = " + mqEx.reasonCode); } } }
MQTrigger.java
package com.bijian.study; class MQTrigger { private String structId; private String version; private String qName; private String processName; private String triggerData; private String applType; private String applId; private String envData; private String userData; private String qMgrName; /******************************************************/ /* Constructor to parse the MQTMC2 stucture and set */ /* the class attributes. */ /* Values derived from field definitions given for */ /* MQTMC2 in the WebSphere Application Programming */ /* Reference. */ /******************************************************/ public MQTrigger(String tmcStruct) throws StringIndexOutOfBoundsException { structId = tmcStruct.substring(0, 3).trim(); version = tmcStruct.substring(4, 8).trim(); qName = tmcStruct.substring(8, 55).trim(); processName = tmcStruct.substring(56, 103).trim(); triggerData = tmcStruct.substring(104, 167).trim(); applType = tmcStruct.substring(168, 171).trim(); applId = tmcStruct.substring(172, 427).trim(); envData = tmcStruct.substring(428, 555).trim(); userData = tmcStruct.substring(556, 683).trim(); qMgrName = tmcStruct.substring(684, 730).trim(); } public String getStructId() { return (structId); } public String getVersion() { return (version); } public String getQueueName() { return (qName); } public String getProcessName() { return (processName); } public String getTriggerData() { return (triggerData); } public String getApplicationType() { return (applType); } public String getApplicationId() { return (applId); } public String getEnvironmentData() { return (envData); } public String getUserData() { return (userData); } public String getQueueManagerName() { return (qMgrName); } }
运行效果:
参考文章:http://www.cnblogs.com/windows/archive/2012/09/25/2701613.html