2013-11-28 114 views
3

此代码将消息发送给Q.设置了MQEnvironment静态值。但MQEnvironment是没有引用在经理的任何地方。那么如何提供连接到MQ的属性(主机名,通道,端口,CCSID)?看Java MQEnvironment静态属性

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 [email protected]@@@@@@@@@@@@@@@@"); 
     MQPutMessageOptions pmo = new MQPutMessageOptions(); 

     queue.put(sendMessage, pmo); 

回答

2

的MQQueueManager对象检查这些值已在MQEnvironment类被设置使得它到队列管理器的连接之前。另外,不要使用SYSTEM.DEF.SVRCONN通道,因为(1)它违背了最佳实践,并且(2)它是仅供队列管理器使用的SYSTEM对象。只需创建或让MQAdmin为您创建一个SVRCONN通道。即TEST.CHL

+0

有没有办法直接在MQQueueManager.java中设置它们? – hipokito

+0

设置什么?频道名称,主机名和端口号?不要使用MQEnvironment类,因为它不是线程安全的。将信息放入Hashtable并将其传递给MQQueueManager类。请参阅https://stackoverflow.com/questions/34628283/java-program-to-connect-wmq-with-user-id-instead-of-channel/34642355#34642355 – Roger