你好,StackOverflow社区,
我目前正在使用Spring连接到队列。我希望能够在我们的Test我们的UAT环境中配置我可以连接的提供者。在UAT中,我们使用IBM 7;在测试中,我们使用ActiveMQ。
在这两种情况下,我们还使用SSL连接。
目前,我们有以下用于连接到WMQ 7的配置:
<bean id="jmsFactory" name="jmsFactory" class="com.ibm.mq.jms.MQConnectionFactory">
    <property name="queueManager" value="${UM_MQ_QM}" />
    <property name="hostName" value="${UM_MQ_HOST}" />
    <property name="channel" value="${UM_MQ_CHANNEL}" />
    <property name="port" value="${UM_MQ_PORT}" />
    <property name="transportType" value="1" />
    <property name="SSLCipherSuite" value="${SSL_CIPHER_SUITE}" />
</bean>使用JNDI,我能够连接到ActiveMQ。但是,当切换provider类时,它会给出以下异常。
Spring JNDI Config:
<bean id="jmsFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="QueueConnectionFactory" />
  <property name="jndiTemplate" ref="jndiTemplate" /> 
</bean>
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
  <property name="environment">
    <props>
      <prop key="java.naming.factory.initial">com.ibm.mq.jms.context.WMQInitialContextFactory</prop>
      <prop key="java.naming.provider.url">${UM_MQ_HOST}:${UM_MQ_PORT}/${UM_MQ_CHANNEL}</prop>
    </props>
  </property>
</bean>例外:
Caused by: javax.naming.NamingException: Caught an Exception trying to create the admin queue. Exception was: com.ibm.mq.pcf.PCFException: MQJE001: Completion Code '2', Reason '2035'. [Root exception is com.ibm.mq.pcf.PCFException: MQJE001: Completion Code '2', Reason '2035'.]
   at com.ibm.mq.jms.context.MQContext.<init>(MQContext.java:294)
   at com.ibm.mq.jms.context.WMQInitialContextFactory.getInitialContext(WMQInitialContextFactory.java:29)
   at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
   at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
   at javax.naming.InitialContext.init(InitialContext.java:223)
   at javax.naming.InitialContext.<init>(InitialContext.java:197)
   at org.springframework.jndi.JndiTemplate.createInitialContext(JndiTemplate.java:136)
   at org.springframework.jndi.JndiTemplate.getContext(JndiTemplate.java:103)
   at org.springframework.jndi.JndiTemplate.execute(JndiTemplate.java:85)
   at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:152)
   at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:178)
   at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
   at org.springframework.jndi.JndiObjectLocator.lookup(JndiObjectLocator.java:105)
   at org.springframework.jndi.JndiObjectFactoryBean.lookupWithFallback(JndiObjectFactoryBean.java:201)
   at org.springframework.jndi.JndiObjectFactoryBean.afterPropertiesSet(JndiObjectFactoryBean.java:187)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1545)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1483)
   ... 109 more
Caused by: com.ibm.mq.pcf.PCFException: MQJE001: Completion Code '2', Reason '2035'.
   at com.ibm.mq.pcf.PCFMessageAgent.send(PCFMessageAgent.java:241)
   at com.ibm.mq.jms.context.MQContext.<init>(MQContext.java:273)
   ... 125 more我怀疑这是两种原因之一:
有人能提供一些指导吗?如果你曾经面对过这个问题,那解决办法是什么呢?
我确信答案就在我眼前,只是我的眼睛里有一些迷雾:)
谢谢,
何塞
发布于 2013-12-28 03:38:54
您得到的MQ原因代码为2035,这意味着:问题(摘要)
您得到的是MQRC 2035,在您的WebSphere MQ应用程序或通道中没有授权。你需要了解是什么导致了这一失败。
2035 0x000007f3 MQRC_NOT_AUTHORIZED
当用户未被授权执行所尝试的功能时,会返回MQRC 2035 (MQRC_NOT_AUTHORIZED)。
当用户未被授权执行该功能时,将返回解决MQRC 2035 (MQRC_NOT_AUTHORIZED)问题。确定用户不能访问的对象,并提供对对象的用户访问权限。
调试技术:使用dspmqaut (显示权限命令)来确定用户是否拥有访问预期对象的授权。
但是,听其他人说JNDI,他们知道他们在说什么。
发布于 2013-12-16 23:33:03
您不想使用WMQInitialContextFactory。使用基于文件的JNDI或真正的JNDI注册表。
WMQInitialContextFactory来自IBM编写的SupportPac ME01,它只是用于开发的一个简单工具--永远不会用于生产。除了简单的开发之外,不建议使用SupportPac ME01。大多数IBM的人都说永远不要使用它。而且,IBM不支持WMQInitialContextFactory。
谁曾告诉过您使用WMQInitialContextFactory需要刷新自己的IBM最佳实践。
发布于 2013-12-17 08:31:41
我建议您考虑在这里使用LDAP支持的JNDI上下文进行全面部署。文件系统上下文来自Oracle,生产环境也不支持AFAIK。
移动到使用一个简单的文件系统上下文;与QM的正常连接是否适用于消息传递?是只有WMQ队列受到保护,还是正常连接到MQ?
https://stackoverflow.com/questions/20615721
复制相似问题