IBM MQ客户端java.lang.UnsatisfiedLink错误:java.library.path异常中没有mqjbnd05

IBM MQ客户端java.lang.UnsatisfiedLink错误:java.library.path异常中没有mqjbnd05,java,ibm-mq,Java,Ibm Mq,我正试图用Java程序连接到IBMWebSphere客户机 代码如下:= import com.ibm.mq.MQException; import com.ibm.mq.MQGetMessageOptions; import com.ibm.mq.MQMessage; import com.ibm.mq.MQPutMessageOptions; import com.ibm.mq.MQQueue; import com.ibm.mq.MQQueueManager; /** * Simpl

我正试图用Java程序连接到IBMWebSphere客户机 代码如下:=

import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;


/**
 * Simple example program
 */
public class MQSample {

  // code identifier
  static final String sccsid = "@(#) MQMBID sn=p750-002-131001_DE su=_FswqMCqGEeOZ3ui-rZDONA pn=MQJavaSamples/wmqjava/MQSample.java";

  // define the name of the QueueManager
  private static final String qManager = "QM_ORANGE";
  // and define the name of the Queue
  private static final String qName = "SYSTEM.DEFAULT.LOCAL.QUEUE";
 // private static final String qName = "QM_APPLE";


  public static void main(String args[]) {
    try {

      System.out.println("Connecting to queue manager: " + qManager);
      MQQueueManager qMgr = new MQQueueManager(qManager);
      int openOptions =1| 16;
      System.out.println("Accessing queue: " + qName);
      MQQueue queue = qMgr.accessQueue(qName, openOptions);

      MQMessage msg = new MQMessage();
      msg.writeUTF("Hello, World!");
      MQPutMessageOptions pmo = new MQPutMessageOptions();
      System.out.println("Sending a message...");
      queue.put(msg, pmo);

      // Now get the message back again. First define a WebSphere MQ
      // message
      // to receive the data
    //  MQMessage rcvMessage = new MQMessage();

      // Specify default get message options
    //  MQGetMessageOptions gmo = new MQGetMessageOptions();

      // Get the message off the queue.
     // System.out.println("...and getting the message back again");
     // queue.get(rcvMessage, gmo);

      // And display the message text...
      //String msgText = rcvMessage.readUTF();
     // System.out.println("The message is: " + msgText);

      // Close the queue
      System.out.println("Closing the queue");
      queue.close();

      // Disconnect from the QueueManager
      System.out.println("Disconnecting from the Queue Manager");
      qMgr.disconnect();
      System.out.println("Done!");
    }
    catch (MQException ex) {
      System.out.println("A WebSphere MQ Error occured : Completion Code " + ex.completionCode
          + " Reason Code " + ex.reasonCode);
      ex.printStackTrace();
      for (Throwable t = ex.getCause(); t != null; t = t.getCause()) {
        System.out.println("... Caused by ");
        t.printStackTrace();
      }

    }
    catch (java.io.IOException ex) {
      System.out.println("An IOException occured whilst writing to the message buffer: " + ex);
    }
    return;
  }
}
但现在我得到以下错误

Exception in thread "main" java.lang.UnsatisfiedLinkError: no mqjbnd05 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.MQSESSION.loadLib(MQSESSION.java:872)
    at com.ibm.mq.server.MQSESSION$1.run(MQSESSION.java:228)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.ibm.mq.server.MQSESSION.<clinit>(MQSESSION.java:222)
    at com.ibm.mq.MQSESSIONServer.getMQSESSION(MQSESSIONServer.java:70)
    at com.ibm.mq.MQSESSION.getSession(MQSESSION.java:492)
    at com.ibm.mq.MQManagedConnectionJ11.<init>(MQManagedConnectionJ11.java:168)
    at com.ibm.mq.MQBindingsManagedConnectionFactoryJ11._createManagedConnection(MQBindingsManagedConnectionFactoryJ11.java:179)
    at com.ibm.mq.MQBindingsManagedConnectionFactoryJ11.createManagedConnection(MQBindingsManagedConnectionFactoryJ11.java:215)
    at com.ibm.mq.StoredManagedConnection.<init>(StoredManagedConnection.java:84)
    at com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:168)
    at com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:772)
    at com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:697)
    at com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:657)
    at com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:153)
    at com.ibm.mq.MQQueueManager.<init>(MQQueueManager.java:451)
    at MQSample.main(MQSample.java:30)
