2017-11-21 8 views
0

問題の説明をバインドするためのJavaプログラムのエラー:ます。java.lang.UnsatisfiedLinkError:mqjbnd05(java.library.pathには見られない)IBM MQが接続

私は両方のバージョン9.0でMQサーバーとMQクライアントをインストールしています。キューマネージャとキューとトピックを定義しました。私はJava 7を使用しています。バインド・モードでキュー・マネージャーに接続するためのスタンドアロンJavaクライアントを開発しました。 JavaアプリケーションとMQは同じサーバー上でホストされているため、BINDING接続には必要な前提条件があります。しかし、私は自分のアプリケーションを実行しようとしていたとき、私はエラーを取得しています

Exception in thread "main" java.lang.UnsatisfiedLinkError: mqjbnd05 (Not found in java.library.path) 
at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:1279) 
at java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:1245) 
at java.lang.System.loadLibrary(System.java:540) 
at com.ibm.mq.MQSESSION.loadLib(MQSESSION.java:872)..... 

は持っているが、これに関連するいくつかのトピックを検索するが、任意の明確な解決策を見つけることができませんでした。私は以下の私のJavaコードを貼り付けています:します。C:\ Program Files \ IBM \ MQ \ Javaの\ libにも lib64に中

/** 
* 
*/ 
package com.binding; 

import javax.jms.JMSException; 
import javax.jms.Session;  
import com.ibm.jms.JMSMessage; 
import com.ibm.jms.JMSTextMessage; 
import com.ibm.mq.jms.JMSC; 
import com.ibm.mq.jms.MQQueue; 
import com.ibm.mq.jms.MQQueueConnection; 
import com.ibm.mq.jms.MQQueueConnectionFactory; 
import com.ibm.mq.jms.MQQueueReceiver; 
import com.ibm.mq.jms.MQQueueSender; 
import com.ibm.mq.jms.MQQueueSession; 

/** 
* @author Som 
* 
*/ 
public class MQBindingConnection { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
// TODO Auto-generated method stub 

try { 
     MQQueueConnectionFactory cf = new MQQueueConnectionFactory(); 

     // Config 
     //cf.setHostName("localhost"); 
     //cf.setPort(1414); 
     cf.setTransportType(JMSC.MQJMS_TP_BINDINGS_MQ); 
     cf.setQueueManager("QM.E001"); 
     //cf.setChannel("SYSTEM.DEF.SVRCONN"); 

     MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection("user","pass"); 
     MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE); 
     MQQueue queue = (MQQueue) session.createQueue("BINDING.CONN"); 
     MQQueueSender sender = (MQQueueSender) session.createSender(queue); 
     MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue);  

     long uniqueNumber = System.currentTimeMillis() % 1000; 
     JMSTextMessage message = (JMSTextMessage) session.createTextMessage("SimplePTP "+ uniqueNumber);  

     // Start the connection 
     connection.start(); 

     sender.send(message); 
     System.out.println("Sent message:\\n" + message); 

     JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000); 
     System.out.println("\\nReceived message:\\n" + receivedMessage); 

     sender.close(); 
     receiver.close(); 
     session.close(); 
     connection.close(); 

     System.out.println("\\nSUCCESS\\n"); 
    } 
    catch (JMSException jmsex) { 
     System.out.println(jmsex); 
     System.out.println("\\nFAILURE\\n"); 
    } 
    catch (Exception ex) { 
     System.out.println(ex); 
     System.out.println("\\nFAILURE\\n"); 
    } 

    } 

} 

私はディレクトリの場所にあるファイル "mqjbnd05" を見つけることができませんでしたパス私はチェックしたが、ファイルが見つからない。 C:\プログラムファイル\ IBM \ MQ \ Javaの\のlib64に

私は正しいMQ libディレクトリを指すように私のCLASSPATH変数が設定されています。

libディレクトリの場所をサーバーとクライアントの両方に変更しようとしましたが、ファイル"mqjbnd05"がどこにも存在しないため、同じエラーが発生することがあります。

コメントアウトセクションを使用してコードの同じ部分は、クライアントモードしなさいの罰金は私が私が結合様式に接続するために出て行方不明です他に何を知らせ実行されています。

私は、次のENV変数を使用しています:追加する

MQ_JAVA_LIB_PATH = C:\Program Files\IBM\MQ\java\lib64;C:\Program Files\IBM\MQ\java\lib  
MQ_FILE_PATH = C:\Program Files\IBM\MQ  
MQ_JAVA_DATA_PATH = C:\ProgramData\IBM\MQ 
MQ_JAVA_INSTALL_PATH = C:\Program Files\IBM\MQ\java  
MQ_JRE_PATH = C:\Program Files\IBM\MQ\java\jre  
LIB = C:\Program Files\IBM\MQ\tools\lib64;C:\IBM\SQLLIB\LIB;C:\Program Files\IBM\MQ\tools\lib  
CLASSPATH = C:\Program Files\IBM\MQ\java\lib\com.ibm.mqjms.jar;C:\Program Files\IBM\MQ\java\lib\com.ibm.mq.jar;C:\Program Files\IBM\MQ\java\lib;C:\Program Files\IBM\MQ\java\lib64; 

ことの一つは、次のとおりです。私は、ファイルにmqjbnd.dllを持っていなくmqjbnd05

答えて

3

mqjbnd05がMQから削除されましたMQ v7の製品ではなく、後続のリリースで機能する汎用mqjbndを使用することを推奨しています。ただし、Javaアプリケーションを実行してMQ v6またはそれ以前のjarファイルを取得しても、MQ製品のインストール後にMQv6をインストールすると、エラーが報告されます。 MQv9コードベースでmqjbnd05に参照できる参照はありません。

mqjbnd.dllとMQServer + MQClient v9のコメントでは、これを達成するために考えられる唯一の方法は、クラスパスからpre-MQv7からjarファイルを取り出すか、アプリケーションをビルドし、アプリケーション内にMQ jarsが含まれているかどうかを確認します。

アプリケーションの実行方法によっては、Javaの起動に-verboseオプションを追加して、MQ jarがどこから来ているかを調べることができます。

+0

JasonEが言ったことを追加するために、あなたの 'CLASSPATH'はMQ v9でインストールされるディレクトリ以外のディレクトリを持っていることを示していません。 com.ibm。*を確認してください。アプリケーションjarファイルまたはプロジェクトに含まれるjarファイル'META-INF/MANIFEST.MF'ファイルをチェックして' Implementation-Version'を探すと、これはjarファイルが入っているMQのバージョンを知ることを意味します。この古いMQ jarファイルへの参照をアプリケーションから削除し、 'CLASSPATH'にリストした現在のjarファイルを取得させるべきです。 – JoshMc

+0

@JasonE:こんにちはジェイソン、はい、あなたは正しいです。私はcom.ibm.mq.jarとcom.ibm.mqjms.jarの古いバージョンを使用していました。私はそれらをMQ v9.0製品から来たものに置き換えました。私のコードは正常に実行されています。あなたの提案に感謝します。 JoshMc:はい、あなたは正しいです。ありがとう。 – Som

+0

@ JoshMc:ありがとう。ジョシュ、そうだよ。 – Som

関連する問題