[英]java.lang.UnsatisfiedLinkError
我正在嘗試使用 JMS 訪問 MQ 隊列。 我得到以下
java.lang.UnsatisfiedLinkError: no mqjbnd05 in java.library.path
我路過
-Djava.library.path="C:\Program Files\IBM\WebSphere MQ\java\lib"
在 eclipse 中運行程序時作為 VM 參數。 這個問題在網上討論了很多,但沒有任何結論。 有沒有人解決這個問題? TIA。
因為我必須自己處理這個錯誤; 我花了很多時間才找到正確的答案,我想與下一個分享這個話題的人......
實際上,問題的解決方案非常簡單(至少在我的情況下)。 它與任何CLASSPATH
、 java.library.path
或安裝問題無關。
我只是忘了將MQConnectionFactory
切換到客戶端模式。
這必須完成,只需調用
cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);
或者
cf.setTransportType(WMQConstants.WMQ_CM_BINDINGS_THEN_CLIENT);
或任何其他符合您需求的連接類型。
默認情況下,ConnectionFactory 處於“綁定”模式( WMQ_CM_BINDINGS
),用於本地服務器安裝,如 IBM 文檔中所述:
要以綁定方式連接到隊列管理器,JMS 應用程序的 WebSphere MQ 類必須在運行隊列管理器的同一系統上運行。
使用 JNDI 或JmsFactoryFactory
時,此傳輸類型與XMSC_WMQ_CONNECTION_MODE
( WMQConstants.WMQ_CONNECTION_MODE
) 屬性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
您可能在 CLASSPATH、lib 或 EAR 中有一些較舊的 MQ jar 文件。
刪除它們,你應該沒事。
您不應將 MQ 文件放在 EAR 或 WEB-INF/lib 文件夾中。 它們應該在您的應用程序服務器的類路徑中。
我在使用 IBM MQ api 連接時遇到了這個問題。 我也沒有發現這個問題與類路徑有關。
當我在設置MQEnvironment
的hostname
和channel
之前實例化MQQueueManager
時,這發生在我身上。 只需確保您的代碼不這樣做,並在設置環境后實例化管理器。 就像是..
MQEnvironment.hostname = "mq hostname";
MQEnvironment.channel = "mq channel";
..more code..
this._queueManager = new MQQueueManager(qManager);
(觀察到在MQQueueManager
初始化之后設置MQEnvironment.port
是可以的,但是可能會把所有與MQEnvironment
相關的東西都一起初始化)
如果您實際安裝的是 MQ Client而不是 MQ Server,就會發生這種情況。
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/2003 10:59a 61,440 jdbcdb2.dll
- 03/17/2003 10:59a 61,440 jdbcora.dll
原因
這些文件丟失是因為在客戶端安裝中沒有提供也不需要它們。
解決問題
這些文件僅包含在 WebSphere MQ Server 產品中。
這是一個簡單的方法:告訴 Java VM 加載 DLL 。 您的代碼是否相似,例如您是否使用System.loadLibrary
加載mqjbnd05.dll
?
如果是 - 它是否在 eclipse 之外工作,比如從命令行啟動應用程序? 如果是這種情況,您可以嘗試使用該庫路徑啟動整個 Eclipse IDE。
有時我們會遇到包含空格的路徑名的問題。 將 dll 復制到C:\\
,將其放在 lib 路徑上,然后重試。
啊,就是這個問題,指定的dll丟失了。 這個博客有一個解決方案。 祝你好運!
在我的情況下,當我設置傳輸類型時,錯誤消失了。 我正在使用 MQConnectionFactory
mQQueueConnectionFactory.setTransportType( JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.