线程“main”java.lang.UnsatisfiedLinkError中出现异常:java.library.path中没有mqjbnd05 位于java.lang.ClassLoader.loadLibrary(未知源) 位于java.lang.Runtime.loadLibrary0(未知源) 位于java.lang.System.loadLibrary(未知源) 位于com.ibm.mq.MQSESSION.loadLib(MQSESSION.java:872) 位于com.ibm.mq.server.MQSESSION$1.run(MQSESSION.java:228) 位于java.security.AccessController.doPrivileged(本机方法) 位于com.ibm.mq.server.MQSESSION。(MQSESSION.java:222) 位于com.ibm.mq.MQSESSIONServer.getMQSESSION(MQSESSIONServer.java:70) 位于com.ibm.mq.MQSESSION.getSession(MQSESSION.java:492) 位于com.ibm.mq.MQManagedConnectionJ11。(MQManagedConnectionJ11.java:168) 位于com.ibm.mq.MQBindingsManagedConnectionFactoryJ11._createManagedConnection(MQBindingsManagedConnectionFactoryJ11.java:179) 位于com.ibm.mq.MQBindingsManagedConnectionFactoryJ11.createManagedConnection(MQBindingsManagedConnectionFactoryJ11.java:215) 位于com.ibm.mq.StoredManagedConnection(StoredManagedConnection.java:84) 位于com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:168) 位于com.ibm.mq.MQQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:772) 位于com.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:697) 位于com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:657) 位于com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory.java:153) 位于com.ibm.mq.MQQueueManager。(MQQueueManager.java:451) 在MQSample.main(MQSample.java:30)
当我提到这一点时,每个人都说要将mqjbnd.dll放在java.library中,我将该文件放在该路径中,但该路径仍然不起作用

问题中没有任何内容表明正在使用哪个版本的MQ客户机,它是如何安装的,IBM提供的代码是否起作用,或者环境设置是否正确。这使得这更像是一个“如何配置和测试MQ客户机?”之类的问题,所以我将这样回答

后台MQ客户端始终使用IBM的完整客户端安装介质进行安装。可以使用IBM的纯Java安装介质安装较新的客户端。始终建议使用这些方法之一

不做的一件事(巧合的是,这是最常做的事情)是从MQ服务器安装中简单地获取jar文件。原因包括:

  • IBM安装程序设置了一组已知良好的文件
  • 维护可以应用于使用IBM安装程序进行的安装
  • 使用IBM的安装方法时,跟踪目录和
    MQClient.ini
    文件的位置是可预测的
因此,首先要确保您使用的是IBM提供的最新完整客户端或仅限Java的安装介质。或者,安装IBM MQ Advanced for Developers,它可以向桌面提供完整的MQ安装,包括所有客户端支持。MQ Advanced for Developers免费供个人使用

在启动代码之前,请设置环境。请参阅:

根据文件:

在Windows上,所有环境变量都是在运行期间自动设置的 安装。在任何其他平台上,您必须自己设置它们。在 在UNIX系统中,可以使用脚本setjmsenv(如果使用 32位JVM)或setjmsenv64(如果您使用的是64位JVM)来设置 环境变量。在AIX、HP-UX、Linux和Solaris上 脚本位于MQ_INSTALLATION_PATH/java/bin目录中

IBM提供了大量示例代码。在*nix系统上,这在
/opt/mqm/samp/
中。在windows上,它位于
[MQ安装目录]\tools
中。如果安装了完整的客户端,请先尝试编译的C代码,如
amqsgetc
。这将确定基本连接是否到位。一旦您了解了通道连接的工作原理,请尝试Java或JMS示例

回到原来的帖子,在我们提供帮助之前,我们需要知道上面的哪些步骤已经完成,以及关于配置的一些信息。否则,您得到的信息通常会引导您进入一个几乎可以保证配置被使用的设置路径:“尝试在这里添加这个库”,或者“尝试像这样处理
类路径”
“这样的尝试和错误方法通常是有效的,但是
不受支持,并且随着时间的推移会导致问题。

问题中没有任何内容表明正在使用哪个版本的MQ客户端,它是如何安装的,IBM提供的代码是否工作,或者环境设置是否正确。这使得这更像是一个“如何配置和测试MQ客户机?”之类的问题,所以我将这样回答

后台MQ客户端始终使用IBM的完整客户端安装介质进行安装。可以使用IBM的纯Java安装介质安装较新的客户端。始终建议使用这些方法之一

不做的一件事(巧合的是,这是最常做的事情)是从MQ服务器安装中简单地获取jar文件。原因包括:

  • IBM安装程序设置了一组已知良好的文件
  • 维护可以应用于使用IBM安装程序进行的安装
  • 使用IBM的安装方法时,跟踪目录和
    MQClient.ini
    文件的位置是可预测的
因此,首先要确保您使用的是IBM提供的最新完整客户端或仅限Java的安装介质。或者,安装IBM MQ Advanced for Developers,它可以向桌面提供完整的MQ安装,包括所有客户端支持。MQ高级开发人员
import java.io.IOException;
import java.util.Hashtable;

import com.ibm.mq.*;
import com.ibm.mq.constants.CMQC;

/**
 * Java class to connect to MQ. Post and Retrieve messages.
 * 
 * Sample Command Line Parameters 
 *  -h 127.0.0.1 -p 1414 -c TEST.CHL -m MQA1 -q TEST.Q1 -u userid -x password
 */
