Get 2035 when connected to the base queue

I am running a simple Java client to connect to a remote MQ queue.

  • When I run Java code to read write messages with the alias queue name, it works fine.

  • When I try to run the code in the same queue but with the name of the physical queue (because I want to call getQueueDepth), I get error 2035 at the point when the code tries to establish a connection

Permissions on the queue: browse + dsp + get + inq + put + set + setall

Java code has a value of <

import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.MQException; import com.ibm.mq.MQGetMessageOptions; import com.ibm.mq.MQMessage; import com.ibm.mq.MQPutMessageOptions; import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; public class MQSniffer {

/** * @param args */ /** * @param args */ public static void main(String[] args) { String hostname = "XXXX"; String channel = "CHANNEL"; String qManager = "qmgr"; MQQueueManager qMgr; MQEnvironment.hostname = hostname; MQEnvironment.channel = channel; MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY,MQC.TRANSPORT_MQSERIES); try { qMgr = new MQQueueManager(qManager); int openOptions = MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE | MQC.MQOO_OUTPUT ; MQQueue system_default_local_queue = qMgr.accessQueue("PHYSICAL_QUEUE_NAME", // *****Get an exception on this call***** openOptions, null, null, null); System.out.println("****Current Depth is "+ system_default_local_queue.getCurrentDepth()); MQMessage hello_world = new MQMessage(); hello_world.writeUTF("Hello World!"); MQPutMessageOptions pmo = new MQPutMessageOptions(); system_default_local_queue.put(hello_world,pmo); System.out.println("Put the message"); system_default_local_queue.close(); // Disconnect from the queue manager qMgr.disconnect(); } catch (MQException ex) { System.out.println("An MQSeries error occurred : Completion code " + ex.completionCode + " Reason code " + ex.reasonCode); ex.printStackTrace(); } catch (java.io.IOException ex) { System.out.println("An error occurred whilst writing to the message buffer: " + ex); } } 

}


om.ibm.mq.MQException: MQJE001: Termination Code 2, reason 2035 at com.ibm.mq.MQQueueManager.accessQueue (MQQueueManager.java:2858) at org.ku.benchmarkos.MQSniffer.main (MQSniffer.java)

Any help is appreciated!

Thanks J

+4
source share
3 answers

WMQ checks access rights to the first object detected. Therefore, if you open an alias, permissions are checked on the alias, and not on the underlying queue. If you open the base queue, permissions are checked in the base queue, and not on any aliases that may point to it. There is no expectation that the possibility of opening an alias implies the possibility of opening a basic queue. You need to run setmqaut for both aliases and the base queue with the appropriate permissions.

I have a longer explanation posted here: Understanding WebSphere MQ authorization and setmqaut command .

+3
source

If permissions are set to an alias, you can only access the queue through an alias. The same is true if you have permissions set in the queue, you can only access the queue through the name of the real queue, and not through an alias.

+2
source

2035 - not enough permissions - you need to ask the MQ administrator for help.

+1
source

All Articles