Security 连接到基本队列时获取2035
我正在运行一个简单的Java客户端来连接到远程MQ队列Security 连接到基本队列时获取2035,security,ibm-mq,Security,Ibm Mq,我正在运行一个简单的Java客户端来连接到远程MQ队列 当我运行Java代码来读写别名为queue name的消息时,它工作得很好 当我尝试在同一个队列上运行代码,但使用一个物理队列名称(因为我希望调用getQueueDepth)时,在代码尝试建立连接时会出现2035错误 队列上的权限是: 浏览+dsp+get+inq+put+set+setall java代码如下所示 导入com.ibm.mq.MQC; 导入com.ibm.mq.MQEnvironment; 导入com.ibm.mq.MQEx
/**
* @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) 感谢您的帮助 谢谢
J2035权限不足-您需要请求MQ管理员协助。WMQ检查遇到的第一个对象的权限。因此,如果打开别名,将检查别名而不是基本队列上的权限。如果打开基本队列,将在基本队列上检查权限,而不是在可能指向该队列的任何别名上检查权限。打开别名的能力并不意味着打开基本队列的能力。需要对别名和具有适当权限的基本队列运行setmqaut
我在这里发布了一个较长的解释:。如果将权限设置为别名,则只能通过别名访问队列。如果您对队列设置了权限,则同样有效。您只能通过真实队列名称而不是别名访问队列。谢谢您的回复。是2035是不足够的权限。但我不能理解的是:1。当我使用别名而不是基本/物理队列名称时,我可以读取/注销队列。2.权限已设置为“浏览+dsp+get+inq+put+set+setall”。我不知道应该有什么其他权限。是的,这就是队列的问题,basde队列没有正确的权限。谢谢你的回复。