Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I was try to send message to the MQ Server using the MQ Client

The error is:- A WebSphere MQ Error occurred : Completion Code 2 Reason Code 2058.I know this reason code because of the wrong Queue Manager Name..But the Queue Manager Name is correct...

After installed the WebSphere MQ Client I just run the command: SET MQSERVER=QM_ORANGE/TCP/IPADDRESS(PORT NUMBER)

and run this program public class MQSample {

  // code identifier
  static final String sccsid = "@(#) MQMBID sn=p750-002-131001_DE su=_FswqMCqGEeOZ3ui-rZDONA pn=MQJavaSamples/wmqjava/MQSample.java";
  // define the name of the QueueManager
  private static final String qManager = "QM_ORANGE";
  // and define the name of the Queue
  private static final String qName = "Q1";
   * Main entry point
   * @param args - command line arguments (ignored)
  public static void main(String args[]) {
    try {
      // Create a connection to the QueueManager
      System.out.println("Connecting to queue manager: " + qManager);
      MQQueueManager qMgr = new MQQueueManager(qManager);
      // Set up the options on the queue we wish to open
      //int openOptions = MQConstants.MQOO_INPUT_AS_Q_DEF | MQConstants.MQOO_OUTPUT;
      int openOptions = MQConstants.MQOO_OUTPUT;
     // int openOptions1 = MQConstants.MQOO_INPUT_AS_Q_DEF;
      // Now specify the queue that we wish to open and the open options
      System.out.println("Accessing queue: " + qName);
      MQQueue queue = qMgr.accessQueue(qName, openOptions);
      //MQQueue queue1 = qMgr.accessQueue(qName, openOptions1);
      // Define a simple WebSphere MQ Message ...
      MQMessage msg = new MQMessage();
      // ... and write some text in UTF8 format
      msg.writeUTF("Hello, World!");
      // Specify the default put message options
      MQPutMessageOptions pmo = new MQPutMessageOptions();
      // Put the message to the queue
      System.out.println("Sending a message...");
      queue.put(msg, pmo);
         openOptions = MQC.MQOO_INQUIRE + MQC.MQOO_FAIL_IF_QUIESCING
                + MQC.MQOO_INPUT_SHARED;
         queue = qMgr.accessQueue("QM_APPLE", openOptions,
                null, // default q manager
                null, // no dynamic q name
                null); // no alternate user id
        System.out.println("MQRead v1.0 connected.\n");
        int depth = queue.getCurrentDepth();
        System.out.println("Current depth: " + depth + "\n");
        if (depth == 0) {
            return;
        MQGetMessageOptions getOptions = new MQGetMessageOptions();
        getOptions.options = MQC.MQGMO_NO_WAIT + MQC.MQGMO_FAIL_IF_QUIESCING
                + MQC.MQGMO_CONVERT;
        while (true) {
            MQMessage message = new MQMessage();
            try {
                queue.get(message, getOptions);
                byte[] b = new byte[message.getMessageLength()];
                message.readFully(b);
                System.out.println(new String(b));
                message.clearMessage();
            } catch (IOException e) {
                System.out.println("IOException during GET: " + e.getMessage());
                break;
            } catch (MQException e) {
                if (e.completionCode == 2
                        && e.reasonCode == MQException.MQRC_NO_MSG_AVAILABLE) {
                    if (depth > 0) {
                        System.out.println("All messages read.");
                } else {
                    System.out.println("GET Exception: " + e);
                break;
        queue.close();
        //_queueManager.disconnect();
      // Disconnect from the QueueManager
      System.out.println("Disconnecting from the Queue Manager");
      qMgr.disconnect();
      System.out.println("Done!");
    catch (MQException ex) {
      System.out.println("A WebSphere MQ Error occured : Completion Code " + ex.completionCode
          + " Reason Code " + ex.reasonCode);
      ex.printStackTrace();
      for (Throwable t = ex.getCause(); t != null; t = t.getCause()) {
        System.out.println("... Caused by ");
        t.printStackTrace();
    catch (java.io.IOException ex) {
      System.out.println("An IOException occured whilst writing to the message buffer: " + ex);
    return;

You have set the MQSERVER environment variable. MQ C Client understands this environment variable and accordingly connects to queue manager running on the machine specified in IP address. MQ Java does not behave in the same way.

In your application you have specified just the queue manager name in MQQueueManager constructor. This mean application wants to connect to queue manager running on the same machine via server bindings connection.

You could do as below to connect to queue manager: (change the host, port, channel and queue manager name). Note the sample is written with MQ v8 Java client.

          Hashtable properties = new Hashtable<String, Object>();
          properties.put(MQConstants.HOST_NAME_PROPERTY, "qm.mycomp.com");
          properties.put(MQConstants.PORT_PROPERTY, 1414); 
          properties.put(MQConstants.CHANNEL_PROPERTY, "APP.SVRCONN"); 
          properties.put(MQConstants.USE_MQCSP_AUTHENTICATION_PROPERTY,"true");
          properties.put(MQConstants.USER_ID_PROPERTY, "myuserid");
          properties.put(MQConstants.PASSWORD_PROPERTY, "passw0rd");
           * Connect to a queue manager 
          MQQueueManager queueManager = new MQQueueManager("QM", properties);

Update

So you don't want to hard code connection parameters in your program? You can use the MQSERVER environment variable it self, get it, parse it and the connection parameters. You can also use a configuration file or a LDAP server to pull the connection information.

Update II

You have not read the MQ documentation at all. MQ Client is a set of libraries/jars/.net assemblies etc which expose APIs in different languages. You develop application using these APIs to communicate with queue manager. That is what you have done in your program above. Without these libraries you can't connect to a queue manager (many people think queue manager as server). When your application runs on the same machine as the queue manager, it is possible to communicate with queue manager over shared memory. But when running on different machine the communication is over TCP/IP (or SNA).

Hope this clears the confusion.

Yes sir..this will work when the Queue Manager running in the same machine...But actually my requirement is to connect a queue manager which is running in the server via client without specifying the IP address in the code Is it possible to set the IP address of the server using any command?? – ANEESH T.G Oct 11, 2016 at 4:31 No without using the Environment variable...as i mentioned in my program only pass the Queue Manager name....I have a mqclient.ini file which contains TCP: Library1=DLLName1 KeepAlive=Yes ClntSndBuffSize=32768 ClntRcvBuffSize=32768 Connect_Timeout=0 CHANNELS: DefRecon=YES ServerConnectionParms=QM_ORANGE.QM_APPLE1/TCP/192.168.1.5(1414) – ANEESH T.G Oct 11, 2016 at 5:23 Without the host name/IP address, port and channel, application can't connect to a queue manager running on a different machine. – Shashi Oct 11, 2016 at 5:27 @shashi- Ok sir. Then whats the use of MQ Client?? I already connected to the server via port and IP address before, without using the client... – ANEESH T.G Oct 11, 2016 at 6:44

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.