Доступ к MQ с помощью JMS - PullRequest
       86

Доступ к MQ с помощью JMS

9 голосов
/ 09 сентября 2010

Я использую MQ7 и пытаюсь получить доступ к очереди с помощью API JMS. Получаю эту ошибку. Кто-нибудь видел это раньше? Как мне решить это? ТИА

Исключение в потоке "main" com.ibm.msg.client.jms.DetailedJMSException: JMSFMQ6312: Возникла исключительная ситуация в Java (tm) MQI. Java (tm) MQI выдал исключение, описывающее проблему. См. Связанное исключение для получения дополнительной информации.

Причина: com.ibm.mq.jmqi.JmqiException: CC = 2; RC = 2495; AMQ8568: Собственная библиотека JNI 'mqjbnd' не найдена. [3 = mqjbnd]

Причина: java.lang.UnsatisfiedLinkError: нет mqjbnd в java.library.path

Ответы [ 6 ]

6 голосов
/ 07 января 2015

Возможно, немного поздно, но у меня возникла та же проблема, и я обнаружил, что этого можно избежать, если вы используете другой режим подключения при подключении к удаленной очереди.По умолчанию MQConnectionFactory использует WMQ_CM_BINDINGS в качестве режима подключения.Если вы измените его на WMQ_CM_CLIENT (или какой бы режим подключения вам не понравился, не требующий нативных библиотек), все будет в порядке.

@Test
public void testMQConnectionMode() throws JMSException {
    MQConnectionFactory cf = new MQConnectionFactory();
    assertThat(cf.getIntProperty(CommonConstants.WMQ_CONNECTION_MODE), is(equalTo(CommonConstants.WMQ_CM_BINDINGS)));
    cf.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_CLIENT);
    assertThat(cf.getIntProperty(CommonConstants.WMQ_CONNECTION_MODE), is(equalTo(CommonConstants.WMQ_CM_CLIENT)));
}
4 голосов
/ 09 сентября 2010

Это почти всегда вызвано сочетанием неполной установки клиента и / или проблемы CLASSPATH.Многие люди берут файлы JAR, а не выполняют полную установку, и не обязательно получают их все.Помимо обеспечения наличия всех необходимых двоичных файлов, использование установочного носителя обеспечивает несколько дополнительных возможностей, таких как диагностика и трассировка.Это также гарантирует, что обслуживание может быть применено.Установочный носитель клиента WMQ доступен для бесплатной загрузки как SupportPac MQC7 .Параметр CLASSPATH должен быть таким, как описано в руководстве WebSphere MQ Using Java .

Если установка клиента выполняется с носителя IBM и среда настроена в соответствии с документами, это исправляетпочти все случаи, такие как вы сообщили здесь.Существует несколько приложений Install Verification Test (некоторые из этих диагностических программ установлены с полным носителем, который я упомянул) , которые описаны здесь и которые могут помочь определить, связана ли проблема с установкой или с кодом.

3 голосов
/ 03 февраля 2015

Согласитесь с Johnam, это произошло потому, что ConnectionFactory по умолчанию настроен как сервер, его нужно настроить как клиент, вы сказали, что он работает на той же машине.Поскольку я также сталкивался с такой же ситуацией, он запускается на той же машине, в этом случае, поскольку ваша машина работает как сервер WMQ, так и программа, но когда вы работаете на другой машине, ваша программа должна быть установлена ​​как клиент.* Я исправляю это, используя набор параметров для ConnectionFactory:

<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory">
....
<property name="transportType" value="1" />
<property name="clientReconnectTimeout" value="2" /> 
<property name="clientReconnectOptions" value="0" />
</bean>
1 голос
/ 27 мая 2014

У меня параметр VM -Djava.library.path=/opt/mqm/java/lib64 работает.Моя среда 64-битная Suse с установленным MQ, и моя программа использует транспортный тип 'Bindings'

0 голосов
/ 18 сентября 2015

Добавьте ниже к вашим аргументам tomcat:

-Djava.library.path="C:\Program Files (x86)\IBM\WebSphere MQ\java\lib64"

Если каталог установки отличается от указанного выше, используйте соответствующее местоположение.

0 голосов
/ 29 июня 2015

Проблема связана с переменной Path в системных свойствах.Попробуйте запустить код, указав MQInstallation Dir: \ Lib64 path перед MQInstallation Dir: \ Lib

...