连接到基本队列时得到2035

时间:2010-08-03 14:54:20

标签: security ibm-mq

我正在运行一个简单的Java客户端来连接到远程MQ队列。

  1. 当我运行Java代码来读取带有别名队列名称的写消息时,它可以正常工作。

  2. 当我尝试在同一队列上运行代码但具有物理队列名称时(因为我希望调用getQueueDepth),我在代码尝试建立连接时得到2035错误

  3. 队列中的权限是: browse + dsp + get + inq + put + set + setall

    java代码在

    下面

    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; 公共类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:完成代码2,原因2035     at com.ibm.mq.MQQueueManager.accessQueue(MQQueueManager.java:2858)     在org.ku.benchmarkos.MQSniffer.main(MQSniffer.java)

    感谢任何帮助!

    由于 Ĵ

3 个答案:

答案 0 :(得分:3)

WMQ检查遇到的第一个对象的权限。因此,如果您打开别名,则会在别名而非基本队列上检查权限。如果打开基本队列,则会在基本队列上检查权限,而不是在可能指向它的任何别名上检查权限。不期望打开别名的能力意味着能够打开基本队列。需要使用适当的权限对别名和基本队列运行setmqaut。

我在此处发布了更长的解释: Understanding WebSphere MQ authorization and the setmqaut command

答案 1 :(得分:2)

如果权限设置为别名,则只能通过别名访问队列。如果您在队列上设置了权限,则只有通过实际队列名称而不是别名才能访问队列,这同样有效。

答案 2 :(得分:1)

2035权限不足 - 您需要请求MQ管理员协助。