2013-12-16 2 views
0

Сообщество Hi StackOverflow,Невозможно подключиться к Websphere MQ с использованием JNDI

В настоящее время я использую Spring для подключения к очереди. Я хотел бы иметь возможность настроить, с каким провайдером я могу подключиться в нашем тесте VS наших UAT-средах. В UAT мы используем IBM WMQ 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. Но при переключении класса провайдера это дает мне следующее исключение.

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 

Я подозреваю, что это связано либо 2 вещи:

  1. У нас нет явных разрешений, установленных на Очередь JMS Admin, указанная выше
  2. Настройка шифрования не работает в Конфигурация пружины

Может ли кто-нибудь дать некоторые рекомендации? Если вы столкнулись с этой проблемой раньше, каково было решение?

Я уверен, что ответ смотрит на меня прямо в лицо, просто какой-то туман в моих глазах :)

Спасибо,

Jose

+0

Я считаю, что вы уже посмотрели на это http://stackoverflow.com/questions/12889953/unable-to-connect-to-queue-manager-in-websphere-mq-7-1 – Ashish

ответ

0

Вы не хотите использовать WMQInitialContextFactory. Используйте JNDI на базе файлов или реальный реестр JNDI.

WMQInitialContextFactory от SupportPac ME01, написанный сотрудником IBM как простой инструмент для разработки - никогда, никогда для производства. SupportPac ME01 НЕ рекомендуется для использования за пределами простой разработки. Большинство IBM MQ говорят, что никогда не используют его. Кроме того, WMQInitialContextFactory не поддерживается IBM.

Кто вам сказал, чтобы использовать WMQInitialContextFactory, необходимо обновить себя в лучших практиках IBM MQ.

+0

Спасибо за разъяснение. У вас есть ссылка IBM или какая-то документация, которая отговаривает использование WMQInitialContextFactory? Это только для моего понимания. –

+1

Этот ans говорит, что не используйте его, но не говорил о том, что использовать. Пожалуйста, не давайте неполных ответов – shaILU

0

Я бы посоветовал вам изучить использование JNDI-контекста, поддерживаемого LDAP, для полномасштабного развертывания. Контекст файловой системы - от Oracle, а AFAIK также не поддерживается в производственных средах.

Перейти к использованию простого контекста файловой системы; нормальная связь с работой QM для обмена сообщениями? Это просто очередь WMQ Admin, которая защищена или нормально подключена к MQ?

+0

Я понятия не имею, о чем вы говорите. Рекомендации IBM MQ Best Practices - использовать (1) JNDI на базе файлов или (2) LDAP JNDI. Что касается безопасности MQ, то OAM диспетчера очереди обрабатывает авторизацию для объектов MQ по UserID/Groups. Для получения дополнительной информации см. команды setmqaut/dspmqaut. – Roger

1

Вы получаете в MQ код причины 2035, что означает: Problem (Abstract)

Вы получаете MQRC 2035, не авторизованы в приложении WebSphere MQ или канала. Вам нужно понять, что вызывает этот провал.

2035 0x000007f3 MQRC_NOT_AUTHORIZED

Причина MQRC 2035 (MQRC_NOT_AUTHORIZED) возвращается, когда пользователь не авторизован для выполнения функции, которая попытки.

Решение проблемы MQRC 2035 (MQRC_NOT_AUTHORIZED) возвращается, когда пользователь не имеет права выполнять эту функцию. Определите, к какому объекту пользователь не может получить доступ и предоставить пользователю доступ к объекту.

Методы отладки: Используйте команду dspmqaut (display authority), чтобы определить, имеет ли пользователь право доступа к предполагаемому объекту.

Но послушайте других ребят, касающихся JNDI, они знают, о чем они говорят.

Смежные вопросы