最近在一台新安装的winserver2008 64位服务器的was7.0.0.37上部署了一个使用第三方包连接对方IBM MQ的应用,使用qcf的方式(对方给了一个.binding文件),配置部分的代码如下:
public void initMethod() {
try {
String filePath = "file:/"+CdmIContextListener.getWebRootDir()+"/WEB-INF/mq";
// Initiate the config.
JmsConfigInJndi jmsConfig = new JmsConfigInJndi();
jmsConfig.setInitCtxFac("com.sun.jndi.fscontext.RefFSContextFactory");
jmsConfig.setPrvdrUrl(filePath);
jmsConfig.setQcfJndiName("jms_pubsub_qcf");
jmsConfig.setQRcvrJndiName("jms_fgos_pubsub_receive_q"); //queue name,need input
MsgRcvrOptions rcvrOptions = new MsgRcvrOptions();
rcvrOptions.setSelector("Topic='/CDM/cdmInfo'"); //topic name,need input
JmsMsgReceiver msgRcvr = (JmsMsgReceiver) MsgRcvrFactory.getMsgReceiver(jmsConfig,
MsgRcvrFactory.RCVR_PURE_JMS_WITHOUT_TRX);
msgRcvr.startListener(jmsConfig, rcvrOptions, receiveCdmMsgListener);
}catch(MQMsngrException e){
log.error(logkey+""+e);
e.printStackTrace();
}
}
连接部分的类JmsRsrcBuilder.java如下:
package com.ca.soa.i.mqmsngr.trans.jms;
import java.util.Hashtable;
import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.ca.soa.i.mqmsngr.exception.MQMsngrException;
public class JmsRsrcBuilder {
private Context ctx;
private QueueConnectionFactory qcf;
private Log log = LogFactory.getLog(JmsRsrcBuilder.class);
public JmsRsrcBuilder(String cfJndiName) throws NamingException, JMSException {
// Use default context factory and provider URL.
ctx = new InitialContext();
// Finding the ConnectionFactory
qcf = (QueueConnectionFactory) ctx.lookup(cfJndiName);
}
public JmsRsrcBuilder(JmsConfigInJndi config) throws NamingException, JMSException {
// Use JMSAdmin to generate the binding file containing the
// definition of Connection Factory.
//Hashtable jndiHash = new Hashtable();
Hashtable jndiHash = new Hashtable();
jndiHash.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY, config.getInitCtxFac());
jndiHash.put(javax.naming.Context.PROVIDER_URL, config.getPrvdrUrl());
ctx = new InitialContext(jndiHash);
// Finding the Connection Factory
qcf = (QueueConnectionFactory) ctx.lookup(config.getQcfJndiName());
}
public QueueConnection getQConn() throws MQMsngrException {
QueueConnection qConn = null;
try {
qConn = qcf.createQueueConnection();
} catch (Throwable t) {
// Catch anything error, and log the errors.
String errMsg = "Fail to create connection to MQ.";
log.error(errMsg, t);
// Release any resources has been occupied.
JmsRsrcCollector.releaseResource(null, qConn);
// Throw exception.
throw new MQMsngrException(errMsg, t);
}
return qConn;
}
public Queue getQueue(String qJndiName) throws NamingException {
Queue queue = (Queue) ctx.lookup(qJndiName);
return queue;
}
}
出现如下错误:
2016-10-19 15:07:37,818 INFO [com.ca.soa.i.mqmsngr.trans.jms.JmsMsgReceiver] - ========== >>> Prepare to start MsgLsnrMonitor to handle the MsgListener object.
2016-10-19 15:07:37,818 INFO [com.ca.soa.i.mqmsngr.trans.jms.JmsMsgLsnrMonitor] - isTheFirstLoop=true,runError=false,stopRunFlag=false
2016-10-19 15:07:37,958 ERROR [com.ca.soa.i.mqmsngr.trans.jms.JmsRsrcBuilder] - Fail to create connection to MQ.
javax.jms.JMSException: CC=2;RC=2009
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.checkConnectionPV7Capable(WMQConnectionFactory.java:8536)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7383)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:276)
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6058)
at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:115)
at com.ca.soa.i.mqmsngr.trans.jms.JmsRsrcBuilder.getQConn(JmsRsrcBuilder.java:54)
at com.ca.soa.i.mqmsngr.trans.jms.JmsMsgLsnrMonitor.testQcf(JmsMsgLsnrMonitor.java:247)
at com.ca.soa.i.mqmsngr.trans.jms.JmsMsgLsnrMonitor.retryQConn(JmsMsgLsnrMonitor.java:147)
at com.ca.soa.i.mqmsngr.trans.jms.JmsMsgLsnrMonitor.run(JmsMsgLsnrMonitor.java:86)
at java.lang.Thread.run(Thread.java:736)
2016-10-19 15:07:37,958 ERROR [com.ca.soa.i.mqmsngr.trans.jms.JmsMsgLsnrMonitor] - Exception occured.
com.ca.soa.i.mqmsngr.exception.MQMsngrException: Fail to create connection to MQ.
at com.ca.soa.i.mqmsngr.trans.jms.JmsRsrcBuilder.getQConn(JmsRsrcBuilder.java:65)
at com.ca.soa.i.mqmsngr.trans.jms.JmsMsgLsnrMonitor.testQcf(JmsMsgLsnrMonitor.java:247)
at com.ca.soa.i.mqmsngr.trans.jms.JmsMsgLsnrMonitor.retryQConn(JmsMsgLsnrMonitor.java:147)
at com.ca.soa.i.mqmsngr.trans.jms.JmsMsgLsnrMonitor.run(JmsMsgLsnrMonitor.java:86)
at java.lang.Thread.run(Thread.java:736)
Caused by:
通过验证,在这台was服务器上,可以通过客户端连接MQ服务器的队列,应用包部署在这台服务器上的tomcat上也能正常连接MQ队列,所以服务器的网络策略和队列连接上限都是没有问题的。而且在重装系统之前的winserver 2003 32位服务器上的was7.0.0.37上该应用包能正常连接上队列(因为是别人安装的,所以不知道也看不到做了什么特殊配置)。我使用的是第三方的jar包连接的MQ服务器,不是websphere MQ的配置,为什么错误中会有类似
com.ibm.msg.client.wmq.factories.WMQConnectionFactory.checkConnectionPV7Capable(WMQConnectionFactory.java:8536)
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7383)
属于websphere MQ中的类报出的错误?我的was7还需要做别的配置吗?或者需要添加别的jar包到was下才能正常连接队列?
相关知识
Could not send gratuitous arps. rc=127
IBM 111周年新里程碑:「新五月花号」复活历史,横跨大西洋
MQ
服务器部署后 访问出错的原因和解决办法
红米'rm257'种皮颜色遗传模式分析及Rc基因功能标记开发
如何部署一个健壮的 apache
Linux跨平台部署DotNetCore记录
Python常见的错误以及其解决方案
基于单片机的烟雾报警系统的毕业论文
下列关于植物激素应用的叙述,错误的是( )
网址: WAS7部署连接IBM MQ的应用出现RC=2009的错误 https://m.huajiangbk.com/newsview537489.html
上一篇: 点、线、面、块在花艺设计中的应用 |
下一篇: 花毛茛插花应用上是怎样的? 爱问 |