java.lang.UnsatisfiedLinkError - PullRequest
       4

java.lang.UnsatisfiedLinkError

14 голосов
/ 20 июля 2010

Я пытаюсь получить доступ к очередям MQ, используя JMS.я получаю следующее

java.lang.UnsatisfiedLinkError: no mqjbnd05 in java.library.path

я передаю

-Djava.library.path="C:\Program Files\IBM\WebSphere MQ\java\lib"

в качестве аргумента виртуальной машины при запуске программы в Eclipse.Эта проблема обсуждается довольно много в сети, но без каких-либо выводов.Кто-нибудь решил это?ТИА.

Ответы [ 5 ]

18 голосов
/ 10 мая 2012

Как я сам должен был разобраться с этой ошибкой;и мне потребовалось много времени, чтобы найти правильный ответ, я хотел бы поделиться им со следующим, кто придет по этой теме ...

На самом деле решение проблемы было очень простым (по крайней мере, в моем случае).Это не было связано с какими-либо CLASSPATH, java.library.path или проблемами установки.

Я просто забыл переключить MQConnectionFactory в режим клиента.

Это должно быть сделано,просто позвоните

cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);

или

cf.setTransportType(WMQConstants.WMQ_CM_BINDINGS_THEN_CLIENT);

или любому другому типу подключения, который соответствует вашим потребностям.
По умолчанию ConnectionFactory находится в режиме «Binding» (WMQ_CM_BINDINGS), который предназначен для установки на локальном сервере, как указано в документации IBM:

Для подключения к администратору очередей в режиме привязок , классы WebSphere MQ дляПриложение JMS должно выполняться в той же системе , в которой работает администратор очередей.

Этот тип транспорта совпадает со свойством XMSC_WMQ_CONNECTION_MODE (WMQConstants.WMQ_CONNECTION_MODE), когдаиспользуя JNDI или JmsFactoryFactory.

То же самое должно применяться к другим типам ConnectionFactory: MQQueueConnectionFactory, MQTopicConnectionFactory, MQXAConnectionFactory, MQXAQueueConnectionFactory и MQXATopicConnectionFactory

ПроверкаЦентр знаний IMB для получения дополнительной информации о различных параметрах подключения / привязки:

https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q031720_.htm https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q030560_.htm

5 голосов
/ 20 июля 2010

Возможно, у вас есть несколько старых JAR-файлов MQ либо в CLASSPATH, либо в lib, либо в EAR. Удалите их, и все будет в порядке.
Вы не должны помещать файлы MQ в свой EAR или в папки WEB-INF / lib. Они должны быть в пути к классу вашего сервера приложений.

3 голосов
/ 15 октября 2015

Я сталкивался с этим при подключении с использованием IBM MQ api. Я также не обнаружил, что эта проблема связана с classpath.

Это случилось со мной, когда я создал MQQueueManager перед установкой MQEnvironment hostname и channel. Просто убедитесь, что ваш код этого не делает и что он создает экземпляр менеджера после установки среды. Нечто подобное ..

MQEnvironment.hostname = "mq hostname";
MQEnvironment.channel = "mq channel";
..more code..
this._queueManager = new MQQueueManager(qManager);

(Замечено, что можно установить MQEnvironment.port после инициализации MQQueueManager, но, вероятно, можно инициализировать все, что связано с MQEnvironment вместе)

0 голосов
/ 20 июля 2010

Это может произойти, если вы на самом деле установили MQ Клиент вместо MQ Сервер .

IBM даже записала целоеСтраница справки об этом:

При установке клиента WebSphere MQ отсутствуют файлы mqjb * .dll

Задача (Аннотация)

Выустановите клиент WebSphere MQ и обратите внимание, что в каталоге \Program Files\IBM\WebSphere MQ\Java\lib\ отсутствуют три dll.

Симптом

Следующие dll появляются в каталоге при установке сервера, но не являются частью Java™ клиент:

  • 03/17/2003 10: 59a 19,456 mqjbdf02.dll
  • 03/17/2003 10: 59a 57,856 mqjbnd05.dll
  • 03 /17/2003 10: 59a 36,864 MQXAi02.dll

Подкаталог \ jdbc \ отображается на сервере, но не на клиентском компьютере.

  • 03/17/200310: 59a 61,440 jdbcdb2.dll
  • 03/17/2003 10: 59a 61,440 jdbcora.dll

Причина

Файлы отсутствуют, поскольку они не предоставленыи не требуется при установке клиента.

Решение проблемы

Файлы включены только в продукт WebSphere MQ Server.

0 голосов
/ 20 июля 2010

Вот простой рецепт: Скажите Java VM, чтобы загрузить DLL .Ваш код похож, например, вы используете System.loadLibrary для загрузки mqjbnd05.dll?

Если да - работает ли он за пределами затмения, например, запускает приложение из командной строки?Если это так, вы можете попробовать запустить всю IDE затмения с этим путем к библиотеке.

И иногда у нас возникают проблемы с путями, которые содержат пробелы.Скопируйте dll в C:\, поместите его в путь lib и попробуйте снова.


Ах, в этом проблема, указанная dll отсутствует. В этом блоге есть решение .Удачи!

...