1

MQ メッセージをキューに挿入する単純な Java プログラムを作成しようとしています。私は Java を使用して MQ キューに書き込むことに非常に慣れておらず、いくつか質問があります。

  1. 自分の Windows マシンから UNIX ボックスの UNIX キューに接続できますか?
  2. アプリケーションを実行しようとすると、.... java.lang.UnsatisfiedLinkError: no mqjbnd05 in java.library.path が発生します

グーグルで見つけたものの音から、ある種のリソースが不足しています。Windows からキューへの接続が許可されていないため、おそらくこのエラーが発生していると思いますか?

私がやっていることを達成する方法や支援する方法の良い例をいただければ幸いです。

public class MQInject {

    private MQQueueManager _queueManager = null;
    private Hashtable params = null;

    public int port = 1414;
    public static final String hostname    = "UQMYPOSIS1";
    public static final String channel     = "MQTX1012.MQTX1013";
    public static final String qManager    = "MQTX1013";
    public static final String outputQName = "IIS.TLOG.5";

    public MQInject(){
        super();
    }

    public void init(){

        //Set MQ connection credentials to MQ Envorinment.
         MQEnvironment.hostname = hostname;
         MQEnvironment.channel = channel;
         MQEnvironment.port = port;
         //MQEnvironment.userID = "";
         //QEnvironment.password = password;
         //set transport properties.
         MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT);

         try {
             //initialize MQ manager.
             _queueManager = new MQQueueManager(qManager);
        } catch (MQException e) {
            e.printStackTrace();
        }
    }    

    public static void main(String[] args)
    {

        MQInject write = new MQInject();
        try
        {
            write.selectQMgr();
            write.write();
        }
        catch (IllegalArgumentException e)
        {
            System.out.println("Usage: java MQWrite <-h host> <-p port> <-c channel> <-m QueueManagerName> <-q QueueName>");
            System.exit(1);
        }
        catch (MQException e)
        {
            System.out.println(e);
            System.exit(1);
        }
    }

    private void selectQMgr() throws MQException
    {
      _queueManager = new MQQueueManager(qManager);
    }    


    private void write() throws MQException{
     String line;
     int lineNum=0;
     int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;

     try {
         MQQueue queue = _queueManager.accessQueue( outputQName,
                 openOptions,
                 null,           // default q manager
                 null,           // no dynamic q name
                 null );         // no alternate user id

         DataInputStream input = new DataInputStream(System.in);

         System.out.println("MQWrite v1.0 connected");
         System.out.println("and ready for input, terminate with ^Z\n\n");

         // Define a simple MQ message, and write some text in UTF format..
         MQMessage sendmsg               = new MQMessage();
         sendmsg.format                  = MQC.MQFMT_STRING;
         sendmsg.feedback                = MQC.MQFB_NONE;
         sendmsg.messageType             = MQC.MQMT_DATAGRAM;
         sendmsg.replyToQueueName        = "ROGER.QUEUE";
         sendmsg.replyToQueueManagerName = qManager;

         MQPutMessageOptions pmo = new MQPutMessageOptions();  // accept the defaults, same
                                 // as MQPMO_DEFAULT constant
         while ((line = input.readLine()) != null){
             sendmsg.clearMessage();
             sendmsg.messageId     = MQC.MQMI_NONE;
             sendmsg.correlationId = MQC.MQCI_NONE;
             sendmsg.writeString(line);
             // put the message on the queue
             queue.put(sendmsg, pmo);
             System.out.println(++lineNum + ": " + line);
         }

         queue.close();
         _queueManager.disconnect();

        }catch (com.ibm.mq.MQException mqex){
            System.out.println(mqex);
        }
        catch (java.io.IOException ioex){
            System.out.println("An MQ IO error occurred : " + ioex);
        }
    }   
}
4

1 に答える 1

1

最初の質問については、はい、Windows ホストで実行されているクライアントからアクセスされる UNIX ホストで実行されているキュー マネージャーを持つことができます。

2 番目の質問については、mqjbnd05 ライブラリはバインド モードでキュー マネージャーに接続するためにのみ使用され (つまり、キュー マネージャーとキューにアクセスするプログラムが同じホスト上にある場合)、MQ クライアント インストールの一部ではありません。詳しくは、 http://www-01.ibm.com/support/docview.wss?uid=swg21158430を参照してください。コードを見ると、関数が呼び出されていることはわかりませんが、init()関数が指定されていることがわかります。また、ライブラリ パスに mqjbnd05 が指定されているかどうかを確認し、指定されている場合は削除することもお勧めします。MQC.TRANSPORT_MQSERIES_CLIENTinit()

おそらくエラーとは関係ありませんが、確認する価値があるもう1つのことは、チャネルMQTX1012.MQTX1013が送信者または受信者チャネルではなく、サーバー接続チャネルであることです。

于 2013-04-19T12:46:38.020 に答える