получить 2035 при подключении к базовой очереди

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

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

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

Права доступа к очереди: просмотреть +dsp +get +inq +put +set +setall

Java-код, как показано ниже

импортировать com.ibm.mq.MQC; импортировать com.ibm.mq.MQEnvironment; импортировать com.ibm.mq.MQException; импортировать com.ibm.mq.MQGetMessageOptions; импортировать com.ibm.mq.MQMessage; импортировать com.ibm.mq.MQPutMessageOptions; импортировать com.ibm.mq.MQQueue; импортировать 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


person joesatch    schedule 03.08.2010    source источник


Ответы (3)


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

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

person T.Rob    schedule 04.08.2010
comment
Да, это была проблема с очередями, у очередей basde не было правильных разрешений. Спасибо за ответ. - person joesatch; 04.08.2010

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

person Aliou    schedule 12.12.2012

2035 недостаточно прав — вам нужно обратиться за помощью к администратору MQ.

person StuartLC    schedule 03.08.2010
comment
Спасибо за ответ. Да 2035 недостаточно разрешения. Но чего я не могу понять, так это: 1. Я могу читать/записывать очереди, когда использую псевдоним вместо базового/физического имени очереди. 2. Разрешения уже установлены для просмотра +dsp +get +inq +put +set +setall. Я в недоумении, какое еще разрешение должно быть. - person joesatch; 03.08.2010