簡體   English   中英

java.lang.UnsatisfiedLinkError

[英]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。

因為我必須自己處理這個錯誤; 我花了很多時間才找到正確的答案,我想與下一個分享這個話題的人......

實際上,問題的解決方案非常簡單(至少在我的情況下)。 它與任何CLASSPATHjava.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: MQQueueConnectionFactoryMQTopicConnectionFactoryMQXAConnectionFactoryMQXAQueueConnectionFactoryMQXATopicConnectionFactory

查看 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 連接時遇到了這個問題。 我也沒有發現這個問題與類路徑有關。

當我在設置MQEnvironmenthostnamechannel之前實例化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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM