2017-07-18 11 views
2

Wir haben eine Anwendung, die im Staging voll funktionierte, aber wenn wir es auf Produktion bereitstellen, erhalten wir MQ-Fehler 2495. Wir führen die Anwendung in einem Tomcat 8.5 und wir verwenden das gleiche MQ-Bibliotheken (8.0.0.6). Das Server-Betriebssystem ist Windows.Verbindung mit MQ-Manager erhalten MQ-Fehler 2495

Der Code die Nachricht aus dem MQ zum Lesen wie folgt aussieht:

MQEnvironment.hostname = queueSettings.getServer(); 
     MQEnvironment.channel = queueSettings.getChannel(); 
     MQEnvironment.port = queueSettings.getPort(); 

     MQQueueManager queueManager = new MQQueueManager(queueSettings.getQueueManager()); 

     int openOptions = CMQC.MQCBDO_FAIL_IF_QUIESCING | CMQC.MQOO_INPUT_SHARED | CMQC.MQOO_BROWSE; 

     MQQueue queue = queueManager.accessQueue(queueSettings.getQueue(), openOptions); 

De voll Stacktrace des Fehlers wie folgt aussieht:

com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2495'. 
at com.ibm.mq.MQSESSION.(MQSESSION.java:2063) 
at com.ibm.mq.MQSESSION.getSession(MQSESSION.java:2103) 
at com.ibm.mq.MQManagedConnectionJ11.(MQManagedConnectionJ11.java:207) 
at com.ibm.mq.MQBindingsManagedConnectionFactoryJ11._createManagedConnection(MQBindingsManagedConnectionFactoryJ11.java:185) 
at com.ibm.mq.MQBindingsManagedConnectionFactoryJ11.createManagedConnection(MQBindingsManagedConnectionFactoryJ11.java:230) 
at com.ibm.mq.StoredManagedConnection.(StoredManagedConnection.java:96) 
at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:194) 
at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:758) 
at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:706) 
at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:670) 
at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:145) 
at com.ibm.mq.MQQueueManager.(MQQueueManager.java:675) 
at com.atlascopco.cpq.connections.MQConnection.readMessagesFromQueue(MQConnection.java:92) 
at com.atlascopco.cpq.tasks.ResponseHandlerTask.run(ResponseHandlerTask.java:43) 
at java.util.TimerThread.mainLoop(Unknown Source) 
at java.util.TimerThread.run(Unknown Source) 
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2495;AMQ8568: The native JNI library 'mqjbnd64' was not found. For a client installation this is expected. [3=mqjbnd64] 
at com.ibm.mq.jmqi.local.LocalMQ.loadLib(LocalMQ.java:1202) 
at com.ibm.mq.jmqi.local.LocalMQ$1.run(LocalMQ.java:272) 
at java.security.AccessController.doPrivileged(Native Method) 
at com.ibm.mq.jmqi.local.LocalMQ.initialise_inner(LocalMQ.java:260) 
at com.ibm.mq.jmqi.local.LocalMQ.initialise(LocalMQ.java:223) 
at com.ibm.mq.jmqi.local.LocalMQ.(LocalMQ.java:1255) 
at com.ibm.mq.jmqi.local.LocalServer.(LocalServer.java:219) 
at sun.reflect.GeneratedConstructorAccessor10933.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.ibm.mq.jmqi.JmqiEnvironment.getInstance(JmqiEnvironment.java:656) 
at com.ibm.mq.jmqi.JmqiEnvironment.getMQI(JmqiEnvironment.java:590) 
at com.ibm.mq.MQSESSION.(MQSESSION.java:2056) 
... 15 common frames omitted 
Caused by: java.lang.UnsatisfiedLinkError: no mqjbnd64 in java.library.path 
at java.lang.ClassLoader.loadLibrary(Unknown Source) 
at java.lang.Runtime.loadLibrary0(Unknown Source) 
at java.lang.System.loadLibrary(Unknown Source) 
at com.ibm.mq.jmqi.local.LocalMQ.loadLib(LocalMQ.java:1146) 
... 27 common frames omitted 

Wie kann ich das Problem finden?

+0

Bitte lesen Sie [Unter welchen Umständen kann ich „dringend“ oder andere ähnliche Ausdrücke auf meine Frage hinzufügen, um schneller Antworten zu erhalten?] (// meta.stackoverflow. com/q/326569) - die Zusammenfassung ist, dass dies keine ideale Möglichkeit ist, Freiwillige anzusprechen, und ist wahrscheinlich kontraproduktiv, um Antworten zu erhalten. Bitte unterlassen Sie das Hinzufügen zu Ihren Fragen. – halfer

+1

Das Problem liegt direkt vor Ihnen: 'UnatisfiedLinkError: nein mqjbnd64 in java.library.path'. Für Ihren Treiber ist eine native Bibliothek "mqjbnd64" erforderlich, die in der Produktionsumgebung fehlt. – Holger

Antwort

4

Das Problem ist in Ihrem Stack-Trace:

Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2495;AMQ8568: The native JNI library 'mqjbnd64' was not found. For a client installation this is expected. [3=mqjbnd64] 
Caused by: java.lang.UnsatisfiedLinkError: no mqjbnd64 in java.library.path 

Diese auf der IBM MQ Wissenszentrum Seite dokumentiert "Configuring the Java Native Interface (JNI) libraries"

Auf Fenstern der Standardpfad für die Bibliotheken sind unter:

MQ_INSTALLATION_PATH\java\lib (32-bit libraries) 
MQ_INSTALLATION_PATH\java\lib64 (64-bit libraries) 

Sie können den Speicherort dieser Bibliothek auf eine von zwei Arten angeben (die beiden folgenden Beispiele wären für eine 64-Bit-JRE, wenn MQ standardmäßig installiert ist Lage, wenn Sie ein 32-Bit-JRE ausführen verwenden, um das lib Verzeichnis anstelle das lib64-Verzeichnis):

  1. Mit einem JVM-Argumente, zum Beispiel:
    -Djava.library.path=C:\Program Files\IBM\MQ\java\lib64
  2. über ein OS-Umgebungsvariable. In Ihrem Fall unter Windows verwenden:
    set PATH=C:\Program Files\IBM\MQ\java\lib64;%PATH%
+0

Wir haben das aber ohne Glück versucht. Derselbe Fehler tritt bei der korrekten Konfiguration der JNI-Bibliothek auf. – JimmyD

+0

Wir haben die Betriebssystem-Umgebungsvariablenmethode ausprobiert. – JimmyD

+0

Ich füge manuell den Pfad zur Pfadvariablen in Windows hinzu. Das ist richtig und cmd kann direkt auf die DLL-Dateien zugreifen. – JimmyD

Verwandte Themen