2017-11-21 9 views
0

문제 설명을 바인딩을위한 자바 프로그램에서 mqjbnd05 (java.library.path에서 찾을 수 없음) 오류. 큐 관리자와 대기열 및 주제를 정의했습니다. Java 7을 사용하고 있습니다. BINDING 모드에 대기열 관리자에 연결하는 독립형 Java 클라이언트를 개발했습니다. Java 응용 프로그램과 MQ는 동일한 서버에서 호스팅되므로 BINDING 연결에 필요한 사전 요구 사항이 있습니다. 내 응용 프로그램을 실행하려고 할 때에서 java.lang.UnsatisfiedLinkError : 나는 MQ 서버 및 MQ 클라이언트 모두 9.0 버전으로 설치 한</p> <p>: IBM MQ는 연결을

그러나 나는 오류가 점점 오전 :

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)..... 

가지고이 관련된 몇 가지 주제를 검색 있지만 명확한 해결책을 찾을 수 없습니다. 나는 아래에있는 내 자바 코드를 붙여 오전 : C : \ 프로그램 파일 \ IBM \ MQ \ 자바 \ 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 \ 자바 \의 lib64에 내가 올바른 MQ lib 디렉토리를 가리 키도록 내 CLASSPATH 변수를 설정

.

lib 디렉토리 위치를 서버와 클라이언트 모두로 변경하려고했지만 "mqjbnd05" 파일이 누락되어 예상되는 동일한 오류가 발생합니다. 주석 처리 된 섹션을 사용하여 코드의

같은 조각은 제가 모드을 구속력 에 연결 놓치게하고 다른 알려 호야 클라이언트 모드에 대한 벌금을 실행 중입니다. 추가

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; 

한 가지입니다 :

나는 다음과 ENV 변수를 사용하고 난 파일이를 mqjbnd.dll하지만 mqjbnd05

답변

3

mqjbnd05는 MQ에서 제거되지 MQ v7의 제품으로, 후속 릴리스에서 작동하는 인터페이스와 함께 일반 mqjbnd를 사용하는 것을 선호합니다. 그러나 Java 애플리케이션을 실행하고 MQ v6 또는 이전 jar 파일을 선택했지만 MQ 제품 설치 후 MQv6을 사용하면보고 한 오류가 발생합니다. MQv9 코드베이스에서 mqjbnd05에 대한 참조를 찾을 수 없습니다.

당신이 mqjbnd.dll과 MQServer + MQClient v9를 가지고 있다고 말한 적이 있다면, 이것을 달성하기 위해 생각할 수있는 유일한 방법은 classpath에서 pre-MQv7에서 jar를 가져 오는 것입니다. 응용 프로그램을 빌드하고 응용 프로그램에 MQ jars가 포함되어 있는지 확인하십시오.

응용 프로그램을 실행하는 방법에 따라 Java 시작에 -verbose 옵션을 추가하여 MQ jar의 출처를 확인할 수 있습니다.

+0

@Som이 JasonE의 말에 덧붙이 자면, 'CLASSPATH'는 MQ v9와 함께 설치 될 디렉토리가 아닌 다른 디렉토리를 가지고 있음을 나타내지 않습니다. com.ibm. *을 확인하십시오.응용 프로그램 jar 파일 또는 프로젝트에 포함 된 jar 파일 'META-INF/MANIFEST.MF' 파일을 검사하고'Implementation-Version'을 찾으면 jar 파일이있는 MQ 버전을 원할 것입니다. 이 이전 MQ jar 파일에 대한 참조를 응용 프로그램에서 제거하고'CLASSPATH'에 나열된 현재 jar 파일을 선택하도록해야합니다. – JoshMc

+0

@ JasonE : 안녕 Jason, 네, 맞습니다. 이전 버전의 com.ibm.mq.jar 및 com.ibm.mqjms.jar를 사용하고있었습니다. MQ v9.0 제품에서 나온 패키지로 대체했습니다. 그리고 내 코드가 성공적으로 실행 중입니다. 의견을 보내 주셔서 감사합니다. JoshMc : 네, 맞습니다. 감사. – Som

+0

@ JoshMc : 감사합니다. Josh, 맞습니다. – Som