mbsgetw5.java

来自「Hulft-Message是用来在Internet上传输文件数据的商用Middl」· Java 代码 · 共 208 行

JAVA
208
字号
// --------------------------------------------------------------------------------
//
//   Program name     : MBSgetw5.class
//
//   Description      : Sample Java program that gets a message from a queue
//                      with wait option
//
//   (C) Copyright SAISON INFORMATION SYSTEMS CO.,LTD. 2004 All Rights Reserved.
//
// --------------------------------------------------------------------------------
// --------------------------------------------------------------------------------
//
//   Function : 
//
//      "MBSgetw5" is a sample Java program to get a message from a queue with
//   wait option.. "get()" method is blocked when the message does not exist in the
//   specified queue. This program gets a message with "WAIT" as UserDefineID
//   from specified queue, and writes this to StdOut.
//
//      This program has the following parameters. If the optional parameters
//   are omitted, the parameters in System-Environment file( mbcenv.properties )
//   will be used.
//
//     required :
//
//     optional :
//        (1) -s Server     : The name of HULFT-Message Server
//        (2) -p Port       : The port of HULFT-Message Server
//        (3) -q Queue      : The name of the queue
//        (4) -w Timeout    : The value of the timeout
//
// --------------------------------------------------------------------------------
import jp.co.saison.sis.hulft.msg.*;

class MBSgetw5 {
    public static void main(String args[]) {
        String usage =
            "Usage : MBSgetw5 [-s Server -p Port] [-q Queue] [-w Timeout]";

        // ------------------------------------------------------------------------
        // Check the arguments
        // ------------------------------------------------------------------------
        if (args.length > 8) {
            System.out.println(usage);
            return;
        }
        boolean arg_s = false, arg_p = false, arg_q = false, arg_w = false;
        String server = "";     // user define server name
        int    port   = 0;      // user define server port
        String queue  = "";     // user define queue name
        int    timeout = 0;     // user define timeout value
        for (int i = 0; i < args.length; i++) {
            if (args[i].equals("-s")) { 
                // server name
                if ((args.length - i) <= 1) {
                    System.out.println(usage);
                    return;
                }
                i++;
                server = args[i];
                arg_s = true;
            } else if (args[i].equals("-p")) {
                // server port
                if ((args.length - i) <= 1) {
                    System.out.println(usage);
                    return;
                }
                i++;
                port = Integer.parseInt(args[i]);
                arg_p = true;
            } else if (args[i].equals("-q")) {
                // queue name
                if ((args.length - i) <= 1) {
                    System.out.println(usage);
                    return;
                }
                i++;
                queue = args[i];
                arg_q = true;
            } else if (args[i].equals("-w")) {
                // timeout value
                if ((args.length - i) <= 1) {
                    System.out.println(usage);
                    return;
                }
                i++;
                timeout = Integer.parseInt(args[i]);
                arg_w = true;

            } else {
                System.out.println(usage);
                return;
            }
        }
        if ((arg_s && !arg_p) || (!arg_s && arg_p)) {
            // server name and server port are mutually required.
            System.out.println(usage);
            return;
        }

        MBServer mbs = null;
        try {
            //---------------------------------------------------------------------
            // Connect to HULFT-Message Server
            //---------------------------------------------------------------------
            if (server.equals("")) {
                // read server name & server port from <mbcenv.properties>.
                mbs = new MBServer();
            } else {
                // specify server name & server port.
                mbs = new MBServer(server, port);
            }
            mbs.connect();

            //---------------------------------------------------------------------
            // Open the queue
            //---------------------------------------------------------------------
            MBQueueRequester mbqrq = null;
            if (queue.equals("")) {
                // read queue name from <mbcenv.properties>.
                mbqrq = new MBQueueRequester();
            } else {
                // specify queue name.
                mbqrq = new MBQueueRequester(queue);
            }
            MBQueueSession mbqs = mbs.openQueue(mbqrq);

            //---------------------------------------------------------------------
            // Get the message from the queue
            //---------------------------------------------------------------------
            MBMessage msg = new MBMessage(mbs);
            MBStreamMessage stream = new MBStreamMessage();
            MBMessageGetRequester mbgetrq = new MBMessageGetRequester(stream);
            mbgetrq.setUserDefineId("WAIT");        // user define ID
            // Wait mode
            mbgetrq.setWaitMode(MBMessageRequester.WAITMODE_WAIT);
            // Timeout. (if timeout is not specified, use default value.)
            if (arg_w) {
                mbgetrq.setTimeout(timeout);
            }

            int GET_WAIT_TIMEOUT = 407;
            
            // Retry until message is available
            boolean isAvailable = false;
            MBMessageGetRequester result = null;
            do {
                try {
                    result = msg.get(mbqs, mbgetrq);
                    isAvailable = true;

                } catch (MBException e) {
                    // HULFT-Message Server error occured.
                    if (e.getDetailCode() == GET_WAIT_TIMEOUT) {
                        System.out.println("No message is available. Retry.");
                        continue;
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    break;
                }
            } while (!isAvailable);

            //---------------------------------------------------------------------
            // Print message body
            //---------------------------------------------------------------------
            if (isAvailable) {
                byte[] message = new byte[(int)result.getMessageSize()];
                stream.read(message);
                System.out.println(">> " + new String(message));
            }

            //---------------------------------------------------------------------
            // Close the queue
            //---------------------------------------------------------------------
            mbs.closeQueue(mbqs);

            System.out.println("Normal termination");

        } catch (MBException e) {
            System.out.println("HULFT-Message error occured.");
            System.out.println("Exception class : " + e.getClass());
            System.out.println("Error Code      : " + e.getErrorCode());
            System.out.println("Detail Code     : " + e.getDetailCode());
            System.out.println("System Code     : " + e.getSystemCode());
            System.out.println("Error Message   : " + e.getDetailMessage());
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("Exception class   : " + e.getClass());
            System.out.println("Exception message : " + e.getMessage());
            e.printStackTrace();
        } finally {
            //---------------------------------------------------------------------
            // Disconnect from HULFT-Message Server if already connected
            //---------------------------------------------------------------------
            if (mbs != null) {
                if (mbs.isSession()) {
                    try {
                        mbs.disconnect();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?