Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编写一个简单的应用程序将消息注入队列_Java_Ibm Mq - Fatal编程技术网

Java 编写一个简单的应用程序将消息注入队列

Java 编写一个简单的应用程序将消息注入队列,java,ibm-mq,Java,Ibm Mq,我正试图编写一个简单的Java程序,将MQ消息注入队列。我对使用Java编写MQ队列非常缺乏经验,有几个问题 我可以从windows计算机连接到unix机箱上的unix队列吗 当我尝试运行应用程序时,我得到一个。。。。 java.lang.UnsatisfiedLinkError:java.library.path中没有mqjbnd05 从我在谷歌上能找到的声音来看,我缺少了某种资源。我想我遇到了这个错误,可能是因为我不允许从windows连接到队列 任何关于如何实现我正在做的事情或帮助的好例子

我正试图编写一个简单的Java程序,将MQ消息注入队列。我对使用Java编写MQ队列非常缺乏经验,有几个问题

  • 我可以从windows计算机连接到unix机箱上的unix队列吗
  • 当我尝试运行应用程序时,我得到一个。。。。 java.lang.UnsatisfiedLinkError:java.library.path中没有mqjbnd05
  • 从我在谷歌上能找到的声音来看,我缺少了某种资源。我想我遇到了这个错误,可能是因为我不允许从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);
            }
        }   
    }
    
    公共类MQInject{
    专用MQQueueManager _queueManager=null;
    私有哈希表参数=null;
    公共int端口=1414;
    公共静态最终字符串hostname=“UQMYPOSIS1”;
    公共静态最终字符串通道=“MQTX1012.MQTX1013”;
    公共静态最终字符串qManager=“MQTX1013”;
    公共静态最终字符串outputQName=“IIS.TLOG.5”;
    公共MQInject(){
    超级();
    }
    公共void init(){
    //将MQ连接凭据设置为MQ环境。
    MQEnvironment.hostname=主机名;
    MQEnvironment.channel=通道;
    MQEnvironment.port=端口;
    //MQEnvironment.userID=“”;
    //QEnvironment.password=密码;
    //设置传输属性。
    MQEnvironment.properties.put(MQC.TRANSPORT_属性,MQC.TRANSPORT_MQSERIES_客户端);
    试一试{
    //初始化MQ管理器。
    _queueManager=新的MQQueueManager(qManager);
    }捕获(MQE异常){
    e、 printStackTrace();
    }
    }    
    公共静态void main(字符串[]args)
    {
    MQInject write=新MQInject();
    尝试
    {
    write.selectQMgr();
    write.write();
    }
    捕获(IllegalArgumentException e)
    {
    System.out.println(“用法:javamqwrite”);
    系统出口(1);
    }
    捕获(MQE异常)
    {
    系统输出打印ln(e);
    系统出口(1);
    }
    }
    私有void selectQMgr()引发MQException
    {
    _queueManager=新的MQQueueManager(qManager);
    }    
    private void write()引发MQException{
    弦线;
    int lineNum=0;
    int openOptions=MQC.MQOO_输出+MQC.MQOO_失败(如果停止);
    试一试{
    MQQueue queue=\u queueManager.accessQueue(outputQName,
    openOptions,
    null,//默认q管理器
    null,//没有动态q名称
    null);//没有备用用户id
    DataInputStream输入=新的DataInputStream(System.in);
    System.out.println(“连接了MQWrite v1.0”);
    System.out.println(“并准备好输入,以^Z终止\n\n”);
    //定义一个简单的MQ消息,并以UTF格式写入一些文本。。
    MQMessage sendmsg=新MQMessage();
    sendmsg.format=MQC.MQFMT_字符串;
    sendmsg.feedback=MQC.MQFB_NONE;
    sendmsg.messageType=MQC.MQMT_数据报;
    sendmsg.replyToQueueName=“ROGER.QUEUE”;
    sendmsg.replyToQueueManagerName=qManager;
    MQPutMessageOptions pmo=new MQPutMessageOptions();//接受默认值,相同
    //作为MQPMO_默认常量
    而((line=input.readLine())!=null){
    sendmsg.clearMessage();
    sendmsg.messageId=MQC.MQMI_NONE;
    sendmsg.correlationId=MQC.MQCI__NONE;
    sendmsg.writeString(行);
    //将消息放入队列
    queue.put(sendmsg,pmo);
    System.out.println(++lineNum+“:”+line);
    }
    queue.close();
    _queueManager.disconnect();
    }捕获(com.ibm.mq.MQException-mqex){
    System.out.println(mqex);
    }
    捕获(java.io.IOException-ioex){
    System.out.println(“发生MQ IO错误:“+ioex”);
    }
    }   
    }
    
    对于您的第一个问题,是的,您可以在UNIX主机上运行队列管理器,而在Windows主机上运行的客户端可以访问该队列管理器

    对于第二个问题,mqjbnd05库仅用于在绑定模式下连接到队列管理器(即,当队列管理器和访问队列的程序位于同一主机上时),而不是MQ客户端安装的一部分。有关更多详细信息,请参阅。通过查看您的代码,我可以看到
    init()
    函数正在指定
    MQC.TRANSPORT\u MQSERIES\u CLIENT
    ,尽管我看不到正在调用
    init()
    函数。此外,还应该检查是否在库路径中指定了mqjbnd05,如果是,则删除它


    虽然可能与您得到的错误无关,但另一件可能值得检查的事情是通道
    MQTX1012.MQTX1013
    是服务器连接通道,而不是发送方或接收方通道。

    对于第一个问题,是的,您可以在UNIX主机上运行队列管理器,该主机可由运行在Windows主机上的客户端访问

    对于第二个问题,mqjbnd05库仅用于在绑定模式下连接到队列管理器(即,当队列管理器和访问队列的程序位于同一主机上时),而不是MQ客户端安装的一部分。有关更多详细信息,请参阅。通过查看您的代码,我可以看到
    init()
    函数正在指定
    MQC.TRANSPORT\u MQSERIES\u CLIENT
    ,尽管我看不到正在调用
    init()
    函数。此外,还应该检查是否在库路径中指定了mqjbnd05,如果是,则删除它

    虽然可能与您得到的错误无关,但另一件事可能是b