【问题标题】:Java MQEnvironment static propertiesJava MQEnvironment 静态属性
【发布时间】:2013-11-29 19:46:28
【问题描述】:

此代码将消息发送到 Q。MQEnvironment 静态值已设置。但是 MQEnvironment 在管理器中的任何地方都未引用。那么如何提供属性(主机名、通道、端口、CCSID)来连接MQ?

    MQEnvironment.hostname ="10.XX.XXX.XX";

    MQEnvironment.channel = "SYSTEM.DEF.SVRCONN";

    MQEnvironment.port = 1415;

    MQEnvironment.CCSID = 819;

    System.out.println("connecting MQQueueManager...");
    try {
        MQQueueManager manager = new MQQueueManager("SXX");

        MQQueue queue = null;

        int openOptions = MQC.MQOO_OUTPUT; //MQC.MQOO_INPUT_AS_Q_DEF |

        queue = manager.accessQueue("Q_NAME",
                                            openOptions,
                                            null, null, null);
        // send message
        MQMessage sendMessage = new MQMessage();

        sendMessage.writeObject("TEST MESSAGE@@@@@@@@@@@@@@@@@");
        MQPutMessageOptions pmo = new MQPutMessageOptions();

        queue.put(sendMessage, pmo);

【问题讨论】:

    标签: java ibm-mq


    【解决方案1】:

    MQQueueManager 对象在与队列管理器建立连接之前检查是否已在 MQEnvironment 类中设置了这些值。

    另外,不要使用 SYSTEM.DEF.SVRCONN 通道,因为 (1) 它违反了最佳实践,并且 (2) 它是一个 SYSTEM 对象,仅供队列管理器使用。只需创建或让 MQAdmin 为您创建一个 SVRCONN 通道。即 TEST.CHL

    【讨论】:

    • 有没有办法直接在MQQueueManager.java中设置?
    • 设置什么?频道名称、主机名和端口号?不要使用 MQEnvironment 类,因为它不是线程安全的。将信息放在 Hashtable 中并将其传递给 MQQueueManager 类。见stackoverflow.com/questions/34628283/…
    【解决方案2】:

    MQEnvironment 具有公共静态类变量(一种全局常量)。如果设置了这些值,MQQueueManager 对象将使用它们。
    http://pic.dhe.ibm.com/infocenter/wmqv7/v7r0m0/index.jsp?topic=%2Fcom.ibm.mq.java.doc%2Fcom%2Fibm%2Fmq%2FMQEnvironment.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 2012-10-01
      • 2011-03-10
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多