Доступ к MQ с помощью JMS
Я использую MQ7 и пытаюсь получить доступ к очереди с api JMS. Получение этой ошибки. Кто-нибудь видел его раньше? Как мне решить эту проблему? ТИА!--1-->
исключение в потоке "main" com.компания IBM.глутамат натрия.клиент.jms.DetailedJMSException: Jmsfmq6312: исключение произошло в Java (tm) MQI. Java (tm) MQI выдал исключение, описывающее проблему. Дополнительные сведения см. В разделе связанное исключение.
вызвана: ком.корпорация IBM.соток.jmqi.JmqiException: CC=2; RC=2495; AMQ8568: не найдена собственная библиотека JNI "mqjbnd". [3=mqjbnd]
вызвано: java.ленг.UnsatisfiedLinkError: нет mqjbnd в java.библиотека.путь
6 ответов
Это почти всегда вызвано сочетанием неполной установки клиента и / или проблемы пути к классам. Многие люди захватывают файлы jar, а не выполняют полную установку и не обязательно получают все из них. В дополнение к страхованию всех необходимых двоичных файлов, использование установочного носителя предоставляет несколько дополнительных возможностей, таких как диагностика и трассировка. Оно также убеждает что обслуживание можно приложить. Установочный носитель клиента WMQ доступен для бесплатной загрузки as SupportPac MQC7. Параметр CLASSPATH должен быть таким, как описано в WebSphere MQ с помощью Java руководство.
Если установка клиента выполняется с носителя IBM и среда настроена в соответствии с документами, это устраняет почти все случаи, о которых вы сообщили здесь. Есть несколько тестовых приложений для проверки установки (некоторые из этих диагностик установлены с полным носителем, о котором я упоминал) которые описаны здесь и что может помочь определите, является ли проблема с установкой или с кодом.
вероятно, немного поздно, но у меня была та же проблема, и я обнаружил, что этого можно избежать, если вы используете другой режим подключения при подключении к удаленной очереди. По умолчанию 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)));
}
согласен с Johnam, это произошло потому, что ConnectionFactory установлен как сервер по умолчанию, он должен быть установлен как клиент, вы сказали, что он работает на той же машине. Поскольку я также встретил ту же ситуацию, он запускается на одной машине, в этом случае, потому что ваша машина является сервером WMQ, так что программа, но когда вы работаете на другой машине, ваша программа должна быть установлена как клиент.
я исправляю это, используя set some параметр на 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>
параметр VM -Djava.library.path=/opt/mqm/java/lib64
работает для меня. Моя среда 64bit Suse с установленным MQ, и моя программа использует тип транспорта "привязки"
проблема заключается в переменной Path в свойствах системы. Попробуйте запустить код, указав путь MQInstallation Dir :\Lib64 перед путем MQInstallation Dir: \Lib
добавьте ниже к аргументам tomcat:
-Djava.library.path="C:\Program Files (x86)\IBM\WebSphere MQ\java\lib64"
Если каталог установки отличается от приведенного выше, используйте соответствующее расположение.