получить 2035 при подключении к базовой очереди - PullRequest
4 голосов
/ 03 августа 2010

Я использую простой Java-клиент для подключения к удаленной очереди MQ.

  1. Когда я запускаю код Java для чтения и записи сообщений с именем очереди Alias, он работает нормально.

  2. Когда я пытаюсь запустить код в той же очереди, но с физическим именем очереди (потому что я хочу вызвать getQueueDepth), я получаю ошибку 2035 в тот момент, когда код пытается установить соединение

Полномочия в очереди: 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 в com.ibm.mq.MQQueueManager.accessQueue (MQQueueManager.java:2858) в org.ku.benchmarkos.MQSniffer.main (MQSniffer.java)

Любая помощь приветствуется!

Спасибо J

Ответы [ 3 ]

3 голосов
/ 04 августа 2010

WMQ проверяет разрешения для первого обнаруженного объекта. Поэтому, если вы открываете псевдоним, разрешения проверяются для псевдонима, а не для базовой очереди. Если вы открываете базовую очередь, разрешения проверяются в базовой очереди, а не в псевдонимах, которые могут на нее указывать. Не ожидается, что возможность открывать псевдоним подразумевает возможность открывать базовую очередь. Необходимо запустить setmqaut для псевдонима и базовой очереди с соответствующими разрешениями.

У меня есть более подробное объяснение: Понимание авторизации WebSphere MQ и команды setmqaut .

2 голосов
/ 12 декабря 2012

Если для псевдонима установлены разрешения, вы сможете получить доступ к очереди только через псевдоним.То же самое верно, если у вас установлены разрешения для очереди, вы сможете получить доступ к очереди только через реальное имя очереди, а не через псевдоним.

1 голос
/ 03 августа 2010

2035 недостаточно прав - вам нужно будет попросить вашего администратора MQ помочь.

...