public class MQClientTest
{
   private Hashtable<String, String> params = null;
   private Hashtable<String, Object> mqht = null;
   private String qManager;
   private String inputQName;

   /**
    * The constructor
    */
   public MQClientTest()
   {
      super();
   }

   /**
    * Make sure the required parameters are present.
    * 
    * @return true/false
    */
   private boolean allParamsPresent()
   {
      boolean b = params.containsKey("-h") && params.containsKey("-p") &&
                  params.containsKey("-c") && params.containsKey("-m") &&
                  params.containsKey("-u") && params.containsKey("-x") &&
                  params.containsKey("-q");
      if (b)
      {
         try
         {
            Integer.parseInt((String) params.get("-p"));
         }
         catch (NumberFormatException e)
         {
            b = false;
         }
      }

      return b;
   }

   /**
    * Extract the command-line parameters and initialize the MQ variables.
    * 
    * @param args
    * @throws IllegalArgumentException
    */
   private void init(String[] args) throws IllegalArgumentException
   {
      params = new Hashtable<String, String>();
      if (args.length > 0 && (args.length % 2) == 0)
      {
         for (int i = 0; i < args.length; i += 2)
         {
            params.put(args[i], args[i + 1]);
         }
      }
      else
      {
         throw new IllegalArgumentException();
      }

      if (allParamsPresent())
      {
         qManager = (String) params.get("-m");
         inputQName = (String) params.get("-q");

         mqht = new Hashtable<String, Object>();

         mqht.put(CMQC.CHANNEL_PROPERTY, params.get("-c"));
         mqht.put(CMQC.HOST_NAME_PROPERTY, params.get("-h"));

         try
         {
            mqht.put(CMQC.PORT_PROPERTY, new Integer(params.get("-p")));
         }
         catch (NumberFormatException e)
         {
            mqht.put(CMQC.PORT_PROPERTY, new Integer(1414));
         }

         mqht.put(CMQC.USER_ID_PROPERTY, params.get("-u"));
         mqht.put(CMQC.PASSWORD_PROPERTY, params.get("-x"));

         // I don't want to see MQ exceptions at the console.
         MQException.log = null;
      }
      else
      {
         throw new IllegalArgumentException();
      }
   }

   /**
    * Method to put then get a message to/from a queue.
    */
   public void putAndGetMessage()
   {
      MQQueueManager qMgr = null;
      MQQueue        queue = null;
      MQMessage      putMessage = null;
      MQMessage      getMessage = null;

      int openOptions = CMQC.MQOO_INPUT_AS_Q_DEF | CMQC.MQOO_OUTPUT + CMQC.MQOO_FAIL_IF_QUIESCING;

      MQGetMessageOptions gmo = new MQGetMessageOptions();
      gmo.options = CMQC.MQGMO_NO_WAIT + CMQC.MQGMO_FAIL_IF_QUIESCING;

      MQPutMessageOptions pmo = new MQPutMessageOptions();
      pmo.options = CMQC.MQPMO_FAIL_IF_QUIESCING;

      String msg = "Hello World, WelCome to MQ.";

      try
      {
         qMgr = new MQQueueManager(qManager, mqht);
         queue = qMgr.accessQueue(inputQName, openOptions);

         putMessage = new MQMessage();
         putMessage.writeUTF(msg);

         // put the message on the queue
         queue.put(putMessage, pmo);

         System.out.println("Message is put on MQ.");

         // get message from MQ.
         getMessage = new MQMessage();
         // assign message id to get message.
         getMessage.messageId = putMessage.messageId;

         /*
          * Tell the queue manager that we want a message with a specific MsgID.
          */
         gmo.matchOptions = CMQC.MQMO_MATCH_MSG_ID;

         // get message options.
         queue.get(getMessage, gmo);

         String retreivedMsg = getMessage.readUTF();
         System.out.println("Message got from MQ: " + retreivedMsg);
      }
      catch (MQException e)
      {
         System.err.println("CC=" + e.completionCode + " : RC=" + e.reasonCode);
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }
      finally
      {
         try
         {
            if (queue != null)
               queue.close();
         }
         catch (MQException e)
         {
            System.err.println("MQCLOSE CC=" + e.completionCode + " : RC="
                  + e.reasonCode);
         }

         try
         {
            if (qMgr != null)
               qMgr.disconnect();
         }
         catch (MQException e2)
         {
            System.err.println("MQDISC CC=" + e2.completionCode + " : RC="
                  + e2.reasonCode);
         }
      }
   }

   public static void main(String[] args)
   {
      System.out.println("Processing Main...");
      MQClientTest clientTest = new MQClientTest();

      try
      {
         // initialize MQ.
         clientTest.init(args);
         // put and retrieve message from MQ.
         clientTest.putAndGetMessage();
      }
      catch (IllegalArgumentException e)
      {
         System.out.println("Usage: java MQClientTest -h host -p port -c channel -m QueueManagerName -q QueueName -u userid -x password");
         System.exit(1);
      }

      System.out.println("Done!");
   }
}