我一直试图通过CCDT文件获取Java应用程序连接到IBM MQ v8,但没有运气。使用属性(主机名,端口等)进行连接时,我可以正常连接,但使用CCDT,我一直得到 WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2278' ('MQRC_CLIENT_CONN_ERROR').
我正在使用MQ Developer 8.0的vanilla安装(需要版本,无法更改)和安装中的Jars。我所做的只是安装MQ,然后设置QueueManager'QM1',然后创建一个队列'Q1'。
我的代码:
package mqtest;
import com.ibm.mq.jms.*;
import java.io.File;
import java.net.URL;
public class Main {
public static void main(String[] args) {
try {
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
File file = new File("C:/ProgramData/IBM/MQ/qmgrs/QM1/@ipcc/AMQCLCHL.TAB");
URL clientChannelTableUrl = file.toURI().toURL();
cf.setQueueManager("QM1");
cf.setCCDTURL(clientChannelTableUrl);
MQQueueConnection mqQueueConnection = (MQQueueConnection) cf.createConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
}
dis qmgr
AMQ8408: Display Queue Manager details.
QMNAME(QM1) ACCTCONO(DISABLED)
ACCTINT(1800) ACCTMQI(OFF)
ACCTQ(OFF) ACTIVREC(MSG)
ACTVCONO(DISABLED) ACTVTRC(OFF)
ALTDATE(2018-05-23) ALTTIME(10.21.26)
AUTHOREV(DISABLED) CCSID(437)
CERTLABL(ibmwebspheremqqm1) CERTVPOL(ANY)
CHAD(DISABLED) CHADEV(DISABLED)
CHADEXIT( ) CHLEV(DISABLED)
CHLAUTH(ENABLED) CLWLDATA( )
CLWLEXIT( ) CLWLLEN(100)
CLWLMRUC(999999999) CLWLUSEQ(LOCAL)
CMDEV(DISABLED) CMDLEVEL(800)
COMMANDQ(SYSTEM.ADMIN.COMMAND.QUEUE) CONFIGEV(DISABLED)
CONNAUTH(SYSTEM.DEFAULT.AUTHINFO.IDPWOS)
CRDATE(2018-05-23) CRTIME(10.21.26)
CUSTOM( ) DEADQ( )
DEFCLXQ(SCTQ) DEFXMITQ( )
DESCR( ) DISTL(YES)
INHIBTEV(DISABLED) IPADDRV(IPV4)
LOCALEV(DISABLED) LOGGEREV(DISABLED)
MARKINT(5000) MAXHANDS(256)
MAXMSGL(4194304) MAXPROPL(NOLIMIT)
MAXPRTY(9) MAXUMSGS(10000)
MONACLS(QMGR) MONCHL(OFF)
MONQ(OFF) PARENT( )
PERFMEV(DISABLED) PLATFORM(WINDOWSNT)
PSMODE(ENABLED) PSCLUS(ENABLED)
PSNPMSG(DISCARD) PSNPRES(NORMAL)
PSRTYCNT(5) PSSYNCPT(IFPER)
QMID(QM1_2018-05-23_10.21.26) REMOTEEV(DISABLED)
REPOS( ) REPOSNL( )
REVDNS(ENABLED) ROUTEREC(MSG)
SCHINIT(QMGR) SCMDSERV(QMGR)
SPLCAP(ENABLED) SSLCRLNL( )
SSLCRYP( ) SSLEV(DISABLED)
SSLFIPS(NO)
SSLKEYR(C:\ProgramData\IBM\MQ\qmgrs\QM1\ssl\key)
SSLRKEYC(0) STATACLS(QMGR)
STATCHL(OFF) STATINT(1800)
C:\ ProgramData \ IBM \ MQ \ qmgrs \ QM1 \ errors中的错误日志中没有相关的(我至少可以看到)数据。
据我所知,IBM,Google搜索此应该的工作。据我所知,它与频道定义或设置有关,但我只是不知道是什么。
老实说,我认为我已经花了足够的脑细胞,我很可能忽略了一些重要但无法看到我忽略的小细节。任何帮助,如赞赏。
答案 0 :(得分:0)
MQ版本:9.0.0.4
步骤1:仅需要一个jar:com.ibm.mq.allclient-9.0.4.0.jar
步骤2: 不要在MQEnvironment中设置任何变量
第3步:
java.net.URL chanTab1 = new URL("file:///C:/MGR.TAB");
MQQueueManager _queueManager = new MQQueueManager("*", chanTab1);
int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
MQQueue queue = _queueManager.accessQueue( "QNAME", openOptions,null,null, null );
MQMessage sendmsg = new MQMessage();
*
将允许您连接.TAB文件中所有可用的QManager。
第4步:
通过命令在您的jre C:\Program Files\Java\jdk1.7\jre\bin
中安装证书
keytool -import -alias example -keystore ..\lib\security\cacerts -file C:\test.cer
默认密码为changeit。大多数情况下,没有人会改变这一点。 :-)
或
如果您在Websphere应用程序服务器上部署了代码,则无需在服务器JRE中安装证书。 Websphere服务器上的插入安装证书 SSL证书和密钥管理>密钥库和证书> NodeDefaultKeyStore>签名者证书>从端口检索