WebSphere MQ For JAVA编程实例----实现MQ trigger--样例

MQTrigger.java源码如下:

import java.io.*;
import java.lang.*;
import com.ibm.mq.*;

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);
    }

}

 

 

JavaTrigger.java源码如下:

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;

public class JavaTrigger
{


    private MQQueueManager qMgr;

    public static void main (String args[]) throws IOException
    {
        if (args.length < 1)
        {
            System.out.println("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)
                    {
                        System.out.println("Message: " + msg.substring(0,20));
                    }
                    else
                    {
                        System.out.println("Message: " + msg);
                    }


                }
                catch (MQException mqEx)
                {
                    rc = mqEx.reasonCode;
                    if (rc != MQException.MQRC_NO_MSG_AVAILABLE)
                    {
                        System.out.println(" PUT Message failed with rc = "
                        + rc);
                    }
                }
                catch (Exception ex)
                {
                    System.out.println("Generic exception: " + ex);
                    rc = 1;
                }

            } while (rc == 0);


            /**********************************************************/
            /* Cleanup MQ resources prior to exiting. */
            /**********************************************************/
            triggerQueue.close();
            qMgr.disconnect();
        }

        catch (MQException mqEx)
        {
            System.out.println("MQ failed with completion code = "
            + mqEx.completionCode
            + " and reason code = " + mqEx.reasonCode);
        }
    }

}

 

 

转载:http://ganquan.itpub.net/post/8445/290844

posted on 2012-09-25 15:20  jay.windows  阅读(1746)  评论(0编辑  收藏  举报

导航